SpyBara
Go Premium

Documentation 2026-10-25 23:58 UTC to 2026-10-26 22:57 UTC

41 files changed +695 −132. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59

admin-setup.md +1 −1

Details

93| [Sandboxing](https://code.claude.com/docs/es/sandboxing.md) | Aislamiento de sistema de archivos y red a nivel del SO con listas de permitidos de dominio | `sandbox.enabled`, `sandbox.network.allowedDomains` |93| [Sandboxing](https://code.claude.com/docs/es/sandboxing.md) | Aislamiento de sistema de archivos y red a nivel del SO con listas de permitidos de dominio | `sandbox.enabled`, `sandbox.network.allowedDomains` |

94| [Managed policy CLAUDE.md](https://code.claude.com/docs/es/memory.md#deploy-organization-wide-claude-md) | Orientación de comportamiento para Claude en toda la organización, en lugar de una regla aplicada por el cliente | Archivo en la ruta de política administrada |94| [Managed policy CLAUDE.md](https://code.claude.com/docs/es/memory.md#deploy-organization-wide-claude-md) | Orientación de comportamiento para Claude en toda la organización, en lugar de una regla aplicada por el cliente | Archivo en la ruta de política administrada |

95| [MCP server control](https://code.claude.com/docs/es/managed-mcp.md) | Restringir qué servidores MCP pueden agregar o conectar los usuarios, implementar un conjunto fijo, o proporcionar servidores remotos a cada usuario junto con los suyos propios | `allowedMcpServers`, `deniedMcpServers`, `allowManagedMcpServersOnly`, `managedMcpServers`, o un archivo `managed-mcp.json` implementado |95| [MCP server control](https://code.claude.com/docs/es/managed-mcp.md) | Restringir qué servidores MCP pueden agregar o conectar los usuarios, implementar un conjunto fijo, o proporcionar servidores remotos a cada usuario junto con los suyos propios | `allowedMcpServers`, `deniedMcpServers`, `allowManagedMcpServersOnly`, `managedMcpServers`, o un archivo `managed-mcp.json` implementado |

96| [Plugin marketplace control](https://code.claude.com/docs/es/plugins/org.md#restrict-what-users-can-install) | Restringir qué fuentes de marketplace pueden agregar e instalar los usuarios, rechazar las banderas CLI que cargan plugins, agents y servidores MCP para una única ejecución, bloquear [fuentes de plugin `command`](https://code.claude.com/docs/es/plugins/marketplace-reference#command-plugin-source), y crear una lista de permitidos de qué plugins de marketplaces pueden ser sugeridos | `strictKnownMarketplaces`, `blockedMarketplaces`, `disableSideloadFlags`, `disableCommandPluginSources`, `pluginSuggestionMarketplaces` |96| [Plugin marketplace control](https://code.claude.com/docs/es/plugins/org.md#restrict-what-users-can-install) | Restringir qué fuentes de marketplace pueden agregar los usuarios y desde cuáles pueden instalar, y rechazar los flags de la CLI que cargan plugins, agentes y servidores MCP para una única ejecución. Bloquear [fuentes de plugin `command`](https://code.claude.com/docs/es/plugins/marketplace-reference#command-plugin-source) y agregar a la lista de permitidos los marketplaces cuyos plugins pueden sugerirse en la terminal | `strictKnownMarketplaces`, `blockedMarketplaces`, `disableSideloadFlags`, `disableCommandPluginSources`, `pluginSuggestionMarketplaces` |

97| [Customization lockdown](https://code.claude.com/docs/es/settings-reference.md#strictpluginonlycustomization) | Bloquear skills, agents, hooks y servidores MCP de fuentes de usuario y proyecto, para que solo provengan de plugins o configuración administrada. Bloquear skills también detiene los [skills que los desarrolladores habilitan en claude.ai](https://code.claude.com/docs/es/skills.md#where-synced-skills-load) de sincronizarse | `strictPluginOnlyCustomization` |97| [Customization lockdown](https://code.claude.com/docs/es/settings-reference.md#strictpluginonlycustomization) | Bloquear skills, agents, hooks y servidores MCP de fuentes de usuario y proyecto, para que solo provengan de plugins o configuración administrada. Bloquear skills también detiene los [skills que los desarrolladores habilitan en claude.ai](https://code.claude.com/docs/es/skills.md#where-synced-skills-load) de sincronizarse | `strictPluginOnlyCustomization` |

98| [Disable claude.ai sync](https://code.claude.com/docs/es/settings-reference.md#syncclaudeaiskills) | Evitar que Claude Code cargue los [skills](https://code.claude.com/docs/es/skills.md#how-synced-skills-behave) y [plugins](https://code.claude.com/docs/es/plugins/loading.md#synced-plugins) que los desarrolladores habilitan en claude.ai. Si desactiva Skills para su organización en claude.ai, Claude Code deja de sincronizar ambos, y en v2.1.273 o posterior también elimina los que ya sincronizó. Para detener uno u otro sin desactivar Skills, establezca su clave en `false` en la configuración administrada | `syncClaudeAiSkills`, `syncClaudeAiPlugins` |98| [Disable claude.ai sync](https://code.claude.com/docs/es/settings-reference.md#syncclaudeaiskills) | Evitar que Claude Code cargue los [skills](https://code.claude.com/docs/es/skills.md#how-synced-skills-behave) y [plugins](https://code.claude.com/docs/es/plugins/loading.md#synced-plugins) que los desarrolladores habilitan en claude.ai. Si desactiva Skills para su organización en claude.ai, Claude Code deja de sincronizar ambos, y en v2.1.273 o posterior también elimina los que ya sincronizó. Para detener uno u otro sin desactivar Skills, establezca su clave en `false` en la configuración administrada | `syncClaudeAiSkills`, `syncClaudeAiPlugins` |

99| [Hook restrictions](https://code.claude.com/docs/es/settings-reference.md#allowmanagedhooksonly) | Restringir qué hooks se ejecutan y restringir URLs de hooks HTTP; consulte [lo que se ejecuta bajo `allowManagedHooksOnly`](https://code.claude.com/docs/es/settings-reference#what-runs-under-allowmanagedhooksonly) para la lista completa de efectos | `allowManagedHooksOnly`, `allowedHttpHookUrls` |99| [Hook restrictions](https://code.claude.com/docs/es/settings-reference.md#allowmanagedhooksonly) | Restringir qué hooks se ejecutan y restringir URLs de hooks HTTP; consulte [lo que se ejecuta bajo `allowManagedHooksOnly`](https://code.claude.com/docs/es/settings-reference#what-runs-under-allowmanagedhooksonly) para la lista completa de efectos | `allowManagedHooksOnly`, `allowedHttpHookUrls` |

Details

233| `"default"` | Las llamadas de herramientas que necesitan aprobación y no están cubiertas por reglas de permitir activan su devolución de llamada `canUseTool`; sin devolución de llamada significa denegar | Aplicaciones interactivas con una devolución de llamada de aprobación personalizada |233| `"default"` | Las llamadas de herramientas que necesitan aprobación y no están cubiertas por reglas de permitir activan su devolución de llamada `canUseTool`; sin devolución de llamada significa denegar | Aplicaciones interactivas con una devolución de llamada de aprobación personalizada |

234| `"acceptEdits"` | Aprueba automáticamente ediciones de archivo y comandos comunes del sistema de archivos (`mkdir`, `touch`, `mv`, `cp`, etc.); otros comandos de Bash siguen reglas predeterminadas | Confía en las ediciones de Claude y desea una iteración más rápida, como durante la creación de prototipos o cuando trabaja en un directorio aislado |234| `"acceptEdits"` | Aprueba automáticamente ediciones de archivo y comandos comunes del sistema de archivos (`mkdir`, `touch`, `mv`, `cp`, etc.); otros comandos de Bash siguen reglas predeterminadas | Confía en las ediciones de Claude y desea una iteración más rápida, como durante la creación de prototipos o cuando trabaja en un directorio aislado |

235| `"plan"` | Claude explora y planifica sin editar sus archivos fuente; las ediciones de archivo nunca se aprueban automáticamente y se solicitan a través de su devolución de llamada `canUseTool` | Desea que Claude proponga cambios sin ejecutarlos, como durante la revisión de código o cuando necesita aprobar cambios antes de que se realicen |235| `"plan"` | Claude explora y planifica sin editar sus archivos fuente; las ediciones de archivo nunca se aprueban automáticamente y se solicitan a través de su devolución de llamada `canUseTool` | Desea que Claude proponga cambios sin ejecutarlos, como durante la revisión de código o cuando necesita aprobar cambios antes de que se realicen |

236| `"dontAsk"` | Nunca pide confirmación. Las herramientas preaprobadas por [reglas de permisos](https://code.claude.com/docs/es/settings-reference.md#permission-settings) se ejecutan, y también lo hacen las llamadas que no necesitan aprobación en modo `default`, como lecturas de archivo dentro de tus directorios de trabajo. Toda llamada que de otro modo pediría confirmación se deniega, aunque un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que hayas instalado aún puede aprobar [algunas de esas llamadas](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods). `AskUserQuestion`, las herramientas de conector [que tu organización estableció en `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools), las herramientas MCP marcadas con [`requiresUserInteraction`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool) y las [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths) se deniegan incluso si las has permitido | Deseas una superficie de herramientas fija y explícita para un agente sin interfaz y prefieres una denegación estricta en lugar de depender silenciosamente de que `canUseTool` esté ausente |236| `"dontAsk"` | Nunca pide confirmación. Las herramientas preaprobadas por [reglas de permisos](https://code.claude.com/docs/es/settings-reference.md#permission-settings) se ejecutan, y también lo hacen las llamadas que no necesitan aprobación en modo `default`, como lecturas de archivo dentro de tus directorios de trabajo. Toda llamada que de otro modo pediría confirmación se deniega, aunque un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que hayas instalado aún puede aprobar [algunas de esas llamadas](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods). Algunas llamadas, como las [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths), se deniegan incluso si las has permitido. Para ver la lista, consulta [Modo no preguntar](https://code.claude.com/docs/es/agent-sdk/permissions.md#don’t-ask-mode-dontask) | Agentes sin interfaz sin nadie que apruebe las llamadas |

237| `"auto"` | Usa un clasificador de modelo para revisar acciones como comandos de shell y solicitudes de red, permitiendo o bloqueando cada una que revisa. Vea [Modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) para disponibilidad y el orden de decisión | Agentes autónomos que aún desean protecciones de seguridad en el uso de herramientas |237| `"auto"` | Usa un clasificador de modelo para revisar acciones como comandos de shell y solicitudes de red, permitiendo o bloqueando cada una que revisa. Vea [Modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) para disponibilidad y el orden de decisión | Agentes autónomos que aún desean protecciones de seguridad en el uso de herramientas |

238| `"bypassPermissions"` | Ejecuta todas las herramientas permitidas sin preguntar, excepto herramientas coincidentes por una regla [`ask`](https://code.claude.com/docs/es/settings-reference#permission-settings) explícita, herramientas de conector [que su organización estableció en `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools) y herramientas que requieren interacción del usuario. Las [protecciones de mensajería entre sesiones](https://code.claude.com/docs/es/permission-modes.md#skip-all-checks-with-bypasspermissions-mode) aún se aplican. Vea [Cómo se evalúan los permisos](https://code.claude.com/docs/es/agent-sdk/permissions.md#how-permissions-are-evaluated) para el orden de precedencia. En el SDK de TypeScript, también requiere `allowDangerouslySkipPermissions: true` en `options`. No se puede usar cuando se ejecuta como root en Unix. Use solo en entornos aislados donde las acciones del agente no pueden afectar sistemas que le importan | CI, contenedores u otros entornos aislados |238| `"bypassPermissions"` | Ejecuta las llamadas a herramientas sin pedir aprobación, incluidas las llamadas a herramientas que no incluiste en `allowedTools`. Algunas llamadas aún van a tu devolución de llamada `canUseTool`; se enumeran en [Modo de omisión de permisos](https://code.claude.com/docs/es/agent-sdk/permissions.md#bypass-permissions-mode-bypasspermissions). En el SDK de TypeScript, también requiere `allowDangerouslySkipPermissions: true` en `options`. No se puede usar cuando se ejecuta como root en Unix. Úsalo solo en entornos aislados donde las acciones del agente no puedan afectar sistemas que te importan | CI, contenedores u otros entornos aislados |

239 239 

240Para aplicaciones interactivas, use `"default"` con una devolución de llamada de aprobación de herramienta para mostrar solicitudes de aprobación. Para agentes autónomos en una máquina de desarrollo, `"acceptEdits"` aprueba automáticamente ediciones de archivo y comandos comunes del sistema de archivos (`mkdir`, `touch`, `mv`, `cp`, etc.) mientras aún controla otros comandos de `Bash` detrás de reglas de permitir. Reserve `"bypassPermissions"` para CI, contenedores u otros entornos aislados. Vea [Permisos](https://code.claude.com/docs/es/agent-sdk/permissions.md) para detalles completos.240Para aplicaciones interactivas, use `"default"` con una devolución de llamada de aprobación de herramienta para mostrar solicitudes de aprobación. Para agentes autónomos en una máquina de desarrollo, `"acceptEdits"` aprueba automáticamente ediciones de archivo y comandos comunes del sistema de archivos (`mkdir`, `touch`, `mv`, `cp`, etc.) mientras aún controla otros comandos de `Bash` detrás de reglas de permitir. Reserve `"bypassPermissions"` para CI, contenedores u otros entornos aislados. Vea [Permisos](https://code.claude.com/docs/es/agent-sdk/permissions.md) para detalles completos.

241 241 

Details

16| Hacer que un parámetro sea opcional | Decláralo como opcional en el esquema y aplica el valor predeterminado en el controlador. Consulta [Hacer que un parámetro sea opcional](#make-a-parameter-optional). |16| Hacer que un parámetro sea opcional | Decláralo como opcional en el esquema y aplica el valor predeterminado en el controlador. Consulta [Hacer que un parámetro sea opcional](#make-a-parameter-optional). |

17| Registrar una herramienta con Claude | Envuelva en `create_sdk_mcp_server` / `createSdkMcpServer` y pase a `mcpServers` en `query()`. Vea [Llamar a una herramienta personalizada](#call-a-custom-tool). |17| Registrar una herramienta con Claude | Envuelva en `create_sdk_mcp_server` / `createSdkMcpServer` y pase a `mcpServers` en `query()`. Vea [Llamar a una herramienta personalizada](#call-a-custom-tool). |

18| Preaprobación de una herramienta | Agregue a sus herramientas permitidas. Vea [Configurar herramientas permitidas](#configure-allowed-tools). |18| Preaprobación de una herramienta | Agregue a sus herramientas permitidas. Vea [Configurar herramientas permitidas](#configure-allowed-tools). |

19| Requerir aprobación para las llamadas a una herramienta, o bloquear la herramienta | En el SDK de TypeScript, agrega una `permission_policy` para la herramienta al objeto de configuración que devuelve `createSdkMcpServer()`. Consulta [Requerir aprobación para herramientas específicas](#require-approval-for-specific-tools). |

19| Eliminar una herramienta integrada del contexto de Claude | Pase un array `tools` listando solo los integrados que desea. Vea [Configurar herramientas permitidas](#configure-allowed-tools). |20| Eliminar una herramienta integrada del contexto de Claude | Pase un array `tools` listando solo los integrados que desea. Vea [Configurar herramientas permitidas](#configure-allowed-tools). |

20| Permitir que Claude llame herramientas en paralelo | Establezca `readOnlyHint: true` en herramientas sin efectos secundarios. Vea [Agregar anotaciones de herramientas](#add-tool-annotations). |21| Permitir que Claude llame herramientas en paralelo | Establezca `readOnlyHint: true` en herramientas sin efectos secundarios. Vea [Agregar anotaciones de herramientas](#add-tool-annotations). |

21| Controlar el mensaje de error que Claude lee | Devuelva `isError: true` para componer el mensaje en lugar de exponer la excepción sin procesar. Vea [Manejar errores](#handle-errors). |22| Controlar el mensaje de error que Claude lee | Devuelva `isError: true` para componer el mensaje en lugar de exponer la excepción sin procesar. Vea [Manejar errores](#handle-errors). |


327| Campo | Predeterminado | Significado |328| Campo | Predeterminado | Significado |

328| :- | :- | :- |329| :- | :- | :- |

329| `readOnlyHint` | `false` | La herramienta no modifica su entorno. Controla si la herramienta puede llamarse en paralelo con otras herramientas de solo lectura. |330| `readOnlyHint` | `false` | La herramienta no modifica su entorno. Controla si la herramienta puede llamarse en paralelo con otras herramientas de solo lectura. |

330| `destructiveHint` | `true` | La herramienta puede realizar actualizaciones destructivas. Solo informativo. |331| `destructiveHint` | `true` | La herramienta puede realizar actualizaciones destructivas. Establécelo en `true` explícitamente en cualquier herramienta que [marques como `always_ask`](#require-approval-for-specific-tools). |

331| `idempotentHint` | `false` | Las llamadas repetidas con los mismos argumentos no tienen efecto adicional. Solo informativo. |332| `idempotentHint` | `false` | Las llamadas repetidas con los mismos argumentos no tienen efecto adicional. Solo informativo. |

332| `openWorldHint` | `true` | La herramienta alcanza sistemas fuera de su proceso. Solo informativo. |333| `openWorldHint` | `true` | La herramienta alcanza sistemas fuera de su proceso. Solo informativo. |

333 334 


383 384 

384Para eliminar una herramienta integrada por completo, omítala de `tools` o enumere su nombre simple en `disallowedTools` (Python: `disallowed_tools`); ambas mantienen la herramienta fuera del contexto para que Claude nunca intente usarla. Una regla de `disallowedTools` con alcance bloquea las llamadas coincidentes pero deja la herramienta visible, por lo que Claude puede desperdiciar un turno intentándolo. Consulte [Configurar permisos](https://code.claude.com/docs/es/agent-sdk/permissions.md) para el orden de evaluación completo.385Para eliminar una herramienta integrada por completo, omítala de `tools` o enumere su nombre simple en `disallowedTools` (Python: `disallowed_tools`); ambas mantienen la herramienta fuera del contexto para que Claude nunca intente usarla. Una regla de `disallowedTools` con alcance bloquea las llamadas coincidentes pero deja la herramienta visible, por lo que Claude puede desperdiciar un turno intentándolo. Consulte [Configurar permisos](https://code.claude.com/docs/es/agent-sdk/permissions.md) para el orden de evaluación completo.

385 386 

387### Requerir aprobación para herramientas específicas

388 

389Establece el `permission_policy` de una herramienta en `always_ask`, y `allowedTools` deja de aprobar las llamadas de esa herramienta, de modo que pueden llegar a tu callback [`canUseTool`](https://code.claude.com/docs/es/agent-sdk/user-input) aunque la herramienta esté en la lista. Si en cambio estableces `always_deny`, [se deniega la llamada a la herramienta](https://code.claude.com/docs/es/agent-sdk/permissions.md#how-permissions-are-evaluated), pero un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) de un plugin que cargues [todavía puede aprobarla](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods). El campo es exclusivo de TypeScript y requiere Agent SDK v0.3.301 o posterior.

390 

391Coloca la entrada de política en un array `tools` en el objeto de configuración que devuelve `createSdkMcpServer()`, no en la opción `tools` que pasas a esa función. Este ejemplo expande `weatherServer` del [ejemplo de herramienta meteorológica](#weather-tool-example) y agrega un array `tools` que asigna a `get_temperature` la política `always_ask`:

392 

393```typescript TypeScript theme={null}

394options: {

395 mcpServers: {

396 weather: {

397 ...weatherServer,

398 tools: [{ name: "get_temperature", permission_policy: "always_ask" as const }]

399 }

400 },

401 allowedTools: ["mcp__weather__get_temperature"],

402 permissionMode: "default",

403 canUseTool: async (toolName, input) => {

404 console.log(`Approval requested for ${toolName}`);

405 return { behavior: "allow", updatedInput: input };

406 }

407}

408```

409 

410Para probar la política, reemplaza las `options` del script de [Llamar a una herramienta personalizada](#call-a-custom-tool) con las `options` de este ejemplo y luego ejecuta ese script desde tu terminal. El script imprime `Approval requested for mcp__weather__get_temperature`, seguido de la respuesta de Claude sobre la temperatura. Para ver un script completo, consulta la [referencia de TypeScript](https://code.claude.com/docs/es/agent-sdk/typescript.md#mcpsdkserverconfigwithinstance).

411 

412Si usas el [modo de permisos](https://code.claude.com/docs/es/agent-sdk/permissions.md#permission-modes) `auto` o `plan`, establece `destructiveHint: true` en las [anotaciones](#add-tool-annotations) de la herramienta para que las llamadas a la herramienta sigan llegando a tu callback. De lo contrario, el [clasificador del modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) puede aprobar algunas llamadas `always_ask`, bajo [condiciones enumeradas en la referencia de TypeScript](https://code.claude.com/docs/es/agent-sdk/typescript.md#permission-modes-that-can-approve-an-always_ask-call), y una llamada que aprueba no llega a tu callback. Establece la sugerencia explícitamente, porque un `destructiveHint` sin establecer cuenta como `false` para las llamadas `always_ask` en lugar de tomar `true` como valor predeterminado.

413 

386## Manejar errores414## Manejar errores

387 415 

388Un error del controlador no detiene el bucle del agente. El servidor MCP en proceso del SDK detecta excepciones no capturadas y las devuelve como resultados de error, por lo que la forma en que informa un error determina lo que Claude lee, no si la consulta falla:416Un error del controlador no detiene el bucle del agente. El servidor MCP en proceso del SDK detecta excepciones no capturadas y las devuelve como resultados de error, por lo que la forma en que informa un error determina lo que Claude lee, no si la consulta falla:

Details

10 10 

11## Cómo se evalúan los permisos11## Cómo se evalúan los permisos

12 12 

13> [!NOTE]

14>

15> Si cargas un plugin que contiene un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md), consulta [dónde encajan las decisiones de un mod entre las reglas y los hooks](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods).

16 

13Cuando Claude solicita una herramienta, el SDK comprueba los permisos en este orden:17Cuando Claude solicita una herramienta, el SDK comprueba los permisos en este orden:

14 18 

15**1. Hooks**19**1. Hooks**


20 24 

21**2. Reglas de denegación**25**2. Reglas de denegación**

22 26 

23Comprobar reglas `deny` (de `disallowed_tools` y [settings.json](https://code.claude.com/docs/es/settings-reference.md#permission-settings)). Si una regla de denegación coincide, la herramienta se bloquea, incluso en modo `bypassPermissions`. Las reglas de denegación de nombre simple como `Bash` eliminan la herramienta del contexto de Claude antes de que comience esta evaluación, por lo que solo se comprueban las reglas con alcance como `Bash(rm *)` en este paso.27Si una regla de denegación de `disallowed_tools` o de [settings.json](https://code.claude.com/docs/es/settings-reference.md#permission-settings) coincide, la llamada se deniega y no se llama a [`canUseTool`](https://code.claude.com/docs/es/agent-sdk/user-input), incluso en modo [`bypassPermissions`](#bypass-permissions-mode-bypasspermissions) e incluso cuando un hook devolvió `allow`.

28 

29En el SDK de TypeScript, si estableces el `permission_policy` de una [herramienta personalizada](https://code.claude.com/docs/es/agent-sdk/custom-tools.md#require-approval-for-specific-tools) en [`always_deny`](https://code.claude.com/docs/es/agent-sdk/typescript#mcpservertoolpolicy), una llamada a esa herramienta se deniega en este paso.

24 30 

25**3. Reglas de pregunta**31**3. Reglas de pregunta**

26 32 

27Comprobar reglas `ask` de [settings.json](https://code.claude.com/docs/es/settings-reference.md#permission-settings). Si una regla de pregunta coincide, la llamada se pasa a tu devolución de llamada [`canUseTool`](https://code.claude.com/docs/es/agent-sdk/user-input) para confirmación, incluso en modo `bypassPermissions`.33Comprobar reglas `ask` de [settings.json](https://code.claude.com/docs/es/settings-reference.md#permission-settings). Si una regla de pregunta coincide, la llamada se pasa a tu [devolución de llamada `canUseTool`](https://code.claude.com/docs/es/agent-sdk/user-input) para confirmación, incluso en modo `bypassPermissions`.

28 34 

29Las herramientas que requieren interacción del usuario se comportan de la misma manera: `AskUserQuestion` y herramientas MCP cuyo servidor establece [`_meta["anthropic/requiresUserInteraction"]`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool) siempre se pasan a la devolución de llamada, incluso cuando una regla de permiso coincide. En modo `dontAsk` ambos casos se deniegan en su lugar, porque ese modo nunca solicita. La anotación MCP requiere Claude Code v2.1.199 o posterior.35Las herramientas que requieren interacción del usuario se comportan de la misma manera: `AskUserQuestion` y herramientas MCP cuyo servidor establece [`_meta["anthropic/requiresUserInteraction"]`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool) siempre se pasan a la devolución de llamada, incluso cuando una regla de permiso coincide. En modo `dontAsk` ambos casos se deniegan en su lugar, porque ese modo nunca solicita. La anotación MCP requiere Claude Code v2.1.199 o posterior.

30 36 

31Las herramientas del conector [claude.ai](https://code.claude.com/docs/es/mcp.md#organization-controls-on-connector-tools) que su organización ha establecido en `ask` también salen del flujo en este paso. Cada llamada se pasa a la devolución de llamada, incluso en modo `bypassPermissions` y incluso cuando una regla de permiso coincide. La devolución de llamada recibe la razón `Your organization requires approval for this tool`. En modo `dontAsk` la llamada se deniega en su lugar, porque ese modo nunca solicita.37Las herramientas del [conector de claude.ai](https://code.claude.com/docs/es/mcp.md#organization-controls-on-connector-tools) que tu organización ha establecido en `ask` también salen del flujo en este paso. Cada llamada se pasa a la devolución de llamada, incluso en modo `bypassPermissions` y incluso cuando una regla de permiso coincide. La devolución de llamada recibe la razón `Your organization requires approval for this tool`. En modo `dontAsk` la llamada se deniega en su lugar, porque ese modo nunca solicita.

32 38 

33**4. Modo de permiso**39En el SDK de TypeScript, si estableces el `permission_policy` de una herramienta personalizada en [`always_ask`](https://code.claude.com/docs/es/agent-sdk/custom-tools#require-approval-for-specific-tools), ninguna regla de permiso aprueba sus llamadas, ni siquiera una entrada de `allowedTools`. En modo `dontAsk` Claude Code deniega esas llamadas, y en modo `auto`, `plan` o `bypassPermissions` [puede aprobarlas](https://code.claude.com/docs/es/agent-sdk/typescript.md#permission-modes-that-can-approve-an-always_ask-call) antes de que se ejecute tu devolución de llamada.

34 40 

35Aplicar el [modo de permiso](#permission-modes) activo:41**4. Modo de permisos**

36 42 

37* En modo `bypassPermissions`, Claude Code aprueba todo lo que llega a este paso excepto las [eliminaciones de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths) reconocidas, que se pasan en su lugar.43Aplicar el [modo de permisos](#permission-modes) activo:

44 

45* En modo `bypassPermissions`, Claude Code aprueba todo lo que llega a este paso excepto las [eliminaciones de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths) reconocidas y los comandos Bash marcados con [`Dangerous rm operation not ruled out`](https://code.claude.com/docs/es/permission-modes#dangerous-rm-operation-not-ruled-out), que se pasan en su lugar.

38* En modo `acceptEdits`, Claude Code aprueba las operaciones de archivo enumeradas en [Modo de aceptación de ediciones](#accept-edits-mode-acceptedits).46* En modo `acceptEdits`, Claude Code aprueba las operaciones de archivo enumeradas en [Modo de aceptación de ediciones](#accept-edits-mode-acceptedits).

39* En modo `plan`, Claude Code envía herramientas de edición de archivos y escritura de shell a tu devolución de llamada `canUseTool` independientemente de las reglas de permiso, por lo que las operaciones de escritura no pueden aprobarse automáticamente mientras se planifica.47* En modo `plan`, Claude Code envía las herramientas de edición de archivos a tu devolución de llamada `canUseTool` independientemente de las reglas de permiso.

40* En otros modos, la solicitud se pasa.48* En otros modos, la solicitud se pasa.

41 49 

42**5. Reglas de permiso**50**5. Reglas de permiso**

43 51 

44Comprobar reglas `allow` (de `allowed_tools` y settings.json). Si una regla coincide, la herramienta se aprueba. Una llamada que la herramienta aprueba por sí sola también se resuelve en este paso, sin necesidad de regla: por ejemplo una lectura de archivo dentro de tus directorios de trabajo o un [comando Bash de solo lectura](https://code.claude.com/docs/es/permissions.md#read-only-commands).52Comprobar reglas `allow` (de `allowed_tools` y settings.json). Si una regla coincide, la herramienta se aprueba. Una llamada que la herramienta aprueba por sí sola también se resuelve en este paso, sin necesidad de regla: por ejemplo una lectura de archivo dentro de tus directorios de trabajo o un [comando Bash de solo lectura](https://code.claude.com/docs/es/permissions.md#read-only-commands).

45 53 

46Las [eliminaciones de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths) reconocidas no se aprueban por una regla de permiso. Si luego llegan a tu devolución de llamada depende del modo de permisos: en una sesión del Agent SDK en modo `auto`, por ejemplo, Claude Code las deniega por defecto sin llamarla. La [tabla de modos de Rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-path-removals-in-each-permission-mode) enumera lo que cada modo hace con ellas.54Las [eliminaciones de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths) reconocidas no se aprueban por una regla de permiso, y los comandos marcados con `Dangerous rm operation not ruled out` no se aprueban por una regla `Bash` o `Bash(*)`. Si luego llegan a tu devolución de llamada depende del modo de permisos: en una sesión del Agent SDK en modo `auto`, por ejemplo, Claude Code las deniega por defecto sin llamarla. La [tabla de modos de Rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-path-removals-in-each-permission-mode) enumera lo que cada modo hace con ellas.

47 55 

48Una regla de permiso no aprueba una lectura desde una [ruta de red](https://code.claude.com/docs/es/permissions.md#network-paths).56Una regla de permiso no aprueba una lectura desde una [ruta de red](https://code.claude.com/docs/es/permissions.md#network-paths).

49 57 


57 65 

58Si pasa una devolución de llamada `canUseTool` en una configuración donde el SDK de TypeScript espera que el orden de evaluación apruebe automáticamente las llamadas antes de que se consulte la devolución de llamada, el SDK emite una advertencia de proceso de Node.js una vez cuando se construye la consulta. El código de la advertencia es `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`. Dos configuraciones la activan:66Si pasa una devolución de llamada `canUseTool` en una configuración donde el SDK de TypeScript espera que el orden de evaluación apruebe automáticamente las llamadas antes de que se consulte la devolución de llamada, el SDK emite una advertencia de proceso de Node.js una vez cuando se construye la consulta. El código de la advertencia es `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`. Dos configuraciones la activan:

59 67 

60* `permissionMode: 'bypassPermissions'`, que aprueba automáticamente cada llamada que llega al paso del modo de permiso aparte de las [acciones que ningún modo aprueba automáticamente](https://code.claude.com/docs/es/permission-modes.md#actions-no-mode-auto-approves)68* `permissionMode: 'bypassPermissions'`: el texto de la advertencia empieza con `canUseTool will not be invoked: permissionMode 'bypassPermissions'`. Las llamadas a herramientas se aprueban antes de que se consulte `canUseTool`, por lo que tu devolución de llamada se ejecuta solo para unas pocas llamadas, como las enumeradas en [Modo de omisión de permisos](#bypass-permissions-mode-bypasspermissions). Para comprobar también las llamadas aprobadas, coloca las comprobaciones de tu devolución de llamada en un [hook `PreToolUse`](https://code.claude.com/docs/es/agent-sdk/hooks)

61* Cada entrada `allowedTools` simple como `"Read"`, que aprueba automáticamente esa herramienta completa antes de que se consulte la devolución de llamada, aparte de las [acciones que ningún modo aprueba automáticamente](https://code.claude.com/docs/es/permission-modes.md#actions-no-mode-auto-approves) y las [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths)69* Una entrada de `allowedTools` que es solo un nombre de herramienta, como `"Read"`: la advertencia enumera cada una de esas entradas después de `canUseTool will not be invoked for:`. Las llamadas a una herramienta enumerada se aprueban antes de que se consulte `canUseTool`, aparte de las [llamadas que una regla de permiso nunca aprueba](#calls-an-allow-rule-never-approves). Para que tu devolución de llamada se ejecute en las llamadas de una herramienta enumerada que necesitan aprobación, elimina la entrada de esa herramienta de `allowedTools`

62 70 

63Las entradas con un especificador como `Bash(ls *)` y el modo `acceptEdits` no la activan, y las reglas de permiso provenientes de archivos de configuración no son visibles para la comprobación.71Las entradas con un especificador como `Bash(ls *)` y el modo `acceptEdits` no la activan, y las reglas de permiso provenientes de archivos de configuración no son visibles para la comprobación.

64 72 

65Escuche con `process.on('warning', ...)` y haga coincidir el código para registrarlo o suprimirlo. Para controlar cada llamada de herramienta independientemente del modo y las reglas, use un [hook `PreToolUse`](https://code.claude.com/docs/es/agent-sdk/hooks) en su lugar.73La advertencia no bloquea ninguna llamada ni cambia ninguna opción. Si tu devolución de llamada ya recibe todas las llamadas que quieres comprobar, deja tu configuración como está. Para registrar la advertencia, escucha con `process.on('warning', ...)` y haz coincidir el código `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`.

66 74 

67Esta página se enfoca en **reglas de permiso y denegación** y **modos de permiso**. Para los otros pasos:75Esta página se enfoca en **reglas de permiso y denegación** y **modos de permiso**. Para los otros pasos:

68 76 


90>98>

91> **Las herramientas aprobadas automáticamente nunca llegan a `canUseTool`.** Una llamada de herramienta aprobada en cualquier paso anterior, por `acceptEdits` o `bypassPermissions`, o por una regla de permitir, omite su devolución de llamada `canUseTool`, por lo que las comprobaciones de permisos que coloque allí se omiten silenciosamente para esa herramienta.99> **Las herramientas aprobadas automáticamente nunca llegan a `canUseTool`.** Una llamada de herramienta aprobada en cualquier paso anterior, por `acceptEdits` o `bypassPermissions`, o por una regla de permitir, omite su devolución de llamada `canUseTool`, por lo que las comprobaciones de permisos que coloque allí se omiten silenciosamente para esa herramienta.

92>100>

93> Ninguna regla de permitir aprueba automáticamente `AskUserQuestion`, herramientas MCP marcadas [`_meta["anthropic/requiresUserInteraction"]`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool), herramientas de conector [que tu organización configuró como `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools), ni las [eliminaciones de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths) reconocidas con `rm` y `rmdir`. En modo `dontAsk` Claude Code deniega estas llamadas sin invocar la devolución de llamada. En otros modos los tres primeros llegan a la devolución de llamada. La [tabla de modos de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-path-removals-in-each-permission-mode) indica qué hace cada modo con una eliminación de ruta crítica. La comprobación que reconoce estas eliminaciones [puede pasar por alto algunos comandos](https://code.claude.com/docs/es/permission-modes.md#critical-paths).101> Si las llamadas a una herramienta en `allowed_tools` aún llegan a tu devolución de llamada `canUseTool`, o se deniegan en modo `dontAsk`, comprueba si son [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths) o se encuentran entre las siguientes llamadas. Ninguna regla de permitir aprueba estas llamadas. En modo `dontAsk`, que nunca pide confirmación, Claude Code las deniega sin invocar `canUseTool`, y en los demás modos de permisos las gestionas como indica cada elemento:

102>

103> * `AskUserQuestion`, herramientas MCP marcadas [`_meta["anthropic/requiresUserInteraction"]`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool) y herramientas de conector [que tu organización configuró como `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools): respóndelas en la devolución de llamada. [Gestionar preguntas aclaratorias](https://code.claude.com/docs/es/agent-sdk/user-input.md#handle-clarifying-questions) muestra cómo responder a `AskUserQuestion`, y una llamada de conector llega con el motivo `Your organization requires approval for this tool`

104>

105> * Herramientas personalizadas que tu aplicación marca como [`always_ask`](https://code.claude.com/docs/es/agent-sdk/custom-tools#require-approval-for-specific-tools): decide la llamada en la devolución de llamada. Para que estas llamadas dejen de llegar, [cambia la política a mitad de la sesión](https://code.claude.com/docs/es/agent-sdk/typescript.md#mcpsdkserverconfigwithinstance). En los modos `auto`, `plan` y `bypassPermissions`, la llamada puede aprobarse antes de la devolución de llamada, en los casos enumerados en [Modos de permisos que pueden aprobar una llamada `always_ask`](https://code.claude.com/docs/es/agent-sdk/typescript#permission-modes-that-can-approve-an-always_ask-call)

94>106>

95> La cobertura depende de la forma de la entrada: un nombre simple como `Read` o `mcp__github__get_issue` aprueba automáticamente cada llamada a esa herramienta aparte de esas excepciones y de las [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths), mientras que una regla delimitada como `Bash(npm test *)` aprueba automáticamente solo las llamadas coincidentes, y otras llamadas a `Bash` que necesiten aprobación aún caen en la devolución de llamada. Para comprobaciones que deben ejecutarse en cada llamada a herramienta, usa un [hook `PreToolUse`](https://code.claude.com/docs/es/agent-sdk/hooks): los hooks se ejecutan antes de cualquier otro paso, y una denegación de hook se aplica incluso en modo `bypassPermissions`.107> * [Eliminaciones de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths) reconocidas con `rm` y `rmdir`: en los modos `default`, `acceptEdits` y `bypassPermissions`, permite o deniega la eliminación en la devolución de llamada, donde [`decisionReason`](https://code.claude.com/docs/es/agent-sdk/typescript#canusetool) empieza por `Dangerous rm`. Para los modos `auto` y `plan`, consulta [Eliminaciones de rutas críticas en cada modo de permisos](https://code.claude.com/docs/es/permission-modes.md#critical-path-removals-in-each-permission-mode). La comprobación que reconoce estas eliminaciones [puede pasar por alto algunos comandos](https://code.claude.com/docs/es/permission-modes.md#critical-paths)

108>

109> * **Nombre simple**: una entrada como `Read` o `mcp__github__get_issue` aprueba automáticamente cada llamada a esa herramienta, aparte de las [acciones que ningún modo aprueba automáticamente](https://code.claude.com/docs/es/permission-modes.md#actions-no-mode-auto-approves) y de las [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths).

110>

111> * **Regla delimitada**: una entrada como `Bash(npm test *)` aprueba automáticamente solo las llamadas coincidentes, y otras llamadas a `Bash` que necesiten aprobación aún caen en la devolución de llamada.

112>

113> Para comprobaciones que deben ejecutarse en cada llamada a herramienta, usa un [hook `PreToolUse`](https://code.claude.com/docs/es/agent-sdk/hooks): los hooks se ejecutan antes de cualquier otro paso, y una denegación de hook se aplica incluso en modo `bypassPermissions`.

96 114 

97Para un agente bloqueado, empareje `allowedTools` con `permissionMode: "dontAsk"`:115Para un agente bloqueado, empareje `allowedTools` con `permissionMode: "dontAsk"`:

98 116 


103};121};

104```122```

105 123 

106Las herramientas listadas se aprueban, aparte de las [acciones que ningún modo aprueba automáticamente](https://code.claude.com/docs/es/permission-modes.md#actions-no-mode-auto-approves) y de las [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths). Cualquier otra llamada que pediría confirmación se deniega en su lugar, aunque un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que hayas instalado aún puede aprobar [algunas de esas llamadas](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods).124Las llamadas a `Read`, `Glob` y `Grep` listadas se aprueban, aparte de las [acciones que ningún modo aprueba automáticamente](https://code.claude.com/docs/es/permission-modes.md#actions-no-mode-auto-approves) y de las [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths). Cualquier otra llamada que pediría confirmación se deniega en su lugar, aunque un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que hayas instalado aún puede aprobar [algunas de esas llamadas](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods).

107 125 

108Las llamadas que no necesitan aprobación en modo `default` se ejecutan independientemente de si las listas o no. Incluyen [comandos Bash de solo lectura](https://code.claude.com/docs/es/permissions.md#read-only-commands), herramientas como `Agent` que no preguntan antes de ejecutarse y lecturas de archivos dentro de tus directorios de trabajo. Para eliminar una herramienta de la solicitud por completo, añade su nombre simple a `disallowedTools`.126Las llamadas que no necesitan aprobación en modo `default` se ejecutan independientemente de si las listas o no. Incluyen [comandos Bash de solo lectura](https://code.claude.com/docs/es/permissions.md#read-only-commands), herramientas como `Agent` que no preguntan antes de ejecutarse y lecturas de archivos dentro de tus directorios de trabajo. Para ocultar por completo una herramienta integrada a Claude en lugar de denegar sus llamadas, añade su nombre simple a `disallowedTools`.

109 127 

110> [!WARNING]128> [!WARNING]

111>129>


128| `default` | Comportamiento de permisos estándar | Sin aprobaciones automáticas basadas en modo; las llamadas que necesitan aprobación y no coinciden con ninguna regla de permiso activan su devolución de llamada `canUseTool` |146| `default` | Comportamiento de permisos estándar | Sin aprobaciones automáticas basadas en modo; las llamadas que necesitan aprobación y no coinciden con ninguna regla de permiso activan su devolución de llamada `canUseTool` |

129| `dontAsk` | Denegar en lugar de preguntar | Cualquier llamada que de otro modo solicitaría confirmación es denegada sin llamar a `canUseTool`, aunque un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que instalaste aún puede aprobar [algunas de esas llamadas](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods). Las llamadas aprobadas por `allowed_tools` o por reglas de permiso de `settings.json` se ejecutan, al igual que las llamadas que no necesitan aprobación en modo `default`. Algunas llamadas, como las [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths), son denegadas incluso cuando `allowed_tools` o una regla de permiso coinciden con ellas. Para ver la lista, consulta [Modo no preguntar](#don’t-ask-mode-dontask) |147| `dontAsk` | Denegar en lugar de preguntar | Cualquier llamada que de otro modo solicitaría confirmación es denegada sin llamar a `canUseTool`, aunque un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que instalaste aún puede aprobar [algunas de esas llamadas](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods). Las llamadas aprobadas por `allowed_tools` o por reglas de permiso de `settings.json` se ejecutan, al igual que las llamadas que no necesitan aprobación en modo `default`. Algunas llamadas, como las [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths), son denegadas incluso cuando `allowed_tools` o una regla de permiso coinciden con ellas. Para ver la lista, consulta [Modo no preguntar](#don’t-ask-mode-dontask) |

130| `acceptEdits` | Aceptar automáticamente ediciones de archivos | Las ediciones de archivos y [operaciones del sistema de archivos](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, etc.) se aprueban automáticamente |148| `acceptEdits` | Aceptar automáticamente ediciones de archivos | Las ediciones de archivos y [operaciones del sistema de archivos](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, etc.) se aprueban automáticamente |

131| `bypassPermissions` | Omitir verificaciones de permisos | Las herramientas se ejecutan sin solicitudes de permisos, excepto para las [acciones que ningún modo aprueba automáticamente](https://code.claude.com/docs/es/permission-modes.md#actions-no-mode-auto-approves). Úselo con precaución |149| `bypassPermissions` | Omitir verificaciones de permisos | Las herramientas se ejecutan sin solicitudes de permisos, excepto para las [acciones que ningún modo aprueba automáticamente](https://code.claude.com/docs/es/permission-modes.md#actions-no-mode-auto-approves) y, fuera de una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), las herramientas personalizadas que tu aplicación [marca como `always_ask`](https://code.claude.com/docs/es/agent-sdk/custom-tools#require-approval-for-specific-tools). Úsalo con precaución |

132| `plan` | Modo de planificación | Claude explora y planifica sin editar sus archivos fuente; las ediciones de archivos nunca se aprueban automáticamente y se solicitan a través de su devolución de llamada `canUseTool` |150| `plan` | Modo de planificación | Claude explora y planifica sin editar sus archivos fuente; las ediciones de archivos nunca se aprueban automáticamente y se solicitan a través de su devolución de llamada `canUseTool` |

133| `auto` | Aprobaciones clasificadas por modelo | Un clasificador de modelo revisa acciones como comandos de shell y solicitudes de red, permitiendo o bloqueando cada una que revisa. Consulte [Modo Auto](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) para disponibilidad y el orden de decisión |151| `auto` | Aprobaciones clasificadas por modelo | Un clasificador de modelo revisa acciones como comandos de shell y solicitudes de red, permitiendo o bloqueando cada una que revisa. Consulte [Modo Auto](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) para disponibilidad y el orden de decisión |

134 152 


256* Trabaja en una ruta fuera de ese alcance274* Trabaja en una ruta fuera de ese alcance

257* Escribe en una ruta protegida275* Escribe en una ruta protegida

258* Elimina con `rm` o `rmdir` una ruta que Claude Code reconoce como [ruta crítica](https://code.claude.com/docs/es/permission-modes.md#critical-paths)276* Elimina con `rm` o `rmdir` una ruta que Claude Code reconoce como [ruta crítica](https://code.claude.com/docs/es/permission-modes.md#critical-paths)

277* Ejecuta [`touch`](https://code.claude.com/docs/es/permission-modes#auto-approve-file-edits-with-acceptedits-mode) con, por ejemplo, una opción, un glob o un prefijo `timeout 5` o `LANG=C`

259 278 

260**Úselo cuando:** confíe en las ediciones de Claude y desee una iteración más rápida, como durante la creación de prototipos o cuando trabaja en un directorio aislado.279**Úselo cuando:** confíe en las ediciones de Claude y desee una iteración más rápida, como durante la creación de prototipos o cuando trabaja en un directorio aislado.

261 280 

262#### Modo no preguntar (`dontAsk`)281#### Modo no preguntar (`dontAsk`)

263 282 

264Convierte cualquier solicitud de permiso en una denegación, sin llamar a `canUseTool`, aunque un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que instalaste aún puede aprobar [algunas de esas llamadas](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods). Las herramientas preaprobadas por `allowed_tools`, reglas de permiso en `settings.json` o un hook se ejecutan normalmente. Las llamadas que no necesitan aprobación en modo `default` también se ejecutan, como lecturas de archivos dentro de tus directorios de trabajo y llamadas a `Agent`.283Convierte cualquier solicitud de permiso en una denegación, sin llamar a `canUseTool`, aunque un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que instalaste aún puede aprobar [algunas de esas llamadas](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods). Las herramientas preaprobadas por `allowed_tools`, reglas de permiso en `settings.json` o un hook se ejecutan normalmente. Las llamadas que no necesitan aprobación en modo `default` también se ejecutan normalmente, como lecturas de archivos dentro de tus directorios de trabajo y llamadas a `Agent`.

265 284 

266Las herramientas de conector [que tu organización configuró como `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools), las herramientas que requieren interacción del usuario, las [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths) y las [eliminaciones de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths) reconocidas son denegadas incluso cuando una regla de permiso coincide. Un permiso de hook `PreToolUse` tampoco habilita una eliminación de ruta crítica reconocida ni una lectura desde una ruta de red. La verificación que reconoce estas eliminaciones [puede pasar por alto algunos comandos](https://code.claude.com/docs/es/permission-modes.md#critical-paths).285Estas llamadas son denegadas incluso cuando una regla de permiso coincide:

286 

287* Herramientas de conector [que tu organización configuró como `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools)

288* Herramientas que requieren interacción del usuario, como `AskUserQuestion` y las herramientas MCP cuyo servidor establece [`_meta["anthropic/requiresUserInteraction"]`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool)

289* Herramientas personalizadas cuyo `permission_policy` tu aplicación establece en [`always_ask`](https://code.claude.com/docs/es/agent-sdk/custom-tools#require-approval-for-specific-tools)

290* [Lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths)

291* [Eliminaciones de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths) reconocidas

292 

293Si tu hook `PreToolUse` devuelve `allow` para una eliminación de ruta crítica reconocida, una lectura desde una ruta de red o una llamada a una herramienta marcada como `always_ask`, la llamada sigue siendo denegada. La verificación que reconoce estas eliminaciones [puede pasar por alto algunos comandos](https://code.claude.com/docs/es/permission-modes.md#critical-paths).

267 294 

268**Úselo cuando:** desee una superficie de herramientas fija y explícita para un agente sin interfaz y prefiera una denegación definitiva sobre la dependencia silenciosa de que `canUseTool` esté ausente.295**Úselo cuando:** desee una superficie de herramientas fija y explícita para un agente sin interfaz y prefiera una denegación definitiva sobre la dependencia silenciosa de que `canUseTool` esté ausente.

269 296 

270#### Modo omitir permisos (`bypassPermissions`)297#### Modo omitir permisos (`bypassPermissions`)

271 298 

272Aprueba automáticamente usos de herramientas sin solicitar confirmación, excepto en los casos enumerados en la advertencia a continuación. Los hooks aún se ejecutan y pueden bloquear operaciones si es necesario. En Linux y macOS, Claude Code se niega a iniciarse en este modo como root o bajo `sudo` fuera de una [zona de pruebas reconocida](https://code.claude.com/docs/es/permission-modes.md#skip-all-checks-with-bypasspermissions-mode), y la consulta falla antes del primer turno.299Aprueba automáticamente usos de herramientas sin solicitar confirmación, excepto las [acciones que ningún modo aprueba automáticamente](https://code.claude.com/docs/es/permission-modes.md#actions-no-mode-auto-approves). Los hooks aún se ejecutan y pueden bloquear operaciones si es necesario. En Linux y macOS, Claude Code se niega a iniciarse en este modo como root o bajo `sudo` fuera de un [sandbox reconocido](https://code.claude.com/docs/es/permission-modes.md#skip-all-checks-with-bypasspermissions-mode), y la consulta falla antes del primer turno.

273 300 

274> [!WARNING]301> [!WARNING]

275>302>


278> `allowed_tools` no restringe este modo. Cada herramienta se aprueba, no solo las que enumeró. Estos controles aún se aplican:305> `allowed_tools` no restringe este modo. Cada herramienta se aprueba, no solo las que enumeró. Estos controles aún se aplican:

279>306>

280> * Las reglas de denegación, las reglas explícitas de `ask` y los hooks se evalúan antes de la verificación del modo y aún pueden bloquear una herramienta.307> * Las reglas de denegación, las reglas explícitas de `ask` y los hooks se evalúan antes de la verificación del modo y aún pueden bloquear una herramienta.

281> * Las herramientas de conector [que tu organización configuró como `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools), las herramientas que requieren interacción del usuario y las [eliminaciones de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths) reconocidas aún se transfieren a tu devolución de llamada `canUseTool`. La verificación que reconoce estas eliminaciones [puede pasar por alto algunos comandos](https://code.claude.com/docs/es/permission-modes.md#critical-paths).308> * Las herramientas de conector [que tu organización configuró como `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools), las herramientas que requieren interacción del usuario y las [eliminaciones de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths) reconocidas aún se transfieren a tu devolución de llamada `canUseTool`. La verificación que reconoce estas eliminaciones [puede pasar por alto algunos comandos](https://code.claude.com/docs/es/permission-modes.md#critical-paths). Fuera de una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), las llamadas a herramientas personalizadas que tu aplicación [marca como `always_ask`](https://code.claude.com/docs/es/agent-sdk/custom-tools#require-approval-for-specific-tools) también se transfieren a la devolución de llamada.

282> * Las [medidas de seguridad de mensajería entre sesiones](https://code.claude.com/docs/es/permission-modes.md#skip-all-checks-with-bypasspermissions-mode) aún se aplican.309> * Las [medidas de seguridad de mensajería entre sesiones](https://code.claude.com/docs/es/permission-modes.md#skip-all-checks-with-bypasspermissions-mode) aún se aplican.

283 310 

284#### Modo de planificación (`plan`)311#### Modo de planificación (`plan`)

285 312 

286Claude explora la base de código y produce un plan sin editar sus archivos fuente. Las herramientas de solo lectura se ejecutan como lo hacen en el modo de permisos `default`.313Claude explora la base de código y produce un plan sin editar tus archivos fuente. Las ediciones de archivos nunca se aprueban automáticamente en modo plan, incluso cuando una regla de permiso coincide o un hook `PreToolUse` devuelve `allow`. En su lugar, se solicitan a través de tu devolución de llamada `canUseTool`.

287 314 

288Las ediciones de archivos nunca se aprueban automáticamente en modo plan, incluso cuando una regla de permiso coincide o un hook `PreToolUse` devuelve `allow`. En su lugar, se solicitan a través de tu devolución de llamada `canUseTool`. En Claude Code v2.1.212 o posterior, los comandos de shell que modifican archivos, como `touch` y `rm`, llegan a tu devolución de llamada `canUseTool` de la misma manera.315Mientras el modo automático está disponible para la sesión, los comandos que Claude ejecuta durante la planificación no llegan a tu devolución de llamada de forma predeterminada, porque el modelo clasificador que usa el [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) [los revisa en su lugar](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode). Con esa revisión activada, el clasificador también puede aprobar llamadas de solo lectura que de otro modo llegarían a tu devolución de llamada, como una llamada a `WebFetch` sin regla de permiso.

289 316 

290En el SDK de TypeScript, si establece `allowDangerouslySkipPermissions: true` junto con `permissionMode: 'plan'`, las ediciones de archivos y los comandos de shell que modifican archivos aún llegan a su devolución de llamada `canUseTool`. La opción le permite cambiar a `bypassPermissions` más tarde con `setPermissionMode()`.317> [!NOTE]

318>

319> En el SDK de TypeScript, si estableces `allowDangerouslySkipPermissions: true` junto con `permissionMode: 'plan'`, las ediciones de archivos aún llegan a tu devolución de llamada `canUseTool`. Para cambiar más tarde una sesión que comienza en modo plan a `bypassPermissions` con `setPermissionMode()`, necesitas tener `allowDangerouslySkipPermissions` establecido desde el inicio.

291 320 

292Claude puede usar `AskUserQuestion` para aclarar requisitos antes de finalizar el plan. Consulte [Manejar aprobaciones e entrada del usuario](https://code.claude.com/docs/es/agent-sdk/user-input.md#handle-clarifying-questions) para manejar estas solicitudes.321Claude puede usar `AskUserQuestion` para aclarar requisitos antes de finalizar el plan. Consulte [Manejar aprobaciones e entrada del usuario](https://code.claude.com/docs/es/agent-sdk/user-input.md#handle-clarifying-questions) para manejar estas solicitudes.

293 322 

Details

70>70>

71> La ruta debe apuntar al directorio raíz del plugin: el directorio padre de `skills/`, `agents/`, `hooks/`, `commands/`, o `.claude-plugin/`.71> La ruta debe apuntar al directorio raíz del plugin: el directorio padre de `skills/`, `agents/`, `hooks/`, `commands/`, o `.claude-plugin/`.

72 72 

73### Agregar plugins a una sesión en ejecución

74 

75En el SDK de TypeScript, llama a [`reloadPlugins()`](https://code.claude.com/docs/es/agent-sdk/typescript#load-more-plugin-folders-with-addplugins) en el objeto `Query` que devolvió `query()`, e indica el directorio del plugin en la opción `addPlugins` de esa llamada. Cada entrada de `addPlugins` es un objeto `{ type: "local", path }` con una `path` absoluta. Requiere TypeScript Agent SDK v0.3.301 o posterior.

76 

77En este ejemplo, `q` es el objeto `Query` que devolvió `query()`. El ejemplo agrega un directorio de plugin a la sesión en ejecución y, después de que `reloadPlugins()` retorna, imprime la ruta de cada plugin de la sesión:

78 

79```typescript theme={null}

80const result = await q.reloadPlugins({

81 addPlugins: [{ type: "local", path: "/home/user/plugins/another-plugin" }]

82});

83 

84console.log(result.plugins.map((plugin) => plugin.path));

85```

86 

87Si el plugin se cargó, la lista impresa incluye `/home/user/plugins/another-plugin`. Si esa ruta no aparece en la lista, o si `reloadPlugins()` se rechaza, consulta [Cuando `reloadPlugins()` no carga las carpetas de `addPlugins`](https://code.claude.com/docs/es/agent-sdk/typescript#when-reloadplugins-doesnt-load-the-addplugins-folders) para conocer las causas.

88 

73## Verificando la instalación del plugin89## Verificando la instalación del plugin

74 90 

75Cuando los plugins se cargan correctamente, aparecen en el mensaje de inicialización del sistema. Puede verificar que sus plugins estén disponibles:91Cuando los plugins se cargan correctamente, aparecen en el mensaje de inicialización del sistema. Puede verificar que sus plugins estén disponibles:

Details

200| :- | :- | :- | :- |200| :- | :- | :- | :- |

201| `title` | `string` | `undefined` | Título legible por humanos para la herramienta |201| `title` | `string` | `undefined` | Título legible por humanos para la herramienta |

202| `readOnlyHint` | `boolean` | `false` | Si es `true`, la herramienta no modifica su entorno |202| `readOnlyHint` | `boolean` | `false` | Si es `true`, la herramienta no modifica su entorno |

203| `destructiveHint` | `boolean` | `true` | Si es `true`, la herramienta puede realizar actualizaciones destructivas (solo significativo cuando `readOnlyHint` es `false`) |203| `destructiveHint` | `boolean` | `true` | Si es `true`, la herramienta puede realizar actualizaciones destructivas. Establece `destructiveHint: true` explícitamente en cualquier herramienta que marques como [`always_ask`](#mcpservertoolpolicy), o el clasificador del modo automático puede aprobar las llamadas a esa herramienta en lugar de tu callback `canUseTool`. No basta con dejar `destructiveHint` sin establecer, porque Claude Code trata un `destructiveHint` sin establecer como `false` cuando gestiona las llamadas `always_ask`, aunque el valor predeterminado de la especificación MCP es `true` |

204| `idempotentHint` | `boolean` | `false` | Si es `true`, las llamadas repetidas con los mismos argumentos no tienen efecto adicional (solo significativo cuando `readOnlyHint` es `false`) |204| `idempotentHint` | `boolean` | `false` | Si es `true`, las llamadas repetidas con los mismos argumentos no tienen efecto adicional (solo significativo cuando `readOnlyHint` es `false`) |

205| `openWorldHint` | `boolean` | `true` | Si es `true`, la herramienta interactúa con entidades externas (por ejemplo, búsqueda web). Si es `false`, el dominio de la herramienta es cerrado (por ejemplo, una herramienta de memoria) |205| `openWorldHint` | `boolean` | `true` | Si es `true`, la herramienta interactúa con entidades externas (por ejemplo, búsqueda web). Si es `false`, el dominio de la herramienta es cerrado (por ejemplo, una herramienta de memoria) |

206 206 


630 ): Promise<SDKControlReadFileResponse | null>;630 ): Promise<SDKControlReadFileResponse | null>;

631 reloadPlugins(options?: {631 reloadPlugins(options?: {

632 holdOnCacheImpact?: boolean;632 holdOnCacheImpact?: boolean;

633 addPlugins?: SdkPluginConfig[];

633 }): Promise<SDKControlReloadPluginsResponse>;634 }): Promise<SDKControlReloadPluginsResponse>;

634 reloadSkills(): Promise<SDKControlReloadSkillsResponse>;635 reloadSkills(): Promise<SDKControlReloadSkillsResponse>;

635 reloadOutputStyles(): Promise<SDKControlReloadOutputStylesResponse>;636 reloadOutputStyles(): Promise<SDKControlReloadOutputStylesResponse>;


669| `mcpServerStatus()` | Devuelve el estado de los servidores MCP conectados como [`McpServerStatus`](#mcpserverstatus)`[]` |670| `mcpServerStatus()` | Devuelve el estado de los servidores MCP conectados como [`McpServerStatus`](#mcpserverstatus)`[]` |

670| `getContextUsage(opts?)` | Devuelve un [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) que desglosa el uso de la ventana de contexto de la sesión por categoría, skill y herramienta. Con el `detail` predeterminado, incluye los datos que muestra `/context` en una sesión interactiva, calculados con solicitudes a la API de conteo de tokens que no aparecen en el flujo de mensajes; consulta [cómo se gestionan estas solicitudes](#sdkcontrolgetcontextusageresponse). La [opción `detail`](#sdkcontrolgetcontextusageresponse) requiere Agent SDK v0.3.257 o posterior |671| `getContextUsage(opts?)` | Devuelve un [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) que desglosa el uso de la ventana de contexto de la sesión por categoría, skill y herramienta. Con el `detail` predeterminado, incluye los datos que muestra `/context` en una sesión interactiva, calculados con solicitudes a la API de conteo de tokens que no aparecen en el flujo de mensajes; consulta [cómo se gestionan estas solicitudes](#sdkcontrolgetcontextusageresponse). La [opción `detail`](#sdkcontrolgetcontextusageresponse) requiere Agent SDK v0.3.257 o posterior |

671| `readFile(path, options?)` | Lee un archivo del sistema de archivos de la sesión. Claude Code resuelve la ruta respecto a `cwd`; [Qué puede leer `readFile()`](#what-readfile-can-read) enumera los archivos que sirve. Pasa `{ maxBytes }` para cambiar el límite de lectura (1 MB de forma predeterminada, máximo 10 MB) y `{ encoding: 'base64' }` para archivos binarios como imágenes. Se resuelve con un [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse), o con `null` ante una denegación de permiso, un archivo inexistente o un error de transporte. Requiere TypeScript SDK v0.2.121 o posterior |672| `readFile(path, options?)` | Lee un archivo del sistema de archivos de la sesión. Claude Code resuelve la ruta respecto a `cwd`; [Qué puede leer `readFile()`](#what-readfile-can-read) enumera los archivos que sirve. Pasa `{ maxBytes }` para cambiar el límite de lectura (1 MB de forma predeterminada, máximo 10 MB) y `{ encoding: 'base64' }` para archivos binarios como imágenes. Se resuelve con un [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse), o con `null` ante una denegación de permiso, un archivo inexistente o un error de transporte. Requiere TypeScript SDK v0.2.121 o posterior |

672| `reloadPlugins(options?)` | Recarga los plugins desde el disco, para que los plugins que instales o edites durante la sesión lleguen a la sesión en ejecución. Se resuelve con un [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse) que enumera los comandos, subagentes y plugins de la sesión, y el estado de los servidores MCP. Requiere Agent SDK v0.2.85 o posterior. La [opción `holdOnCacheImpact`](#sdkcontrolreloadpluginsresponse) requiere Agent SDK v0.3.268 o posterior |673| `reloadPlugins(options?)` | Vuelve a cargar los plugins desde el disco, para que los plugins que instalas o editas a mitad de sesión lleguen a la sesión en ejecución. Se resuelve con un [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse) que enumera los comandos, subagentes, plugins y el estado de los servidores MCP de la sesión. Requiere Agent SDK v0.2.85 o posterior. La [opción `holdOnCacheImpact`](#sdkcontrolreloadpluginsresponse) requiere Agent SDK v0.3.268 o posterior. La [opción `addPlugins`](#load-more-plugin-folders-with-addplugins) requiere Agent SDK v0.3.301 o posterior |

673| `reloadSkills()` | Recarga los skills desde el disco, para que los skills que agregues o edites durante la sesión estén disponibles en la sesión en ejecución. Se resuelve con un [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) que enumera los skills disponibles después de la recarga. Requiere Agent SDK v0.3.163 o posterior |674| `reloadSkills()` | Recarga los skills desde el disco, para que los skills que agregues o edites durante la sesión estén disponibles en la sesión en ejecución. Se resuelve con un [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) que enumera los skills disponibles después de la recarga. Requiere Agent SDK v0.3.163 o posterior |

674| `reloadOutputStyles()` | Vuelve a leer los [estilos de salida](https://code.claude.com/docs/es/output-styles.md) desde el disco, para que un archivo de estilo que agregues o edites durante la sesión esté disponible en la sesión en ejecución. Se resuelve con un [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) que enumera los nombres de los estilos disponibles después de la recarga. Requiere Agent SDK v0.3.261 o posterior |675| `reloadOutputStyles()` | Vuelve a leer los [estilos de salida](https://code.claude.com/docs/es/output-styles.md) desde el disco, para que un archivo de estilo que agregues o edites durante la sesión esté disponible en la sesión en ejecución. Se resuelve con un [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) que enumera los nombres de los estilos disponibles después de la recarga. Requiere Agent SDK v0.3.261 o posterior |

675| `seedReadState(path, mtime)` | Marca un archivo como ya leído para que un Edit posterior no falle con `File has not been read yet`. Consulta [`seedReadState()`](#seedreadstate). Requiere TypeScript SDK v0.2.83 o posterior |676| `seedReadState(path, mtime)` | Marca un archivo como ya leído para que un Edit posterior no falle con `File has not been read yet`. Consulta [`seedReadState()`](#seedreadstate). Requiere TypeScript SDK v0.2.83 o posterior |


1135 1136 

1136`cache_impact` solo está presente junto con `held: true`. `mcp_servers_added` y `mcp_servers_removed` nombran los servidores MCP de plugins que la recarga registraría o eliminaría, como nombres con alcance `plugin:<plugin>:<server>`. Los nombres los define el autor del plugin, así que valídalos antes de mostrarlos. `lsp_tool_change` indica si aplicar la recarga agregaría o eliminaría la herramienta LSP, o es `null` cuando no haría ninguna de las dos cosas. Las formas `may-` significan que la comprobación no pudo ver por completo el conjunto de plugins pendiente.1137`cache_impact` solo está presente junto con `held: true`. `mcp_servers_added` y `mcp_servers_removed` nombran los servidores MCP de plugins que la recarga registraría o eliminaría, como nombres con alcance `plugin:<plugin>:<server>`. Los nombres los define el autor del plugin, así que valídalos antes de mostrarlos. `lsp_tool_change` indica si aplicar la recarga agregaría o eliminaría la herramienta LSP, o es `null` cuando no haría ninguna de las dos cosas. Las formas `may-` significan que la comprobación no pudo ver por completo el conjunto de plugins pendiente.

1137 1138 

1139#### Cargar más carpetas de plugins con `addPlugins`

1140 

1141Para cargar carpetas de plugins que no estaban en la opción [`plugins`](#options) al inicio, pásalas a `reloadPlugins()` como `addPlugins`, una lista de entradas [`SdkPluginConfig`](#sdkpluginconfig) cuyo `path` es absoluto. Claude Code carga las carpetas nuevas y recarga los plugins existentes de la sesión en una sola pasada. Los servidores MCP de cada plugin añadido también se conectan, a menos que establezcas [`skipMcpDiscovery`](#sdkpluginconfig) en la entrada de esa carpeta. Requiere Agent SDK v0.3.301 o posterior y Claude Code v2.1.301 o posterior.

1142 

1143Este ejemplo añade una carpeta a una consulta en ejecución `q` e imprime la ruta de instalación de cada plugin que la sesión ha cargado cuando la llamada retorna:

1144 

1145```typescript theme={null}

1146const result = await q.reloadPlugins({

1147 addPlugins: [{ type: "local", path: "/opt/my-app/plugins/reports" }]

1148});

1149 

1150console.log(result.plugins.map((plugin) => plugin.path));

1151```

1152 

1153Si la carpeta se cargó, la lista impresa incluye `/opt/my-app/plugins/reports`, y los comandos y subagentes del plugin aparecen en `result.commands` y `result.agents`.

1154 

1155Una carpeta añadida sigue formando parte de la sesión. Cuando vuelves a llamar a `reloadPlugins()`, Claude Code la recarga con los demás plugins, y no tienes que pasarla de nuevo en `addPlugins`.

1156 

1157##### Cuando `reloadPlugins()` no carga las carpetas de `addPlugins`

1158 

1159Si `reloadPlugins()` se rechaza, no se añade ninguna de las carpetas de `addPlugins`, así que pásalas de nuevo en `addPlugins` cuando reintentes. Cuando el rechazo tiene una de las siguientes causas, la sesión conserva los plugins que ya tenía:

1160 

1161* **Un `path` relativo o una entrada mal formada**: el mensaje de error dice `add_plugins must be a list of { type: "local", path } entries with absolute paths`. Claude Code rechaza toda la lista por una sola entrada incorrecta, así que pasa cada entrada como `{ type: "local", path }` con un `path` absoluto

1162* **Un administrador ha activado [`disableSideloadFlags`](https://code.claude.com/docs/es/settings-reference#disablesideloadflags) en tu configuración administrada**: el mensaje dice `reload_plugins add_plugins is disabled by managed settings (disableSideloadFlags)`. Para cargar la carpeta, pide a ese administrador que elimine el ajuste

1163* **No se pudo reconstruir el [sandbox](https://code.claude.com/docs/es/sandboxing.md)**: con el [sandboxing](#sandboxsettings) activado, Claude Code reconstruye la configuración del sandbox para que los comandos de shell ejecutados en el sandbox no puedan escribir en las carpetas que añades. El mensaje dice `the sandbox could not be rebuilt to keep shell commands out of this folder`. Comprueba que tu [configuración del sandbox](#sandboxsettings) siga formando una configuración válida

1164 

1165Si pasas `holdOnCacheImpact` y la llamada se resuelve con [`held: true`](#sdkcontrolreloadpluginsresponse), las carpetas de `addPlugins` no se añaden. Para añadirlas de todos modos, vuelve a llamar a `reloadPlugins()` con la misma lista `addPlugins` y sin `holdOnCacheImpact`.

1166 

1167Cuando la llamada se resuelve sin `held: true` y una carpeta sigue faltando en `result.plugins`, empieza por comprobar estas causas:

1168 

1169* **La carpeta no existe o su plugin no se pudo cargar**: `result.error_count` es `1` o más. Aun así, la carpeta sigue formando parte de la sesión. Después de corregir la carpeta, vuelve a llamar a `reloadPlugins()` para cargarla, esta vez sin incluirla en `addPlugins`

1170* **El ejecutable de Claude Code es anterior a v2.1.301**: un ejecutable anterior a v2.1.301 ignora `addPlugins` y recarga solo los plugins que la sesión ya tenía. Comprueba `claude_code_version` en el [mensaje de inicialización](#sdksystemmessage) y ejecuta un ejecutable en v2.1.301 o posterior

1171 

1138### `SDKControlReloadSkillsResponse`1172### `SDKControlReloadSkillsResponse`

1139 1173 

1140Tipo de retorno de [`reloadSkills()`](#query-object).1174Tipo de retorno de [`reloadSkills()`](#query-object).


1430 1464 

1431#### `McpSdkServerConfigWithInstance`1465#### `McpSdkServerConfigWithInstance`

1432 1466 

1467La configuración de un servidor MCP en proceso, uno que crea [`createSdkMcpServer()`](#createsdkmcpserver) y que se ejecuta dentro del proceso de tu aplicación. Es el objeto que devuelve `createSdkMcpServer()`, más una lista opcional `tools` de entradas [`McpServerToolPolicy`](#mcpservertoolpolicy) que añades tú mismo. Para exigir aprobación para las llamadas a una de las herramientas del servidor, o para denegarlas, añade una entrada que nombre la herramienta.

1468 

1433```typescript theme={null}1469```typescript theme={null}

1434type McpSdkServerConfigWithInstance = {1470type McpSdkServerConfigWithInstance = {

1435 type: "sdk";1471 type: "sdk";

1436 name: string;1472 name: string;

1437 timeout?: number;1473 timeout?: number;

1474 tools?: McpServerToolPolicy[];

1438 instance: McpServer;1475 instance: McpServer;

1439};1476};

1440```1477```

1441 1478 

1479Para establecer una política, propaga el objeto que devuelve `createSdkMcpServer()` en un objeto nuevo dentro de `mcpServers` y añade la lista `tools` a ese objeto nuevo. La opción `tools` del propio `createSdkMcpServer()` es una lista distinta, que contiene las definiciones de herramientas y no acepta entradas de política. La lista de políticas requiere Agent SDK v0.3.301 o posterior, y [`McpServerToolPolicy`](#mcpservertoolpolicy) describe qué hace cada valor de `permission_policy`.

1480 

1481Este ejemplo aprueba de antemano todas las herramientas del servidor `records` con un comodín en `allowedTools`, y luego marca `delete_record` como `always_ask` para que las llamadas a ella vayan a `canUseTool` de todos modos. Con la anotación `destructiveHint: true`, la llamada sigue llegando al callback si la sesión se ejecuta en modo `auto`, donde de lo contrario el [clasificador](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) del modo automático podría aprobarla.

1482 

1483```typescript theme={null}

1484import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";

1485import { z } from "zod";

1486 

1487const deleteRecord = tool(

1488 "delete_record",

1489 "Delete a customer record by ID",

1490 { id: z.string() },

1491 async ({ id }) => ({ content: [{ type: "text", text: `Deleted record ${id}` }] }),

1492 { annotations: { destructiveHint: true } }

1493);

1494 

1495const records = createSdkMcpServer({ name: "records", tools: [deleteRecord] });

1496 

1497for await (const message of query({

1498 prompt: "Delete customer record 42",

1499 options: {

1500 mcpServers: {

1501 // Spread the returned config and add the policy list beside it

1502 records: {

1503 ...records,

1504 tools: [{ name: "delete_record", permission_policy: "always_ask" as const }]

1505 }

1506 },

1507 allowedTools: ["mcp__records__*"],

1508 canUseTool: async (toolName, input) => {

1509 console.log(`Approval requested for ${toolName}`);

1510 return { behavior: "allow", updatedInput: input };

1511 }

1512 }

1513})) {

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

1515 console.log(message.result);

1516 }

1517}

1518```

1519 

1520Cuando Claude llama a la herramienta, el script imprime `Approval requested for mcp__records__delete_record` antes de que se ejecute la herramienta `delete_record`, aunque la entrada de `allowedTools` habría aprobado la llamada en otro caso.

1521 

1522Para cambiar o levantar la política de una herramienta mientras la sesión se ejecuta, pasa la configuración del servidor con un nuevo valor de `tools` a [`setMcpServers()`](#mcpsetserversresult). El valor de `tools` que pases surte efecto a partir de la siguiente llamada de Claude a las herramientas de ese servidor:

1523 

1524* **Una lista con entradas**: las entradas reemplazan las políticas actuales

1525* **Una lista vacía**: se borran todas las políticas del servidor

1526* **Sin clave `tools`**: las políticas actuales se mantienen

1527 

1528Incluye en esa llamada tus demás servidores en proceso y cualquier servidor que haya añadido una llamada anterior a `setMcpServers()`, o la llamada los desconectará.

1529 

1530#### `McpServerToolPolicy`

1531 

1532Una entrada de la lista `tools` de un [`McpSdkServerConfigWithInstance`](#mcpsdkserverconfigwithinstance), que nombra una de las herramientas del servidor y establece la política de permisos para las llamadas a esa herramienta. La lista requiere Agent SDK v0.3.301 o posterior y Claude Code v2.1.301 o posterior. Un ejecutable de Claude Code más antiguo, como un ejecutable al que apuntes con `pathToClaudeCodeExecutable`, ignora la lista. En ese caso, `always_ask` y `always_deny` no se aplican, y cada llamada pasa por el [flujo de permisos](https://code.claude.com/docs/es/agent-sdk/permissions.md#how-permissions-are-evaluated).

1533 

1534```typescript theme={null}

1535type McpServerToolPolicy = {

1536 name: string;

1537 permission_policy?: "always_allow" | "always_ask" | "always_deny";

1538 org_max_permission?: "allow" | "ask" | "blocked";

1539};

1540```

1541 

1542| Campo | Tipo | Descripción |

1543| :- | :- | :- |

1544| `name` | `string` | El nombre simple de la herramienta tal como se pasa a [`tool()`](#tool), sin el prefijo `mcp__<server>__` |

1545| `permission_policy` | `'always_allow' \| 'always_ask' \| 'always_deny'` | La política de aprobación para las llamadas a la herramienta, [`always_ask` o `always_deny`](#permission-policy-values). `always_allow` se ignora en un servidor en proceso: para aprobar de antemano una herramienta, inclúyela en [`allowedTools`](#options) en su lugar |

1546| `org_max_permission` | `'allow' \| 'ask' \| 'blocked'` | Un límite por herramienta que establece un administrador de la organización. Se ignora en un servidor en proceso, así que déjalo sin establecer |

1547 

1548##### Valores de `permission_policy`

1549 

1550Elige `always_ask` para aprobar cada llamada tú mismo, o `always_deny` para bloquear la herramienta por completo:

1551 

1552* **`always_ask`**: cada llamada a la herramienta [necesita aprobación](https://code.claude.com/docs/es/agent-sdk/permissions.md#how-permissions-are-evaluated), incluso si una entrada de `allowedTools` o una regla de permiso la cubre. La llamada va a tu callback `canUseTool` o a tu herramienta [`permissionPromptToolName`](#options), a menos que se resuelva antes. Un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) de un plugin que cargues [puede aprobarla antes](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods). De lo contrario, en el modo `dontAsk` se deniega, y en los [modos `auto`, `plan` y `bypassPermissions`](#permission-modes-that-can-approve-an-always_ask-call) puede aprobarse antes de llegar a tu callback

1553* **`always_deny`**: una llamada a la herramienta [se deniega](https://code.claude.com/docs/es/agent-sdk/permissions.md#how-permissions-are-evaluated) en todos los modos de permisos, incluido `bypassPermissions`, pero un mod de un plugin que cargues [aún puede aprobarla](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods)

1554 

1555Si no pasas ni `canUseTool` ni `permissionPromptToolName`, o estableces [`permissionPrompts`](#options) en `'none'`, una llamada `always_ask` que no se resuelva antes se deniega a menos que un [hook `PermissionRequest`](https://code.claude.com/docs/es/hooks#permissionrequest) la permita.

1556 

1557##### Modos de permisos que pueden aprobar una llamada `always_ask`

1558 

1559En los modos `auto`, `plan` y `bypassPermissions`, una llamada a una herramienta marcada como [`always_ask`](#permission-policy-values) puede aprobarse antes de llegar a tu callback `canUseTool`. Busca el modo de tu sesión en esta lista para ver cuándo ocurre esa aprobación y qué establecer para que la llamada llegue a tu callback de todos modos:

1560 

1561* **`auto`**: el [clasificador](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) del modo automático revisa la llamada y puede permitirla. Para que todas las llamadas lleguen a tu callback en modo `auto`, establece `destructiveHint: true` en las [anotaciones](#toolannotations) de la herramienta

1562* **`plan`**: mientras el [modo automático esté disponible](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) para la sesión, las llamadas a una herramienta `always_ask` anotada con `readOnlyHint: true` van al clasificador del modo automático, que puede permitirlas. Las llamadas a otras herramientas `always_ask` llegan a tu callback. Para que las llamadas de una herramienta de solo lectura también lleguen a tu callback, añade `destructiveHint: true` a las anotaciones de esa herramienta junto con `readOnlyHint: true`. Como alternativa, establece [`useAutoModeDuringPlan`](https://code.claude.com/docs/es/settings-reference#useautomodeduringplan) en `false`, lo que desactiva el clasificador durante la planificación

1563* **`bypassPermissions`**: cuando la variable de entorno [`CLAUDE_CODE_REMOTE`](https://code.claude.com/docs/es/env-vars#variables) es `true`, como ocurre en una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), la llamada se aprueba sin tu callback, sean cuales sean las anotaciones de la herramienta. En cualquier otro lugar, la llamada llega a tu callback. Para que llegue a tu callback también en una sesión en la nube, ejecuta la sesión en modo `default` o `acceptEdits` en su lugar

1564 

1565Establece `destructiveHint` en `true` explícitamente en los modos `auto` y `plan`. Para las llamadas `always_ask`, Claude Code interpreta un `destructiveHint` sin establecer como `false`, aunque el valor predeterminado indicado en [`ToolAnnotations`](#toolannotations) es `true`.

1566 

1442#### `McpClaudeAIProxyServerConfig`1567#### `McpClaudeAIProxyServerConfig`

1443 1568 

1444```typescript theme={null}1569```typescript theme={null}


1464| Campo | Tipo | Descripción |1589| Campo | Tipo | Descripción |

1465| :- | :- | :- |1590| :- | :- | :- |

1466| `type` | `'local'` | Debe ser `'local'` (actualmente solo se admiten plugins locales) |1591| `type` | `'local'` | Debe ser `'local'` (actualmente solo se admiten plugins locales) |

1467| `path` | `string` | Ruta absoluta o relativa al directorio del plugin |1592| `path` | `string` | Ruta al directorio del plugin. Una ruta relativa se resuelve respecto de la opción [`cwd`](#options) cuando se inicia la sesión. La ruta debe ser absoluta cuando cargas el plugin a mitad de la sesión con [`addPlugins`](#load-more-plugin-folders-with-addplugins) |

1468| `skipMcpDiscovery` | `boolean` | Cuando es `true`, el SDK carga los skills, hooks, agentes y comandos de este plugin, pero no lee su `.mcp.json` ni los `mcpServers` del manifiesto. Establécelo cuando tu aplicación gestione las conexiones MCP del plugin. |1593| `skipMcpDiscovery` | `boolean` | Cuando es `true`, el SDK carga los skills, hooks, agentes y comandos de este plugin, pero no lee su `.mcp.json` ni los `mcpServers` del manifiesto. Establécelo cuando tu aplicación gestione las conexiones MCP del plugin. |

1469 1594 

1470**Ejemplo:**1595**Ejemplo:**


5073};5198};

5074```5199```

5075 5200 

5076`source` indica de dónde provino la definición del servidor, con los mismos valores y regla de confianza que el `source` de [`McpServerProvenance`](#mcpserverprovenance). El campo requiere Agent SDK v0.3.274 o posterior y está ausente en versiones anteriores.5201Usa `source` para decidir cuánto confiar en un servidor, y el `_meta` de cada entrada de `tools` para encontrar un recurso de UI que el servidor adjuntó a esa herramienta:

5202 

5203* **`source`**: de dónde provino la definición del servidor, con los mismos valores que `source` en [`McpServerProvenance`](#mcpserverprovenance). Basa las decisiones de confianza en `source` en lugar de en `name`, porque solo tu propio servidor en proceso reporta `sdk`, sea cual sea el nombre bajo el que esté registrado cualquier otro servidor. Si no reconoces un valor de `source`, trata ese servidor como tratas cualquier servidor cuyo `source` no sea `sdk`. Requiere Agent SDK v0.3.274 o posterior

5204* **`_meta`**: el objeto `ui` y la cadena `ui/resourceUri` del `_meta` que el servidor declaró para la herramienta. Claude Code retiene todas las demás claves de `_meta`. `ui/resourceUri` es una grafía de nivel superior más antigua de `ui.resourceUri`. Cuando el servidor adjunta un [recurso de UI de MCP Apps](https://code.claude.com/docs/es/mcp.md#reference-mcp-resources) a la herramienta, `ui.resourceUri` o `ui/resourceUri` contiene el URI `ui://` del recurso. Obtén ese URI con [`readMcpResource()`](#query-object) y renderiza el recurso en tu aplicación. Requiere Agent SDK v0.3.280 o posterior

5205 

5206Claude Code envía `_meta` solo cuando el array [`capabilities`](#sdksystemmessage) del mensaje `system` con subtipo `init` incluye `mcp_tool_ui_meta_v1`. No tienes que activar `mcp_tool_ui_meta_v1` tú mismo.

5207 

5208#### Cuando el `_meta.ui` de una herramienta contiene solo `visibility`

5209 

5210Si tu servidor declara `ui.resourceUri` para una herramienta pero el `_meta.ui` que recibe tu aplicación contiene solo `visibility`, el objeto `ui` que envió el servidor no superó una de las comprobaciones de Claude Code. Claude Code comprueba `ui` y `ui/resourceUri` por separado, así que una clave puede llegar a tu aplicación cuando la otra falla. Compara el `_meta` de la respuesta `tools/list` de tu servidor con las comprobaciones de cada clave:

5211 

5212* **`ui`**: llega a tu aplicación sin cambios, incluidos los miembros distintos de `resourceUri` y `visibility`, si se superan las tres comprobaciones:

5213 

5214 * `resourceUri` está ausente, o es una cadena que comienza con `ui://`

5215 * `visibility` está ausente, o enumera solo `"model"` y `"app"`

5216 * El objeto completo tiene como máximo 4,096 caracteres al serializarse como JSON

5217 

5218 Si alguna de las comprobaciones falla, tu aplicación recibe como mucho un `ui` cuyo único miembro es un array `visibility` con las entradas `"model"` y `"app"` que enumeró el servidor.

5219* **`ui/resourceUri`**: llega a tu aplicación si es una cadena que comienza con `ui://` y tiene como máximo 4,096 caracteres. De lo contrario, Claude Code la descarta

5077 5220 

5078`_meta` en una entrada de `tools` lleva los miembros de MCP Apps del `_meta` de esa herramienta, para que tu aplicación pueda encontrar el recurso `ui://` que debe renderizar con [`readMcpResource()`](#query-object). Claude Code transmite el objeto `ui` y la cadena plana obsoleta `ui/resourceUri`, y retiene todas las demás claves. Dentro de `ui`, `resourceUri` es una cadena `ui://` y `visibility` un array de `"model"` y `"app"` cuando el servidor los establece, y cualquier otro miembro pasa sin cambios. Claude Code descarta cualquiera de las dos claves cuando el valor está mal formado, y omite `_meta` de una herramienta que no declara ninguna. El campo está presente solo cuando las [`capabilities`](#sdksystemmessage) del mensaje de inicialización incluyen `mcp_tool_ui_meta_v1`, y requiere TypeScript Agent SDK v0.3.280 o posterior.5221Cuando a Claude Code no le queda ningún miembro `ui` ni ninguna cadena `ui/resourceUri` que enviar, la entrada de `tools` no tiene `_meta` en absoluto.

5079 5222 

5080### `McpServerStatusConfig`5223### `McpServerStatusConfig`

5081 5224 


5310Cuando llamas a `setMcpServers()`, Claude Code aplica estas reglas:5453Cuando llamas a `setMcpServers()`, Claude Code aplica estas reglas:

5311 5454 

5312* **Servidores que la llamada no nombra**: fuera de una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), Claude Code desconecta los servidores que agregó una llamada anterior a `setMcpServers()` y los servidores SDK en proceso, y los enumera en `removed`. Los demás servidores siguen en ejecución y no se enumeran en `removed`, entre ellos los servidores stdio, HTTP y SSE de la opción [`mcpServers`](#options), los servidores de los archivos de configuración y los servidores proporcionados por plugins.5455* **Servidores que la llamada no nombra**: fuera de una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), Claude Code desconecta los servidores que agregó una llamada anterior a `setMcpServers()` y los servidores SDK en proceso, y los enumera en `removed`. Los demás servidores siguen en ejecución y no se enumeran en `removed`, entre ellos los servidores stdio, HTTP y SSE de la opción [`mcpServers`](#options), los servidores de los archivos de configuración y los servidores proporcionados por plugins.

5313* **Servidores que la llamada nombra**: Claude Code reemplaza un servidor stdio, HTTP o SSE que agregó una llamada anterior a `setMcpServers()` solo cuando su configuración difiere de la que pasaste. Un servidor SDK en proceso ya registrado con ese nombre se queda como está, así que para cambiarlo, déjalo fuera de una llamada y agrégalo en la siguiente.5456* **Servidores stdio, HTTP y SSE que agregó una llamada anterior a `setMcpServers()`**: fuera de una sesión en la nube, un servidor que vuelves a nombrar con una configuración idéntica conserva su conexión y sus herramientas. No aparece ni en `added` ni en `removed`. Si pasas una configuración modificada, Claude Code vuelve a conectar el servidor usando esa configuración y lo enumera en `added`, no en `removed`.

5457* **Servidores stdio, HTTP y SSE que la llamada nombra y que ninguna llamada anterior agregó**: fuera de una sesión en la nube, Claude Code agrega el servidor y lo enumera en `added`, o en `errors` si rechaza el servidor.

5458* **Servidores SDK en proceso que la llamada nombra**: un servidor ya registrado mediante `mcpServers` o una llamada anterior conserva su instancia en ejecución y su tiempo de espera. Si pasas una [lista de políticas `tools`](#mcpsdkserverconfigwithinstance) para él, incluso una vacía, reemplazas sus políticas; de lo contrario, se mantienen. Para ejecutar una nueva instancia fuera de una sesión en la nube, omite el servidor en una llamada y nómbralo en la siguiente.

5314* **Servidores integrados que la CLI inició al arrancar**: si la llamada nombra uno, Claude Code descarta esa entrada y la reporta en `errors`.5459* **Servidores integrados que la CLI inició al arrancar**: si la llamada nombra uno, Claude Code descarta esa entrada y la reporta en `errors`.

5315* **Servidores stdio, HTTP o SSE que comparten nombre con uno de un alcance de instalación de MCP como `.mcp.json`**: con ese nombre, la sesión usa las herramientas de tu servidor en lugar de las del [servidor del alcance de instalación](https://code.claude.com/docs/es/mcp.md#mcp-installation-scopes). Antes de Claude Code v2.1.305, Claude Code podía desconectar tu servidor y conectar el servidor del alcance de instalación cuando tu aplicación [recargaba plugins](#query-object).5460* **Servidores stdio, HTTP o SSE que comparten nombre con uno de un alcance de instalación de MCP como `.mcp.json`**: con ese nombre, la sesión usa las herramientas de tu servidor en lugar de las del [servidor del alcance de instalación](https://code.claude.com/docs/es/mcp.md#mcp-installation-scopes). Antes de Claude Code v2.1.305, Claude Code podía desconectar tu servidor y conectar el servidor del alcance de instalación cuando tu aplicación [recargaba plugins](#query-object).

5316 5461 


5797 5942 

5798Las definiciones de tipos publicadas del SDK declaran `SDKConversationResetMessage` en Claude Code v2.1.203 y posterior. Antes de v2.1.203, `SDKMessage` hacía referencia al tipo sin declararlo, por lo que el estrechamiento con `type === "conversation_reset"` no pasaba la verificación de tipos cuando `skipLibCheck` estaba deshabilitado.5943Las definiciones de tipos publicadas del SDK declaran `SDKConversationResetMessage` en Claude Code v2.1.203 y posterior. Antes de v2.1.203, `SDKMessage` hacía referencia al tipo sin declararlo, por lo que el estrechamiento con `type === "conversation_reset"` no pasaba la verificación de tipos cuando `skipLibCheck` estaba deshabilitado.

5799 5944 

5945### `BUILTIN_TOOL_NAMES` y `LEGACY_TOOL_NAME_ALIASES`

5946 

5947Usa estas dos constantes para comprobar los nombres de herramientas que introducen los usuarios de tu aplicación. Ambas escriben cada nombre tal como lo escribes en las reglas de permisos, los matchers de hooks y las opciones `tools` y `disallowedTools`. Impórtalas desde `@anthropic-ai/claude-agent-sdk` o desde `@anthropic-ai/claude-agent-sdk/core`. Requieren Agent SDK v0.3.301 o posterior y están en fase alfa.

5948 

5949Las declaraciones de tipos del SDK dan a `BUILTIN_TOOL_NAMES` un tipo de tupla de solo lectura y a `LEGACY_TOOL_NAME_ALIASES` un tipo de registro de cadena a cadena:

5950 

5951```typescript theme={null}

5952const BUILTIN_TOOL_NAMES: readonly ["Agent", /* ...más nombres... */ "Write"];

5953const LEGACY_TOOL_NAME_ALIASES: Readonly<Record<string, string>>;

5954```

5955 

5956* **`BUILTIN_TOOL_NAMES`**: nombres de las herramientas integradas de Claude Code en orden alfabético, como `Agent`, `Bash` y `Read`. Los nombres de herramientas MCP no se incluyen. Como el tipo es una tupla de literales de cadena, `(typeof BUILTIN_TOOL_NAMES)[number]` te da un tipo unión de los nombres

5957* **`LEGACY_TOOL_NAME_ALIASES`**: nombres de herramientas anteriores que las reglas de permisos, los matchers de hooks y las opciones `tools` y `disallowedTools` todavía aceptan. Cada clave es un nombre anterior y su valor es el actual: por ejemplo, `Task` se asigna a `Agent`, y `KillShell` y `KillBash` se asignan a `TaskStop`

5958 

5959Puedes confirmar un nombre con cualquiera de dos pruebas: `BUILTIN_TOOL_NAMES` lo incluye, u `Object.hasOwn(LEGACY_TOOL_NAME_ALIASES, name)` devuelve `true`. Un nombre que no supera ninguna de las dos puede seguir siendo válido, porque `BUILTIN_TOOL_NAMES` deja fuera las herramientas MCP y algunas herramientas integradas. Si creas una lista de denegación a partir de `BUILTIN_TOOL_NAMES`, Claude todavía puede usar las herramientas que la constante deja fuera. Para denegar todas las herramientas, establece [`disallowedTools: ["*"]`](https://code.claude.com/docs/es/agent-sdk/permissions#allow-and-deny-rules) en su lugar.

5960 

5961Encontrar un nombre en `BUILTIN_TOOL_NAMES` no te indica que la sesión tenga esa herramienta: `TodoWrite` aparece en la lista aunque está [deshabilitada de forma predeterminada](https://code.claude.com/docs/es/tools-reference.md). Para ver qué herramientas tiene una sesión, lee el array `tools` de su [`SDKSystemMessage`](#sdksystemmessage). Ese array incluye herramientas MCP y enumera la herramienta Agent como `Task`, así que pasa cada nombre por `LEGACY_TOOL_NAME_ALIASES` antes de compararlo con `BUILTIN_TOOL_NAMES`.

5962 

5800### `AbortError`5963### `AbortError`

5801 5964 

5802Clase de error personalizada para operaciones de aborto.5965Clase de error personalizada para operaciones de aborto.

agent-teams.md +1 −1

Details

189 189 

190### Asignar y reclamar tareas190### Asignar y reclamar tareas

191 191 

192La lista de tareas compartida coordina el trabajo en todo el equipo. El líder crea tareas y los compañeros de equipo las trabajan. Las tareas tienen tres estados: pendiente, en progreso y completada. Las tareas también pueden depender de otras tareas: una tarea pendiente con dependencias sin resolver no puede ser reclamada hasta que esas dependencias se completen.192La lista de tareas compartida coordina el trabajo en todo el equipo. El líder crea tareas y los compañeros de equipo las van completando. Las tareas tienen tres estados: pendiente, en progreso y completada. Una tarea también puede depender de otras tareas y aparece como bloqueada en la lista de tareas hasta que estas se completen. Los compañeros de equipo no reclaman por su cuenta una tarea bloqueada, pero tú o el líder aún pueden asignarla.

193 193 

194Los agentes [sin las herramientas Task](https://code.claude.com/docs/es/tools-reference.md#task-tool-availability) coordinan a través de mensajes en su lugar de la lista de tareas compartida.194Los agentes [sin las herramientas Task](https://code.claude.com/docs/es/tools-reference.md#task-tool-availability) coordinan a través de mensajes en su lugar de la lista de tareas compartida.

195 195 

agent-view.md +18 −9

Details

206* Una sesión finalizada: su resultado206* Una sesión finalizada: su resultado

207* Una sesión en curso: su oración de estado completa207* Una sesión en curso: su oración de estado completa

208 208 

209A continuación se enumeran los pull requests vinculados a la sesión. Para una sesión que te está esperando, una línea como `waiting 3m` debajo de ellos muestra cuánto tiempo lleva esperando, y es el único tiempo que se muestra en el panel. La antigüedad en el borde derecho de la fila es un número diferente: cuenta desde que se inició la sesión.209A continuación se enumeran los pull requests vinculados a la sesión. Debajo de ellos aparece una línea más para una sesión que te está esperando o que se ejecuta en modo seguro:

210 

211* Una línea como `waiting 3m`: cuánto tiempo lleva la sesión esperándote. La antigüedad en el borde derecho de la fila es un número diferente: cuenta desde que se inició la sesión

212* `safe mode · customizations are off`: esta sesión se ejecuta con [tus personalizaciones desactivadas](https://code.claude.com/docs/es/debug-your-config.md#test-against-a-clean-configuration) porque la iniciaste desde tu shell con `claude --bg --safe-mode`. Puedes dejarla como está. Para continuar la conversación con tus personalizaciones activadas de nuevo, ejecuta [`claude stop <id>`](#manage-sessions-from-the-shell) y luego [`claude --resume`](https://code.claude.com/docs/es/sessions#resume-a-session), ambos en tu shell

210 213 

211La mayoría de las veces el panel de vista previa es suficiente y no necesitas abrir la transcripción completa.214La mayoría de las veces el panel de vista previa es suficiente y no necesitas abrir la transcripción completa.

212 215 


468 471 

469#### Qué se conserva al enviar al segundo plano472#### Qué se conserva al enviar al segundo plano

470 473 

471Enviar al segundo plano inicia un proceso nuevo que se reanuda desde la conversación guardada, y el trabajo en segundo plano en curso pasa a él. Los comandos de shell en segundo plano en ejecución, los subagentes en segundo plano, los flujos de trabajo dinámicos, las tareas programadas que creaste con [`/loop`](https://code.claude.com/docs/es/scheduled-tasks) y las [respuestas automáticas de Claude a comentarios de artefactos](https://code.claude.com/docs/es/artifacts.md#let-claude-reply-to-comments-on-its-own) se conservan y siguen ejecutándose allí. Un subagente se mueve junto con todo lo que inició, por lo que solo se conserva cuando todo ese trabajo también puede moverse.474Cuando envías la sesión al segundo plano, cada tipo de trabajo en segundo plano en curso se conserva en la sesión en segundo plano, continúa solo cuando Claude lo vuelve a iniciar allí, o se detiene:

472 

473Cuando un [flujo de trabajo dinámico](https://code.claude.com/docs/es/workflows.md) aún tiene subagentes en ejecución, Claude Code pregunta antes de enviar al segundo plano con el diálogo `Background this session?`, que indica cuántos subagentes se reiniciarían. Elige `Stay` para dejar que terminen primero. Si confirmas, Claude Code reproduce la ejecución en la sesión en segundo plano: los subagentes que aún se estaban ejecutando comienzan de nuevo desde el principio, por lo que los tokens que usaron hasta ese momento se gastan otra vez. Consulta [Reanudar después de una pausa](https://code.claude.com/docs/es/workflows.md#resume-after-a-pause) para ver qué subagentes completados devuelven sus resultados guardados y cuáles se ejecutan de nuevo.

474 475 

475Claude Code detiene el trabajo en segundo plano que no se puede conservar, como un [monitor](https://code.claude.com/docs/es/tools-reference.md#monitor-tool) en ejecución, y detiene también un subagente en segundo plano que posee un monitor. Cuando hay trabajo de este tipo en ejecución, Claude Code muestra el diálogo `Background this session?` para que puedas confirmar antes de que detenga el trabajo.476* **Se conserva**: los comandos de shell en segundo plano en ejecución, los subagentes en segundo plano, las tareas programadas que creaste con [`/loop`](https://code.claude.com/docs/es/scheduled-tasks) y las [respuestas automáticas de Claude a comentarios de artefactos](https://code.claude.com/docs/es/artifacts.md#let-claude-reply-to-comments-on-its-own) siguen ejecutándose en la sesión en segundo plano. Un subagente se mueve junto con todo lo que inició, por lo que solo se conserva cuando todo ese trabajo también puede moverse.

477* **Continúa solo cuando Claude lo vuelve a iniciar**: un [flujo de trabajo dinámico](https://code.claude.com/docs/es/workflows.md) en ejecución. Si el flujo de trabajo no ha continuado cuando revisas la sesión en segundo plano, [pídele a Claude que lo vuelva a iniciar](#dynamic-workflows-when-you-background).

478* **Se detiene**: el trabajo que no se puede mover a la sesión en segundo plano, como un [monitor](https://code.claude.com/docs/es/tools-reference.md#monitor-tool) en ejecución. Cuando hay trabajo de este tipo en ejecución, Claude Code muestra el diálogo `Background this session?` para que puedas confirmar antes de que detenga el trabajo. Un subagente en segundo plano que posee un monitor se detiene junto con el monitor.

476 479 

477Una vez en segundo plano, la sesión puede iniciar nuevos subagentes, monitores y comandos en segundo plano, y estos siguen ejecutándose tras desasociaciones y nuevas conexiones posteriores.480Una vez en segundo plano, la sesión puede iniciar nuevos subagentes, monitores y comandos en segundo plano, y estos siguen ejecutándose tras desasociaciones y nuevas conexiones posteriores.

478 481 


488 491 

489Los directorios que agregaste durante la sesión con [`/add-dir`](https://code.claude.com/docs/es/permissions#additional-directories-grant-file-access-not-configuration) también se conservan. Conservar `--allow-dangerously-skip-permissions` mantiene `bypassPermissions` disponible en la sesión en segundo plano, pero no otorga nada nuevo: el modo sigue requiriendo que conste tu [aceptación del descargo de responsabilidad de omisión](https://code.claude.com/docs/es/permission-modes.md#skip-all-checks-with-bypasspermissions-mode).492Los directorios que agregaste durante la sesión con [`/add-dir`](https://code.claude.com/docs/es/permissions#additional-directories-grant-file-access-not-configuration) también se conservan. Conservar `--allow-dangerously-skip-permissions` mantiene `bypassPermissions` disponible en la sesión en segundo plano, pero no otorga nada nuevo: el modo sigue requiriendo que conste tu [aceptación del descargo de responsabilidad de omisión](https://code.claude.com/docs/es/permission-modes.md#skip-all-checks-with-bypasspermissions-mode).

490 493 

494##### Flujos de trabajo dinámicos al enviar al segundo plano

495 

496Si un [flujo de trabajo dinámico](https://code.claude.com/docs/es/workflows.md) no ha continuado después de que enviaste su sesión al segundo plano, pídele a Claude que [vuelva a iniciar el flujo de trabajo](https://code.claude.com/docs/es/workflows.md#resume-after-you-leave-the-session). La ejecución continúa solo cuando Claude la vuelve a iniciar en la sesión en segundo plano, y Claude Code puede pedirte primero que apruebes ese reinicio. La conversación de la sesión muestra un aviso de que el flujo de trabajo `could not be resumed`.

497 

498Cuando Claude vuelve a iniciar el flujo de trabajo, cualquiera de sus subagentes que aún se estaba ejecutando cuando enviaste la sesión al segundo plano comienza de nuevo y vuelve a gastar sus tokens. Si presionas `←` o ejecutas `/background` mientras alguno aún se está ejecutando, el diálogo `Background this session?` indica cuántos. Para dejar que terminen primero, elige `Stay`.

499 

491### Enviar un agente desde tu shell500### Enviar un agente desde tu shell

492 501 

493Pasa `--bg` o su forma larga `--background` para iniciar una sesión que va directamente al segundo plano:502Pasa `--bg` o su forma larga `--background` para iniciar una sesión que va directamente al segundo plano:


844* **Después de una actualización automática**: el supervisor se reinicia en la nueva versión y mueve las sesiones inactivas en segundo plano. Las sesiones que están funcionando, esperando tu respuesta o conectadas no se interrumpen.853* **Después de una actualización automática**: el supervisor se reinicia en la nueva versión y mueve las sesiones inactivas en segundo plano. Las sesiones que están funcionando, esperando tu respuesta o conectadas no se interrumpen.

845* **El propio supervisor se detiene**, por ejemplo porque su proceso se finalizó desde fuera de Claude Code: en macOS y Linux, tus sesiones se detienen a menos que un nuevo supervisor se conecte en aproximadamente un minuto. Para iniciar uno, ejecuta `claude agents` en tu shell. Pasado ese minuto, consulta [Mantener las sesiones en ejecución después de que el supervisor se detiene](#keep-sessions-running-after-the-supervisor-stops).854* **El propio supervisor se detiene**, por ejemplo porque su proceso se finalizó desde fuera de Claude Code: en macOS y Linux, tus sesiones se detienen a menos que un nuevo supervisor se conecte en aproximadamente un minuto. Para iniciar uno, ejecuta `claude agents` en tu shell. Pasado ese minuto, consulta [Mantener las sesiones en ejecución después de que el supervisor se detiene](#keep-sessions-running-after-the-supervisor-stops).

846 855 

847Cuando el proceso de una sesión se detiene o se reinicia, los comandos de shell en segundo plano, los flujos de trabajo dinámicos y los subagentes en segundo plano que Claude inició en ella se transfieren al siguiente proceso; los monitores en ejecución y los comandos de shell que un subagente inició se detienen con el proceso. Eliminar la sesión detiene todo lo que se transfirió. Para detener todo con el proceso en lugar de transferirlo, establece [`CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF`](https://code.claude.com/docs/es/env-vars#variables) en `1`.856Cuando el proceso de una sesión se detiene o se reinicia, los comandos de shell en segundo plano y los subagentes en segundo plano que Claude inició en ella se transfieren a su siguiente proceso. Un flujo de trabajo dinámico [continúa solo cuando Claude lo vuelve a lanzar](#dynamic-workflows-when-you-background). Los monitores en ejecución y los comandos de shell que un subagente inició se detienen con el proceso. Si eliminas la sesión, todo lo que se transfirió se detiene. Para detener todo eso con el proceso en lugar de transferirlo, establece [`CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF`](https://code.claude.com/docs/es/env-vars#variables) en `1`.

848 857 

849El supervisor y sus sesiones se autentican con las mismas credenciales almacenadas que tus sesiones interactivas. Para saber qué ajustes y variables de shell llegan a una sesión, incluido `PATH`, consulta [Configuración y proveedor](#settings-and-provider). Para endpoints de gateway, consulta [Gateway LLM](#llm-gateway).858El supervisor y sus sesiones se autentican con las mismas credenciales almacenadas que tus sesiones interactivas. Para saber qué ajustes y variables de shell llegan a una sesión, incluido `PATH`, consulta [Configuración y proveedor](#settings-and-provider). Para endpoints de gateway, consulta [Gateway LLM](#llm-gateway).

850 859 


897 906 

898### Enviar al segundo plano muestra un diálogo `Background this session?`907### Enviar al segundo plano muestra un diálogo `Background this session?`

899 908 

900Si presionas `←` para enviar al segundo plano la sesión actual y Claude Code muestra un diálogo `Background this session?`, la sesión tiene trabajo en segundo plano en curso que enviarla al segundo plano detendría, reiniciaría o dejaría ejecutándose sin supervisión, y Claude Code pregunta antes de hacer cualquiera de esas cosas:909Cuando presionas `←` para enviar una sesión al segundo plano, un diálogo `Background this session?` significa que la sesión tiene trabajo en segundo plano en curso que se detendría, se interrumpiría o seguiría ejecutándose sin supervisión:

901 910 

902* **Trabajo que no se puede mover**: la sesión tiene trabajo que no se puede mover a la sesión en segundo plano, como un [monitor](https://code.claude.com/docs/es/tools-reference.md#monitor-tool) en ejecución. El diálogo nombra el trabajo en segundo plano que Claude Code detendría y, por separado, cuenta las tareas que se trasladan.911* **Trabajo que no se puede mover**: la sesión tiene trabajo que no se puede mover a la sesión en segundo plano, como un [monitor](https://code.claude.com/docs/es/tools-reference.md#monitor-tool) en ejecución. El diálogo nombra el trabajo en segundo plano que Claude Code detendría y, por separado, cuenta las tareas que se trasladan.

903* **Un flujo de trabajo con subagentes en ejecución**: un [flujo de trabajo dinámico](https://code.claude.com/docs/es/workflows.md) aún tiene subagentes en ejecución. El flujo de trabajo en sí se traslada, pero sus subagentes en ejecución se reinician desde el principio, y el diálogo dice cuántos.912* **Un flujo de trabajo con subagentes en ejecución**: un [flujo de trabajo dinámico](https://code.claude.com/docs/es/workflows.md) aún tiene subagentes en ejecución. Esos subagentes se detienen si lo envías al segundo plano de todas formas, y el diálogo dice cuántos. Empiezan de nuevo desde el principio cuando Claude [vuelve a lanzar el flujo de trabajo en la sesión en segundo plano](#dynamic-workflows-when-you-background).

904* **Respuestas automáticas de artefactos**: Claude está [respondiendo a comentarios en un artefacto por su cuenta](https://code.claude.com/docs/es/artifacts.md#let-claude-reply-to-comments-on-its-own). Esas respuestas continúan en la sesión en segundo plano, y el diálogo lo indica.913* **Respuestas automáticas de artefactos**: Claude está [respondiendo a comentarios en un artefacto por su cuenta](https://code.claude.com/docs/es/artifacts.md#let-claude-reply-to-comments-on-its-own). Esas respuestas continúan en la sesión en segundo plano, y el diálogo lo indica.

905 914 

906Ejecuta `/tasks` para ver todo lo que se está ejecutando, luego confirma para enviar al segundo plano de todas formas o elige `Stay` para dejar que el trabajo termine primero. Consulta [Qué se traslada cuando envías al segundo plano](#what-carries-over-when-you-background) para saber qué tipos de trabajo se trasladan y cuáles detiene Claude Code.915Ejecuta `/tasks` para ver todo lo que se está ejecutando, luego confirma para enviar al segundo plano de todas formas o elige `Stay` para dejar que el trabajo termine primero. Consulta [Qué se traslada cuando envías al segundo plano](#what-carries-over-when-you-background) para saber qué tipos de trabajo se trasladan y cuáles detiene Claude Code.


1118| v2.1.200 | Una versión anterior de Claude Code que reescribe la lista de sesiones en `roster.json` conserva los campos escritos por una versión más nueva, igual que la garantía existente de `state.json`, por lo que las sesiones iniciadas por la versión más nueva siguen aceptando entrada después de que el supervisor se reinicia. Cuando abres una sesión que ha dejado de responder, el supervisor reinicia su proceso y la sesión continúa la respuesta interrumpida desde donde se quedó. La vista de agentes aplica un flag `--plugin-dir` colocado después de `agents` a su propio autocompletado de subagentes y skills en la entrada de distribución, así como a las sesiones distribuidas. |1127| v2.1.200 | Una versión anterior de Claude Code que reescribe la lista de sesiones en `roster.json` conserva los campos escritos por una versión más nueva, igual que la garantía existente de `state.json`, por lo que las sesiones iniciadas por la versión más nueva siguen aceptando entrada después de que el supervisor se reinicia. Cuando abres una sesión que ha dejado de responder, el supervisor reinicia su proceso y la sesión continúa la respuesta interrumpida desde donde se quedó. La vista de agentes aplica un flag `--plugin-dir` colocado después de `agents` a su propio autocompletado de subagentes y skills en la entrada de distribución, así como a las sesiones distribuidas. |

1119| v2.1.199 | Una sesión en segundo plano cuyo proceso sale antes de terminar de iniciarse en un host con poca memoria muestra `possibly low memory — free some up and retry` en el estado de su fila en lugar de solo la razón de salida sin más. Enviar al segundo plano una sesión con `←` o `/background` lleva su `/color` a la nueva fila. |1128| v2.1.199 | Una sesión en segundo plano cuyo proceso sale antes de terminar de iniciarse en un host con poca memoria muestra `possibly low memory — free some up and retry` en el estado de su fila en lugar de solo la razón de salida sin más. Enviar al segundo plano una sesión con `←` o `/background` lleva su `/color` a la nueva fila. |

1120| v2.1.198 | La vista de agentes envía una notificación a través de `preferredNotifChannel` cuando una sesión en segundo plano necesita entrada, finaliza o falla, y dispara el hook `Notification` con el tipo `agent_needs_input` o `agent_completed`. `←` y `/exit` dentro de `claude attach <id>` regresan a la vista de agentes en lugar de salir al shell; `Ctrl+Z` regresa al shell. Una sesión en segundo plano que aisló su trabajo en un worktree hace commit, hace push de su propia rama aislada, nunca de `main` ni de `master`, y abre un pull request en borrador cuando finaliza en lugar de preguntar primero. `/login` se ejecuta en la vista de agentes y abre el diálogo de inicio de sesión. El diálogo de salida `Background work is running` ofrece `Move to background and exit`. El traspaso al salir también cubre los subagentes en segundo plano, que se reanudan desde su transcripción en el siguiente despertar en lugar de informarse como fallidos. `claude --bg` combinado con `-p` o `--print` se rechaza con un error. El host de sesiones en segundo plano solicita el permiso de Red Local de macOS en el primer acceso a la LAN en lugar de fallar con `connect: no route to host`. |1129| v2.1.198 | La vista de agentes envía una notificación a través de `preferredNotifChannel` cuando una sesión en segundo plano necesita entrada, finaliza o falla, y dispara el hook `Notification` con el tipo `agent_needs_input` o `agent_completed`. `←` y `/exit` dentro de `claude attach <id>` regresan a la vista de agentes en lugar de salir al shell; `Ctrl+Z` regresa al shell. Una sesión en segundo plano que aisló su trabajo en un worktree hace commit, hace push de su propia rama aislada, nunca de `main` ni de `master`, y abre un pull request en borrador cuando finaliza en lugar de preguntar primero. `/login` se ejecuta en la vista de agentes y abre el diálogo de inicio de sesión. El diálogo de salida `Background work is running` ofrece `Move to background and exit`. El traspaso al salir también cubre los subagentes en segundo plano, que se reanudan desde su transcripción en el siguiente despertar en lugar de informarse como fallidos. `claude --bg` combinado con `-p` o `--print` se rechaza con un error. El host de sesiones en segundo plano solicita el permiso de Red Local de macOS en el primer acceso a la LAN en lugar de fallar con `connect: no route to host`. |

1121| v2.1.196 | Una sola pulsación de `←` envía al segundo plano una sesión en primer plano; las versiones anteriores requerían dos pulsaciones, con una sugerencia en el pie de página y una confirmación. `--dangerously-skip-permissions` pasado a `claude agents` muestra el aviso de bypass en lugar de descartarse silenciosamente. Las sesiones interactivas que nunca nombraste llevan un nombre predeterminado como `my-app-3f` en los listados de sesiones y en `claude agents --json`. Los comandos de shell en segundo plano y los flujos de trabajo dinámicos sobreviven a que el proceso de la sesión se detenga, se reinicie o se actualice, incluso en Windows; establece `CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF=1` para desactivar el traspaso. Una transcripción leída erróneamente como vacía al reiniciar se renombra con un sufijo `.orphaned-` en lugar de eliminarse. |1130| v2.1.196 | Una sola pulsación de `←` envía al segundo plano una sesión en primer plano; las versiones anteriores requerían dos pulsaciones, con una sugerencia en el pie de página y una confirmación. `--dangerously-skip-permissions` pasado a `claude agents` muestra el aviso de bypass en lugar de descartarse silenciosamente. Las sesiones interactivas que nunca nombraste llevan un nombre predeterminado como `my-app-3f` en los listados de sesiones y en `claude agents --json`. Los comandos de shell en segundo plano sobreviven a que el proceso de la sesión se detenga, se reinicie o se actualice, incluso en Windows; establece `CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF=1` para desactivar el traspaso. Una transcripción leída erróneamente como vacía al reiniciar se renombra con un sufijo `.orphaned-` en lugar de eliminarse. |

1122| v2.1.195 | El trabajo en segundo plano en curso también se traslada cuando envías una sesión al segundo plano en Windows. El grupo `Completed` llena el espacio vertical restante y el encabezado se compacta en terminales de poca altura. Una versión anterior de Claude Code ya no descarta campos de `state.json` de sesiones más nuevas ni oculta esas sesiones de `claude agents`. Adjuntarse a una sesión detenida cambia inmediatamente en lugar de mostrar una pantalla en blanco durante hasta cinco segundos. Un supervisor que no puede aceptar conexiones sale y libera su bloqueo por sí solo. |1131| v2.1.195 | El trabajo en segundo plano en curso también se traslada cuando envías una sesión al segundo plano en Windows. El grupo `Completed` llena el espacio vertical restante y el encabezado se compacta en terminales de poca altura. Una versión anterior de Claude Code ya no descarta campos de `state.json` de sesiones más nuevas ni oculta esas sesiones de `claude agents`. Adjuntarse a una sesión detenida cambia inmediatamente en lugar de mostrar una pantalla en blanco durante hasta cinco segundos. Un supervisor que no puede aceptar conexiones sale y libera su bloqueo por sí solo. |

1123| v2.1.191 | `claude --bg` con un nombre de `--agent` que no coincide con ninguno de tus subagentes hace fallar el lanzamiento: la sesión sale inmediatamente con un error `--agent '<name>' not found` en lugar de ejecutarse con el agente predeterminado. |1132| v2.1.191 | `claude --bg` con un nombre de `--agent` que no coincide con ninguno de tus subagentes hace fallar el lanzamiento: la sesión sale inmediatamente con un error `--agent '<name>' not found` en lugar de ejecutarse con el agente predeterminado. |

1124| v2.1.174 | Las sesiones en segundo plano ya no heredan variables de endpoint de gateway como `ANTHROPIC_BASE_URL` del shell desde el que se lanzó el supervisor; el supervisor proporciona una instantánea de credenciales nueva a los workers precalentados, lo que corrige errores espurios de `Could not resolve authentication method`. |1133| v2.1.174 | Las sesiones en segundo plano ya no heredan variables de endpoint de gateway como `ANTHROPIC_BASE_URL` del shell desde el que se lanzó el supervisor; el supervisor proporciona una instantánea de credenciales nueva a los workers precalentados, lo que corrige errores espurios de `Could not resolve authentication method`. |

Details

927 927 

928Cuando cambies, elimina cualquier línea `serve_to_desktop` en la misma edición que renombra los bloques. Donde una instrucción nombre el bloque `cli`, usa tu bloque `code`.928Cuando cambies, elimina cualquier línea `serve_to_desktop` en la misma edición que renombra los bloques. Donde una instrucción nombre el bloque `cli`, usa tu bloque `code`.

929 929 

930`serve_to_desktop: true` es una forma heredada de ofrecer la configuración `cli` de una política a la pestaña Code. No tiene efecto cuando Claude Desktop se conecta a través de [`bootstrapUrl`](#claude-desktop-overlay). Mientras tus políticas usen `cli`, una advertencia al arrancar que nombre esta clave significa que esa configuración no está llegando a la pestaña Code:

931 

932* **Para cubrir la pestaña Code**: cambia a `code`, una vez que las máquinas de los usuarios cumplan las condiciones de [Aplicar la configuración de `code` en la pestaña Code](#apply-code-settings-in-the-code-tab)

933* **Para seguir con `cli`**: establece `serve_to_desktop: false` junto a `cli` en una política para silenciar la advertencia

934 

930#### Qué va en `cli`935#### Qué va en `cli`

931 936 

932Cada valor de `code` o `cli` es un documento `managed-settings.json` completo de Claude Code, el mismo esquema que desplegarías mediante MDM o `/etc/claude-code/managed-settings.json`, expresado aquí como YAML. La CLI aplica el documento entregado en el nivel administrado, por encima de la configuración de usuario y de proyecto, en lugar de la configuración administrada por el servidor. Por lo tanto, ignora los ajustes [restringidos a fuentes de políticas a nivel del sistema operativo](https://code.claude.com/docs/es/server-managed-settings.md#current-limitations), como `policyHelper` y `wslInheritsWindowsSettings`.937Cada valor de `code` o `cli` es un documento `managed-settings.json` completo de Claude Code, el mismo esquema que desplegarías mediante MDM o `/etc/claude-code/managed-settings.json`, expresado aquí como YAML. La CLI aplica el documento entregado en el nivel administrado, por encima de la configuración de usuario y de proyecto, en lugar de la configuración administrada por el servidor. Por lo tanto, ignora los ajustes [restringidos a fuentes de políticas a nivel del sistema operativo](https://code.claude.com/docs/es/server-managed-settings.md#current-limitations), como `policyHelper` y `wslInheritsWindowsSettings`.


974| - | - | - |979| - | - | - |

975| `availableModels` | Gateway + CLI | Lista de modelos permitidos. También se comprueba en `/v1/messages`, por lo que un cliente modificado no puede eludirla. |980| `availableModels` | Gateway + CLI | Lista de modelos permitidos. También se comprueba en `/v1/messages`, por lo que un cliente modificado no puede eludirla. |

976| [`deniedModels`](https://code.claude.com/docs/es/settings-reference#deniedmodels), [`availableModelsMatch`](https://code.claude.com/docs/es/settings-reference#availablemodelsmatch) | Gateway + CLI | [Bloquear modelos o versiones específicos](https://code.claude.com/docs/es/model-config.md#block-specific-models-or-versions) que `availableModels` permitiría de otro modo. Un modelo bloqueado se rechaza con un `400` en `/v1/messages` y se omite de `/v1/models`. La comprobación propia del gateway requiere Claude Code v2.1.299 o posterior en el servidor del gateway. La comprobación de la CLI requiere v2.1.283 o posterior en los clientes, y los clientes anteriores ignoran ambas claves. |981| [`deniedModels`](https://code.claude.com/docs/es/settings-reference#deniedmodels), [`availableModelsMatch`](https://code.claude.com/docs/es/settings-reference#availablemodelsmatch) | Gateway + CLI | [Bloquear modelos o versiones específicos](https://code.claude.com/docs/es/model-config.md#block-specific-models-or-versions) que `availableModels` permitiría de otro modo. Un modelo bloqueado se rechaza con un `400` en `/v1/messages` y se omite de `/v1/models`. La comprobación propia del gateway requiere Claude Code v2.1.299 o posterior en el servidor del gateway. La comprobación de la CLI requiere v2.1.283 o posterior en los clientes, y los clientes anteriores ignoran ambas claves. |

977| `permissions.allow` / `.deny` | CLI | Reglas de herramientas y comandos. Consulta [Permisos](https://code.claude.com/docs/es/permissions.md). |982| `permissions.allow` / `.deny` | CLI | Reglas de herramientas y comandos. Consulta [Permisos](https://code.claude.com/docs/es/permissions.md) y [lo que una regla de Bash no detecta](https://code.claude.com/docs/es/permissions.md#bash-rule-limits). |

978| `permissions.disableBypassPermissionsMode` | CLI | Establécelo en `disable` para bloquear [`bypassPermissions`](https://code.claude.com/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode), el modo que omite las solicitudes de permiso, y el flag `--dangerously-skip-permissions` |983| `permissions.disableBypassPermissionsMode` | CLI | Establécelo en `disable` para bloquear [`bypassPermissions`](https://code.claude.com/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode), el modo que omite las solicitudes de permiso, y el flag `--dangerously-skip-permissions` |

979| `allowManagedPermissionRulesOnly` | CLI | Cuando es `true`, la configuración administrada pasa a ser la única fuente de configuración de reglas de permisos. La entrada [`allowManagedPermissionRulesOnly`](https://code.claude.com/docs/es/settings-reference#allowmanagedpermissionrulesonly) enumera todas las fuentes que Claude Code ignora entonces. |984| `allowManagedPermissionRulesOnly` | CLI | Cuando es `true`, la configuración administrada pasa a ser la única fuente de configuración de reglas de permisos. La entrada [`allowManagedPermissionRulesOnly`](https://code.claude.com/docs/es/settings-reference#allowmanagedpermissionrulesonly) enumera todas las fuentes que Claude Code ignora entonces. |

980| `env` | CLI | Variables de entorno combinadas en el proceso del CLI. Úsalas para telemetría, actualización automática y sobrescrituras de nombres de modelos. |985| `env` | CLI | Variables de entorno combinadas en el proceso del CLI. Úsalas para telemetría, actualización automática y sobrescrituras de nombres de modelos. |


1003 1008 

1004La clave `cli` se llamaba `settings` en versiones anteriores, y el gateway sigue aceptando esa grafía como alias. Para despliegues nuevos, usa [`code`](#choose-cli-or-code).1009La clave `cli` se llamaba `settings` en versiones anteriores, y el gateway sigue aceptando esa grafía como alias. Para despliegues nuevos, usa [`code`](#choose-cli-or-code).

1005 1010 

1011#### Probar una política antes del despliegue

1012 

1013Para probar un cambio de política, inicia el gateway con una base de datos Postgres desechable. El gateway se conecta a Postgres y aplica sus migraciones de esquema antes de comprobar el contenido de los bloques `cli`, `code` y `desktop`. Cuando no puede acceder a la base de datos, el inicio se detiene en `could not connect to Postgres` y no informa nada sobre su contenido.

1014 

1006#### Ventana de contexto en sesiones de terminal1015#### Ventana de contexto en sesiones de terminal

1007 1016 

1008Las sesiones de terminal iniciadas mediante `/login` usan la ventana de contexto de 1M para Opus 4.7 y posteriores, Sonnet 5 y posteriores, y los modelos Fable. El ID del modelo no necesita el sufijo `[1m]`, y las sesiones se compactan en torno a 967K tokens. Antes de Claude Code v2.1.287 en la máquina del desarrollador, Claude Code trataba los modelos Opus y Fable como si tuvieran una ventana de 200K, a menos que el ID del modelo terminara en `[1m]`.1017Las sesiones de terminal iniciadas mediante `/login` usan la ventana de contexto de 1M para Opus 4.7 y posteriores, Sonnet 5 y posteriores, y los modelos Fable. El ID del modelo no necesita el sufijo `[1m]`, y las sesiones se compactan en torno a 967K tokens. Antes de Claude Code v2.1.287 en la máquina del desarrollador, Claude Code trataba los modelos Opus y Fable como si tuvieran una ventana de 200K, a menos que el ID del modelo terminara en `[1m]`.


1589 # La política de contratistas hereda esta clave.1598 # La política de contratistas hereda esta clave.

1590 enforceAvailableModels: true1599 enforceAvailableModels: true

1591 permissions:1600 permissions:

1592 allow: [Read, Grep, Bash, Edit]1601 allow: [Read, Grep, Edit]

1593 deny: ["WebFetch"]1602 deny: ["WebFetch"]

1594 env: { HTTP_PROXY: http://proxy.example.com:8080 }1603 env: { HTTP_PROXY: http://proxy.example.com:8080 }

1595 1604 

Details

393| El `/login` de un desarrollador muestra el selector de cuenta estándar en lugar de la pantalla **Cloud gateway** | `forceLoginMethod` o `forceLoginGatewayUrl` no está establecido en la configuración administrada de esa máquina | Implementa el [archivo de configuración administrada](https://code.claude.com/docs/es/claude-apps-gateway#set-the-gateway-url) en el dispositivo; `/login` lee la URL del gateway desde allí |393| El `/login` de un desarrollador muestra el selector de cuenta estándar en lugar de la pantalla **Cloud gateway** | `forceLoginMethod` o `forceLoginGatewayUrl` no está establecido en la configuración administrada de esa máquina | Implementa el [archivo de configuración administrada](https://code.claude.com/docs/es/claude-apps-gateway#set-the-gateway-url) en el dispositivo; `/login` lee la URL del gateway desde allí |

394| Las solicitudes de un desarrollador fallan con `Not signed in to the Cloud gateway — run /login.` | La configuración administrada de la máquina establece `forceLoginMethod: "gateway"` o `forceLoginGatewayUrl`, y la sesión no tiene un inicio de sesión en el gateway. Un inicio de sesión de claude.ai que haya quedado no satisface el requisito. | Pide al desarrollador que ejecute `/login` y complete el inicio de sesión en el gateway. Consulta también [La política del administrador requiere un inicio de sesión en el Cloud gateway](https://code.claude.com/docs/es/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in). |394| Las solicitudes de un desarrollador fallan con `Not signed in to the Cloud gateway — run /login.` | La configuración administrada de la máquina establece `forceLoginMethod: "gateway"` o `forceLoginGatewayUrl`, y la sesión no tiene un inicio de sesión en el gateway. Un inicio de sesión de claude.ai que haya quedado no satisface el requisito. | Pide al desarrollador que ejecute `/login` y complete el inicio de sesión en el gateway. Consulta también [La política del administrador requiere un inicio de sesión en el Cloud gateway](https://code.claude.com/docs/es/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in). |

395| Claude Desktop informa que no se pudo obtener su configuración de arranque | `/user/bootstrap` devolvió 404: la política que coincide con el usuario no tiene una clave `desktop`, o ninguna política coincidió. El registro de auditoría del gateway registra cada rechazo como `desktop_bootstrap.denied` con el motivo. | Agrega un bloque `desktop` a la política que coincide con el usuario, o a la capa base `match: {}`; basta con un `desktop: {}` vacío. Consulta [Superposición de Claude Desktop](https://code.claude.com/docs/es/claude-apps-gateway-config.md#claude-desktop-overlay). |395| Claude Desktop informa que no se pudo obtener su configuración de arranque | `/user/bootstrap` devolvió 404: la política que coincide con el usuario no tiene una clave `desktop`, o ninguna política coincidió. El registro de auditoría del gateway registra cada rechazo como `desktop_bootstrap.denied` con el motivo. | Agrega un bloque `desktop` a la política que coincide con el usuario, o a la capa base `match: {}`; basta con un `desktop: {}` vacío. Consulta [Superposición de Claude Desktop](https://code.claude.com/docs/es/claude-apps-gateway-config.md#claude-desktop-overlay). |

396| El registro de auditoría muestra `auth.denied` con `reason: invalid_token` en `/v1/logs` o `/v1/metrics` | Estableciste [`otelHeadersHelper`](https://code.claude.com/docs/es/settings-reference#otelheadershelper) en la configuración administrada de una máquina. En una sesión de Claude Desktop en esa máquina, Claude Code envía el encabezado `Authorization` del helper al relay de telemetría del gateway en lugar del token de sesión. Cuando Claude Desktop incluye una versión de Claude Code anterior a v2.1.307, obtienes el mismo rechazo si estableces un encabezado `Authorization` en `OTEL_EXPORTER_OTLP_HEADERS` o en una forma por señal en esa configuración. | Elimina el helper de esa configuración. Cuando Claude Desktop incluye una versión de Claude Code anterior a v2.1.307, elimina la variable. |

396| Al iniciar se muestra `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | La compilación de Claude Code instalada es anterior al soporte del gateway | Pide al desarrollador que actualice Claude Code a una versión que incluya soporte para Cloud gateway |397| Al iniciar se muestra `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | La compilación de Claude Code instalada es anterior al soporte del gateway | Pide al desarrollador que actualice Claude Code a una versión que incluya soporte para Cloud gateway |

397| Al iniciar, sale con `Administrator policy requires a Cloud gateway sign-in on this machine` | El entorno del desarrollador establece `ANTHROPIC_API_KEY` o `ANTHROPIC_AUTH_TOKEN`, su configuración define un [`apiKeyHelper`](https://code.claude.com/docs/es/settings-reference#apikeyhelper), o todavía hay guardada una clave de API de un inicio de sesión anterior en Claude Console | Pide al desarrollador que elimine cada uno que aplique: quitar la variable, eliminar la entrada `apiKeyHelper` o ejecutar `claude auth logout` para eliminar la clave guardada. Una sesión que selecciona un proveedor de nube con `CLAUDE_CODE_USE_*` entonces inicia sin inicio de sesión; para cualquier otra sesión, pídele que inicie `claude` e inicie sesión con `/login`. Consulta también [La política del administrador requiere un inicio de sesión en el Cloud gateway](https://code.claude.com/docs/es/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in). |398| Al iniciar, sale con `Administrator policy requires a Cloud gateway sign-in on this machine` | El entorno del desarrollador establece `ANTHROPIC_API_KEY` o `ANTHROPIC_AUTH_TOKEN`, su configuración define un [`apiKeyHelper`](https://code.claude.com/docs/es/settings-reference#apikeyhelper), o todavía hay guardada una clave de API de un inicio de sesión anterior en Claude Console | Pide al desarrollador que elimine cada uno que aplique: quitar la variable, eliminar la entrada `apiKeyHelper` o ejecutar `claude auth logout` para eliminar la clave guardada. Una sesión que selecciona un proveedor de nube con `CLAUDE_CODE_USE_*` entonces inicia sin inicio de sesión; para cualquier otra sesión, pídele que inicie `claude` e inicie sesión con `/login`. Consulta también [La política del administrador requiere un inicio de sesión en el Cloud gateway](https://code.claude.com/docs/es/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in). |

398| Al iniciar o en `/login` se informa `Claude Code may not be enabled for your organization` después de un 403 al cargar la configuración administrada | El gateway, o algo delante de él, respondió a la solicitud `/managed/settings` con 403. La propia ruta de configuración del gateway nunca responde 403. El estado proviene de las verificaciones de IP de [`access_control`](https://code.claude.com/docs/es/claude-apps-gateway-config#http-tuning) o de un proxy o WAF delante del gateway. El registro de auditoría registra un rechazo por verificación de IP como `access.denied` con el motivo. El desarrollador sigue con la sesión iniciada. | Busca `access.denied` en el registro de auditoría en el momento del fallo y corrige las listas de `access_control` o el front end; luego pide al desarrollador que inicie `claude` de nuevo |399| Al iniciar o en `/login` se informa `Claude Code may not be enabled for your organization` después de un 403 al cargar la configuración administrada | El gateway, o algo delante de él, respondió a la solicitud `/managed/settings` con 403. La propia ruta de configuración del gateway nunca responde 403. El estado proviene de las verificaciones de IP de [`access_control`](https://code.claude.com/docs/es/claude-apps-gateway-config#http-tuning) o de un proxy o WAF delante del gateway. El registro de auditoría registra un rechazo por verificación de IP como `access.denied` con el motivo. El desarrollador sigue con la sesión iniciada. | Busca `access.denied` en el registro de auditoría en el momento del fallo y corrige las listas de `access_control` o el front end; luego pide al desarrollador que inicie `claude` de nuevo |

Details

288 288 

289Los [equipos de agentes](https://code.claude.com/docs/es/agent-teams.md) están desactivados de forma predeterminada pero se pueden habilitar agregando `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` a sus [variables de entorno](https://code.claude.com/docs/es/cloud-environments.md#set-environment-variables).289Los [equipos de agentes](https://code.claude.com/docs/es/agent-teams.md) están desactivados de forma predeterminada pero se pueden habilitar agregando `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` a sus [variables de entorno](https://code.claude.com/docs/es/cloud-environments.md#set-environment-variables).

290 290 

291### Sugerencias de plugins en la conversación

292 

293Una tarjeta en la conversación que enumera uno o más [plugins](https://code.claude.com/docs/es/plugins/overview.md), con un botón **Add**, significa que Claude está sugiriendo plugins para tu tarea. Claude puede hacer estas sugerencias sin que se lo pidas. No tienes que responder, y Claude continúa con la tarea de cualquier manera.

294 

295#### Agregar o quitar un plugin sugerido

296 

297Selecciona **Add** en un plugin para activarlo en tu cuenta de claude.ai, donde permanece activado después de que termina la sesión. Para deshacerlo, abre el plugin agregado desde la tarjeta, selecciona **Manage** para ir a la página del plugin en claude.ai y quita el plugin desde esa página.

298 

299#### Desactivar las sugerencias de plugins

300 

301Para evitar que Claude sugiera plugins, deniega las herramientas `SearchPlugins` y `SuggestPluginInstall` con [reglas de permisos](https://code.claude.com/docs/es/permissions.md#manage-permissions). En una sesión con un repositorio fuera de un [proyecto](https://code.claude.com/docs/es/claude-projects.md), haz commit de las reglas en el archivo `.claude/settings.json` de ese repositorio, enumerando ambos nombres de herramientas en `permissions.deny`:

302 

303```json theme={null}

304{

305 "permissions": {

306 "deny": ["SearchPlugins", "SuggestPluginInstall"]

307 }

308}

309```

310 

311Claude Code ignora las reglas de permisos del archivo `.claude/settings.json` del repositorio, incluidas estas reglas de denegación, cuando la [configuración administrada](https://code.claude.com/docs/es/managed-settings.md) que se aplica a la sesión establece [`allowManagedPermissionRulesOnly`](https://code.claude.com/docs/es/settings-reference#allowmanagedpermissionrulesonly). En ese caso, coloca las reglas en esa configuración administrada. Para otras configuraciones, como una sesión con varios repositorios o un hilo en la nube en un proyecto, consulta qué [configuración llega a una sesión en la nube](https://code.claude.com/docs/es/settings.md#settings-in-cloud-sessions).

312 

291### Recuperar un mensaje en cola313### Recuperar un mensaje en cola

292 314 

293Si envías un mensaje mientras Claude está trabajando, el mensaje se pone en cola hasta que Claude lo lee. Para recuperar un mensaje en cola, haz clic en la ✕ que aparece en él. El texto vuelve al cuadro de mensaje para que puedas editarlo o enviar algo más.315Si envías un mensaje mientras Claude está trabajando, el mensaje se pone en cola hasta que Claude lo lee. Para recuperar un mensaje en cola, haz clic en la ✕ que aparece en él. El texto vuelve al cuadro de mensaje para que puedas editarlo o enviar algo más.

Details

103 103 

104Más allá de la configuración que usted crea, `~/.claude` contiene datos que Claude Code escribe durante las sesiones. Estos archivos son texto sin formato. Cualquier cosa que pase a través de una herramienta aterriza en una transcripción en disco: contenidos de archivos, salida de comandos, texto pegado.104Más allá de la configuración que usted crea, `~/.claude` contiene datos que Claude Code escribe durante las sesiones. Estos archivos son texto sin formato. Cualquier cosa que pase a través de una herramienta aterriza en una transcripción en disco: contenidos de archivos, salida de comandos, texto pegado.

105 105 

106La transcripción también puede contener lo que Claude Code envía al modelo junto con tus mensajes:

107 

108* El prompt del sistema

109* Las definiciones de herramientas

110* Los parámetros de la solicitud

111* Los archivos de instrucciones que cargó, como CLAUDE.md

112 

106### Limpiados automáticamente113### Limpiados automáticamente

107 114 

108Claude Code elimina los archivos en las rutas a continuación una vez que tienen más de [`cleanupPeriodDays`](https://code.claude.com/docs/es/settings-reference#cleanupperioddays), siempre que pueda determinar de forma segura el período de retención. El valor predeterminado es 30 días y el mínimo es 1; establecer `0` falla con un error de validación. El mismo límite de edad se aplica a la eliminación automática de [worktrees huérfanos](https://code.claude.com/docs/es/worktrees.md#clean-up-subagent-and-background-session-worktrees).115Claude Code elimina los archivos en las rutas a continuación una vez que tienen más de [`cleanupPeriodDays`](https://code.claude.com/docs/es/settings-reference#cleanupperioddays), siempre que pueda determinar de forma segura el período de retención. El valor predeterminado es 30 días y el mínimo es 1; establecer `0` falla con un error de validación. El mismo límite de edad se aplica a la eliminación automática de [worktrees huérfanos](https://code.claude.com/docs/es/worktrees.md#clean-up-subagent-and-background-session-worktrees).

109 116 

110| Ruta bajo `~/.claude/` | Contenidos |117| Ruta bajo `~/.claude/` | Contenidos |

111| - | - |118| - | - |

112| `projects/<project>/<session>.jsonl` | Transcripción de conversación completa: cada mensaje, llamada de herramienta y resultado de herramienta |119| `projects/<project>/<session>.jsonl` | Transcripción de la conversación: mensajes, llamadas a herramientas y resultados de herramientas, además del prompt del sistema, las definiciones de herramientas y los parámetros de las solicitudes que Claude Code envió al modelo |

113| `projects/<project>/<session>.orphaned-<timestamp>-<suffix>.jsonl`, `projects/<project>/<session>.jsonl.superseded-<timestamp>` | Una transcripción anterior para la sesión que Claude Code apartó en lugar de sobrescribir o eliminar. No aparece en el selector de sesiones |120| `projects/<project>/<session>.orphaned-<timestamp>-<suffix>.jsonl`, `projects/<project>/<session>.jsonl.superseded-<timestamp>` | Una transcripción anterior para la sesión que Claude Code apartó en lugar de sobrescribir o eliminar. No aparece en el selector de sesiones |

114| `projects/<project>/<session>/subagents/` | Transcripciones de conversación de [subagente](https://code.claude.com/docs/es/sub-agents.md), eliminadas con la transcripción de sesión principal cuando vence |121| `projects/<project>/<session>/subagents/` | Transcripciones de [subagentes](https://code.claude.com/docs/es/sub-agents.md) en el mismo formato que la transcripción de la sesión, eliminadas con la transcripción de la sesión principal cuando vence |

115| `projects/<project>/<session>/tool-results/` | Salidas de herramientas grandes derramadas en archivos separados, y copias de tamaño completo de [imágenes que devuelven las herramientas MCP](https://code.claude.com/docs/es/mcp.md#images-in-tool-results) |122| `projects/<project>/<session>/tool-results/` | Salidas de herramientas grandes derramadas en archivos separados, y copias de tamaño completo de [imágenes que devuelven las herramientas MCP](https://code.claude.com/docs/es/mcp.md#images-in-tool-results) |

116| `projects/<project>/<session>/mcp-tasks/` | Lo que una sesión reanudada necesita para volver a seguir sus [tareas MCP](https://code.claude.com/docs/es/mcp.md#mcp-tasks-that-run-on-the-server) en ejecución, y los resultados de las tareas terminadas que Claude aún no ha leído |123| `projects/<project>/<session>/mcp-tasks/` | Lo que una sesión reanudada necesita para volver a seguir sus [tareas MCP](https://code.claude.com/docs/es/mcp.md#mcp-tasks-that-run-on-the-server) en ejecución, y los resultados de las tareas terminadas que Claude aún no ha leído |

117| `file-history/<session>/` | Instantáneas previas a la edición de archivos que Claude cambió, utilizadas para [restauración de checkpoint](https://code.claude.com/docs/es/checkpointing.md). Contiene instantáneas para los 100 checkpoints más recientes; los archivos de instantánea que ningún checkpoint retenido referencia se eliminan, excepto la primera instantánea de cada archivo |124| `file-history/<session>/` | Instantáneas previas a la edición de archivos que Claude cambió, utilizadas para [restauración de checkpoint](https://code.claude.com/docs/es/checkpointing.md). Contiene instantáneas para los 100 checkpoints más recientes; los archivos de instantánea que ningún checkpoint retenido referencia se eliminan, excepto la primera instantánea de cada archivo |

Details

6 6 

7> Instale el plugin de seguridad de Claude para escanear su base de código en busca de vulnerabilidades en una sesión de Claude Code y convierta los hallazgos en parches que usted revisa y aplica.7> Instale el plugin de seguridad de Claude para escanear su base de código en busca de vulnerabilidades en una sesión de Claude Code y convierta los hallazgos en parches que usted revisa y aplica.

8 8 

9El plugin de seguridad de Claude ejecuta un escaneo de vulnerabilidades multiagente de su base de código dentro de una sesión de Claude Code. Un equipo de agentes de Claude mapea su arquitectura, construye un modelo de amenazas, busca vulnerabilidades y revisa de forma independiente cada hallazgo antes de escribir el informe. Utilice el plugin para escanear un repositorio completo o [solo un conjunto de cambios](#scan-only-your-changes), como el diff de una rama, el diff de una solicitud de extracción o una única confirmación, luego convierta los hallazgos que elija en parches que usted revisa y aplica usted mismo.9El plugin Claude Security ejecuta un escaneo de vulnerabilidades multiagente de tu base de código dentro de una sesión de Claude Code. [De forma predeterminada](#choose-a-scan-effort), cuando escaneas un repositorio completo, los agentes de Claude mapean tu arquitectura, crean un modelo de amenazas, buscan vulnerabilidades y revisan de forma independiente cada hallazgo antes de escribir el informe.

10 

11Usa el plugin para escanear un repositorio completo o [solo un conjunto de cambios](#scan-only-your-changes), como el diff de una rama, el diff de un pull request o un único commit, y luego convierte los hallazgos que elijas en parches que revisas y aplicas tú mismo.

10 12 

11El plugin se ejecuta localmente en tu sesión, usa [los modelos a los que tengas acceso en Claude Code](#models-and-providers), y cada escaneo cuenta para tu [uso](https://code.claude.com/docs/es/costs.md). Si quieres un servicio administrado que monitoree tus repositorios, o quieres ejecutar escaneos en [Claude Mythos](https://platform.claude.com/docs/en/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5), consulta el producto [Claude Security](https://claude.com/product/claude-security), disponible en el plan Enterprise.13El plugin se ejecuta localmente en tu sesión, usa [los modelos a los que tengas acceso en Claude Code](#models-and-providers), y cada escaneo cuenta para tu [uso](https://code.claude.com/docs/es/costs.md). Si quieres un servicio administrado que monitoree tus repositorios, o quieres ejecutar escaneos en [Claude Mythos](https://platform.claude.com/docs/en/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5), consulta el producto [Claude Security](https://claude.com/product/claude-security), disponible en el plan Enterprise.

12 14 


51 53 

52Una vez que el plugin esté activo, estás listo para [escanear y corregir tu base de código](#scan-and-fix-your-codebase).54Una vez que el plugin esté activo, estás listo para [escanear y corregir tu base de código](#scan-and-fix-your-codebase).

53 55 

56### Actualiza el plugin

57 

58Para actualizar el plugin tú mismo, consulta [Actualizar plugins ahora](https://code.claude.com/docs/es/plugins/install.md#update-plugins-now). Claude Code también [actualiza el plugin automáticamente](https://code.claude.com/docs/es/plugins/install.md#keep-plugins-updated), a menos que la actualización automática esté desactivada.

59 

54### Desinstala el plugin60### Desinstala el plugin

55 61 

56Para eliminar el plugin, desinstálalo desde el menú `/plugin`, o ejecuta `claude plugin uninstall claude-security` en tu terminal.62Para eliminar el plugin, desinstálalo desde el menú `/plugin`, o ejecuta `claude plugin uninstall claude-security` en tu terminal.


95 101 

96En un repositorio grande, escanea un área a la vez en lugar de todo el árbol. Elige uno de los alcances enfocados que ofrece el plugin, como tu capa de API o tu código de autenticación, y la ejecución se dimensiona a lo que elijas. La sección de cobertura del informe indica qué fue y qué no fue examinado. Ejecuta otro escaneo en un área diferente en cualquier momento.102En un repositorio grande, escanea un área a la vez en lugar de todo el árbol. Elige uno de los alcances enfocados que ofrece el plugin, como tu capa de API o tu código de autenticación, y la ejecución se dimensiona a lo que elijas. La sección de cobertura del informe indica qué fue y qué no fue examinado. Ejecuta otro escaneo en un área diferente en cualquier momento.

97 103 

104### Elige un esfuerzo de escaneo

105 

106El esfuerzo de escaneo establece qué tan profundo llega un escaneo. Tus hallazgos pasan por la misma verificación independiente en `low`, `medium` y `high`.

107 

108* **`low`**: un primer vistazo rápido. Omite el mapa de arquitectura y el modelo de amenazas cuando escaneas tu base de código.

109* **`medium`**: el valor predeterminado.

110* **`high`**: lo que hace `medium`, más una búsqueda adicional de vulnerabilidades en el mismo código.

111 

112Indica el esfuerzo de escaneo en tu solicitud en el prompt de Claude Code, como `/claude-security scan my public API code at high` o `/claude-security scan my branch at high`.

113 

114Si un escaneo de un repositorio grande encuentra menos de lo que esperas, elige el esfuerzo de escaneo `high`, escanea una segunda vez, o haz ambas cosas. Cada opción puede reportar hallazgos que un solo escaneo `medium` no reporta.

115 

98### Lee los resultados del escaneo116### Lee los resultados del escaneo

99 117 

100Cada escaneo escribe sus resultados en un directorio `CLAUDE-SECURITY-<timestamp>/` con marca de tiempo en tu repositorio:118Cada escaneo escribe sus resultados en un directorio `CLAUDE-SECURITY-<timestamp>/` con marca de tiempo en tu repositorio:


102* **`CLAUDE-SECURITY-RESULTS.md`**: el informe, con el ID de cada hallazgo, como `F1`, más su impacto, escenario de explotación, severidad, confianza y recomendación120* **`CLAUDE-SECURITY-RESULTS.md`**: el informe, con el ID de cada hallazgo, como `F1`, más su impacto, escenario de explotación, severidad, confianza y recomendación

103* **`CLAUDE-SECURITY-RESULTS.jsonl`**: los mismos hallazgos en forma legible por máquina, un objeto JSON por línea121* **`CLAUDE-SECURITY-RESULTS.jsonl`**: los mismos hallazgos en forma legible por máquina, un objeto JSON por línea

104* **`CLAUDE-SECURITY-RESULTS.sarif`**: los mismos hallazgos como un registro [SARIF 2.1.0](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) para escaneo de código de GitHub y cualquier otra herramienta que lea el estándar. El escaneo clasifica hallazgos bajo sus categorías de debilidad [CWE](https://cwe.mitre.org/)122* **`CLAUDE-SECURITY-RESULTS.sarif`**: los mismos hallazgos como un registro [SARIF 2.1.0](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) para escaneo de código de GitHub y cualquier otra herramienta que lea el estándar. El escaneo clasifica hallazgos bajo sus categorías de debilidad [CWE](https://cwe.mitre.org/)

105* **`CLAUDE-SECURITY-REVISION-<commit>.json`**: el sello de revisión, registrando qué confirmación fue escaneada, con qué esfuerzo, si los cambios no confirmados fueron parte del árbol escaneado, y cuán minuciosamente se verificó la ejecución, para que un informe siempre esté vinculado al código que describe. Un escaneo fuera del control de versiones marca `UNVERSIONED` en lugar de la confirmación123* **`CLAUDE-SECURITY-REVISION-<commit>.json`**: el sello de revisión, registrando qué commit fue escaneado, con qué [esfuerzo de escaneo](#choose-a-scan-effort), si los cambios no confirmados fueron parte del árbol escaneado, y cuán minuciosamente se verificó la ejecución, para que un informe siempre esté vinculado al código que describe. Un escaneo fuera del control de versiones marca `UNVERSIONED` en lugar del commit

106 124 

107Ese directorio es el único cambio que un escaneo hace en tu copia de trabajo, y lleva su propio `.gitignore`, por lo que un `git add` extraviado nunca arrastra un informe a una confirmación. Para mantener un informe en el historial para un registro de auditoría, elimina ese único archivo `.gitignore` y confirma el directorio como cualquier otro.125Ese directorio es el único cambio que un escaneo hace en tu copia de trabajo, y lleva su propio `.gitignore`, por lo que un `git add` extraviado nunca arrastra un informe a una confirmación. Para mantener un informe en el historial para un registro de auditoría, elimina ese único archivo `.gitignore` y confirma el directorio como cualquier otro.

108 126 

desktop.md +64 −0

Details

994* **Shell**: el shell establecido para tu cuenta en la máquina remota tiene que ejecutar los comandos enviados a través de SSH, como lo hacen Bash, Zsh y `sh`994* **Shell**: el shell establecido para tu cuenta en la máquina remota tiene que ejecutar los comandos enviados a través de SSH, como lo hacen Bash, Zsh y `sh`

995* **Red**: Claude Code se ejecuta en la máquina remota y realiza sus solicitudes de red desde allí, por lo que la máquina necesita el [acceso a la red que requiere Claude Code](https://code.claude.com/docs/es/network-config.md#network-access-requirements). Si la máquina no puede descargar Claude Code, Desktop lo descarga en tu computadora y lo sube. Las demás solicitudes de Claude Code siguen saliendo desde la máquina remota. En una máquina remota Linux, si esas solicitudes necesitan un proxy, [establécelo para las sesiones SSH](#set-a-proxy-or-a-ca-certificate-for-ssh-sessions).995* **Red**: Claude Code se ejecuta en la máquina remota y realiza sus solicitudes de red desde allí, por lo que la máquina necesita el [acceso a la red que requiere Claude Code](https://code.claude.com/docs/es/network-config.md#network-access-requirements). Si la máquina no puede descargar Claude Code, Desktop lo descarga en tu computadora y lo sube. Las demás solicitudes de Claude Code siguen saliendo desde la máquina remota. En una máquina remota Linux, si esas solicitudes necesitan un proxy, [establécelo para las sesiones SSH](#set-a-proxy-or-a-ca-certificate-for-ssh-sessions).

996 996 

997#### Comprobar la clave de host de una máquina remota

998 

999Una clave de host es la clave que presenta una máquina remota para demostrar qué máquina es, y una huella digital es una forma abreviada de esa clave. Cuando confías en una clave, tu computadora la guarda y se conecta a lo que la presente, sin volver a preguntar. Comprueba una clave antes de confiar en ella, porque algo podría estar interceptando la conexión.

1000 

1001Primero determina a qué máquina pertenece la clave, según dónde ves la huella digital:

1002 

1003* **Desktop pregunta `Connect to <host> for the first time?`, o seleccionaste Review new key**: la máquina que nombra Desktop, `<host>`

1004* **Desktop pregunta `Connect through <jump host> for the first time?`**: el host de salto, que es la máquina por la que pasa tu conexión, no la máquina a la que quieres llegar

1005* **`ssh` pregunta o advierte en una terminal**: la máquina que nombra su mensaje, que puede no ser la que escribiste

1006 

1007Obtén la huella digital propia de esa máquina desde la máquina, no a través de la conexión que estás comprobando:

1008 

1009* **Otra persona administra la máquina**: pídele la huella digital de su clave de host

1010* **Tú la administras y ejecuta Linux o macOS**: ejecuta `ssh-keygen -lf /etc/ssh/ssh_host_<type>_key.pub` en ella, en su consola o a través de una conexión en la que ya confías. Para `<type>`, usa el tipo de clave que Desktop o `ssh` muestra junto a la huella digital, en minúsculas: `ed25519` para `ED25519` o `ssh-ed25519`.

1011 

1012Luego compara la huella digital propia de la máquina con la que se te mostró:

1013 

1014* **Coinciden**: confía en la clave. Selecciona **Trust and connect** o **Trust new key** en Desktop, o responde `yes` en la terminal.

1015* **Difieren, o no puedes comprobarlo**: no te conectes. Selecciona **Cancel** en Desktop, o responde `no` en la terminal. Si otra persona administra la máquina, dile qué huella digital se te mostró.

1016 

1017Si un paso de solución de problemas te envió aquí, vuelve a ese paso después de cualquiera de los dos resultados.

1018 

997#### Establecer un proxy o un certificado de CA para las sesiones SSH1019#### Establecer un proxy o un certificado de CA para las sesiones SSH

998 1020 

999Si una máquina remota Linux accede a internet a través de un proxy o necesita un certificado de CA, agrega las [variables de proxy y de CA](https://code.claude.com/docs/es/network-config.md) en `env` en el `~/.claude/settings.json` de esa máquina. Agrégalas incluso si ya las exportas en `~/.profile`, `~/.bash_profile`, `~/.zprofile` o `~/.zshrc` en esa máquina.1021Si una máquina remota Linux accede a internet a través de un proxy o necesita un certificado de CA, agrega las [variables de proxy y de CA](https://code.claude.com/docs/es/network-config.md) en `env` en el `~/.claude/settings.json` de esa máquina. Agrégalas incluso si ya las exportas en `~/.profile`, `~/.bash_profile`, `~/.zprofile` o `~/.zshrc` en esa máquina.


2135 2157 

2136Si los controles deslizantes de MCP server no responden o los servidores no se conectan en Windows, verifique que el servidor esté configurado correctamente en su configuración, reinicie la aplicación, verifique que el proceso del servidor se esté ejecutando en Task Manager y revise los registros del servidor para errores de conexión.2158Si los controles deslizantes de MCP server no responden o los servidores no se conectan en Windows, verifique que el servidor esté configurado correctamente en su configuración, reinicie la aplicación, verifique que el proceso del servidor se esté ejecutando en Task Manager y revise los registros del servidor para errores de conexión.

2137 2159 

2160### SSH host key verification failed

2161 

2162Cada uno de estos mensajes significa que Desktop rechazó una [clave de host](#check-a-remote-machines-host-key):

2163 

2164* `SSH host key verification failed` o `Host denied (verification failed)` en **View details** de una tarjeta `Couldn't connect to <host>`

2165* `Connection failed: Host key changed or not trusted` junto al cuadro del prompt o después de **Test connection**

2166* `<host>'s host key is not trusted` o `<host>'s host key has changed` en una sesión desconectada

2167 

2168Desktop suele rechazar una clave porque difiere de la que está guardada en tu computadora, o porque no hay ninguna clave guardada para esa máquina. Una máquina que se reconstruyó o reinstaló suele presentar una clave nueva, y lo mismo ocurre con algo que intercepta la conexión. Verifica la clave antes de volver a conectarte, partiendo de lo que Desktop muestra junto con el mensaje:

2169 

2170* **Estás en Windows y Desktop dice `Connection failed: Host key changed or not trusted`**: primero descarta que [falte el cliente OpenSSH](#ssh-host-key-refused-on-windows-without-an-openssh-client)

2171* **Desktop te indica que configures `UserKnownHostsFile`**: en `~/.ssh/config`, configúralo como `~/.ssh/known_hosts` y luego [verifica la clave desde una terminal](#check-the-host-key-from-a-terminal)

2172* **Ves un botón Review new key**: selecciónalo y [compara](#check-a-remote-machines-host-key) la huella digital que muestra Desktop con la de la propia máquina. Si coinciden, selecciona **Trust new key** para reemplazar la clave guardada. De lo contrario, selecciona **Cancel**.

2173* **No ves ningún botón Review new key, Desktop muestra `Couldn't show the new key`, o Desktop vuelve a rechazar la clave después de Trust new key**: [verifica la clave desde una terminal](#check-the-host-key-from-a-terminal)

2174 

2175#### Verificar la clave de host desde una terminal

2176 

2177Ejecuta `ssh <SSH host>` en tu computadora, con el valor **SSH host** de tu [conexión SSH](#ssh-sessions) en Desktop. Agrega `-p <SSH port>` si la conexión tiene un valor **SSH port**. En Windows, usa PowerShell, porque Desktop no se conecta con el `ssh` de Git Bash ni de WSL. Si PowerShell no encuentra `ssh`, [instala el cliente OpenSSH de Microsoft](#ssh-host-key-refused-on-windows-without-an-openssh-client).

2178 

2179Fíjate en qué máquina nombra `ssh` en su mensaje, que puede ser un jump host y no `<SSH host>`, y luego sigue el caso que corresponda:

2180 

2181* **`ssh` pregunta si quieres continuar con la conexión**: [compara](#check-a-remote-machines-host-key) la huella digital que muestra con la de esa máquina. Responde `yes` solo si coinciden.

2182* **`ssh` advierte que la clave de host cambió**: [compara](#check-a-remote-machines-host-key) la huella digital de la advertencia con la de esa máquina. Solo si coinciden, elimina la línea que indica `Offending <type> key in <file>:<line>` y vuelve a ejecutar `ssh`. Si `ssh` vuelve a advertir sobre otra línea, compara, elimina y vuelve a ejecutar como antes.

2183* **`ssh` rechaza una clave que no conoce, sin preguntar**: obtén la línea de `known_hosts` de esa máquina de quien la administra, no a través de la conexión que estás verificando. Agrega la línea a tu archivo `known_hosts`, con el nombre del mensaje de `ssh` como nombre de host, y vuelve a ejecutar `ssh`.

2184* **`ssh` continúa con el inicio de sesión sin preguntarte por la clave de host**: todavía no escribas ninguna contraseña. [Verifica las claves en las que `ssh` ya confía](#check-the-keys-that-ssh-already-trusts).

2185 

2186Una vez que `ssh` acepte una clave que verificaste o agregaste, reintenta en Desktop. Si Desktop vuelve a rechazar la clave, consulta [Obtener los registros de Desktop para un problema de SSH](#get-desktops-logs-for-an-ssh-problem).

2187 

2188##### Verificar las claves en las que `ssh` ya confía

2189 

2190Vuelve a ejecutar el mismo comando `ssh` agregando `-v -S none`. En su salida, una línea `Server host key:` muestra una huella digital, y la siguiente línea `Host '<name>' is known` nombra la máquina a la que pertenece. [Compara](#check-a-remote-machines-host-key) cada huella digital que encuentres con la de esa máquina.

2191 

2192* **Un jump host no tiene una línea `Server host key:`**: ejecuta también `ssh -v -S none <jump host>` y compara esa huella digital de la misma manera.

2193* **Una huella digital no coincide, o no puedes verificarla**: no vuelvas a conectarte. Elimina la clave guardada: debajo de `Host '<name>' is known`, la línea `Found key in <file>:<line>` nombra el archivo que la contiene. Ejecuta `ssh-keygen -R "<name>" -f <file>`. Si guardas claves de host en más de un archivo, elimina la clave de cada uno. Si no puedes modificar un archivo, avísale a quien administra tu computadora.

2194* **Todas las huellas digitales coinciden**: reintenta en Desktop. Si Desktop vuelve a rechazar la clave, consulta [Obtener los registros de Desktop para un problema de SSH](#get-desktops-logs-for-an-ssh-problem).

2195 

2196### Clave de host SSH rechazada en Windows sin un cliente OpenSSH

2197 

2198En Windows sin un cliente OpenSSH, Desktop rechaza incluso una clave de host correcta, con `Connection failed: Host key changed or not trusted`. Necesita el cliente para buscar las claves guardadas. Para ver si tienes uno, ejecuta `ssh` en PowerShell. Si PowerShell no reconoce `ssh`, instala el [cliente OpenSSH de Microsoft](https://learn.microsoft.com/windows-server/administration/openssh/openssh_install_firstuse) y reinicia Desktop.

2199 

2200Luego vuelve a conectarte. Si Desktop te pregunta si quieres conectarte por primera vez, [verifica la clave de host de la máquina](#check-a-remote-machines-host-key) antes de confiar en ella. Si Desktop sigue rechazando la clave, sigue los demás casos de [SSH host key verification failed](#ssh-host-key-verification-failed).

2201 

2138### La conexión SSH falla después de iniciar sesión2202### La conexión SSH falla después de iniciar sesión

2139 2203 

2140Busca en esta tabla el título de la tarjeta, o el código con el que termina el mensaje de error, y luego haz lo que indica la última columna. Para ver el mensaje, selecciona **View details** en la tarjeta del fallo.2204Busca en esta tabla el título de la tarjeta, o el código con el que termina el mensaje de error, y luego haz lo que indica la última columna. Para ver el mensaje, selecciona **View details** en la tarjeta del fallo.

env-vars.md +2 −2

Details

236| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | Establécela en `1` para eliminar el parámetro `run_in_background` de las herramientas Bash, PowerShell y de subagentes, y para desactivar el atajo Ctrl+B y las ejecuciones en segundo plano de los [skills bifurcados](https://code.claude.com/docs/es/skills.md#run-skills-in-a-subagent). Claude Code entonces también deja de mover automáticamente a segundo plano los subagentes, las llamadas largas a herramientas MCP y los comandos de shell a los que se les agotó el tiempo de espera. Las [tareas MCP](https://code.claude.com/docs/es/mcp.md#make-claude-wait-for-the-result-of-an-mcp-task) y la [herramienta Monitor](https://code.claude.com/docs/es/tools-reference.md#monitor-tool) siguen ejecutándose en segundo plano |236| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | Establécela en `1` para eliminar el parámetro `run_in_background` de las herramientas Bash, PowerShell y de subagentes, y para desactivar el atajo Ctrl+B y las ejecuciones en segundo plano de los [skills bifurcados](https://code.claude.com/docs/es/skills.md#run-skills-in-a-subagent). Claude Code entonces también deja de mover automáticamente a segundo plano los subagentes, las llamadas largas a herramientas MCP y los comandos de shell a los que se les agotó el tiempo de espera. Las [tareas MCP](https://code.claude.com/docs/es/mcp.md#make-claude-wait-for-the-result-of-an-mcp-task) y la [herramienta Monitor](https://code.claude.com/docs/es/tools-reference.md#monitor-tool) siguen ejecutándose en segundo plano |

237| `CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_DEFAULT` | Establécela en `1` para que Claude Code deje de tratar una respuesta en streaming de [Amazon Bedrock](https://code.claude.com/docs/es/amazon-bedrock.md) con un encabezado `Content-Type` ausente o vacío como el flujo de eventos binario de Amazon Bedrock. De forma predeterminada, Claude Code asume que un gateway eliminó el encabezado de una respuesta que por lo demás no se modificó, así que decodifica el cuerpo y el streaming sigue funcionando. Establécela solo para un gateway que además reemite el flujo como eventos enviados por el servidor; Claude Code lee entonces el cuerpo sin encabezado como eventos enviados por el servidor. Requiere Claude Code v2.1.239 o posterior |237| `CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_DEFAULT` | Establécela en `1` para que Claude Code deje de tratar una respuesta en streaming de [Amazon Bedrock](https://code.claude.com/docs/es/amazon-bedrock.md) con un encabezado `Content-Type` ausente o vacío como el flujo de eventos binario de Amazon Bedrock. De forma predeterminada, Claude Code asume que un gateway eliminó el encabezado de una respuesta que por lo demás no se modificó, así que decodifica el cuerpo y el streaming sigue funcionando. Establécela solo para un gateway que además reemite el flujo como eventos enviados por el servidor; Claude Code lee entonces el cuerpo sin encabezado como eventos enviados por el servidor. Requiere Claude Code v2.1.239 o posterior |

238| `CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_GUARD` | Establécela en `1` para omitir la comprobación de que una respuesta en streaming de [Amazon Bedrock](https://code.claude.com/docs/es/amazon-bedrock.md) lleva el content-type `application/vnd.amazon.eventstream`. Sin esta variable, cuando una respuesta lleva un content-type distinto, Claude Code hace fallar la solicitud con un error que nombra ese tipo, lo que significa que un [gateway o proxy está transformando la respuesta](https://code.claude.com/docs/es/amazon-bedrock.md#streaming-errors-behind-a-gateway-or-proxy). Configura el gateway para que reenvíe el encabezado `Content-Type` y el cuerpo sin modificar en lugar de establecer esta variable. Requiere Claude Code v2.1.208 o posterior |238| `CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_GUARD` | Establécela en `1` para omitir la comprobación de que una respuesta en streaming de [Amazon Bedrock](https://code.claude.com/docs/es/amazon-bedrock.md) lleva el content-type `application/vnd.amazon.eventstream`. Sin esta variable, cuando una respuesta lleva un content-type distinto, Claude Code hace fallar la solicitud con un error que nombra ese tipo, lo que significa que un [gateway o proxy está transformando la respuesta](https://code.claude.com/docs/es/amazon-bedrock.md#streaming-errors-behind-a-gateway-or-proxy). Configura el gateway para que reenvíe el encabezado `Content-Type` y el cuerpo sin modificar en lugar de establecer esta variable. Requiere Claude Code v2.1.208 o posterior |

239| `CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF` | Establécela en `1` para detener el trabajo en curso de una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md) cuando el [supervisor](https://code.claude.com/docs/es/agent-view.md#the-supervisor-process) detiene, reinicia o actualiza el proceso de esa sesión, en lugar de entregarlo al siguiente proceso de la sesión. Ese trabajo son los comandos de shell en segundo plano en ejecución y los flujos de trabajo dinámicos de la sesión, además de los subagentes en segundo plano a partir de v2.1.198. Solo afecta a esa entrega: enviar una sesión a segundo plano con `←` o [`/background`](https://code.claude.com/docs/es/agent-view#from-inside-a-session) sigue trasladando el trabajo en segundo plano en curso. Requiere Claude Code v2.1.196 o posterior |239| `CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF` | Establécela en `1` para detener el trabajo en curso de una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md) cuando el [supervisor](https://code.claude.com/docs/es/agent-view.md#the-supervisor-process) detiene, reinicia o actualiza el proceso de esa sesión, en lugar de traspasarlo al siguiente proceso de la sesión. Ese trabajo son los comandos de shell en segundo plano en ejecución de la sesión, además de los subagentes en segundo plano a partir de v2.1.198. Solo afecta a ese traspaso: pasar una sesión a segundo plano con `←` o [`/background`](https://code.claude.com/docs/es/agent-view#from-inside-a-session) sigue trasladando el trabajo en segundo plano en curso. Requiere Claude Code v2.1.196 o posterior |

240| `CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP` | Establécela en `1` para evitar que Claude Code termine los [comandos de shell en segundo plano](https://code.claude.com/docs/es/interactive-mode.md#background-bash-commands) bajo presión de memoria. De forma predeterminada, en macOS y Linux, Claude Code termina los shells en segundo plano cuando el sistema operativo informa una presión de memoria crítica y la sesión ha estado inactiva durante 30 minutos sin ningún turno ni subagente en ejecución. Windows no tiene señal de presión de memoria, por lo que esta variable no tiene efecto allí. Requiere Claude Code v2.1.193 o posterior |240| `CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP` | Establécela en `1` para evitar que Claude Code termine los [comandos de shell en segundo plano](https://code.claude.com/docs/es/interactive-mode.md#background-bash-commands) bajo presión de memoria. De forma predeterminada, en macOS y Linux, Claude Code termina los shells en segundo plano cuando el sistema operativo informa una presión de memoria crítica y la sesión ha estado inactiva durante 30 minutos sin ningún turno ni subagente en ejecución. Windows no tiene señal de presión de memoria, por lo que esta variable no tiene efecto allí. Requiere Claude Code v2.1.193 o posterior |

241| `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` | Establécela en `1` para desactivar los [skills](https://code.claude.com/docs/es/skills.md) y flujos de trabajo incluidos con Claude Code: los skills y flujos de trabajo incluidos se eliminan por completo, mientras que los comandos integrados como `/init` se pueden seguir escribiendo pero se ocultan al modelo. `/doctor` se puede seguir escribiendo como los comandos integrados; ocúltalo con `DISABLE_DOCTOR_COMMAND` en su lugar. Los skills de plugins, `.claude/skills/` y `.claude/commands/` no se ven afectados. Equivale al ajuste [`disableBundledSkills`](https://code.claude.com/docs/es/settings-reference#disablebundledskills) |241| `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` | Establécela en `1` para desactivar los [skills](https://code.claude.com/docs/es/skills.md) y flujos de trabajo incluidos con Claude Code: los skills y flujos de trabajo incluidos se eliminan por completo, mientras que los comandos integrados como `/init` se pueden seguir escribiendo pero se ocultan al modelo. `/doctor` se puede seguir escribiendo como los comandos integrados; ocúltalo con `DISABLE_DOCTOR_COMMAND` en su lugar. Los skills de plugins, `.claude/skills/` y `.claude/commands/` no se ven afectados. Equivale al ajuste [`disableBundledSkills`](https://code.claude.com/docs/es/settings-reference#disablebundledskills) |

242| `CLAUDE_CODE_DISABLE_CFC_PROMPT` | Establécela en `1` para mantener disponibles las herramientas de navegador de [Claude in Chrome](https://code.claude.com/docs/es/chrome.md) mientras se omite la sección de Chrome del prompt del sistema y el [skill incluido](https://code.claude.com/docs/es/skills.md#bundled-skills) `/claude-in-chrome`. Para hosts que integran Claude Code y proporcionan su propia guía de navegador. Requiere Claude Code v2.1.257 o posterior |242| `CLAUDE_CODE_DISABLE_CFC_PROMPT` | Establécela en `1` para mantener disponibles las herramientas de navegador de [Claude in Chrome](https://code.claude.com/docs/es/chrome.md) mientras se omite la sección de Chrome del prompt del sistema y el [skill incluido](https://code.claude.com/docs/es/skills.md#bundled-skills) `/claude-in-chrome`. Para hosts que integran Claude Code y proporcionan su propia guía de navegador. Requiere Claude Code v2.1.257 o posterior |

243| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | Establécela en `1` para evitar cargar cualquier archivo de memoria CLAUDE.md en el contexto, incluidos los archivos de memoria de usuario, de proyecto y de memoria automática |243| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | Establécela en `1` para evitar cargar cualquier archivo de memoria CLAUDE.md en el contexto, incluidos los archivos de memoria de usuario, de proyecto y de memoria automática |

244| `CLAUDE_CODE_DISABLE_CRON` | Establécela en `1` para desactivar las [tareas programadas con alcance de sesión](https://code.claude.com/docs/es/scheduled-tasks.md). El skill `/loop` y las herramientas cron dejan de estar disponibles y cualquier tarea ya programada deja de ejecutarse, incluidas las tareas que ya se están ejecutando a mitad de sesión |244| `CLAUDE_CODE_DISABLE_CRON` | Establécela en `1` para desactivar las [tareas programadas con alcance de sesión](https://code.claude.com/docs/es/scheduled-tasks.md). El skill `/loop` y las herramientas cron dejan de estar disponibles y cualquier tarea ya programada deja de ejecutarse, incluidas las tareas que ya se están ejecutando a mitad de sesión |

245| `CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT` | Establécela en `1` para desactivar el límite de tiempo en las solicitudes de [eliminación de rutas críticas](https://code.claude.com/docs/es/permission-modes.md#critical-paths). En modo `auto`, Claude Code envía entonces estas eliminaciones al clasificador, y en modo `bypassPermissions` la solicitud espera tu respuesta. Establécela en el entorno que inicia Claude Code, ya que Claude Code ignora una copia entregada mediante un bloque `env` de la configuración. Requiere Claude Code v2.1.281 o posterior |245| `CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT` | Establécela en `1` para desactivar el [límite de tiempo y las denegaciones](https://code.claude.com/docs/es/permission-modes.md#time-limits-and-denials-in-auto-and-bypasspermissions-modes) de `auto` y `bypassPermissions` en las eliminaciones de rutas críticas. En ese caso, estas eliminaciones pasan al clasificador en el modo `auto` y reciben una solicitud sin límite de tiempo en el modo `bypassPermissions` siempre que Claude Code pueda mostrar una. Establécela en el entorno que inicia Claude Code, ya que Claude Code ignora una copia entregada mediante un bloque `env` de la configuración. Requiere Claude Code v2.1.281 o posterior |

246| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | Establécela en `1` para eliminar de las solicitudes a la API los encabezados de solicitud `anthropic-beta` de versiones preliminares, los campos del cuerpo que los acompañan y los campos beta del esquema de herramientas, como `defer_loading` y `eager_input_streaming`. Úsala cuando un gateway proxy rechace las solicitudes con un error `Unexpected value(s)` para el encabezado `anthropic-beta` o un error `Extra inputs are not permitted`. [Desactivar las capacidades preliminares](https://code.claude.com/docs/es/llm-gateway-protocol.md#disable-pre-release-capabilities) enumera lo que elimina la variable, incluido [MCP Tool Search](https://code.claude.com/docs/es/mcp.md#scale-with-mcp-tool-search), y lo que Claude Code sigue enviando |246| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | Establécela en `1` para eliminar de las solicitudes a la API los encabezados de solicitud `anthropic-beta` de versiones preliminares, los campos del cuerpo que los acompañan y los campos beta del esquema de herramientas, como `defer_loading` y `eager_input_streaming`. Úsala cuando un gateway proxy rechace las solicitudes con un error `Unexpected value(s)` para el encabezado `anthropic-beta` o un error `Extra inputs are not permitted`. [Desactivar las capacidades preliminares](https://code.claude.com/docs/es/llm-gateway-protocol.md#disable-pre-release-capabilities) enumera lo que elimina la variable, incluido [MCP Tool Search](https://code.claude.com/docs/es/mcp.md#scale-with-mcp-tool-search), y lo que Claude Code sigue enviando |

247| `CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS` | Establécela en `1` para desactivar los [subagentes Explore y Plan](https://code.claude.com/docs/es/sub-agents.md#built-in-subagents) integrados. Claude explora con sus herramientas de búsqueda o con el subagente de propósito general en su lugar, y el [modo plan](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode) lee los archivos directamente en lugar de iniciar los agentes Explore y Plan. Los subagentes personalizados llamados `Explore` o `Plan` no se ven afectados. Para eliminar todos los tipos de subagentes integrados en el Agent SDK o en modo no interactivo, usa `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` en su lugar. Requiere Claude Code v2.1.198 o posterior |247| `CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS` | Establécela en `1` para desactivar los [subagentes Explore y Plan](https://code.claude.com/docs/es/sub-agents.md#built-in-subagents) integrados. Claude explora con sus herramientas de búsqueda o con el subagente de propósito general en su lugar, y el [modo plan](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode) lee los archivos directamente en lugar de iniciar los agentes Explore y Plan. Los subagentes personalizados llamados `Explore` o `Plan` no se ven afectados. Para eliminar todos los tipos de subagentes integrados en el Agent SDK o en modo no interactivo, usa `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` en su lugar. Requiere Claude Code v2.1.198 o posterior |

248| `CLAUDE_CODE_DISABLE_FAST_MODE` | Establécela en `1` para desactivar el [modo rápido](https://code.claude.com/docs/es/fast-mode.md) |248| `CLAUDE_CODE_DISABLE_FAST_MODE` | Establécela en `1` para desactivar el [modo rápido](https://code.claude.com/docs/es/fast-mode.md) |

errors.md +36 −4

Details

244| `MCP server "<name>" was not saved to` / `was not removed from` | [Errores de línea de comandos](#mcp-server-was-not-saved-or-removed) |244| `MCP server "<name>" was not saved to` / `was not removed from` | [Errores de línea de comandos](#mcp-server-was-not-saved-or-removed) |

245| `MCP server "<name>" may not have been saved` / `may not have been removed` | [Errores de línea de comandos](#mcp-server-may-not-have-been-saved-or-removed) |245| `MCP server "<name>" may not have been saved` / `may not have been removed` | [Errores de línea de comandos](#mcp-server-may-not-have-been-saved-or-removed) |

246| `Server rejected the Authorization header minted by the configured headersHelper` | [Errores de línea de comandos](#server-rejected-the-authorization-header-minted-by-the-configured-headershelper) |246| `Server rejected the Authorization header minted by the configured headersHelper` | [Errores de línea de comandos](#server-rejected-the-authorization-header-minted-by-the-configured-headershelper) |

247| `This server (Java MCP SDK 0.17.0 or older) rejected Claude Code's elicitation capability` | [Errores de línea de comandos](#mcp-server-rejected-the-elicitation-capability) |

247| `Error: MCP tool <name> (passed via --permission-prompt-tool) not found` | [Errores de línea de comandos](#mcp-permission-prompt-tool-not-found) |248| `Error: MCP tool <name> (passed via --permission-prompt-tool) not found` | [Errores de línea de comandos](#mcp-permission-prompt-tool-not-found) |

248| `OAuth callback port <port> is already in use — another process may be holding it` | [Errores de línea de comandos](#oauth-callback-port-is-already-in-use) |249| `OAuth callback port <port> is already in use — another process may be holding it` | [Errores de línea de comandos](#oauth-callback-port-is-already-in-use) |

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

250| `Shell command failed for pattern "..."`, desde `/security-review` o cualquier skill que inyecte contexto dinámico | [Errores de línea de comandos](#security-review-fails-without-origin-head) |251| `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) |

251| `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) |252| `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) |

252| ``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) |253| ``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) |

253| `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) |254| `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) |


3280* **`Error: Workspace not trusted. <folder> is your home directory`**: como la confianza para tu directorio home nunca se guarda, ejecutar `claude` ahí primero no sirve. Ejecuta `claude ultrareview` desde un directorio de proyecto en su lugar, después de ejecutar `claude` ahí una vez para aceptar el diálogo de confianza, o agrega `--trust-workspace` al final.3281* **`Error: Workspace not trusted. <folder> is your home directory`**: como la confianza para tu directorio home nunca se guarda, ejecutar `claude` ahí primero no sirve. Ejecuta `claude ultrareview` desde un directorio de proyecto en su lugar, después de ejecutar `claude` ahí una vez para aceptar el diálogo de confianza, o agrega `--trust-workspace` al final.

3281* **`No answer in time.` seguido de `Error: Workspace not trusted`**: la pregunta `Trust <folder>? [y/N]` quedó sin respuesta durante 5 minutos. Vuelve a ejecutar `claude ultrareview` y respóndela.3282* **`No answer in time.` seguido de `Error: Workspace not trusted`**: la pregunta `Trust <folder>? [y/N]` quedó sin respuesta durante 5 minutos. Vuelve a ejecutar `claude ultrareview` y respóndela.

3282* **`Ultrareview did not start: <folder> is not trusted`**: rechazaste la pregunta `Trust <folder>? [y/N]`, por ejemplo respondiendo `n` o presionando Enter. Para iniciar la revisión, vuelve a ejecutar `claude ultrareview` y responde `y`.3283* **`Ultrareview did not start: <folder> is not trusted`**: rechazaste la pregunta `Trust <folder>? [y/N]`, por ejemplo respondiendo `n` o presionando Enter. Para iniciar la revisión, vuelve a ejecutar `claude ultrareview` y responde `y`.

3283* **``Ultrareview did not start: `--trust-workspace` takes no value``**: algo que no es un flag sigue a `--trust-workspace`, como un número de PR o `false`. Si no confías en la carpeta, omite el flag. Para confiar en ella durante esta ejecución, coloca el número de PR o la rama base antes del flag: `claude ultrareview 1234 --trust-workspace`.3284* **``Ultrareview did not start: `--trust-workspace` takes no value``**: algo que no es un flag sigue a `--trust-workspace`, como un número de PR o `false`. Si no confías en la carpeta, no incluyas el flag. Para confiar en ella durante esta ejecución, coloca el número de PR o la rama base antes del flag: `claude ultrareview 1234 --trust-workspace`.

3284 3285 

3285Antes de v2.1.309, `claude ultrareview` no aceptaba `--trust-workspace`.3286Antes de v2.1.309, `claude ultrareview` no aceptaba `--trust-workspace`.

3286 3287 


3473 3474 

3474Antes de v2.1.248, Claude Code ejecutaba el descubrimiento de OAuth para un servidor cuyo helper proporcionaba el encabezado `Authorization`. Ese descubrimiento podía fallar con `Incompatible auth server: does not support dynamic client registration` en lugar de informar la credencial rechazada.3475Antes de v2.1.248, Claude Code ejecutaba el descubrimiento de OAuth para un servidor cuyo helper proporcionaba el encabezado `Authorization`. Ese descubrimiento podía fallar con `Incompatible auth server: does not support dynamic client registration` en lugar de informar la credencial rechazada.

3475 3476 

3477### El servidor MCP rechazó la capacidad de elicitación

3478 

3479Un servidor MCP creado con Java MCP SDK 0.11.0 a 0.17.0 rechazó la conexión. Esas versiones del SDK no pueden analizar los [modos de elicitación](https://code.claude.com/docs/es/mcp.md#elicitation-modes-claude-code-declares) `form` y `url` que Claude Code declara en su handshake. `claude mcp list` muestra el servidor como fallido con este mensaje en lugar del error propio del servidor:

3480 

3481```text theme={null}

3482This server (Java MCP SDK 0.17.0 or older) rejected Claude Code's elicitation capability. Set "bareElicitationCapability": true for it, or upgrade to Java MCP SDK 0.17.1+ (Spring AI 1.0.7+ or 1.1.6+).

3483```

3484 

3485**Qué hacer:**

3486 

3487* Actualiza el servidor a Java MCP SDK 0.17.1 o posterior, o a una de las versiones de Spring AI que menciona el mensaje

3488* O agrega `"bareElicitationCapability": true` a la entrada de ese servidor en tu configuración de MCP y luego reinicia Claude Code. El campo se acepta en entradas stdio, `sse`, `http` y `ws` y requiere Claude Code v2.1.281 o posterior

3489 

3490Esta entrada de `.mcp.json` establece el campo para un servidor HTTP:

3491 

3492```json theme={null}

3493{

3494 "mcpServers": {

3495 "inventory": {

3496 "type": "http",

3497 "url": "https://mcp.example.com/mcp",

3498 "bareElicitationCapability": true

3499 }

3500 }

3501}

3502```

3503 

3504Después del reinicio, `/mcp` muestra el servidor como conectado. Claude Code declara el modo form solo a ese servidor, así que elimina el campo una vez que lo actualices.

3505 

3506Un servidor también puede fallar con su propio texto de error, como uno que contenga `Unrecognized field "form"`. Se aplican las mismas soluciones.

3507 

3476### No se encontró la herramienta de solicitud de permisos de MCP3508### No se encontró la herramienta de solicitud de permisos de MCP

3477 3509 

3478La herramienta que pasaste a [`--permission-prompt-tool`](https://code.claude.com/docs/es/cli-reference#cli-flags) no estaba entre las herramientas MCP conectadas cuando la ejecución necesitó por primera vez una decisión de permisos, ya sea porque su servidor nunca se conectó o porque ningún servidor conectado expone una herramienta con ese nombre. Claude Code igualmente envía tu prompt: la ejecución [no interactiva](https://code.claude.com/docs/es/headless.md) termina con este error, y código de salida 1, en la primera llamada a herramienta, así que no produce ninguna respuesta aunque la solicitud se haya realizado. Antes del primer prompt, Claude Code espera hasta el tiempo de espera de conexión por servidor de 30 segundos establecido por [`MCP_TIMEOUT`](https://code.claude.com/docs/es/env-vars) a que ese servidor se conecte. Antes de v2.1.206, el inicio no esperaba a que el servidor terminara de conectarse, así que un servidor sano pero lento en iniciar también producía este error.3510La herramienta que pasaste a [`--permission-prompt-tool`](https://code.claude.com/docs/es/cli-reference#cli-flags) no estaba entre las herramientas MCP conectadas cuando la ejecución necesitó por primera vez una decisión de permisos, ya sea porque su servidor nunca se conectó o porque ningún servidor conectado expone una herramienta con ese nombre. Claude Code igualmente envía tu prompt: la ejecución [no interactiva](https://code.claude.com/docs/es/headless.md) termina con este error, y código de salida 1, en la primera llamada a herramienta, así que no produce ninguna respuesta aunque la solicitud se haya realizado. Antes del primer prompt, Claude Code espera hasta el tiempo de espera de conexión por servidor de 30 segundos establecido por [`MCP_TIMEOUT`](https://code.claude.com/docs/es/env-vars) a que ese servidor se conecte. Antes de v2.1.206, el inicio no esperaba a que el servidor terminara de conectarse, así que un servidor sano pero lento en iniciar también producía este error.


3541 3573 

3542Hay cadenas similares que se activan antes de que el comando llegue a ejecutarse:3574Hay cadenas similares que se activan antes de que el comando llegue a ejecutarse:

3543 3575 

3544* `Shell command permission check failed for pattern "..."`: la verificación de permisos del comando no lo permitió. [Verificaciones 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 preaprobar un comando con `allowed-tools`3576* `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`

3545* ``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)3577* ``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)

3546* `No shell command in <name> was run`: uno de los comandos `!` del archivo contiene un carácter de control sin procesar distinto de tabulación o salto de línea, así que ninguno de ellos se ejecuta. Consulta [cómo encontrar y eliminar el carácter](#no-shell-command-was-run)3578* `No shell command in <name> was run`: uno de los comandos `!` del archivo contiene un carácter de control sin procesar distinto de tabulación o salto de línea, así que ninguno de ellos se ejecuta. Consulta [cómo encontrar y eliminar el carácter](#no-shell-command-was-run)

3547 3579 


3693 3725 

3694* **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 anterior3726* **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

3695* **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>`)``3727* **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>`)``

3696* **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`.3728* **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 cada rama base obtenida, y en un clon completo ese comando falla con `fatal: --unshallow on a complete repository does not make sense`.

3697 3729 

3698**Qué hacer:**3730**Qué hacer:**

3699 3731 

hooks.md +1 −1

Details

1957 1957 

1958| Campo | Descripción |1958| Campo | Descripción |

1959| :- | :- |1959| :- | :- |

1960| `permissionDecision` | `"allow"` omite la solicitud de permiso, excepto en las [acciones que ningún modo aprueba automáticamente](https://code.claude.com/docs/es/permission-modes.md#actions-no-mode-auto-approves) y en las [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths). `AskUserQuestion` y `ExitPlanMode` necesitan [`updatedInput` junto con `"allow"`](#allow-with-updatedinput). Para el modo plan, consulta [Aprobaciones de hooks en modo plan](https://code.claude.com/docs/es/permissions.md#hook-approvals-in-plan-mode). `"deny"` impide la llamada a herramienta. `"ask"` le pide al usuario que confirme. `"defer"` termina el turno para que la herramienta pueda reanudarse más tarde, y requiere el [modo no interactivo](#defer-a-tool-call-for-later) con el flag `-p`. Las [reglas de denegación y de preguntar](https://code.claude.com/docs/es/permissions.md#manage-permissions) se siguen evaluando independientemente de lo que devuelva el hook |1960| `permissionDecision` | `"allow"` omite la solicitud de permiso, excepto para las [acciones que ningún modo aprueba automáticamente](https://code.claude.com/docs/es/permission-modes.md#actions-no-mode-auto-approves) y las [lecturas desde rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths). Tampoco omite la aprobación de llamadas a [herramientas que una aplicación del Agent SDK marca como `always_ask`](https://code.claude.com/docs/es/agent-sdk/custom-tools#require-approval-for-specific-tools), a menos que el [modo de permisos apruebe la llamada](https://code.claude.com/docs/es/agent-sdk/typescript.md#permission-modes-that-can-approve-an-always_ask-call). `AskUserQuestion` y `ExitPlanMode` necesitan [`updatedInput` junto con `"allow"`](#allow-with-updatedinput). Para el modo plan, consulta [Aprobaciones de hooks en modo plan](https://code.claude.com/docs/es/permissions.md#hook-approvals-in-plan-mode). `"deny"` impide la llamada a herramienta. `"ask"` pide al usuario que confirme. `"defer"` termina el turno para que la herramienta pueda reanudarse más adelante, y requiere el [modo no interactivo](#defer-a-tool-call-for-later) con el flag `-p`. Las [reglas de denegación y de pregunta](https://code.claude.com/docs/es/permissions.md#manage-permissions) se siguen evaluando independientemente de lo que devuelva el hook |

1961| `permissionDecisionReason` | Para `"ask"`, se muestra al usuario en la solicitud de permiso. Cuando Claude Code [deniega la llamada](https://code.claude.com/docs/es/headless.md#turn-off-permission-prompts-in-unattended-runs) en una ejecución `-p` en la que nadie puede responder esa solicitud, Claude lee el motivo en el resultado de la herramienta. Para `"deny"`, se muestra a Claude. Para `"allow"` y `"defer"`, solo se escribe en el [registro de depuración](#debug-hooks) |1961| `permissionDecisionReason` | Para `"ask"`, se muestra al usuario en la solicitud de permiso. Cuando Claude Code [deniega la llamada](https://code.claude.com/docs/es/headless.md#turn-off-permission-prompts-in-unattended-runs) en una ejecución `-p` en la que nadie puede responder esa solicitud, Claude lee el motivo en el resultado de la herramienta. Para `"deny"`, se muestra a Claude. Para `"allow"` y `"defer"`, solo se escribe en el [registro de depuración](#debug-hooks) |

1962| `updatedInput` | Modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, así que incluye los campos sin cambios junto con los modificados. Claude Code evalúa las reglas de permisos y la [elegibilidad para pasar automáticamente a segundo plano](https://code.claude.com/docs/es/tools-reference.md#foreground-commands-that-move-to-the-background) de un comando de Bash con la entrada que devuelve tu hook, no con la entrada que envió Claude. Combínalo con `"allow"` para aprobar automáticamente o con `"ask"` para mostrar la entrada modificada al usuario. Para `"defer"`, se ignora |1962| `updatedInput` | Modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, así que incluye los campos sin cambios junto con los modificados. Claude Code evalúa las reglas de permisos y la [elegibilidad para pasar automáticamente a segundo plano](https://code.claude.com/docs/es/tools-reference.md#foreground-commands-that-move-to-the-background) de un comando de Bash con la entrada que devuelve tu hook, no con la entrada que envió Claude. Combínalo con `"allow"` para aprobar automáticamente o con `"ask"` para mostrar la entrada modificada al usuario. Para `"defer"`, se ignora |

1963| `additionalContext` | Cadena que se agrega al contexto de Claude junto con el resultado de la herramienta. Se ignora cuando `permissionDecision` es `"defer"`. Consulta [Agregar contexto para Claude](#add-context-for-claude) |1963| `additionalContext` | Cadena que se agrega al contexto de Claude junto con el resultado de la herramienta. Se ignora cuando `permissionDecision` es `"defer"`. Consulta [Agregar contexto para Claude](#add-context-for-claude) |

hooks-guide.md +2 −0

Details

629 629 

630* Lecturas desde [rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths)630* Lecturas desde [rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths)

631* Herramientas MCP marcadas con [`requiresUserInteraction`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool)631* Herramientas MCP marcadas con [`requiresUserInteraction`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool)

632* Llamadas a [herramientas que una app del Agent SDK marca como `always_ask`](https://code.claude.com/docs/es/agent-sdk/custom-tools#require-approval-for-specific-tools), a menos que el [modo de permisos apruebe la llamada](https://code.claude.com/docs/es/agent-sdk/typescript.md#permission-modes-that-can-approve-an-always_ask-call)

632* Herramientas de conector [que tu organización configuró como `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde ese ajuste llega a Claude Code633* Herramientas de conector [que tu organización configuró como `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde ese ajuste llega a Claude Code

633 634 

634 Para saber qué hace `"allow"` en modo plan, consulta [Aprobaciones de hooks en modo plan](https://code.claude.com/docs/es/permissions.md#hook-approvals-in-plan-mode).635 Para saber qué hace `"allow"` en modo plan, consulta [Aprobaciones de hooks en modo plan](https://code.claude.com/docs/es/permissions.md#hook-approvals-in-plan-mode).


963* **Lo que sigue prevaleciendo sobre `"allow"`**: un hook que devuelve `"allow"` no elude las reglas de denegación de la configuración, y no puede suprimir la solicitud para:964* **Lo que sigue prevaleciendo sobre `"allow"`**: un hook que devuelve `"allow"` no elude las reglas de denegación de la configuración, y no puede suprimir la solicitud para:

964 * Lecturas desde [rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths)965 * Lecturas desde [rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths)

965 * Herramientas MCP marcadas con [`requiresUserInteraction`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool)966 * Herramientas MCP marcadas con [`requiresUserInteraction`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool)

967 * Llamadas a [herramientas que una aplicación del Agent SDK marca como `always_ask`](https://code.claude.com/docs/es/agent-sdk/custom-tools#require-approval-for-specific-tools), a menos que el [modo de permisos apruebe la llamada](https://code.claude.com/docs/es/agent-sdk/typescript.md#permission-modes-that-can-approve-an-always_ask-call)

966 * Herramientas de conectores [que tu organización estableció en `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde ese ajuste llega a Claude Code968 * Herramientas de conectores [que tu organización estableció en `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde ese ajuste llega a Claude Code

967 969 

968En [modo plan](https://code.claude.com/docs/es/permissions.md#hook-approvals-in-plan-mode), si tu hook `PreToolUse` devuelve `"allow"` para una edición de archivo, obtienes la misma solicitud, bloqueo o aprobación que la edición obtendría sin ningún hook. Para eliminar este límite en las aprobaciones de hooks, [aprueba el plan](https://code.claude.com/docs/es/permission-modes.md#review-and-approve-a-plan) o cambia a otro modo de permisos.970En [modo plan](https://code.claude.com/docs/es/permissions.md#hook-approvals-in-plan-mode), si tu hook `PreToolUse` devuelve `"allow"` para una edición de archivo, obtienes la misma solicitud, bloqueo o aprobación que la edición obtendría sin ningún hook. Para eliminar este límite en las aprobaciones de hooks, [aprueba el plan](https://code.claude.com/docs/es/permission-modes.md#review-and-approve-a-plan) o cambia a otro modo de permisos.

Details

407| [`managedMcpServers`](https://code.claude.com/docs/es/settings-reference#managedmcpservers) | Servidores MCP remotos proporcionados a cada usuario junto con los suyos propios. Proporciona servidores en lugar de bloquear nada. Consulte [Proporcionar servidores a través de configuración administrada](https://code.claude.com/docs/es/managed-mcp.md#provide-servers-through-managed-settings). Requiere Claude Code v2.1.259 o posterior |407| [`managedMcpServers`](https://code.claude.com/docs/es/settings-reference#managedmcpservers) | Servidores MCP remotos proporcionados a cada usuario junto con los suyos propios. Proporciona servidores en lugar de bloquear nada. Consulte [Proporcionar servidores a través de configuración administrada](https://code.claude.com/docs/es/managed-mcp.md#provide-servers-through-managed-settings). Requiere Claude Code v2.1.259 o posterior |

408| [`managedSourcesBehavior`](https://code.claude.com/docs/es/settings-reference#managedsourcesbehavior) | Si Claude Code aplica solo la fuente administrada de mayor prioridad o [compone cada una de ellas](#compose-every-managed-source) |408| [`managedSourcesBehavior`](https://code.claude.com/docs/es/settings-reference#managedsourcesbehavior) | Si Claude Code aplica solo la fuente administrada de mayor prioridad o [compone cada una de ellas](#compose-every-managed-source) |

409| [`parentSettingsBehavior`](https://code.claude.com/docs/es/settings-reference#parentsettingsbehavior) | Si la configuración principal suministrada por el host se fusiona bajo la política administrada |409| [`parentSettingsBehavior`](https://code.claude.com/docs/es/settings-reference#parentsettingsbehavior) | Si la configuración principal suministrada por el host se fusiona bajo la política administrada |

410| [`pluginSuggestionMarketplaces`](https://code.claude.com/docs/es/settings-reference#pluginsuggestionmarketplaces) | Mercados cuyos plugins Claude Code puede sugerir a los usuarios |410| [`pluginSuggestionMarketplaces`](https://code.claude.com/docs/es/settings-reference#pluginsuggestionmarketplaces) | Marketplaces cuyos plugins Claude Code puede sugerir a los usuarios en la terminal |

411| [`pluginTrustMessage`](https://code.claude.com/docs/es/settings-reference#plugintrustmessage) | Mensaje personalizado agregado a la advertencia de confianza de plugin mostrada antes de la instalación |411| [`pluginTrustMessage`](https://code.claude.com/docs/es/settings-reference#plugintrustmessage) | Mensaje personalizado agregado a la advertencia de confianza de plugin mostrada antes de la instalación |

412| [`policyHelper`](https://code.claude.com/docs/es/settings-reference#policyhelper) | Ejecutable que calcula la configuración administrada al inicio; consulte [Calcular configuración administrada con un auxiliar de política](https://code.claude.com/docs/es/settings-reference.md#policyhelper) |412| [`policyHelper`](https://code.claude.com/docs/es/settings-reference#policyhelper) | Ejecutable que calcula la configuración administrada al inicio; consulte [Calcular configuración administrada con un auxiliar de política](https://code.claude.com/docs/es/settings-reference.md#policyhelper) |

413| [`sandbox.filesystem.allowManagedReadPathsOnly`](https://code.claude.com/docs/es/settings-reference#sandbox-filesystem-allowmanagedreadpathsonly) | Cuando es `true`, solo se respetan las rutas `filesystem.allowRead` de la configuración administrada. `denyRead` aún se fusiona de todas las fuentes |413| [`sandbox.filesystem.allowManagedReadPathsOnly`](https://code.claude.com/docs/es/settings-reference#sandbox-filesystem-allowmanagedreadpathsonly) | Cuando es `true`, solo se respetan las rutas `filesystem.allowRead` de la configuración administrada. `denyRead` aún se fusiona de todas las fuentes |

mcp.md +11 −2

Details

1334 1334 

1335Anthropic también proporciona algunos conectores por sí misma, sin que tú o un administrador los agreguen. En cuentas donde [Claude Docs](https://code.claude.com/docs/es/artifacts.md#write-a-document-with-claude-docs) está disponible, `/mcp` enumera `claude.ai Claude Docs` sin configuración, y Claude lo usa cuando le pides un documento destinado a otras personas. Para desactivar solo este conector, consulta [Desactivar conectores de claude.ai](#disable-claude-ai-connectors).1335Anthropic también proporciona algunos conectores por sí misma, sin que tú o un administrador los agreguen. En cuentas donde [Claude Docs](https://code.claude.com/docs/es/artifacts.md#write-a-document-with-claude-docs) está disponible, `/mcp` enumera `claude.ai Claude Docs` sin configuración, y Claude lo usa cuando le pides un documento destinado a otras personas. Para desactivar solo este conector, consulta [Desactivar conectores de claude.ai](#disable-claude-ai-connectors).

1336 1336 

1337Claude Code marca un conector como `managed` en `/mcp` y en el gestor de [`/plugin`](https://code.claude.com/docs/es/plugins/install) cuando su organización gestiona su autenticación en claude.ai. El estado managed no cambia cómo Claude Code se conecta al conector ni aplica los [controles de herramientas](#organization-controls-on-connector-tools) de su organización.1337Claude Code marca un conector como `managed` en `/mcp` y en el gestor de [`/plugin`](https://code.claude.com/docs/es/plugins/install) cuando su organización gestiona su autenticación en claude.ai. El estado managed no cambia cómo Claude Code se conecta al conector ni cómo aplica los [controles de herramientas](#organization-controls-on-connector-tools) de su organización.

1338 1338 

1339Los conectores a los que nunca ha iniciado sesión se contraen detrás de una fila `Show unused connectors` al final de la sección de claude.ai, por lo que una lista provisionada por la organización no llena el panel. Seleccione la fila para expandirlos. Un conector en el que inició sesión antes permanece visible incluso cuando actualmente necesita reautenticación.1339Los conectores a los que nunca ha iniciado sesión se contraen detrás de una fila `Show unused connectors` al final de la sección de claude.ai, por lo que una lista provisionada por la organización no llena el panel. Seleccione la fila para expandirlos. Un conector en el que inició sesión antes permanece visible incluso cuando actualmente necesita reautenticación.

1340 1340 


1624 1624 

1625Si está creando un servidor MCP que utiliza elicitación, consulte la [especificación de elicitación de MCP](https://modelcontextprotocol.io/docs/learn/client-concepts#elicitation) para obtener detalles del protocolo y ejemplos de esquema.1625Si está creando un servidor MCP que utiliza elicitación, consulte la [especificación de elicitación de MCP](https://modelcontextprotocol.io/docs/learn/client-concepts#elicitation) para obtener detalles del protocolo y ejemplos de esquema.

1626 1626 

1627En conexiones que utilizan [revisión de protocolo 2026-07-28](#mcp-client-runtimes), Claude Code declara `elicitation: {form: {}, url: {}}` en sus capacidades de cliente, por lo que un servidor allí puede solicitar cualquiera de los modos a través de la solicitud de elicitación estándar del protocolo.1627### Modos de elicitación que declara Claude Code

1628 

1629Si creas un servidor MCP, las capacidades de cliente que Claude Code envía al conectarse le indican a tu servidor qué modos de elicitación puede solicitar. Claude Code declara `elicitation: {form: {}, url: {}}` en las siguientes conexiones, por lo que un servidor en cualquiera de ellas puede solicitar ambos modos:

1630 

1631* Conexiones que utilizan la [revisión de protocolo 2026-07-28](#mcp-client-runtimes)

1632* Conexiones con las revisiones de protocolo anteriores, 2025-11-25 y más antiguas, a los servidores stdio, `sse`, `http` y `ws` de la configuración MCP de Claude Code de un usuario. Requiere Claude Code v2.1.287 o posterior

1633 

1634En sus demás conexiones con las revisiones anteriores, como con los [conectores de claude.ai](#use-mcp-servers-from-claude-ai), Claude Code declara el `elicitation: {}` simple, que permite solicitudes de elicitación solo en modo de formulario.

1635 

1636Un servidor creado con Java MCP SDK 0.17.0 o anterior puede rechazar una declaración que contenga `form` y `url`. Consulta [MCP server rejected the elicitation capability](https://code.claude.com/docs/es/errors.md#mcp-server-rejected-the-elicitation-capability).

1628 1637 

1629## Usar recursos MCP1638## Usar recursos MCP

1630 1639 

Details

36* Herramientas coincidentes por una [regla de pregunta](https://code.claude.com/docs/es/permissions.md#manage-permissions) explícita36* Herramientas coincidentes por una [regla de pregunta](https://code.claude.com/docs/es/permissions.md#manage-permissions) explícita

37* Herramientas de conector que su organización [estableció en `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools), en sesiones donde esa configuración llega a Claude Code37* Herramientas de conector que su organización [estableció en `ask`](https://code.claude.com/docs/es/mcp#organization-controls-on-connector-tools), en sesiones donde esa configuración llega a Claude Code

38* Herramientas que requieren interacción del usuario: la herramienta integrada `AskUserQuestion` y herramientas MCP marcadas [`requiresUserInteraction`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool)38* Herramientas que requieren interacción del usuario: la herramienta integrada `AskUserQuestion` y herramientas MCP marcadas [`requiresUserInteraction`](https://code.claude.com/docs/es/mcp#require-approval-for-a-specific-tool)

39* Eliminaciones reconocidas de `rm` y `rmdir` en [rutas críticas](#critical-paths), que ninguna regla de permitir ni `"allow"` de un hook `PreToolUse` aprueba39* Eliminaciones reconocidas de `rm` y `rmdir` en [rutas críticas](#critical-paths), que ninguna regla de permitir ni `"allow"` de un hook `PreToolUse` aprueba, y comandos Bash marcados con [`Dangerous rm operation not ruled out`](#dangerous-rm-operation-not-ruled-out)

40* Las [salvaguardas de mensajería entre sesiones](#skip-all-checks-with-bypasspermissions-mode)40* Las [salvaguardas de mensajería entre sesiones](#skip-all-checks-with-bypasspermissions-mode)

41* Lecturas fuera de los directorios de trabajo mientras [`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/es/settings-reference#permissions-blockreadsoutsideworkingdirectories) está activado: los comandos Bash reconocidos de lectura de archivos generan avisos incluso en modo automático y modo `bypassPermissions`, y también lo hace cualquier [reintento sin sandbox](https://code.claude.com/docs/es/sandboxing.md#the-unsandboxed-retry-escape-hatch) que necesita aprobación para ejecutarse fuera del sandbox. Requiere Claude Code v2.1.257 o posterior.41* Lecturas fuera de los directorios de trabajo mientras [`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/es/settings-reference#permissions-blockreadsoutsideworkingdirectories) está activado: los comandos Bash reconocidos de lectura de archivos generan avisos incluso en modo automático y modo `bypassPermissions`, y también lo hace cualquier [reintento sin sandbox](https://code.claude.com/docs/es/sandboxing.md#the-unsandboxed-retry-escape-hatch) que necesita aprobación para ejecutarse fuera del sandbox. Requiere Claude Code v2.1.257 o posterior.

42 42 


265 265 

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

267 267 

268Además de ediciones de archivos, el modo `acceptEdits` aprueba automáticamente comandos Bash comunes del sistema de archivos: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp` y `sed`. Estos comandos también se aprueban automáticamente cuando van precedidos de variables de entorno seguras como `LANG=C` o `NO_COLOR=1`, o envoltorios de procesos como `timeout`, `nice` o `nohup`. Al igual que las ediciones de archivos, la aprobación automática se aplica solo a rutas dentro de su directorio de trabajo o `additionalDirectories`.268Además de ediciones de archivos, el modo `acceptEdits` aprueba automáticamente comandos Bash comunes del sistema de archivos: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp` y `sed`. Excepto `touch`, estos comandos también se aprueban automáticamente cuando van precedidos de variables de entorno seguras como `LANG=C` o `NO_COLOR=1`, o envoltorios de procesos como `timeout`, `nice` o `nohup`. Al igual que las ediciones de archivos, la aprobación automática se aplica solo a rutas dentro de tu directorio de trabajo o `additionalDirectories`.

269 269 

270Estos casos aún solicitan permiso:270Estos casos aún solicitan permiso:

271 271 

272* Rutas fuera de ese alcance272* Rutas fuera de ese alcance

273* Escrituras en [rutas protegidas](#protected-paths)273* Escrituras en [rutas protegidas](#protected-paths)

274* Eliminaciones `rm` y `rmdir` reconocidas como [eliminaciones de rutas críticas](#critical-paths)274* Eliminaciones `rm` y `rmdir` reconocidas como [eliminaciones de rutas críticas](#critical-paths)

275* `touch` con cualquier cosa más allá de rutas de archivo simples, por ejemplo una opción, un glob o un prefijo como `timeout 5` o `LANG=C`

275* Todos los demás comandos Bash excepto el [conjunto integrado de solo lectura](https://code.claude.com/docs/es/permissions.md#read-only-commands)276* Todos los demás comandos Bash excepto el [conjunto integrado de solo lectura](https://code.claude.com/docs/es/permissions.md#read-only-commands)

276 277 

277Cada ruta también pasa por la [verificación de enlaces simbólicos](https://code.claude.com/docs/es/permissions.md#symlinks), por lo que una escritura que se resuelve fuera de ese alcance tampoco se aprueba automáticamente.278Cada ruta también pasa por la [verificación de enlaces simbólicos](https://code.claude.com/docs/es/permissions.md#symlinks), por lo que una escritura que se resuelve fuera de ese alcance tampoco se aprueba automáticamente.


369* **Una conexión directa a la API de Anthropic**: en sesiones interactivas de terminal y en sesiones `-p`, de Agent SDK, de la [extensión de VS Code](https://code.claude.com/docs/es/vs-code.md) y de la [aplicación de escritorio](https://code.claude.com/docs/es/desktop.md), sea cual sea tu plan o tipo de cuenta, a medida que Anthropic lo implementa. En sesiones interactivas de terminal, esto requiere Claude Code v2.1.271 o posterior en los planes Pro, Max y Team, y v2.1.278 o posterior en los planes Enterprise y en cuentas de la API de Claude. En sesiones `-p`, de Agent SDK, de la extensión de VS Code y de la aplicación de escritorio, esto requiere Claude Code v2.1.281 o posterior. Desde v2.1.282, una sesión que [no obtiene feature flags](https://code.claude.com/docs/es/env-vars.md#features-that-need-feature-flag-fetching), por ejemplo porque desactivaste la telemetría, se lo pide al servidor de forma predeterminada en cualquier tipo de sesión.370* **Una conexión directa a la API de Anthropic**: en sesiones interactivas de terminal y en sesiones `-p`, de Agent SDK, de la [extensión de VS Code](https://code.claude.com/docs/es/vs-code.md) y de la [aplicación de escritorio](https://code.claude.com/docs/es/desktop.md), sea cual sea tu plan o tipo de cuenta, a medida que Anthropic lo implementa. En sesiones interactivas de terminal, esto requiere Claude Code v2.1.271 o posterior en los planes Pro, Max y Team, y v2.1.278 o posterior en los planes Enterprise y en cuentas de la API de Claude. En sesiones `-p`, de Agent SDK, de la extensión de VS Code y de la aplicación de escritorio, esto requiere Claude Code v2.1.281 o posterior. Desde v2.1.282, una sesión que [no obtiene feature flags](https://code.claude.com/docs/es/env-vars.md#features-that-need-feature-flag-fetching), por ejemplo porque desactivaste la telemetría, se lo pide al servidor de forma predeterminada en cualquier tipo de sesión.

370* **Un proveedor de nube, o un gateway o proxy de LLM**: en [Claude Platform on AWS](https://code.claude.com/docs/es/claude-platform-on-aws.md), Amazon Bedrock, Google Cloud's Agent Platform y Microsoft Foundry, y siempre que apuntes `ANTHROPIC_BASE_URL` a un [gateway o proxy de LLM](https://code.claude.com/docs/es/llm-gateway), sea cual sea tu plan. Pedirlo de forma predeterminada requiere Claude Code v2.1.278 o posterior.371* **Un proveedor de nube, o un gateway o proxy de LLM**: en [Claude Platform on AWS](https://code.claude.com/docs/es/claude-platform-on-aws.md), Amazon Bedrock, Google Cloud's Agent Platform y Microsoft Foundry, y siempre que apuntes `ANTHROPIC_BASE_URL` a un [gateway o proxy de LLM](https://code.claude.com/docs/es/llm-gateway), sea cual sea tu plan. Pedirlo de forma predeterminada requiere Claude Code v2.1.278 o posterior.

371* **Una sesión del [gateway de aplicaciones de Claude](https://code.claude.com/docs/es/claude-apps-gateway) con sesión iniciada**: requiere Claude Code v2.1.280 o posterior372* **Una sesión del [gateway de aplicaciones de Claude](https://code.claude.com/docs/es/claude-apps-gateway) con sesión iniciada**: requiere Claude Code v2.1.280 o posterior

373* **Una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md) en un entorno alojado por Anthropic**: sea cual sea tu plan, cuando la inicias desde la web, la aplicación móvil o la aplicación de escritorio con **Cloud** seleccionado. Las sesiones iniciadas por una [tarea programada en la nube](https://code.claude.com/docs/es/routines.md) se lo piden al servidor a medida que Anthropic lo implementa.

372 374 

373Donde el servidor revisa las acciones, sus veredictos las deciden. Hay otros dos resultados posibles:375Donde el servidor revisa las acciones, sus veredictos las deciden. Hay otros dos resultados posibles:

374 376 


647 649 

648El modo `bypassPermissions` desactiva los avisos de permisos y las comprobaciones de seguridad para que las llamadas a herramientas se ejecuten inmediatamente, incluidas las escrituras en [rutas protegidas](#protected-paths).650El modo `bypassPermissions` desactiva los avisos de permisos y las comprobaciones de seguridad para que las llamadas a herramientas se ejecuten inmediatamente, incluidas las escrituras en [rutas protegidas](#protected-paths).

649 651 

650Las [acciones que ningún modo aprueba automáticamente](#actions-no-mode-auto-approves) siguen pidiendo confirmación en este modo. Leer [el artefacto público de otra organización](https://code.claude.com/docs/es/artifacts.md#read-an-artifact-shared-with-you) requiere tu aprobación, y este modo no la solicita, así que Claude no puede leer uno. Las denegaciones de [Remove-Item en PowerShell](#remove-item-in-powershell) también se aplican en este modo.652Incluso en modo `bypassPermissions`, cada una de las [acciones que ningún modo aprueba automáticamente](#actions-no-mode-auto-approves) recibe una solicitud de confirmación o una denegación en lugar de ejecutarse por sí sola. Leer [el artefacto público de otra organización](https://code.claude.com/docs/es/artifacts.md#read-an-artifact-shared-with-you) requiere tu aprobación, y este modo no la solicita, así que Claude no puede leer uno. Las denegaciones de [Remove-Item en PowerShell](#remove-item-in-powershell) también se aplican en este modo.

651 653 

652Dos [salvaguardas de mensajería entre sesiones](https://code.claude.com/docs/es/cross-session-messaging.md) aún se aplican en este modo, y en sesiones de modo plan de terminal interactivo donde los permisos de omisión están disponibles:654Dos [salvaguardas de mensajería entre sesiones](https://code.claude.com/docs/es/cross-session-messaging.md) aún se aplican en este modo, y en sesiones de modo plan de terminal interactivo donde los permisos de omisión están disponibles:

653 655 


769* `.devcontainer.json`771* `.devcontainer.json`

770* `.ripgreprc`, `pyrightconfig.json`772* `.ripgreprc`, `pyrightconfig.json`

771* `.mcp.json`, `.claude.json`773* `.mcp.json`, `.claude.json`

774* Un archivo que pasaste a [`--settings`](https://code.claude.com/docs/es/cli-reference#cli-flags), `--mcp-config` o `--agents` al iniciar la sesión

772* El archivo al que apunta tu [archivo de configuración](https://code.claude.com/docs/es/settings.md#settings-files-and-who-they-affect) de usuario, de proyecto o local cuando el propio archivo de configuración es un enlace simbólico, por ejemplo hacia un repositorio de dotfiles. En los modos que enrutan escrituras en rutas protegidas al clasificador, una escritura en este archivo te pide confirmación en su lugar, incluso cuando coincide una regla de permitir. Si la ruta propia del archivo también es la de un archivo de configuración, como `.claude/settings.json` en otra carpeta, la escritura va al clasificador como ocurre con otras escrituras en rutas protegidas775* El archivo al que apunta tu [archivo de configuración](https://code.claude.com/docs/es/settings.md#settings-files-and-who-they-affect) de usuario, de proyecto o local cuando el propio archivo de configuración es un enlace simbólico, por ejemplo hacia un repositorio de dotfiles. En los modos que enrutan escrituras en rutas protegidas al clasificador, una escritura en este archivo te pide confirmación en su lugar, incluso cuando coincide una regla de permitir. Si la ruta propia del archivo también es la de un archivo de configuración, como `.claude/settings.json` en otra carpeta, la escritura va al clasificador como ocurre con otras escrituras en rutas protegidas

773 776 

774## Rutas críticas777## Rutas críticas


844 847 

845Para un glob o barra diagonal final bajo una variable, el aviso nombra el `rm` marcado y dice cómo reescribirlo para que la verificación pase.848Para un glob o barra diagonal final bajo una variable, el aviso nombra el `rm` marcado y dice cómo reescribirlo para que la verificación pase.

846 849 

850### La solicitud `Dangerous rm operation not ruled out`

851 

852El motivo completo dice:

853 

854```text theme={null}

855Dangerous rm operation not ruled out — the shell may read this command differently than it was parsed

856```

857 

858Este motivo significa que el shell puede leer el comando de forma distinta a como lo hizo Claude Code, así que una eliminación podría estar en una parte no verificada, incluso sin que haya un `rm` presente. En modo `auto` o `bypassPermissions`, una denegación con esta frase proviene de la misma verificación:

859 

860```text theme={null}

861This command could not be checked for dangerous rm operations: the shell may read it differently than it was parsed.

862```

863 

864Recibes la solicitud de permiso o la denegación que recibe una eliminación de ruta crítica [en tu modo de permisos](#critical-path-removals-in-each-permission-mode), `bypassPermissions` incluido. No puedes aprobar el comando con una regla de permiso `Bash` o `Bash(*)`, el [modo de aprobación automática](https://code.claude.com/docs/es/sandboxing.md#auto-allow-mode) del sandbox ni un hook `PreToolUse` que devuelva `"allow"`. Lee el comando y luego aprueba la solicitud o, tras una denegación, ejecútalo en tu shell.

865 

847### La solicitud de unidad montada866### La solicitud de unidad montada

848 867 

849La solicitud de unidad montada aparece en macOS, Linux y WSL cuando un `rm` recursivo se dirige a una [ruta de unidad montada](#paths-that-get-the-mounted-drive-prompt) de la lista, como `/mnt/c` o `/Volumes/USB/build`. Su motivo dice `Dangerous rm operation on mounted drive path: <path>`. Un objetivo `/*` recibe la solicitud sin el flag recursivo, ya que Claude Code lee `rm /Volumes/USB/build/*` como una eliminación de `/Volumes/USB/build`.868La solicitud de unidad montada aparece en macOS, Linux y WSL cuando un `rm` recursivo se dirige a una [ruta de unidad montada](#paths-that-get-the-mounted-drive-prompt) de la lista, como `/mnt/c` o `/Volumes/USB/build`. Su motivo dice `Dangerous rm operation on mounted drive path: <path>`. Un objetivo `/*` recibe la solicitud sin el flag recursivo, ya que Claude Code lee `rm /Volumes/USB/build/*` como una eliminación de `/Volumes/USB/build`.


900| `plan` | Le solicita que la apruebe. Cuando [el clasificador revisa comandos durante la planificación](#analyze-before-you-edit-with-plan-mode) y no hay permisos de omisión disponibles, la maneja como en modo `auto` |919| `plan` | Le solicita que la apruebe. Cuando [el clasificador revisa comandos durante la planificación](#analyze-before-you-edit-with-plan-mode) y no hay permisos de omisión disponibles, la maneja como en modo `auto` |

901| `auto` | Le solicita que la apruebe en la terminal, con un [límite de tiempo](#time-limits-and-denials-in-auto-and-bypasspermissions-modes). En otros lugares, la deniega |920| `auto` | Le solicita que la apruebe en la terminal, con un [límite de tiempo](#time-limits-and-denials-in-auto-and-bypasspermissions-modes). En otros lugares, la deniega |

902| `dontAsk` | La deniega |921| `dontAsk` | La deniega |

903| `bypassPermissions` | Le solicita que la apruebe, con un límite de tiempo en la terminal |922| `bypassPermissions` | En la terminal, te pide que la apruebes antes de que se agote un límite de tiempo. En otros lugares, consulta [qué sucede en cada lugar](#time-limits-and-denials-in-auto-and-bypasspermissions-modes) |

904 923 

905Si una [regla `ask`](https://code.claude.com/docs/es/permissions#manage-permissions) explícita coincide con el comando, Claude Code le solicita incluso en modo `auto` y sin límite de tiempo. En modos que solicitan, un [hook `PermissionRequest`](https://code.claude.com/docs/es/hooks#permissionrequest) puede responder el aviso.924Si una [regla `ask`](https://code.claude.com/docs/es/permissions#manage-permissions) explícita coincide con el comando, Claude Code le solicita incluso en modo `auto` y sin límite de tiempo. En modos que solicitan, un [hook `PermissionRequest`](https://code.claude.com/docs/es/hooks#permissionrequest) puede responder el aviso.

906 925 


912* Presione cualquier tecla mientras el aviso está abierto para detener la cuenta regresiva y mantener el aviso esperando su respuesta.931* Presione cualquier tecla mientras el aviso está abierto para detener la cuenta regresiva y mantener el aviso esperando su respuesta.

913* Después de que tres de estos avisos se agoten sin respuesta en una sesión, Claude Code deja de mostrarlos y deniega las eliminaciones de rutas críticas posteriores inmediatamente. Enviar un nuevo mensaje reinicia el contador.932* Después de que tres de estos avisos se agoten sin respuesta en una sesión, Claude Code deja de mostrarlos y deniega las eliminaciones de rutas críticas posteriores inmediatamente. Enviar un nuevo mensaje reinicia el contador.

914 933 

915En modo `auto`, dondequiera que Claude Code no pueda mostrarle un aviso de terminal, deniega el comando inmediatamente, por ejemplo en [ejecuciones no interactivas](https://code.claude.com/docs/es/headless.md) con `-p`, en sesiones de [Agent SDK](https://code.claude.com/docs/es/agent-sdk/permissions.md), y en el panel de chat de la extensión de VS Code y la aplicación de escritorio. La denegación le dice a Claude que informe qué quería eliminar y deje la eliminación para usted.934El límite de tiempo se aplica en Claude Code v2.1.281 y posterior, al igual que la denegación del modo `auto` fuera de la terminal.

935 

936Fuera de la terminal, no recibes esa solicitud de permiso:

916 937 

917El manejo de `auto` y `bypassPermissions` requiere Claude Code v2.1.281 o posterior. Para desactivarlo, establezca [`CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT=1`](https://code.claude.com/docs/es/env-vars#variables) en el entorno que inicia Claude Code. En modo `auto`, las eliminaciones de rutas críticas van al clasificador en su lugar, y en modo `bypassPermissions` el aviso no tiene límite de tiempo.938| Dónde | `auto` | `bypassPermissions` |

939| :- | :- | :- |

940| Panel de chat de la [extensión de VS Code](https://code.claude.com/docs/es/vs-code.md) | La deniega | La deniega a menos que un [hook `PermissionRequest`](https://code.claude.com/docs/es/hooks#permissionrequest) la permita |

941| [Aplicación de escritorio](https://code.claude.com/docs/es/desktop.md) | La deniega | La deniega a menos que un hook `PermissionRequest` la permita |

942| [Ejecución con `-p`](https://code.claude.com/docs/es/headless) o [sesión de Agent SDK](https://code.claude.com/docs/es/agent-sdk/permissions.md) | La deniega | Decide tu [`--permission-prompt-tool`](https://code.claude.com/docs/es/cli-reference#cli-flags) o tu [callback `canUseTool`](https://code.claude.com/docs/es/agent-sdk/user-input#handle-tool-approval-requests). Sin ninguno de ellos, o con [`--permission-prompts none`](https://code.claude.com/docs/es/headless#turn-off-permission-prompts-in-unattended-runs), la deniega a menos que un hook `PermissionRequest` la permita |

943 

944Dondequiera que se deniegue la eliminación, puedes leer el comando completo y ejecutarlo en tu shell.

945 

946Para cambiar lo que recibes en cada modo, establece [`CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT`](https://code.claude.com/docs/es/env-vars#variables) en `1`:

947 

948* **`bypassPermissions`**: la solicitud de permiso de la terminal no tiene límite de tiempo, y el panel de chat de VS Code te pregunta

949* **`auto`**: decide el [clasificador](#eliminate-prompts-with-auto-mode), en la terminal, el panel de chat de VS Code, las ejecuciones con `-p` y las sesiones de Agent SDK

950 

951Establécela en el entorno que inicia Claude Code, como tu shell o la opción `env` del SDK, no en un archivo de configuración de Claude Code. Para el panel de chat, agrégala a [`claudeCode.environmentVariables`](https://code.claude.com/docs/es/vs-code#extension-settings) en el `settings.json` de usuario del propio VS Code y luego inicia una nueva conversación:

952 

953```json theme={null}

954{

955 "claudeCode.environmentVariables": [

956 { "name": "CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT", "value": "1" }

957 ]

958}

959```

918 960 

919### Remove-Item en PowerShell961### Remove-Item en PowerShell

920 962 

Details

41 41 

42Si un tutorial o un conjunto de instrucciones más antiguas le dice que ejecute `/plugin marketplace add anthropics/claude-code`, eso agrega el marketplace de demostración, llamado `claude-code-plugins`. No es el marketplace oficial.42Si un tutorial o un conjunto de instrucciones más antiguas le dice que ejecute `/plugin marketplace add anthropics/claude-code`, eso agrega el marketplace de demostración, llamado `claude-code-plugins`. No es el marketplace oficial.

43 43 

44La mayoría de los plugins del marketplace de demostración también están en el marketplace oficial con los mismos nombres. Por ejemplo, `code-review`, `feature-dev`, `commit-commands` y `security-guidance` están en ambos. Instale esos desde `claude-plugins-official` para no tener dos copias instaladas.44La mayoría de los plugins del marketplace de demostración también están en el marketplace oficial con los mismos nombres. Por ejemplo, `code-review`, `feature-dev` y `commit-commands` están en ambos. Instala esos desde `claude-plugins-official` para no tener dos copias instaladas.

45 45 

46## Encontrar plugins en el marketplace oficial46## Encontrar plugins en el marketplace oficial

47 47 

Details

403 403 

404Para rangos de versión, la convención de etiqueta git `<plugin>--v<version>` contra la que se resuelven, y la confianza entre marketplaces, consulte [Plugin dependencies](https://code.claude.com/docs/es/plugins/dependencies.md).404Para rangos de versión, la convención de etiqueta git `<plugin>--v<version>` contra la que se resuelven, y la confianza entre marketplaces, consulte [Plugin dependencies](https://code.claude.com/docs/es/plugins/dependencies.md).

405 405 

406Para que Claude Code sugiera un plugin cuando un proyecto coincida con él, agregue un bloque `relevance` a la entrada con las señales que identifican el proyecto. Los usuarios ven sugerencias de su marketplace solo cuando un administrador lo lista en `pluginSuggestionMarketplaces`. Para las señales y el paso de habilitación, consulte [Plugin relevance](https://code.claude.com/docs/es/plugins/relevance.md).406Para que Claude Code sugiera un plugin cuando un proyecto coincida con él, agrega un bloque `relevance` a la entrada con las señales que identifican el proyecto. Los usuarios ven estas sugerencias solo cuando un administrador lista tu marketplace en `pluginSuggestionMarketplaces`. Para las señales y el paso de habilitación, consulta [Plugin relevance](https://code.claude.com/docs/es/plugins/relevance.md).

407 407 

408## Work around what a marketplace can't do408## Work around what a marketplace can't do

409 409 

Details

95 95 

96Ninguno de estos controles ejecuta un mod en un sandbox. Un mod que permites se ejecuta como el usuario, con el acceso del usuario a archivos, procesos y la red.96Ninguno de estos controles ejecuta un mod en un sandbox. Un mod que permites se ejecuta como el usuario, con el acceso del usuario a archivos, procesos y la red.

97 97 

98### Conoce qué hooks del mod de un usuario no se ejecutan

99 

100Donde se carga la [protección integrada](#know-what-happens-by-default), un hook que el mod de un usuario registra en uno de estos eventos nunca se ejecuta, y `/plugin` se lo indica a ese usuario en una nota. En las filas de [`session.append`](https://code.claude.com/docs/es/plugins/mods/reference#session), `door` es el tipo de fila almacenada por el que se filtra el hook.

101 

102| Hook en | Qué es el evento |

103| :- | :- |

104| [`classic.<Event>`](https://code.claude.com/docs/es/plugins/mods/events#hook-the-settings-hook-events), como `classic.Stop` | Un [evento de hook de configuración](https://code.claude.com/docs/es/hooks.md#hook-events) |

105| [`prompt.compose`](https://code.claude.com/docs/es/plugins/mods/reference#prompts-and-what-claude-reads) | La lista de secciones del prompt del sistema |

106| `prompt.section` | Una sección del prompt del sistema |

107| `prompt.context` | El contexto que se envía con el primer mensaje de una conversación |

108| `prompt.attachment` | Un mensaje que Claude Code agrega para Claude, como un recordatorio |

109| `skill.prompt` | El texto de un skill tal como se expande para Claude |

110| `attribution.text` | El texto de atribución de un commit o un pull request |

111| [`session.compact`](https://code.claude.com/docs/es/plugins/mods/reference#session) | Una compactación de la conversación |

112| `settings.read` | Una lectura de la configuración, como una llamada `$.settings.read` de un mod |

113| `session.append{door=attachment}` | La fila almacenada de un mensaje que Claude Code agrega para Claude |

114| `session.append{door=hook-context}` | La fila almacenada del contexto de un hook de configuración |

115| `session.append{door=compaction}` | Las filas almacenadas del resumen y el límite de una compactación |

116 

117La protección también pasa por alto los hooks de un usuario en algunos otros casos, como las descripciones de las herramientas de tu organización, en [`tool.describe`](https://code.claude.com/docs/es/plugins/mods/reference#tools), y la fila almacenada del texto de un skill. `/plugin` no muestra ninguna nota para esos casos. Si un hook en otro evento no hace nada, consulta [Averigua por qué un mod no hace nada](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing).

118 

119La nota aparece en los detalles del plugin y en la pestaña **Errors** de `/plugin`. Requiere Claude Code v2.1.299 o posterior. Nombra cada hook de la tabla tal como lo registró el mod, como en este ejemplo:

120 

121```text theme={null}

122Its hooks on classic.Stop, prompt.section do not run here: where an organization manages Claude Code, these events pass over the plugins you install

123Only a plugin that counts as your organization's own runs hooks on these events. An administrator sets that up in managed settings

124```

125 

126Para permitir que estos hooks se ejecuten, cambia la configuración administrada de una de dos formas:

127 

128* **Ejecuta el mod como de tu organización**: [instala el mod para que cuente como tuyo](#install-your-organizations-mods). Así, sus hooks en estos eventos se ejecutan y la protección sigue cargada para todos los demás mods. El mod se activa para todos los que reciben esta configuración, y tiene que estar en un directorio que coloques en cada máquina. Si lo incluyes en `prependPlugins`, mantén `sec-default@builtin` en la lista.

129* **Elimina la protección**: deja `sec-default@builtin` fuera de `prependPlugins`. Basta con una lista vacía, `"prependPlugins": []`. Pierdes toda la protección, no solo estos eventos. El mod de un usuario puede entonces hacer lo que [la protección le impide hacer en otro caso](#know-what-happens-by-default), y [las opciones de la protección](#set-options-on-the-built-in-guard) no se aplican.

130 

131Si entregas una lista sin la protección mediante [configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md#fetch-and-caching-behavior), la protección sigue cargada hasta que el servidor confirma la configuración para la sesión. Para confirmar cualquiera de los dos cambios en una máquina que ejecuta v2.1.299 o posterior, abre `/plugin` en una sesión allí y comprueba que la nota ya no aparece.

132 

133Un hook `session.append` sin filtro `door` sigue ejecutándose y no recibe ninguna nota, pero las filas almacenadas de la tabla no le llegan.

134 

98## Decide si dejar los mods activados135## Decide si dejar los mods activados

99 136 

100Un mod puede hacer más que las otras partes de un plugin porque se ejecuta dentro de Claude Code. Ve cada prompt y cada llamada a herramienta, puede modificarlos y puede permitir o denegar una llamada a herramienta antes de que aparezca una solicitud de permiso.137Un mod puede hacer más que las otras partes de un plugin porque se ejecuta dentro de Claude Code. Ve cada prompt y cada llamada a herramienta, puede modificarlos y puede permitir o denegar una llamada a herramienta antes de que aparezca una solicitud de permiso.


142| `$.prompt.submit` | Envía un prompt y puede enviarlo como si fueran las propias palabras del usuario |179| `$.prompt.submit` | Envía un prompt y puede enviarlo como si fueran las propias palabras del usuario |

143| `$.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) |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) |

144 181 

145En la línea `hooks:`, [`tool.call`](https://code.claude.com/docs/es/plugins/mods/reference#tools) y [`prompt.submit`](https://code.claude.com/docs/es/plugins/mods/reference#prompts-and-what-claude-reads) significan que el mod ve cada llamada a herramienta y cada prompt, y puede modificarlos. [`session.append`](https://code.claude.com/docs/es/plugins/mods/reference#session) significa que el mod puede reescribir cada fila de la conversación antes de que se almacene. [`ui.render{component=AskUserQuestion}`](https://code.claude.com/docs/es/plugins/mods/interface#change-what-claude-code-already-draws) significa que el mod puede volver a dibujar el diálogo que Claude usa para hacerle una pregunta al usuario. `tool.check` significa que el mod puede aprobar o denegar una llamada a herramienta antes de que aparezca una solicitud de permiso. [Conoce lo que sucede de forma predeterminada](#know-what-happens-by-default) enumera cuáles de tus reglas y hooks tienen precedencia sobre su respuesta.182En la línea `hooks:`, [`tool.call`](https://code.claude.com/docs/es/plugins/mods/reference#tools) y [`prompt.submit`](https://code.claude.com/docs/es/plugins/mods/reference#prompts-and-what-claude-reads) significan que el mod ve cada llamada a herramienta y cada prompt, y puede modificarlos. [`session.append`](https://code.claude.com/docs/es/plugins/mods/reference#session) significa que el mod puede reescribir cada fila de la conversación antes de que se almacene, salvo [las filas que la protección omite](#hooks-the-guard-passes-over). [`ui.render{component=AskUserQuestion}`](https://code.claude.com/docs/es/plugins/mods/interface#change-what-claude-code-already-draws) significa que el mod puede volver a dibujar el diálogo que Claude usa para hacerle una pregunta al usuario. `tool.check` significa que el mod puede aprobar o denegar una llamada a herramienta antes de que aparezca una solicitud de permiso. [Conoce lo que sucede de forma predeterminada](#know-what-happens-by-default) enumera cuáles de tus reglas y hooks tienen precedencia sobre su respuesta.

146 183 

147## Elige cuánto permitir184## Elige cuánto permitir

148 185 

Details

377 377 

378### Manejar los eventos de los hooks de configuración378### Manejar los eventos de los hooks de configuración

379 379 

380Los hooks de configuración son los hooks de comando, HTTP, prompt y agente que configuras en los archivos de configuración. Cada [evento de hook de configuración](https://code.claude.com/docs/es/hooks.md#hook-events), como `Stop`, `SessionEnd` o `PostToolUse`, también es un evento llamado `classic.` seguido del nombre del evento del hook de configuración, como `classic.Stop`. `e` es el JSON que un hook de configuración recibe por stdin, incluido `transcript_path`.380Los hooks de configuración son los hooks de comando, HTTP, prompt y agente que configuras en los archivos de configuración. Cada [evento de hook de configuración](https://code.claude.com/docs/es/hooks.md#hook-events), como `Stop`, `SessionEnd` o `PostToolUse`, también es un evento llamado `classic.` seguido del nombre del evento del hook de configuración, como `classic.Stop`. `e` es el JSON que un hook de configuración recibe por stdin, incluido `transcript_path`. Donde se carga la [protección integrada](https://code.claude.com/docs/es/plugins/mods/admin.md#know-what-happens-by-default), [un hook en estos eventos en un mod que instalas no se ejecuta](https://code.claude.com/docs/es/plugins/mods/admin.md#hooks-the-guard-passes-over).

381 381 

382Este hook usa `Stop`, que se dispara cuando Claude termina de responder, para registrar dónde se guarda la transcripción de la sesión:382Este hook usa `Stop`, que se dispara cuando Claude termina de responder, para registrar dónde se guarda la transcripción de la sesión:

383 383 


425* **Falló antes de llamar a `next`**: Claude Code lo omite, y el siguiente controlador se ejecuta en su lugar425* **Falló antes de llamar a `next`**: Claude Code lo omite, y el siguiente controlador se ejecuta en su lugar

426* **Falló después de que `next` se resolvió**: ese resultado se mantiene, y nada se ejecuta por segunda vez426* **Falló después de que `next` se resolvió**: ese resultado se mantiene, y nada se ejecuta por segunda vez

427 427 

428Una línea indica el mod, el evento y el motivo, por ejemplo `my-mod: tool.call hook skipped: threw Error: boom`. Dónde la lees depende de la sesión, como se indica en [Averiguar por qué un mod no hace nada](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing). Un hook `ui.render` cuyo dibujo no se valida se informa de otra manera, como se describe en [Construir un árbol a partir de elementos](https://code.claude.com/docs/es/plugins/mods/interface.md#build-a-tree-from-elements).428Una línea indica el mod, el evento y el motivo, por ejemplo `my-mod: tool.call hook skipped: threw Error: boom`. Dónde la lees depende de la sesión, como se indica en [Averiguar por qué un mod no hace nada](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing). Un hook `ui.render` cuyo [árbol no se valida](https://code.claude.com/docs/es/plugins/mods/interface.md#build-a-tree-from-elements) cuenta como uno que devolvió un resultado con una forma incorrecta.

429 429 

430Para que un hook que bloquea llamadas falle de forma cerrada, agrega un controlador de errores `.catch` que responda en su lugar. Aquí, `guard` es tu función de hook, y el controlador comprueba [`next.called`](https://code.claude.com/docs/es/plugins/mods/reference#the-hook-function) para saber si `guard` ya había llamado a `next` cuando falló:430Para que un hook que bloquea llamadas falle de forma cerrada, agrega un controlador de errores `.catch` que responda en su lugar. Aquí, `guard` es tu función de hook, y el controlador comprueba [`next.called`](https://code.claude.com/docs/es/plugins/mods/reference#the-hook-function) para saber si `guard` ya había llamado a `next` cuando falló:

431 431 

Details

421Note: Type a note and press Enter421Note: Type a note and press Enter

422```422```

423 423 

424Agrega `rows` para que el campo admita varias líneas. Enter sigue enviando el texto, y una barra invertida antes de Enter inicia una nueva línea, al igual que Shift+Enter donde [la terminal lo admite](https://code.claude.com/docs/es/terminal-config.md#enter-multiline-prompts). La galería muestra [un campo con `rows`](https://code.claude.com/docs/es/plugins/mods/gallery#input).

425 

424La [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:426La [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:

425 427 

426| Elemento | Qué dibuja | Dónde |428| Elemento | Qué dibuja | Dónde |


436 438 

437Si tu módulo es un archivo `.tsx` o `.jsx`, puedes escribir el árbol como JSX. Primero desestructura los elementos de `$.ui.resolve(e)`.439Si tu módulo es un archivo `.tsx` o `.jsx`, puedes escribir el árbol como JSX. Primero desestructura los elementos de `$.ui.resolve(e)`.

438 440 

439Si un árbol usa un elemento que la aplicación no tiene, una prop que un elemento no acepta o un hijo donde no va ninguno, Claude Code dibuja su propia versión del sitio.441Si tu dibujo no aparece, revisa si su árbol tiene una prop que un elemento no acepta o un hijo donde no va ninguno. Un hook que devuelve un árbol así [falla](https://code.claude.com/docs/es/plugins/mods/events.md#handle-a-hook-that-fails), y una [línea `hook skipped`](https://code.claude.com/docs/es/plugins/mods/troubleshoot#a-pane-or-band-is-empty) indica el nombre de tu mod y la regla que el árbol incumplió. Para un `Text` en un panel con una prop llamada `bogusProp`, esa línea dice:

440 442 

441En una sesión iniciada con `--plugin-dir`, una línea de la transcripción lo indica, por ejemplo `ui.render (Pane) refused: Text prop "bogusProp" is not allowed; the engine drew its own`. El [registro de depuración](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#read-the-debug-log) lo registra como `ui.render (Pane): a hook returned a tree that does not validate` con el mismo motivo. No aparece nada más en la sesión, así que cuando un dibujo no se muestre, revisa esa línea o el registro.443```text theme={null}

444my-mod: ui.render hook skipped: returned the wrong shape (a tree Pane refuses: Text prop "bogusProp" is not allowed)

445```

442 446 

443### `Link` en la aplicación Desktop y VS Code447### `Link` en la aplicación Desktop y VS Code

444 448 


542| Tecla | Qué hace |546| Tecla | Qué hace |

543| :- | :- |547| :- | :- |

544| Tab | Pasa al siguiente control |548| Tab | Pasa al siguiente control |

545| Arriba y Abajo | Se mueven entre controles mientras tu dibujo cabe. Cuando el panel o la banda tiene más filas de las que puede mostrar, lo desplazan. |549| Arriba y Abajo | Se mueven entre controles mientras tu dibujo cabe. Cuando el panel o la banda tiene más filas de las que puede mostrar, lo desplazan. En un `Input`, primero [se mueven entre las filas del campo](https://code.claude.com/docs/es/plugins/mods/gallery.md#input). |

546| Enter | Pulsa el `Button` con el foco, envía el `Input` con el foco o elige en un `Select` |550| Enter | Pulsa el `Button` con el foco, envía el `Input` con el foco o elige en un `Select` |

547| La tecla de acceso rápido de un botón | Pulsa ese botón. Mientras un `Input` tiene el foco, toda tecla imprimible va al campo. |551| La tecla de acceso rápido de un botón | Pulsa ese botón. Mientras un `Input` tiene el foco, toda tecla imprimible va al campo. |

548| Re Pág, Av Pág, Inicio y Fin | Desplazan tu panel o banda cuando tiene más filas de las que puede mostrar |552| Re Pág, Av Pág, Inicio y Fin | Desplazan tu panel o banda cuando tiene más filas de las que puede mostrar |

Details

275| [`Link`](https://code.claude.com/docs/es/plugins/mods/interface#link-in-the-desktop-app) | `href`, `label`. Consulta [Límites](#limits). | ✓ | ✓ | ✓ |275| [`Link`](https://code.claude.com/docs/es/plugins/mods/interface#link-in-the-desktop-app) | `href`, `label`. Consulta [Límites](#limits). | ✓ | ✓ | ✓ |

276| [`Code`](https://code.claude.com/docs/es/plugins/mods/gallery#show-code-and-changes) | `source`, `language`, `path`, `startLine`, `format`, `wrap` | ✓ | ✓ | ✓ |276| [`Code`](https://code.claude.com/docs/es/plugins/mods/gallery#show-code-and-changes) | `source`, `language`, `path`, `startLine`, `format`, `wrap` | ✓ | ✓ | ✓ |

277| `Markdown` | `text`, `key`, `dimColor`, `onLinkPress`, `pressableLinks` | ✓ | ✓ | ✓ |277| `Markdown` | `text`, `key`, `dimColor`, `onLinkPress`, `pressableLinks` | ✓ | ✓ | ✓ |

278| [`Input`](https://code.claude.com/docs/es/plugins/mods/interface#take-typed-input-and-draw-a-row-for-each-item) | `key`, `label`, `placeholder`, `value`, `submitLabel`, `onSubmit`, `onInput`, `autoFocus` | ✓ | ✓ | ✓ |278| [`Input`](https://code.claude.com/docs/es/plugins/mods/interface#take-typed-input-and-draw-a-row-for-each-item) | `key`, `label`, `placeholder`, `value`, `submitLabel`, [`rows`](https://code.claude.com/docs/es/plugins/mods/gallery#input), `onSubmit`, `onInput`, `autoFocus` | ✓ | ✓ | ✓ |

279| `Select` | `key`, `label`, `options`, `value`, `onSelect`, `autoFocus` | ✓ | ✓ | ✓ |279| `Select` | `key`, `label`, `options`, `value`, `onSelect`, `autoFocus` | ✓ | ✓ | ✓ |

280| `Svg` | un `source` de marcado SVG de hasta 131,072 caracteres, texto `alt`, `width`, `height` e `isInteractive` | | ✓ | ✓ |280| `Svg` | un `source` de marcado SVG de hasta 131,072 caracteres, texto `alt`, `width`, `height` e `isInteractive` | | ✓ | ✓ |

281| [`Client`](https://code.claude.com/docs/es/plugins/mods/interface#build-a-tree-from-elements) | `module`, `key`, `props`, `width`, `height`, `flexGrow` | ✓ | ✓ | |281| [`Client`](https://code.claude.com/docs/es/plugins/mods/interface#build-a-tree-from-elements) | `module`, `key`, `props`, `width`, `height`, `flexGrow` | ✓ | ✓ | |


333 333 

334Si estableces `gap`, `padding` o `margin` en un paso, el paso se aplica en horizontal y en vertical a la vez. Por ejemplo, en la terminal y en la extensión de VS Code, `padding: 'md'` equivale a dos celdas a cada lado y una fila arriba y abajo.334Si estableces `gap`, `padding` o `margin` en un paso, el paso se aplica en horizontal y en vertical a la vez. Por ejemplo, en la terminal y en la extensión de VS Code, `padding: 'md'` equivale a dos celdas a cada lado y una fila arriba y abajo.

335 335 

336Los nombres de paso requieren Claude Code v2.1.299 o posterior. En una versión anterior, Claude Code [dibuja su propia versión del sitio](https://code.claude.com/docs/es/plugins/mods/interface.md#build-a-tree-from-elements) en lugar de un árbol que usa un nombre de paso.336Los nombres de paso requieren Claude Code v2.1.299 o posterior. En una versión anterior, un árbol que usa un nombre de paso no se dibuja.

337 337 

338### Props tipográficas de `Text`338### Props tipográficas de `Text`

339 339 


346| `mono` | `true` para pedir la tipografía monoespaciada de la aplicación | Se ignora: la terminal siempre es monoespaciada | Se ignora, así que el texto conserva la tipografía propia de la extensión |346| `mono` | `true` para pedir la tipografía monoespaciada de la aplicación | Se ignora: la terminal siempre es monoespaciada | Se ignora, así que el texto conserva la tipografía propia de la extensión |

347| `tabular` | `true` para pedir dígitos de ancho uniforme, de modo que un número que se actualiza en su lugar o una columna de números se mantenga alineada | Se ignora: los dígitos de la terminal ya ocupan una celda de ancho | Se ignora |347| `tabular` | `true` para pedir dígitos de ancho uniforme, de modo que un número que se actualiza en su lugar o una columna de números se mantenga alineada | Se ignora: los dígitos de la terminal ya ocupan una celda de ancho | Se ignora |

348 348 

349Estas cuatro props requieren Claude Code v2.1.299 o posterior. En una versión anterior, Claude Code [dibuja su propia versión del sitio](https://code.claude.com/docs/es/plugins/mods/interface.md#build-a-tree-from-elements) en lugar de un árbol que establece `size`, `weight`, `mono` o `tabular`.349Estas cuatro props requieren Claude Code v2.1.299 o posterior. En una versión anterior, un árbol que establece `size`, `weight`, `mono` o `tabular` no se dibuja.

350 350 

351#### Reemplaza `bold` por `weight`351#### Reemplaza `bold` por `weight`

352 352 

353`bold` en un `Text` está obsoleto en favor de `weight` y sigue funcionando. Para reemplazarlo en un `Text` sin `weight`, cambia `bold: true` por `weight: 'semibold'` para obtener el mismo resultado en Claude Code v2.1.299 o posterior.353`bold` en un `Text` está obsoleto en favor de `weight` y sigue funcionando. Para reemplazarlo en un `Text` sin `weight`, cambia `bold: true` por `weight: 'semibold'` para obtener el mismo resultado en Claude Code v2.1.299 o posterior.

354 354 

355En una versión anterior a v2.1.299, un árbol que establece `weight` no se dibuja, y Claude Code [dibuja su propia versión del sitio](https://code.claude.com/docs/es/plugins/mods/interface.md#build-a-tree-from-elements) en su lugar. Si estableces tanto `bold` como `weight` en un `Text`, `bold` no tiene efecto.355En una versión anterior a v2.1.299, un árbol que establece `weight` no se dibuja. Si estableces tanto `bold` como `weight` en un `Text`, `bold` no tiene efecto.

356 356 

357## Límites357## Límites

358 358 

359Las llamadas a la API de hooks y mods se ejecutan con límites de tiempo y de tamaño. Claude Code omite un hook que supera un límite de tiempo.359Las llamadas a la API de hooks y mods se ejecutan con límites de tiempo y de tamaño. Claude Code omite un hook que supera un límite de tiempo. Un árbol que supera el límite de anidamiento, de elementos, de celdas de `Raster` o de bytes de `Image` [no se dibuja](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#a-pane-or-band-is-empty).

360 360 

361| Límite | Valor |361| Límite | Valor |

362| :- | :- |362| :- | :- |


372| Redirecciones que sigue una llamada a `$.http.fetch` | 5 |372| Redirecciones que sigue una llamada a `$.http.fetch` | 5 |

373| El motivo de `drop` de un hook o el motivo de `deny` de `config.set` | 4,096 caracteres. Se corta el final de un motivo más largo, y el drop o deny se sigue aplicando. El corte requiere Claude Code v2.1.292 o posterior, y en versiones anteriores el hook [falla](https://code.claude.com/docs/es/plugins/mods/events.md#handle-a-hook-that-fails) en su lugar. |373| El motivo de `drop` de un hook o el motivo de `deny` de `config.set` | 4,096 caracteres. Se corta el final de un motivo más largo, y el drop o deny se sigue aplicando. El corte requiere Claude Code v2.1.292 o posterior, y en versiones anteriores el hook [falla](https://code.claude.com/docs/es/plugins/mods/events.md#handle-a-hook-that-fails) en su lugar. |

374| Texto en un árbol | Se dibujan los primeros 100,000 caracteres |374| Texto en un árbol | Se dibujan los primeros 100,000 caracteres |

375| El `language` o `path` de un `Code`, el `value` de una opción de `Select` o el `module` de un `Client` | 10,000 caracteres. Si alguno es más largo, Claude Code [dibuja su propia versión del sitio](https://code.claude.com/docs/es/plugins/mods/interface.md#build-a-tree-from-elements). |375| El `language` o `path` de un `Code`, el `value` de una opción de `Select` o el `module` de un `Client` | 10,000 caracteres. Si alguno es más largo, el hook `ui.render` que lo devolvió [falla](https://code.claude.com/docs/es/plugins/mods/events.md#handle-a-hook-that-fails). |

376| El `href` de un `Link` | 2,048 caracteres. Un `href` más largo impide que se dibuje todo el árbol. |376| El `href` de un `Link` | 2,048 caracteres. Si es más largo, el hook `ui.render` que lo devolvió [falla](https://code.claude.com/docs/es/plugins/mods/events.md#handle-a-hook-that-fails). |

377| Profundidad de anidamiento de un árbol | 32 niveles por debajo del elemento raíz |

378| Elementos e hijos de texto en un árbol | 20,000 |

379| Celdas de `Raster` en un árbol, las `columns` de cada `Raster` multiplicadas por sus `rows` | 262,144 |

380| Bytes PNG o RGBA de todas las `Image` de un árbol | 2 MiB |

377| `$.store` | 4 MiB de JSON en total |381| `$.store` | 4 MiB de JSON en total |

378| `$.session.messages()` | Las 4,096 entradas más recientes |382| `$.session.messages()` | Las 4,096 entradas más recientes |

379| Redibujados de `$.ui.invalidate('ui.render')` | Limitados a 10 por segundo, o 30 en la terminal para el panel visible, la banda expandida y la línea de sugerencia debajo del prompt. Las llamadas que llegan antes se agrupan. |383| Redibujados de `$.ui.invalidate('ui.render')` | Limitados a 10 por segundo, o 30 en la terminal para el panel visible, la banda expandida y la línea de sugerencia debajo del prompt. Las llamadas que llegan antes se agrupan. |

Details

312| Método | Qué hace |312| Método | Qué hace |

313| :- | :- |313| :- | :- |

314| `press({ key: 'more' })` | Presiona el `Button` con esa key |314| `press({ key: 'more' })` | Presiona el `Button` con esa key |

315| `input({ key: 'new-note', text: 'buy milk' })` | Escribe el texto en el `Input` con esa key y presiona Enter. Agrega `kind: 'change'` para escribir sin enviar. |315| `input({ key: 'new-note', text: 'buy milk' })` | Escribe el texto en el `Input` con esa key y presiona Enter. Agrega `kind: 'change'` para escribir sin enviar. Para un campo con `rows`, el texto puede contener `\n`. |

316| `select({ key: 'size', value: 'large' })` | Elige la opción con ese valor en el `Select` con esa key |316| `select({ key: 'size', value: 'large' })` | Elige la opción con ese valor en el `Select` con esa key |

317| `find({ key: 'more' })` o `find({ type: 'Text', text: 'Count: 2' })` | Devuelve el primer elemento que coincide como `{ type, props, children }`, o `undefined`. `text` puede ser una cadena o una expresión regular. |317| `find({ key: 'more' })` o `find({ type: 'Text', text: 'Count: 2' })` | Devuelve el primer elemento que coincide como `{ type, props, children }`, o `undefined`. `text` puede ser una cadena o una expresión regular. |

318| `unmount()` | Elimina el dibujo |318| `unmount()` | Elimina el dibujo |

319 319 

320Cada método se resuelve después de que tu handler ha terminado, así que puedes verificar el resultado en la línea siguiente. Establece `props` con lo que Claude Code pasaría para ese punto. La [tabla de puntos de renderizado](https://code.claude.com/docs/es/plugins/mods/reference.md#render-sites) enumera las props de cada punto, y [los tipos para tu compilación](https://code.claude.com/docs/es/plugins/mods/create.md#get-the-types-for-your-build) incluyen sus tipos.320Cada método se resuelve después de que tu handler ha terminado, así que puedes verificar el resultado en la línea siguiente. Establece `props` con lo que Claude Code pasaría para ese punto. La [tabla de puntos de renderizado](https://code.claude.com/docs/es/plugins/mods/reference.md#render-sites) enumera las props de cada punto, y [los tipos para tu compilación](https://code.claude.com/docs/es/plugins/mods/create.md#get-the-types-for-your-build) incluyen sus tipos.

321 321 

322Una prueba de dibujo verifica el árbol que devuelve tu hook y si es válido para esa app. No verifica cómo lo pinta la app, así que revisa también un nuevo diseño en una sesión real.322Para detectar un [árbol de elementos](https://code.claude.com/docs/es/plugins/mods/interface.md#build-a-tree-from-elements) que no es válido para la app que indicaste en `surface`, usa `find` para buscar un elemento que agrega tu hook. La prueba no verifica cómo la app pinta un árbol, así que revisa también un nuevo diseño en una sesión real.

323 323 

324### Probar un dibujo después de `/clear`324### Probar un dibujo después de `/clear`

325 325 

Details

226 226 

227Para 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.227Para 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.

228 228 

229Después del cambio, no ves nada en la banda si alguno de los mods devuelve un árbol que no pasa la validación. Para leer el motivo, busca una línea `ui.render (AbovePrompt) refused:` en la transcripción de una sesión con `--plugin-dir`, o busca `does not validate` en el registro de depuración. Con varios mods en la banda, ninguna de las dos líneas nombra un mod, así que revisa el árbol de cada mod.229La 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).

230 230 

231### Un panel o una banda está vacío o muestra el contenido habitual de Claude Code231### Un panel o una banda está vacío o muestra el contenido habitual de Claude Code

232 232 

233El [árbol](https://code.claude.com/docs/es/plugins/mods/interface.md#build-a-tree-from-elements) que devolvió tu hook no pasó la validación. Con `--plugin-dir`, la transcripción dice `ui.render (Pane) refused:` con el motivo, como en `first-mod: ui.render (Pane) refused: Box prop "flexDirection" must be one of row, column, row-reverse, column-reverse; the engine drew its own`. El registro de depuración tiene `a hook returned a tree that does not validate` con el mismo motivo.233El [árbol](https://code.claude.com/docs/es/plugins/mods/interface.md#build-a-tree-from-elements) que devolvió tu hook no pasó la validación. Una línea [`hook skipped`](#hook-skipped) [en la transcripción o en el registro de depuración](#find-out-why-a-mod-does-nothing) nombra tu mod y el motivo, como en esta para un `Box` en un panel:

234 234 

235Lee el motivo en esa línea. Las causas comunes son una prop que el elemento no acepta y un elemento que la app no tiene.235```text theme={null}

236first-mod: ui.render hook skipped: returned the wrong shape (a tree Pane refuses: Box prop "flexDirection" must be one of row, column, row-reverse, column-reverse)

237```

238 

239Corrige lo que indica el motivo. Si el motivo aparece recortado, [escribe un registro de depuración](#read-the-debug-log) y busca en él `a hook returned a tree that does not validate` para leer el resto.

240 

241Si, en cambio, la línea dice `refused:` justo después del nombre del punto de renderizado, como en `ui.render (Pane) refused:`, consulta [Una línea de `ui.render` dice `refused`](#ui-render-refused).

242 

243### Una línea de `ui.render` dice `refused`

244 

245`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.

246 

247Cambia 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:

248 

249```text theme={null}

250hooks: ui.render (AbovePrompt) refused: deeper than 32; nothing was drawn

251```

252 

253Antes 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.

236 254 

237### `needs a key`, `is drawn twice` o `key each once`255### `needs a key`, `is drawn twice` o `key each once`

238 256 


383hooks module first-mod@inline loaded (worker, environment 2, tier user); events: session.start,tool.call,command.run,ui.render401hooks module first-mod@inline loaded (worker, environment 2, tier user); events: session.start,tool.call,command.run,ui.render

384```402```

385 403 

386Un dibujo que no pasó la validación cuenta como un resultado rechazado y también recibe una línea. Para escribir tus propias líneas en el registro, llama a [`$.ui.log`](https://code.claude.com/docs/es/plugins/mods/api#show-something-without-starting-a-turn) con un segundo argumento, como en `$.ui.log('message', { to: 'debug' })`. Sin el segundo argumento, `$.ui.log` agrega una línea atenuada a la transcripción.404Para escribir tus propias líneas en el registro, llama a [`$.ui.log`](https://code.claude.com/docs/es/plugins/mods/api#show-something-without-starting-a-turn) con un segundo argumento, como en `$.ui.log('message', { to: 'debug' })`. Sin el segundo argumento, `$.ui.log` agrega una línea atenuada a la transcripción.

387 405 

388Mientras editas un mod cargado con `--plugin-dir`, la transcripción muestra una línea por cada recarga que nombra el mod y enumera sus hooks. Si un guardado rompe el módulo, la línea dice `reload failed, the previous version stays loaded:` con el motivo, y la última versión que funcionaba sigue ejecutándose hasta que Claude Code vuelva a recargar los plugins, por ejemplo cuando ejecutas `/reload-plugins`.406Mientras editas un mod cargado con `--plugin-dir`, la transcripción muestra una línea por cada recarga que nombra el mod y enumera sus hooks. Si un guardado rompe el módulo, la línea dice `reload failed, the previous version stays loaded:` con el motivo, y la última versión que funcionaba sigue ejecutándose hasta que Claude Code vuelva a recargar los plugins, por ejemplo cuando ejecutas `/reload-plugins`.

389 407 

plugins/org.md +6 −2

Details

182| `blockedMarketplaces` | Blocklist de fuentes de marketplace, verificada antes de la allowlist | No bloquea un marketplace ya registrado desde una fuente que no coincide |182| `blockedMarketplaces` | Blocklist de fuentes de marketplace, verificada antes de la allowlist | No bloquea un marketplace ya registrado desde una fuente que no coincide |

183| `syncClaudeAiPlugins` | Establezca `false` para detener que Claude Code descargue y cargue los plugins [sincronizados desde claude.ai](https://code.claude.com/docs/es/plugins/loading.md#synced-plugins) para la cuenta de cada usuario. Requiere Claude Code v2.1.273 o posterior | No desactiva un plugin sincronizado. Para eso, establezca `"<name>@synced": false` en [`enabledPlugins`](https://code.claude.com/docs/es/settings-reference#enabledplugins) |183| `syncClaudeAiPlugins` | Establezca `false` para detener que Claude Code descargue y cargue los plugins [sincronizados desde claude.ai](https://code.claude.com/docs/es/plugins/loading.md#synced-plugins) para la cuenta de cada usuario. Requiere Claude Code v2.1.273 o posterior | No desactiva un plugin sincronizado. Para eso, establezca `"<name>@synced": false` en [`enabledPlugins`](https://code.claude.com/docs/es/settings-reference#enabledplugins) |

184| `enabledPlugins` | `true` fuerza la habilitación, `false` bloquea en todos los alcances y oculta el plugin | No instala un plugin cuyo marketplace no está registrado o permitido |184| `enabledPlugins` | `true` fuerza la habilitación, `false` bloquea en todos los alcances y oculta el plugin | No instala un plugin cuyo marketplace no está registrado o permitido |

185| `disableSideloadFlags` | Rechaza `--plugin-dir`, `--plugin-url`, `--agents`, la opción `plugins` del SDK de Agent, y `--mcp-config` no SDK al inicio, y rechaza carpetas nombradas en la variable [`CLAUDE_CODE_PLUGIN_DIRS`](https://code.claude.com/docs/es/env-vars#variables) de la misma manera | No restringe `.mcp.json`, `claude mcp add`, o servidores proporcionados por SDK. Emparéjelo con [`allowedMcpServers`](https://code.claude.com/docs/es/managed-mcp) |185| `disableSideloadFlags` | Rechaza al inicio `--plugin-dir`, `--plugin-url`, `--agents`, la opción `plugins` del Agent SDK y las carpetas nombradas en la variable [`CLAUDE_CODE_PLUGIN_DIRS`](https://code.claude.com/docs/es/env-vars#variables), y también `--mcp-config` a menos que cada servidor en él sea una entrada en proceso `type: "sdk"`. Rechaza las carpetas de plugins que una aplicación del Agent SDK agrega a mitad de la sesión con [`addPlugins`](https://code.claude.com/docs/es/agent-sdk/typescript#load-more-plugin-folders-with-addplugins) | No restringe `.mcp.json`, `claude mcp add` ni los servidores proporcionados por el SDK. Combínalo con [`allowedMcpServers`](https://code.claude.com/docs/es/managed-mcp) |

186| `disableCommandPluginSources` | Bloquea plugins con una fuente `command` de instalar, actualizar o cargar. Una fuente `command` es una cuyo directorio de plugin se produce ejecutando un comando en la máquina. Cuando no se establece, toma el valor de `allowManagedHooksOnly` | No afecta otros tipos de fuente |186| `disableCommandPluginSources` | Bloquea plugins con una fuente `command` de instalar, actualizar o cargar. Una fuente `command` es una cuyo directorio de plugin se produce ejecutando un comando en la máquina. Cuando no se establece, toma el valor de `allowManagedHooksOnly` | No afecta otros tipos de fuente |

187| `allowManagedHooksOnly` | Restringe qué hooks se ejecutan. Consulte [`allowManagedHooksOnly`](https://code.claude.com/docs/es/settings-reference#allowmanagedhooksonly) | No confía en hooks de plugins que los usuarios habilitan a sí mismos |187| `allowManagedHooksOnly` | Restringe qué hooks se ejecutan. Consulte [`allowManagedHooksOnly`](https://code.claude.com/docs/es/settings-reference#allowmanagedhooksonly) | No confía en hooks de plugins que los usuarios habilitan a sí mismos |

188| `strictPluginOnlyCustomization` | Bloquea skills, agentes, hooks y servidores MCP que no provienen de un plugin, de la configuración administrada ni de los elementos integrados de Claude Code. También impide que se carguen los [plugins de directorio de skills](#keep-skills-directory-plugins-loading). Establécelo en `true` para cubrir los cuatro tipos, o en un array de valores `skills`, `agents`, `hooks` y `mcp` como `["skills", "hooks"]` para cubrir algunos | No restringe qué plugins instalan los usuarios. Combínalo con `strictKnownMarketplaces` |188| `strictPluginOnlyCustomization` | Bloquea skills, agentes, hooks y servidores MCP que no provienen de un plugin, de la configuración administrada ni de los elementos integrados de Claude Code. También impide que se carguen los [plugins de directorio de skills](#keep-skills-directory-plugins-loading). Establécelo en `true` para cubrir los cuatro tipos, o en un array de valores `skills`, `agents`, `hooks` y `mcp` como `["skills", "hooks"]` para cubrir algunos | No restringe qué plugins instalan los usuarios. Combínalo con `strictKnownMarketplaces` |

189| `pluginSuggestionMarketplaces` | Marketplaces cuyos plugins pueden aparecer como sugerencias de instalación. Consulte [Recommend plugins](#recommend-plugins) | No afecta los consejos built-in |189| `pluginSuggestionMarketplaces` | Marketplaces cuyos plugins pueden aparecer como sugerencias de instalación en la terminal. Consulta [Recomendar plugins](#recommend-plugins) | No afecta a los consejos integrados |

190| `pluginTrustMessage` | Agrega su texto al aviso de confianza que `/plugin` muestra antes de que se instale un plugin | No cambia el texto del aviso en sí |190| `pluginTrustMessage` | Agrega su texto al aviso de confianza que `/plugin` muestra antes de que se instale un plugin | No cambia el texto del aviso en sí |

191| `allowedChannelPlugins` | Reemplaza la lista predeterminada de plugins permitidos para enviar mensajes de canal. Requiere `channelsEnabled: true` | Consulte [Restrict which channel plugins can run](https://code.claude.com/docs/es/channels.md#restrict-which-channel-plugins-can-run) |191| `allowedChannelPlugins` | Reemplaza la lista predeterminada de plugins permitidos para enviar mensajes de canal. Requiere `channelsEnabled: true` | Consulte [Restrict which channel plugins can run](https://code.claude.com/docs/es/channels.md#restrict-which-channel-plugins-can-run) |

192| [`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL=1`](https://code.claude.com/docs/es/env-vars) | Detiene las sesiones de terminal interactivas de auto-registrar el marketplace oficial | No elimina un marketplace ya registrado. La allowlist y blocklist cierran el mismo auto-registro sin él. Una máquina que comenzó una vez con él establecido no reanuda el auto-registro después de desestablecerlo |192| [`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL=1`](https://code.claude.com/docs/es/env-vars) | Detiene las sesiones de terminal interactivas de auto-registrar el marketplace oficial | No elimina un marketplace ya registrado. La allowlist y blocklist cierran el mismo auto-registro sin él. Una máquina que comenzó una vez con él establecido no reanuda el auto-registro después de desestablecerlo |


361 361 

362Las sugerencias de un marketplace aparecen solo cuando está registrado en la máquina del usuario, enumera su nombre en `pluginSuggestionMarketplaces` en la configuración administrada, y declara su fuente en la misma política. Declare la fuente como la entrada `extraKnownMarketplaces` del marketplace o como una entrada de allowlist. El marketplace oficial solo necesita el nombre. Consulte [Enable suggestions in managed settings](https://code.claude.com/docs/es/plugins/relevance.md#enable-suggestions-in-managed-settings).362Las sugerencias de un marketplace aparecen solo cuando está registrado en la máquina del usuario, enumera su nombre en `pluginSuggestionMarketplaces` en la configuración administrada, y declara su fuente en la misma política. Declare la fuente como la entrada `extraKnownMarketplaces` del marketplace o como una entrada de allowlist. El marketplace oficial solo necesita el nombre. Consulte [Enable suggestions in managed settings](https://code.claude.com/docs/es/plugins/relevance.md#enable-suggestions-in-managed-settings).

363 363 

364> [!NOTE]

365>

366> En la conversación de una sesión en la nube, Claude puede sugerir plugins independientemente de si configuras `pluginSuggestionMarketplaces`. Para desactivar esas sugerencias, consulta [Desactivar las sugerencias de plugins](https://code.claude.com/docs/es/claude-code-on-the-web.md#turn-off-plugin-suggestions).

367 

364## Audit and review368## Audit and review

365 369 

366Los eventos de OpenTelemetry y la API de Analytics le dicen qué instala y ejecuta su flota.370Los eventos de OpenTelemetry y la API de Analytics le dicen qué instala y ejecuta su flota.

Details

8 8 

9Claude Code puede sugerir la instalación de un plugin del marketplace de su organización cuando la sesión de un usuario coincide con señales que usted define para ese plugin. Las señales incluyen el directorio de trabajo, los archivos que Claude ha leído y los comandos que Claude ha ejecutado. Las define agregando un bloque `relevance` a la entrada del plugin en `marketplace.json`.9Claude Code puede sugerir la instalación de un plugin del marketplace de su organización cuando la sesión de un usuario coincide con señales que usted define para ese plugin. Las señales incluyen el directorio de trabajo, los archivos que Claude ha leído y los comandos que Claude ha ejecutado. Las define agregando un bloque `relevance` a la entrada del plugin en `marketplace.json`.

10 10 

11Un operador del marketplace escribe las entradas de `relevance`. Un administrador luego permite el marketplace en la configuración administrada. Los usuarios no ven sugerencias de un marketplace hasta que se permita.11Un operador del marketplace escribe las entradas de `relevance`. Luego, un administrador agrega el marketplace a la lista de permitidos en la configuración administrada. En la terminal, los usuarios no ven sugerencias de un marketplace hasta que se agrega a la lista de permitidos.

12 12 

13> [!NOTE]13> [!NOTE]

14>14>

15> Estos casos se cubren en otras páginas:15> Estos casos se cubren en otras páginas:

16>16>

17> * **Desea instalar plugins**: consulte [Instalar y administrar plugins](https://code.claude.com/docs/es/plugins/install.md)17> * **Quieres instalar plugins**: consulta [Instalar y administrar plugins](https://code.claude.com/docs/es/plugins/install.md)

18> * **Desea desactivar sugerencias**: consulte [Entender cómo funciona la relevancia de plugins](#understand-how-plugin-relevance-works)18> * **Quieres desactivar las sugerencias**: consulta [Entender cómo funciona la relevancia de plugins](#understand-how-plugin-relevance-works) o, para las sugerencias que Claude hace en la conversación de una sesión en la nube, [Desactivar las sugerencias de plugins](https://code.claude.com/docs/es/claude-code-on-the-web.md#turn-off-plugin-suggestions)

19 19 

20Comience con las secciones para su rol:20Comience con las secciones para su rol:

21 21 


158 158 

159## Habilitar sugerencias en la configuración administrada159## Habilitar sugerencias en la configuración administrada

160 160 

161Los usuarios no ven sugerencias de un marketplace hasta que un administrador lo permita en [configuración administrada](https://code.claude.com/docs/es/plugins/org.md), incluso cuando su `marketplace.json` declara `relevance`.161En la terminal, los usuarios no ven sugerencias de un marketplace hasta que un administrador lo agregue a la lista de permitidos en la [configuración administrada](https://code.claude.com/docs/es/plugins/org.md), incluso cuando su `marketplace.json` declara `relevance`.

162 162 

163Para permitir un marketplace, edite su configuración administrada de la siguiente manera:163Para permitir un marketplace, edite su configuración administrada de la siguiente manera:

164 164 

sandboxing.md +3 −3

Details

539 539 

540* **En tu directorio de trabajo y los directorios superiores**: los archivos de configuración de `.claude`, los directorios `.claude/skills`, `.claude/agents`, `.claude/commands` y `.claude/hooks`, `.mcp.json`, y los archivos que Claude Code ejecuta por sí mismo, como `.claude/workflows` y `.claude/scheduled_tasks.json`540* **En tu directorio de trabajo y los directorios superiores**: los archivos de configuración de `.claude`, los directorios `.claude/skills`, `.claude/agents`, `.claude/commands` y `.claude/hooks`, `.mcp.json`, y los archivos que Claude Code ejecuta por sí mismo, como `.claude/workflows` y `.claude/scheduled_tasks.json`

541* **Solo en tu directorio de trabajo**: archivos de inicio del shell como `.bashrc` y `.zshrc`, `.gitconfig`, los directorios `.vscode` y `.idea`, y `hooks` y `config` dentro de `.git`541* **Solo en tu directorio de trabajo**: archivos de inicio del shell como `.bashrc` y `.zshrc`, `.gitconfig`, los directorios `.vscode` y `.idea`, y `hooks` y `config` dentro de `.git`

542* **Archivos que convertirían tu directorio de trabajo en un repositorio git bare**: `HEAD`, `objects` y `refs` en el nivel superior, además de las entradas `config` y `hooks` existentes allí cuando hay un archivo `HEAD` o un enlace simbólico junto a ellas. Un archivo llamado `config` se deniega incluso sin `HEAD`. [Un `HEAD`, `objects` o `refs` que aparezca más tarde puede eliminarse](#when-the-sandbox-deletes-head-objects-or-refs). En Linux y WSL2, un comando en el sandbox puede crear uno donde no exista ninguno.542* **Archivos que convertirían tu directorio de trabajo en un repositorio git bare**: `HEAD`, `objects` y `refs` en el nivel superior, además de las entradas `config` y `hooks` existentes allí cuando hay un archivo o enlace simbólico `HEAD` junto a ellas. Un archivo llamado `config` se deniega incluso sin `HEAD`. [Un `HEAD`, `objects` o `refs` que aparezca más tarde puede eliminarse](#when-the-sandbox-deletes-head-objects-or-refs). En Linux y WSL2, un comando en el sandbox puede crear uno donde no exista ninguno.

543* **En `~/.claude`, o el directorio al que apunta `CLAUDE_CONFIG_DIR`**: la mayor parte de su contenido, además de `~/.claude.json` y el almacén de credenciales `.credentials.json`543* **En `~/.claude`, o el directorio al que apunta `CLAUDE_CONFIG_DIR`**: la mayor parte de su contenido, además de `~/.claude.json` y el almacén de credenciales `.credentials.json`

544 544 

545Si aparece un enlace simbólico en la ruta de un archivo de configuración protegido durante la sesión, el sandbox también deniega las escrituras en el archivo al que apunta, a partir del siguiente comando.545Si aparece un enlace simbólico en la ruta de un archivo de configuración protegido durante la sesión, el sandbox también deniega las escrituras en el archivo al que apunta, a partir del siguiente comando.


558 558 

559Después de que termina un comando en el sandbox, se elimina una entrada `HEAD`, `objects` o `refs` más reciente de nivel superior en tu directorio de trabajo, a menos que sea una carpeta con contenido. Más reciente significa que la entrada no estaba allí la última vez que el sandbox construyó su configuración: al inicio de la sesión o después de un cambio como [`/cd`](https://code.claude.com/docs/es/commands).559Después de que termina un comando en el sandbox, se elimina una entrada `HEAD`, `objects` o `refs` más reciente de nivel superior en tu directorio de trabajo, a menos que sea una carpeta con contenido. Más reciente significa que la entrada no estaba allí la última vez que el sandbox construyó su configuración: al inicio de la sesión o después de un cambio como [`/cd`](https://code.claude.com/docs/es/commands).

560 560 

561Una carpeta `objects` o `refs` más reciente con contenido también se elimina, junto con su contenido, cuando había un archivo `HEAD` o un enlace simbólico allí la última vez que el sandbox construyó su configuración. Para conservar una carpeta, consulta [Una carpeta llamada `objects` o `refs` desaparece después de un comando](#a-folder-named-objects-or-refs-disappears-after-a-command).561Una carpeta `objects` o `refs` más reciente con contenido también se elimina, junto con su contenido, cuando había un archivo o enlace simbólico `HEAD` allí la última vez que el sandbox construyó su configuración. Para conservar una carpeta, consulta [Una carpeta llamada `objects` o `refs` desaparece después de un comando](#a-folder-named-objects-or-refs-disappears-after-a-command).

562 562 

563#### Rutas denegadas que pasan por un enlace simbólico563#### Rutas denegadas que pasan por un enlace simbólico

564 564 


891 891 

892### Una carpeta llamada `objects` o `refs` desaparece después de un comando892### Una carpeta llamada `objects` o `refs` desaparece después de un comando

893 893 

894Una carpeta `objects` o `refs` de nivel superior que apareció durante la sesión puede [eliminarse después de que termine un comando aislado](#when-the-sandbox-deletes-head-objects-or-refs). No importa si la creó un comando, Claude o tú. Para conservar una carpeta, deja algo dentro de ella. Si un archivo o enlace simbólico `HEAD` ha estado en el nivel superior durante la sesión, muévelo a otro lugar y luego reinicia todas las sesiones de Claude Code abiertas allí.894Una carpeta `objects` o `refs` de nivel superior que apareció durante la sesión puede [eliminarse después de que termine un comando aislado](#when-the-sandbox-deletes-head-objects-or-refs). No importa si la creó un comando, Claude o tú. Para conservar una carpeta, deja algo dentro de ella. Si un archivo o enlace simbólico `HEAD` ha estado en el nivel superior durante la sesión, muévelo a otro lugar y luego reinicia todas las sesiones de Claude Code abiertas en tu directorio de trabajo.

895 895 

896Antes de v2.1.307, la carpeta se eliminaba incluso si tenía algo dentro y no había `HEAD`. Si usas una versión anterior, [actualiza Claude Code](https://code.claude.com/docs/es/setup.md#update-claude-code).896Antes de v2.1.307, la carpeta se eliminaba incluso si tenía algo dentro y no había `HEAD`. Si usas una versión anterior, [actualiza Claude Code](https://code.claude.com/docs/es/setup.md#update-claude-code).

897 897 

Details

380Para una sesión, comience con los siguientes valores, indicados como solicitudes y límites de Kubernetes o el equivalente de su plataforma, y trate los como un punto de partida en lugar de un requisito:380Para una sesión, comience con los siguientes valores, indicados como solicitudes y límites de Kubernetes o el equivalente de su plataforma, y trate los como un punto de partida en lugar de un requisito:

381 381 

382* **Memoria**: una solicitud y un límite de 4 GiB cada uno, que cumple con el mínimo de 4 GB en los [requisitos del sistema](https://code.claude.com/docs/es/setup.md#system-requirements) de Claude Code. Mantenga los dos iguales para que el programador tenga en cuenta la memoria completa del contenedor. Cuando el contenedor alcanza su límite de memoria, el kernel mata procesos dentro de él, lo que puede terminar una sesión a mitad de la tarea.382* **Memoria**: una solicitud y un límite de 4 GiB cada uno, que cumple con el mínimo de 4 GB en los [requisitos del sistema](https://code.claude.com/docs/es/setup.md#system-requirements) de Claude Code. Mantenga los dos iguales para que el programador tenga en cuenta la memoria completa del contenedor. Cuando el contenedor alcanza su límite de memoria, el kernel mata procesos dentro de él, lo que puede terminar una sesión a mitad de la tarea.

383* **CPU**: una solicitud de 2 CPUs y un límite de 4 CPUs, para que una sesión pueda aumentar por encima de la solicitud durante compilaciones. El kernel acelera un contenedor en su límite de CPU en lugar de matar procesos en él, por lo que las sesiones en el límite se ejecutan más lentamente pero siguen ejecutándose.383* **CPU**: una solicitud de 2 CPUs y un límite de 4 CPUs, para que una sesión pueda aumentar por encima de la solicitud durante compilaciones. El kernel limita el uso de CPU de un contenedor en su límite en lugar de matar procesos en él, por lo que las sesiones en el límite se ejecutan más lentamente pero siguen ejecutándose.

384 384 

385En una especificación de contenedor de Kubernetes, establezca esos valores iniciales con el siguiente bloque `resources`:385En una especificación de contenedor de Kubernetes, establezca esos valores iniciales con el siguiente bloque `resources`:

386 386 


810 Un directorio base no escribible detiene el runner al inicio en lugar de hacer fallar las sesiones. Consulta la entrada **El runner se cierra al inicio con `cannot create or write to base directory`** en esta lista.810 Un directorio base no escribible detiene el runner al inicio en lugar de hacer fallar las sesiones. Consulta la entrada **El runner se cierra al inicio con `cannot create or write to base directory`** en esta lista.

811* **Una sesión se recoge, pero Claude nunca responde su primer mensaje**: si tus runners llegan a `api.anthropic.com` a través de un proxy, configúralo para que deje pasar la respuesta `/worker/events/stream` de la sesión a medida que llega. Aumentar los tiempos de espera del runner no ayuda. Para confirmar la causa en el registro del runner, consulta [Una sesión se recoge, pero Claude nunca responde su primer mensaje](#when-a-sessions-first-message-is-never-answered).811* **Una sesión se recoge, pero Claude nunca responde su primer mensaje**: si tus runners llegan a `api.anthropic.com` a través de un proxy, configúralo para que deje pasar la respuesta `/worker/events/stream` de la sesión a medida que llega. Aumentar los tiempos de espera del runner no ayuda. Para confirmar la causa en el registro del runner, consulta [Una sesión se recoge, pero Claude nunca responde su primer mensaje](#when-a-sessions-first-message-is-never-answered).

812* **Las sesiones no se inician en un runner que estableció `--use-anthropic-git-proxy`**: busca en el registro del runner `access denied by the git proxy`, o un error de git que nombre una dirección de `api.anthropic.com` que contenga `/git_proxy/`. Para saber si Anthropic atendió la sesión y corregir la causa, consulta [Cuando las sesiones no se inician en un runner con el proxy de git](#when-anthropic-doesnt-serve-a-session).812* **Las sesiones no se inician en un runner que estableció `--use-anthropic-git-proxy`**: busca en el registro del runner `access denied by the git proxy`, o un error de git que nombre una dirección de `api.anthropic.com` que contenga `/git_proxy/`. Para saber si Anthropic atendió la sesión y corregir la causa, consulta [Cuando las sesiones no se inician en un runner con el proxy de git](#when-anthropic-doesnt-serve-a-session).

813* **Las sesiones no pueden alcanzar la red a través de un proxy de salida autenticador**: cuando la fuente que estableció con [`--proxy-authorization-command` o `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) falla, agota el tiempo de espera después de 30 segundos o produce un valor vacío, el runner responde esa conexión con `502 Bad Gateway` y registra por qué. El runner redacta stderr del comando en ese registro y nunca registra el valor del encabezado. Con `--proxy-authorization-command`, ejecute el comando usted mismo en el host para confirmar que imprime el valor de encabezado completo en stdout. Si el runner se cierra al inicio con `could not start the proxy-authorization listener`, no pudo abrir su oyente de loopback.813* **Las sesiones no pueden alcanzar la red a través de un proxy de salida autenticador**: cuando la fuente que estableció con [`--proxy-authorization-command` o `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) falla, agota el tiempo de espera después de 30 segundos o produce un valor vacío, el runner responde esa conexión con `502 Bad Gateway` y registra por qué. El runner oculta stderr del comando en ese registro y nunca registra el valor del encabezado. Con `--proxy-authorization-command`, ejecute el comando usted mismo en el host para confirmar que imprime el valor de encabezado completo en stdout. Si el runner se cierra al inicio con `could not start the proxy-authorization listener`, no pudo abrir su oyente de loopback.

814* **El runner registra líneas `Poll failed` que contienen `rejecting the malformed poll response`**: el runner recibió una respuesta de sondeo de trabajo cuyo cuerpo no es el JSON esperado de la cola. Una causa es un proxy interceptor o un portal cautivo que responde con su propia página. Si el runner se conecta a través de un proxy, configura el proxy para que pase las respuestas de `api.anthropic.com` sin alterarlas.814* **El runner registra líneas `Poll failed` que contienen `rejecting the malformed poll response`**: el runner recibió una respuesta de sondeo de trabajo cuyo cuerpo no es el JSON esperado de la cola. Una causa es un proxy interceptor o un portal cautivo que responde con su propia página. Si el runner se conecta a través de un proxy, configura el proxy para que pase las respuestas de `api.anthropic.com` sin alterarlas.

815 815 

816 El runner rechaza la respuesta malformada, la cuenta bajo el tipo `transport` de la [métrica](https://code.claude.com/docs/es/self-hosted-environments-reference.md#prometheus-metrics) `claude_code_self_hosted_runner_poll_errors_total`, y reintenta según el cronograma de sondeo fallido descrito en [Session lifecycle](https://code.claude.com/docs/es/self-hosted-environments#session-lifecycle). El runner sigue atendiendo sus sesiones activas. Antes de v2.1.246, el runner interpretaba una respuesta así como una cola de trabajo vacía, lo que podía terminar sus sesiones activas o hacer que se cerrara.816 El runner rechaza la respuesta malformada, la cuenta bajo el tipo `transport` de la [métrica](https://code.claude.com/docs/es/self-hosted-environments-reference.md#prometheus-metrics) `claude_code_self_hosted_runner_poll_errors_total`, y reintenta según el cronograma de sondeo fallido descrito en [Session lifecycle](https://code.claude.com/docs/es/self-hosted-environments#session-lifecycle). El runner sigue atendiendo sus sesiones activas. Antes de v2.1.246, el runner interpretaba una respuesta así como una cola de trabajo vacía, lo que podía terminar sus sesiones activas o hacer que se cerrara.

Details

52| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | unset | Retire el runner en una marca de tiempo Unix absoluta en segundos, para infraestructura que mata el runner en un tiempo conocido; [Runner lifecycle](https://code.claude.com/docs/es/self-hosted-environments#runner-lifecycle) describe la secuencia de liberación y cómo dimensionar el margen. Los valores antes de 2001 o después del año 5138 son rechazados por el flag e ignorados por la variable de entorno. |52| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | unset | Retire el runner en una marca de tiempo Unix absoluta en segundos, para infraestructura que mata el runner en un tiempo conocido; [Runner lifecycle](https://code.claude.com/docs/es/self-hosted-environments#runner-lifecycle) describe la secuencia de liberación y cómo dimensionar el margen. Los valores antes de 2001 o después del año 5138 son rechazados por el flag e ignorados por la variable de entorno. |

53| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | Cuáles de las listas de reglas del clasificador del [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) que el plano de control envía con una sesión pueden llegar a esa sesión: `all`, `no-allow` o `none`. Consulta [Listas de reglas del modo automático](#auto-mode-rule-lists) para ver qué aplica cada valor. Un valor no válido detiene el runner al iniciar. Requiere Claude Code v2.1.295 o posterior. |53| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | Cuáles de las listas de reglas del clasificador del [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) que el plano de control envía con una sesión pueden llegar a esa sesión: `all`, `no-allow` o `none`. Consulta [Listas de reglas del modo automático](#auto-mode-rule-lists) para ver qué aplica cada valor. Un valor no válido detiene el runner al iniciar. Requiere Claude Code v2.1.295 o posterior. |

54| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Cuánto tiempo esperar a que el proceso de Claude salga limpiamente después de que una sesión termina, antes de matarlo por la fuerza. Aumente el valor si los hooks `SessionEnd` propios del hijo necesitan más tiempo. |54| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Cuánto tiempo esperar a que el proceso de Claude salga limpiamente después de que una sesión termina, antes de matarlo por la fuerza. Aumente el valor si los hooks `SessionEnd` propios del hijo necesitan más tiempo. |

55| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Cuánto tiempo esperar a un proceso hijo que no se ha inicializado antes de liberar el slot de la sesión. Consulta [Tiempo de espera de inicio de sesión](#session-startup-timeout) para saber dónde empieza el conteo y qué sesiones deja en ejecución. `0` desactiva el tiempo de espera. |55| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Cuánto tiempo esperar a un proceso hijo que no se ha inicializado antes de liberar el slot de la sesión. Consulta [Tiempo de espera de inicio de la sesión](#session-startup-timeout) para saber dónde empieza el conteo y qué sesiones deja en ejecución. `0` desactiva el tiempo de espera. |

56| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | on | Semilla de confianza persistida para las rutas del repositorio de cada sesión para que `permissions.allow` y `additionalDirectories` comprometidos en el repositorio sean honrados. Establezca `false` para descartar concesiones de permisos comprometidas en el repositorio y configure reglas de permiso en la `settings.json` de la configuración del host en su lugar; la configuración `sandbox.*` comprometida en el repositorio aún se aplica de cualquier forma, que es por qué el [guard de configuración de repositorio](https://code.claude.com/docs/es/self-hosted-environments-deploy.md#harden-your-deployment) los escanea independientemente de este flag. |56| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | on | Semilla de confianza persistida para las rutas del repositorio de cada sesión para que `permissions.allow` y `additionalDirectories` comprometidos en el repositorio sean honrados. Establezca `false` para descartar concesiones de permisos comprometidas en el repositorio y configure reglas de permiso en la `settings.json` de la configuración del host en su lugar; la configuración `sandbox.*` comprometida en el repositorio aún se aplica de cualquier forma, que es por qué el [guard de configuración de repositorio](https://code.claude.com/docs/es/self-hosted-environments-deploy.md#harden-your-deployment) los escanea independientemente de este flag. |

57| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | off | Clona los repositorios de github.com a través del [proxy de git de Anthropic](https://code.claude.com/docs/es/self-hosted-environments-deploy.md#use-the-anthropic-git-proxy) en lugar de la autenticación de git administrada por el cliente. Requiere `--capacity 1` y git 2.32 o posterior; de lo contrario, el runner se niega a iniciar. Reemplaza los flags de reescritura. |57| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | off | Clona los repositorios de github.com a través del [proxy de git de Anthropic](https://code.claude.com/docs/es/self-hosted-environments-deploy.md#use-the-anthropic-git-proxy) en lugar de la autenticación de git administrada por el cliente. Requiere `--capacity 1` y git 2.32 o posterior; de lo contrario, el runner se niega a iniciar. Reemplaza los flags de reescritura. |

58 58 


61* **Flag**: el inicio falla con un error.61* **Flag**: el inicio falla con un error.

62* **Variable de entorno**: el runner fija el valor al techo del temporizador en lugar de rechazarlo.62* **Variable de entorno**: el runner fija el valor al techo del temporizador en lugar de rechazarlo.

63 63 

64### Tiempo de espera de inicio de sesión64### Tiempo de espera de inicio de la sesión

65 65 

66Si una sesión perdió su slot durante un turno como `/code-review`, actualiza el runner y el binario hijo a v2.1.309 o posterior. Desde v2.1.299 hasta v2.1.308, el runner liberaba una sesión, incluso a mitad de turno, una vez que pasaba el tiempo de espera de inicio sin un mensaje `user` o `assistant`.66Si una sesión perdió su slot durante un turno como `/code-review`, actualiza el runner y el binario hijo a v2.1.309 o posterior. Desde v2.1.299 hasta v2.1.308, el runner liberaba una sesión, incluso a mitad de turno, una vez que pasaba el tiempo de espera de inicio sin un mensaje `user` o `assistant`.

67 67 


121| `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` | `~/.claude` | Directorio capturado en la instantánea de inicio del runner y sembrado en el `CLAUDE_CONFIG_DIR` de cada sesión; los cambios en disco se aplican después de un reinicio del runner. Establecer la variable también mueve dónde el runner lee `.claude.json` para [siembra de MCP](https://code.claude.com/docs/es/self-hosted-environments-configuration.md#mcp-servers), por lo que establecerlo, incluso a su propio predeterminado, reubica esa búsqueda; apunte a un directorio vacío para desactivar completamente la siembra. |121| `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` | `~/.claude` | Directorio capturado en la instantánea de inicio del runner y sembrado en el `CLAUDE_CONFIG_DIR` de cada sesión; los cambios en disco se aplican después de un reinicio del runner. Establecer la variable también mueve dónde el runner lee `.claude.json` para [siembra de MCP](https://code.claude.com/docs/es/self-hosted-environments-configuration.md#mcp-servers), por lo que establecerlo, incluso a su propio predeterminado, reubica esa búsqueda; apunte a un directorio vacío para desactivar completamente la siembra. |

122| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Cuánto tiempo el runner espera después de que una sesión alcanza su límite `--kill-session-after-min`, para que un turno en ejecución termine o se complete la liberación, antes de terminar la sesión |122| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Cuánto tiempo el runner espera después de que una sesión alcanza su límite `--kill-session-after-min`, para que un turno en ejecución termine o se complete la liberación, antes de terminar la sesión |

123| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Límite en cuánto tiempo el runner cuenta una sesión como ocupada para el drenaje `--drain-wait-sec` después de que un turno termina, mientras el proceso de la sesión reporta el final del turno a Anthropic. `0` o un valor inutilizable vuelve al predeterminado, por lo que la retención no se puede desactivar. Requiere Claude Code v2.1.275 o posterior. |123| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Límite en cuánto tiempo el runner cuenta una sesión como ocupada para el drenaje `--drain-wait-sec` después de que un turno termina, mientras el proceso de la sesión reporta el final del turno a Anthropic. `0` o un valor inutilizable vuelve al predeterminado, por lo que la retención no se puede desactivar. Requiere Claude Code v2.1.275 o posterior. |

124| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Cuánto tiempo el runner espera a que el SO entregue `SIGKILL` a un hijo atascado en E/S no interrumpible antes de salir él mismo. Limitado a `--post-session-hook-timeout-sec` más 15 segundos, y 30 más cuando `--push-outcome-on-release` está establecido, por lo que el mínimo efectivo es 75 segundos en valores predeterminados. |124| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Cuánto tiempo el runner espera a que el SO entregue `SIGKILL` a un hijo atascado en E/S no interrumpible antes de salir él mismo. Tiene como valor mínimo `--post-session-hook-timeout-sec` más 15 segundos, y 30 más cuando `--push-outcome-on-release` está establecido, por lo que el mínimo efectivo es 75 segundos en valores predeterminados. |

125| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Profundidad de búsqueda de git para clones frescos. Establece un entero positivo, o `full` o `0` para una búsqueda completa. Para un clon que ya está en el espacio de trabajo, consulta [Reutilizar un checkout precalentado](https://code.claude.com/docs/es/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |125| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Profundidad de búsqueda de git para clones frescos. Establece un entero positivo, o `full` o `0` para una búsqueda completa. Para un clon que ya está en el espacio de trabajo, consulta [Reutilizar un checkout precalentado](https://code.claude.com/docs/es/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |

126| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Cuánto tiempo en milisegundos, por intento, una búsqueda de git puede esperar sus primeros datos mientras los números de progreso del propio servidor git siguen aumentando, como cuando el servidor prepara el pack para un repositorio grande. `0` u `off` desactiva la espera: esa búsqueda se corta entonces después de dos minutos sin datos. Cualquier otro número entero se limita a un valor entre `120000` y `1800000`, de 2 a 30 minutos. Requiere Claude Code v2.1.295 o posterior. |126| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Cuánto tiempo en milisegundos, por intento, una búsqueda de git puede esperar sus primeros datos mientras los números de progreso del propio servidor git siguen aumentando, como cuando el servidor prepara el pack para un repositorio grande. `0` u `off` desactiva la espera: esa búsqueda se corta entonces después de dos minutos sin datos. Cualquier otro número entero se limita a un valor entre `120000` y `1800000`, de 2 a 30 minutos. Requiere Claude Code v2.1.295 o posterior. |

127| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | unset | Cuando es `1`, omita la verificación de presencia `.git` después de que se ejecute un hook `checkout`. Establezca esto cuando su hook materializa una fuente que no es git. |127| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | unset | Cuando es `1`, omita la verificación de presencia `.git` después de que se ejecute un hook `checkout`. Establezca esto cuando su hook materializa una fuente que no es git. |

Details

170 170 

171**Lanzamientos posteriores con configuración en caché:**171**Lanzamientos posteriores con configuración en caché:**

172 172 

173* La configuración en caché se aplica inmediatamente al inicio, excepto para los valores en caché `modelPricing` y `managedMcpServers` y las variables de entorno que Claude Code retiene hasta que el servidor confirma la carga útil173* La configuración en caché se aplica inmediatamente al inicio, excepto los valores en caché `modelPricing` y `managedMcpServers`; las variables de entorno que Claude Code retiene hasta que el servidor confirma la carga útil; la eliminación, el reposicionamiento o la desactivación de la [protección integrada](https://code.claude.com/docs/es/plugins/mods/admin.md#know-what-happens-by-default) por parte de una lista de plugins en caché; y, en una máquina donde una fuente administrada por endpoint enumera o habilita plugins propios, la [condición de plugin de la organización](https://code.claude.com/docs/es/plugins/mods/admin.md#install-your-organizations-mods) de un plugin que solo habilita una lista en caché

174* Un [`modelPricing`](https://code.claude.com/docs/es/settings-reference#modelpricing) en caché no se aplica hasta que la búsqueda de la sesión confirma la carga útil. Hasta entonces, las cifras de costo que los desarrolladores ven en `/usage` y la línea de estado están al precio de lista174* Un [`modelPricing`](https://code.claude.com/docs/es/settings-reference#modelpricing) en caché no se aplica hasta que la búsqueda de la sesión confirma la carga útil. Hasta entonces, las cifras de costo que los desarrolladores ven en `/usage` y la línea de estado están al precio de lista

175* Un bloque [`managedMcpServers`](https://code.claude.com/docs/es/settings-reference#managedmcpservers) en caché no se aplica hasta que la búsqueda de la sesión confirma la carga útil. Claude Code espera hasta 30 segundos para esa búsqueda antes de conectar servidores MCP. Si la búsqueda falla o agota el tiempo de espera, la sesión comienza sin los servidores de la organización, `/status` lo dice, y se conectan una vez que una búsqueda posterior los confirma. Consulte [Cuándo se conectan los servidores proporcionados](https://code.claude.com/docs/es/managed-mcp.md#when-provided-servers-connect) para el comportamiento completo, incluido el primer lanzamiento. Requiere Claude Code v2.1.259 o posterior175* Un bloque [`managedMcpServers`](https://code.claude.com/docs/es/settings-reference#managedmcpservers) en caché no se aplica hasta que la búsqueda de la sesión confirma la carga útil. Claude Code espera hasta 30 segundos para esa búsqueda antes de conectar servidores MCP. Si la búsqueda falla o agota el tiempo de espera, la sesión comienza sin los servidores de la organización, `/status` lo dice, y se conectan una vez que una búsqueda posterior los confirma. Consulte [Cuándo se conectan los servidores proporcionados](https://code.claude.com/docs/es/managed-mcp.md#when-provided-servers-connect) para el comportamiento completo, incluido el primer lanzamiento. Requiere Claude Code v2.1.259 o posterior

176* Un valor en caché de [`prependPlugins`](https://code.claude.com/docs/es/settings-reference#prependplugins), [`appendPlugins`](https://code.claude.com/docs/es/settings-reference#appendplugins) o [`enabledPlugins`](https://code.claude.com/docs/es/settings-reference#enabledplugins) no puede eliminar la protección integrada, cambiar su posición ni desactivarla hasta que la búsqueda de la sesión confirme la carga útil

177* En una máquina donde una [fuente administrada por endpoint](https://code.claude.com/docs/es/managed-settings.md#choose-a-delivery-mechanism) enumera o habilita plugins propios, un plugin que solo habilita una lista en caché cuenta como [del usuario](https://code.claude.com/docs/es/plugins/mods/admin.md#install-your-organizations-mods), no de tu organización, hasta que la búsqueda confirme la carga útil

176* Claude Code obtiene configuración fresca en segundo plano178* Claude Code obtiene configuración fresca en segundo plano

177* La configuración en caché persiste a través de fallos de red. Si la búsqueda de inicio falla, Claude Code advierte en sesiones interactivas que la política en caché está en vigor179* La configuración en caché persiste a través de fallos de red. Si la búsqueda de inicio falla, Claude Code advierte en sesiones interactivas que la política en caché está en vigor

178* Hasta que una búsqueda tenga éxito, los valores retenidos al inicio permanecen retenidos180* Hasta que una búsqueda tenga éxito, los valores retenidos al inicio permanecen retenidos

sessions.md +1 −1

Details

249 249 

250De forma predeterminada, Claude Code almacena transcripciones como JSONL en `~/.claude/projects/<project>/<session-id>.jsonl`, donde `<project>` es la ruta de su directorio de trabajo con caracteres no alfanuméricos reemplazados por `-`. Para un directorio de trabajo cuyo nombre convertido excede 200 caracteres, Claude Code trunca el nombre a 200 caracteres y añade un hash de la ruta completa, de modo que el nombre del directorio se mantenga dentro de los límites del sistema de archivos.250De forma predeterminada, Claude Code almacena transcripciones como JSONL en `~/.claude/projects/<project>/<session-id>.jsonl`, donde `<project>` es la ruta de su directorio de trabajo con caracteres no alfanuméricos reemplazados por `-`. Para un directorio de trabajo cuyo nombre convertido excede 200 caracteres, Claude Code trunca el nombre a 200 caracteres y añade un hash de la ruta completa, de modo que el nombre del directorio se mantenga dentro de los límites del sistema de archivos.

251 251 

252Cada línea es un objeto JSON para un mensaje, uso de herramienta o entrada de metadatos. El formato de entrada es interno de Claude Code y cambia entre versiones, por lo que los scripts que analizan estos archivos directamente pueden romperse en cualquier versión. Para construir sobre datos de sesión, use `/export` o las [interfaces de script](#access-conversations-from-scripts) en su lugar.252Cada línea es un objeto JSON: un mensaje, un uso o resultado de herramienta, un registro de una solicitud que Claude Code envió al modelo, o una entrada de metadatos. El formato de entrada es interno de Claude Code y cambia entre versiones, por lo que los scripts que analizan estos archivos directamente pueden romperse en cualquier versión. Para trabajar con datos de sesión, usa `/export` o las [interfaces de script](#access-conversations-from-scripts) en su lugar.

253 253 

254La ubicación, retención y comportamiento de escritura son configurables:254La ubicación, retención y comportamiento de escritura son configurables:

255 255 

Details

2037* **Type**: array de strings, cada uno un nombre de servicio; un único `*` final coincide con un prefijo, y `"*"` por sí solo coincide con todos los servicios2037* **Type**: array de strings, cada uno un nombre de servicio; un único `*` final coincide con un prefijo, y `"*"` por sí solo coincide con todos los servicios

2038* **Default**: sin establecer2038* **Default**: sin establecer

2039 2039 

2040Esto permite todos los servicios con el prefijo `com.apple.coresimulator.`:2040Esto permite todos los servicios bajo el prefijo `com.apple.CoreSimulator.`:

2041 2041 

2042```json settings.json theme={null}2042```json settings.json theme={null}

2043{2043{

2044 "sandbox": {2044 "sandbox": {

2045 "network": {2045 "network": {

2046 "allowMachLookup": ["com.apple.coresimulator.*"]2046 "allowMachLookup": ["com.apple.CoreSimulator.*"]

2047 }2047 }

2048 }2048 }

2049}2049}


4729* **Tipo**: matriz de cadenas, rutas de directorio relativas a la raíz del repositorio4729* **Tipo**: matriz de cadenas, rutas de directorio relativas a la raíz del repositorio

4730* **Predeterminado**: sin establecer, por lo que cada worktree extrae el árbol completo4730* **Predeterminado**: sin establecer, por lo que cada worktree extrae el árbol completo

4731 4731 

4732Este ejemplo extrae solo `packages/my-app` y `shared/utils`, más archivos de nivel raíz, en cada worktree:4732Incluye `.claude` en la lista para que cada worktree también tenga los archivos `.claude/settings.json` y `.claude/rules/` del repositorio. Este ejemplo extrae solo `.claude`, `packages/my-app` y `shared/utils`, más archivos de nivel raíz, en cada worktree:

4733 4733 

4734```json settings.json theme={null}4734```json settings.json theme={null}

4735{4735{

4736 "worktree": {4736 "worktree": {

4737 "sparsePaths": ["packages/my-app", "shared/utils"]4737 "sparsePaths": [".claude", "packages/my-app", "shared/utils"]

4738 }4738 }

4739}4739}

4740```4740```


5525 5525 

5526Claude Code aún acepta un `--mcp-config` cuyos servidores son todas entradas `type: "sdk"` en proceso, por lo que el Agent SDK y la extensión de VS Code siguen funcionando. Los usuarios aún pueden agregar servidores con `claude mcp add` o un archivo `.mcp.json`; para control por servidor, establezca también [`allowedMcpServers`](https://code.claude.com/docs/es/managed-mcp). Requiere Claude Code v2.1.193 o posterior.5526Claude Code aún acepta un `--mcp-config` cuyos servidores son todas entradas `type: "sdk"` en proceso, por lo que el Agent SDK y la extensión de VS Code siguen funcionando. Los usuarios aún pueden agregar servidores con `claude mcp add` o un archivo `.mcp.json`; para control por servidor, establezca también [`allowedMcpServers`](https://code.claude.com/docs/es/managed-mcp). Requiere Claude Code v2.1.193 o posterior.

5527 5527 

5528La misma verificación cubre carpetas de plugins nombradas en la variable de entorno [`CLAUDE_CODE_PLUGIN_DIRS`](https://code.claude.com/docs/es/env-vars#variables), que requiere Claude Code v2.1.280 o posterior. Cuando la variable nombra una carpeta, Claude Code sale con el mismo error, y el error dice desactivar la variable.5528`disableSideloadFlags` también rechaza carpetas de plugins de estas fuentes:

5529 

5530* **La variable de entorno [`CLAUDE_CODE_PLUGIN_DIRS`](https://code.claude.com/docs/es/env-vars#variables)**: cuando la variable nombra una carpeta de plugins, Claude Code sale al iniciar con un error que nombra la variable e indica que la elimines. Requiere Claude Code v2.1.280 o posterior

5531* **La opción [`addPlugins`](https://code.claude.com/docs/es/agent-sdk/typescript#load-more-plugin-folders-with-addplugins) del Agent SDK**: cuando una aplicación pasa carpetas de plugins a `reloadPlugins()` en `addPlugins`, esa llamada falla con un error. La sesión sigue ejecutándose con los plugins que ya tenía. Requiere Claude Code v2.1.301 o posterior

5529 5532 

5530En sesiones en la nube, Claude Code también ignora las actualizaciones MCP entregadas por el servidor a mitad de sesión, la ruta detrás de la configuración de sesión en la nube y las llamadas `setMcpServers()` del SDK que llegan a esas sesiones. Las entradas `type: "sdk"` en proceso y las herramientas de Slack de una sesión Claude Tag permanecen exentas allí también. Antes de v2.1.268, tanto este descarte como el descarte de inicio también eliminaban las herramientas de Slack de una sesión Claude Tag. Antes de v2.1.239, un `--mcp-config` entregado por el servidor bloqueaba el inicio de una sesión en la nube.5533En sesiones en la nube, Claude Code también ignora las actualizaciones MCP entregadas por el servidor a mitad de sesión, la ruta detrás de la configuración de sesión en la nube y las llamadas `setMcpServers()` del SDK que llegan a esas sesiones. Las entradas `type: "sdk"` en proceso y las herramientas de Slack de una sesión Claude Tag permanecen exentas allí también. Antes de v2.1.268, tanto este descarte como el descarte de inicio también eliminaban las herramientas de Slack de una sesión Claude Tag. Antes de v2.1.239, un `--mcp-config` entregado por el servidor bloqueaba el inicio de una sesión en la nube.

5531 5534 

sub-agents.md +3 −3

Details

163| `~/.claude/agents/` | Todos sus proyectos | 4 | Pedir a Claude, o crear el archivo manualmente |163| `~/.claude/agents/` | Todos sus proyectos | 4 | Pedir a Claude, o crear el archivo manualmente |

164| Directorio `agents/` del plugin | Donde el plugin está habilitado | 5 (más baja) | Instalado con [plugins](https://code.claude.com/docs/es/plugins/overview.md) |164| Directorio `agents/` del plugin | Donde el plugin está habilitado | 5 (más baja) | Instalado con [plugins](https://code.claude.com/docs/es/plugins/overview.md) |

165 165 

166**Los subagentes de proyecto** (`.claude/agents/`) son ideales para subagentes específicos de una base de código. Verifíquelos en control de versiones para que su equipo pueda usarlos y mejorarlos colaborativamente.166**Los subagentes de proyecto** (`.claude/agents/`) son ideales para subagentes específicos de una base de código. Inclúyalos en control de versiones para que su equipo pueda usarlos y mejorarlos colaborativamente.

167 167 

168Los subagentes de proyecto se descubren caminando hacia arriba desde el directorio de trabajo actual, por lo que cada `.claude/agents/` entre allí y la raíz del repositorio se escanea. Cuando más de uno de estos directorios anidados define el mismo `name`, Claude Code usa la definición más cercana al directorio de trabajo.168Los subagentes de proyecto se descubren caminando hacia arriba desde el directorio de trabajo actual, por lo que cada `.claude/agents/` entre allí y la raíz del repositorio se escanea. Cuando más de uno de estos directorios anidados define el mismo `name`, Claude Code usa la definición más cercana al directorio de trabajo.

169 169 


651| :- | :- | :- |651| :- | :- | :- |

652| `user` | `~/.claude/agent-memory/<name-of-agent>/` | el subagente debe recordar aprendizajes en todos los proyectos |652| `user` | `~/.claude/agent-memory/<name-of-agent>/` | el subagente debe recordar aprendizajes en todos los proyectos |

653| `project` | `.claude/agent-memory/<name-of-agent>/` | el conocimiento del subagente es específico del proyecto y compartible a través de control de versiones |653| `project` | `.claude/agent-memory/<name-of-agent>/` | el conocimiento del subagente es específico del proyecto y compartible a través de control de versiones |

654| `local` | `.claude/agent-memory-local/<name-of-agent>/` | el conocimiento del subagente es específico del proyecto pero no debe ser verificado en control de versiones |654| `local` | `.claude/agent-memory-local/<name-of-agent>/` | el conocimiento del subagente es específico del proyecto pero no debe incluirse en control de versiones |

655 655 

656La memoria del subagente es parte de [memoria automática](https://code.claude.com/docs/es/memory.md#auto-memory): si desactiva la memoria automática, con la configuración `autoMemoryEnabled` o `CLAUDE_CODE_DISABLE_AUTO_MEMORY`, el campo `memory` no tiene efecto y el subagente se lanza sin las instrucciones de memoria o el acceso a la herramienta de memoria descrito a continuación.656La memoria del subagente es parte de [memoria automática](https://code.claude.com/docs/es/memory.md#auto-memory): si desactiva la memoria automática, con la configuración `autoMemoryEnabled` o `CLAUDE_CODE_DISABLE_AUTO_MEMORY`, el campo `memory` no tiene efecto y el subagente se lanza sin las instrucciones de memoria o el acceso a la herramienta de memoria descrito a continuación.

657 657 


1291> * **Diseñe subagentes enfocados:** cada subagente debe sobresalir en una tarea específica1291> * **Diseñe subagentes enfocados:** cada subagente debe sobresalir en una tarea específica

1292> * **Escriba descripciones que destaquen un subagente:** Claude usa la descripción para decidir cuándo delegar. Haga cada descripción lo suficientemente específica para enrutar al subagente correcto, y mantenga el conjunto combinado dentro del [presupuesto de descripción de 15,000 tokens](#understand-automatic-delegation)1292> * **Escriba descripciones que destaquen un subagente:** Claude usa la descripción para decidir cuándo delegar. Haga cada descripción lo suficientemente específica para enrutar al subagente correcto, y mantenga el conjunto combinado dentro del [presupuesto de descripción de 15,000 tokens](#understand-automatic-delegation)

1293> * **Limite el acceso a herramientas:** otorgue solo permisos necesarios para seguridad y enfoque1293> * **Limite el acceso a herramientas:** otorgue solo permisos necesarios para seguridad y enfoque

1294> * **Verifique en control de versiones:** comparta subagentes de proyecto con su equipo1294> * **Incluya los subagentes en control de versiones:** comparta subagentes de proyecto con su equipo

1295 1295 

1296### Revisor de código1296### Revisor de código

1297 1297 

vs-code.md +36 −17

Details

203What's in @src/components/ (include a trailing slash for folders)203What's in @src/components/ (include a trailing slash for folders)

204```204```

205 205 

206Para PDF grandes, puedes pedirle a Claude que lea páginas específicas en lugar del archivo completo. Pide una sola página, un rango como las páginas 1-10, o un rango abierto como desde la página 3 en adelante. Leer páginas específicas requiere [poppler-utils](https://code.claude.com/docs/es/tools-reference.md#read-tool-behavior) en la máquina donde se ejecuta Claude Code.206### Leer páginas específicas de un PDF

207 

208Cuando seleccionas texto en el editor, Claude puede ver automáticamente el código resaltado. El pie del cuadro de prompt muestra cuántas líneas están seleccionadas. Presiona `Option+K` (Mac) / `Alt+K` (Windows/Linux) para insertar una mención con @ con la ruta del archivo y los números de línea, por ejemplo `@app.ts#5-10`. Haz clic en la **X** del indicador de selección para quitarla y que Claude no reciba la selección. El indicador vuelve a aparecer cuando seleccionas otro texto.

209 207 

210La extensión no envía el texto seleccionado de algunos archivos:208Para PDF grandes, puedes pedirle a Claude que lea páginas específicas en lugar del archivo completo. Pide una sola página, un rango como las páginas 1-10, o un rango abierto como desde la página 3 en adelante. Leer páginas específicas requiere [poppler-utils](https://code.claude.com/docs/es/tools-reference.md#read-tool-behavior) en la máquina donde se ejecuta Claude Code.

211 

212* Cuando el archivo está dentro de tu espacio de trabajo y coincide con tus ajustes `files.exclude` o `search.exclude`, Claude recibe como máximo la ruta del archivo y no el texto que seleccionaste.

213* Lo mismo se aplica a un archivo que git ignora, siempre que el ajuste `search.useIgnoreFiles` de VS Code y el [ajuste `respectGitIgnore`](#extension-settings) de la extensión estén ambos activados, que es el valor predeterminado.

214 209 

215Este filtro cubre solo el panel de chat. Cuando Claude Code se ejecuta en la terminal integrada, la CLI envía el texto seleccionado sin importar el archivo. Para evitar que Claude vea el contenido de un archivo allí, agrega una [regla de denegación de `Read`](#the-built-in-ide-mcp-server).210### Incluir la salida de la terminal en los prompts

216 211 

217Claude también ve qué archivo tienes abierto en el editor, incluso cuando no hay nada seleccionado, y el cuadro de prompt muestra su nombre. Para agregar solo el texto seleccionado, desactiva el [ajuste Attach Open File](vscode://settings/claudeCode.attachOpenFile). El ajuste requiere Claude Code v2.1.271 o posterior.212Haz referencia a la salida de la terminal en tus prompts usando `@terminal:name`, donde `name` es el título de la terminal. Esto permite que Claude vea la salida de comandos, mensajes de error o registros sin copiar y pegar.

218 213 

219También puedes adjuntar imágenes y archivos a tu mensaje:214### Adjuntar imágenes y archivos

220 215 

221* Para adjuntar una imagen, pégala desde el portapapeles en el cuadro de prompt.216* Para adjuntar una imagen, pégala desde el portapapeles en el cuadro de prompt.

222* Para adjuntar archivos, mantén presionada `Shift` mientras los arrastras al cuadro de prompt.217* Para adjuntar archivos, mantén presionada `Shift` mientras los arrastras al cuadro de prompt.

223* Para quitar un adjunto del contexto, haz clic en su X.218* Para quitar un adjunto del contexto, haz clic en su X.

224 219 

225### Incluir la salida de la terminal en los prompts

226 

227Haz referencia a la salida de la terminal en tus prompts usando `@terminal:name`, donde `name` es el título de la terminal. Esto permite que Claude vea la salida de comandos, mensajes de error o registros sin copiar y pegar.

228 

229### Pegar texto220### Pegar texto

230 221 

231El texto que pegas permanece visible en el cuadro de prompt, en lugar de contraerse en un marcador de posición como ocurre [en la terminal](https://code.claude.com/docs/es/terminal-config.md#paste-large-content). En las sesiones en las que Claude Code [marca el texto pegado](https://code.claude.com/docs/es/terminal-config.md#how-claude-treats-pasted-text), Claude sigue viendo un pegado grande como texto que pegaste y no que escribiste.222El texto que pegas permanece visible en el cuadro de prompt, en lugar de contraerse en un marcador de posición como ocurre [en la terminal](https://code.claude.com/docs/es/terminal-config.md#paste-large-content). En las sesiones en las que Claude Code [marca el texto pegado](https://code.claude.com/docs/es/terminal-config.md#how-claude-treats-pasted-text), Claude sigue viendo un pegado grande como texto que pegaste y no que escribiste.


235* Si al pegar aparece un aviso como `Removed 3 invisible characters from the pasted text`, el texto se insertó sin esos caracteres.226* Si al pegar aparece un aviso como `Removed 3 invisible characters from the pasted text`, el texto se insertó sin esos caracteres.

236* Si al enviar aparece un aviso sobre caracteres eliminados, no se envió nada. El texto limpio vuelve al cuadro de prompt. Envía de nuevo para enviar el texto tal como se muestra.227* Si al enviar aparece un aviso sobre caracteres eliminados, no se envió nada. El texto limpio vuelve al cuadro de prompt. Envía de nuevo para enviar el texto tal como se muestra.

237 228 

229### Contexto automático de tu selección y del archivo abierto

230 

231Cuando seleccionas texto en el editor, Claude puede ver automáticamente el código resaltado. El pie del cuadro de prompt muestra cuántas líneas están seleccionadas. Claude también ve qué archivo tienes abierto en el editor, incluso cuando no hay nada seleccionado, y el cuadro de prompt muestra su nombre.

232 

233Presiona `Option+K` (Mac) / `Alt+K` (Windows/Linux) para insertar una mención con @ con la ruta del archivo y los números de línea, por ejemplo `@app.ts#5-10`.

234 

235#### Evitar que tu selección y el archivo abierto lleguen a tus mensajes

236 

237Para evitar que el texto seleccionado o tu archivo abierto se incluyan en tus mensajes, desactiva el ajuste correspondiente en la configuración de VS Code:

238 

239* **Texto seleccionado**: desactiva el [ajuste Attach Selection](vscode://settings/claudeCode.attachSelection). Requiere Claude Code v2.1.300 o posterior. Para descartar una selección, haz clic en la **X** junto al recuento de líneas. El recuento vuelve a aparecer cuando seleccionas otro texto.

240* **Archivo abierto**: desactiva el [ajuste Attach Open File](vscode://settings/claudeCode.attachOpenFile). Requiere Claude Code v2.1.271 o posterior. El archivo queda fuera a menos que tu mensaje incluya texto que seleccionaste en él.

241 

242Para agregar texto como mención con @ con Attach Selection desactivado, selecciónalo y presiona `Option+K` en Mac o `Alt+K` en Windows y Linux.

243 

244Ambos ajustes también se aplican cuando ejecutas `claude` en la terminal integrada de VS Code.

245 

246#### Texto seleccionado de archivos excluidos o ignorados

247 

248En el panel de chat, la extensión no envía el texto seleccionado de algunos archivos:

249 

250* Cuando el archivo está dentro de tu espacio de trabajo y coincide con tus ajustes `files.exclude` o `search.exclude`, Claude recibe como máximo la ruta del archivo y no el texto que seleccionaste.

251* Lo mismo se aplica a un archivo que git ignora, siempre que el ajuste `search.useIgnoreFiles` de VS Code y el [ajuste `respectGitIgnore`](#extension-settings) de la extensión estén ambos activados, que es el valor predeterminado.

252 

253Este filtro cubre solo el panel de chat. Cuando Claude Code se ejecuta en la terminal integrada, Claude puede recibir el texto que seleccionas en estos archivos. Para evitar que Claude vea el contenido de un archivo allí, agrega una [regla de denegación de `Read`](https://code.claude.com/docs/es/permissions#read-and-edit).

254 

238### Matemáticas en LaTeX en las respuestas255### Matemáticas en LaTeX en las respuestas

239 256 

240El panel de chat muestra las matemáticas en LaTeX de las respuestas de Claude como fórmulas tipografiadas. El renderizado de matemáticas requiere Claude Code v2.1.301 o posterior. En el [modo terminal](#switch-to-terminal-mode), las matemáticas no se tipografían. El panel tipografía tanto las matemáticas en bloque como las matemáticas en línea:257El panel de chat muestra las matemáticas en LaTeX de las respuestas de Claude como fórmulas tipografiadas. El renderizado de matemáticas requiere Claude Code v2.1.301 o posterior. En el [modo terminal](#switch-to-terminal-mode), las matemáticas no se tipografían. El panel tipografía tanto las matemáticas en bloque como las matemáticas en línea:


694| `preferredLocation` | `panel` | Dónde se abre Claude: `sidebar` (derecha) o `panel` (pestaña nueva) |711| `preferredLocation` | `panel` | Dónde se abre Claude: `sidebar` (derecha) o `panel` (pestaña nueva) |

695| `lockEditorGroups` | `true` | [Bloquea los grupos de editores que Claude inicia para sus pestañas](#choose-where-claude-lives), de modo que los archivos que abras mientras una pestaña de Claude tiene el foco vayan a otro grupo. Cuando está desactivado, la extensión nunca bloquea un grupo de editores. Requiere Claude Code v2.1.274 o posterior |712| `lockEditorGroups` | `true` | [Bloquea los grupos de editores que Claude inicia para sus pestañas](#choose-where-claude-lives), de modo que los archivos que abras mientras una pestaña de Claude tiene el foco vayan a otro grupo. Cuando está desactivado, la extensión nunca bloquea un grupo de editores. Requiere Claude Code v2.1.274 o posterior |

696| `autosave` | `true` | Guarda automáticamente los archivos antes de que Claude los lea o escriba |713| `autosave` | `true` | Guarda automáticamente los archivos antes de que Claude los lea o escriba |

697| `attachOpenFile` | `true` | Agrega a tus mensajes el archivo abierto en el editor y lo muestra en el cuadro del prompt. Cuando está desactivado, solo se agrega el texto seleccionado. Requiere Claude Code v2.1.271 o posterior |714| `attachOpenFile` | `true` | Agrega a tus mensajes el archivo abierto en el editor y lo muestra en el cuadro del prompt. Cuando está desactivado, el archivo solo se agrega junto con el texto que seleccionas. Requiere Claude Code v2.1.271 o posterior |

715| `attachSelection` | `true` | Agrega a tus mensajes el texto que seleccionas en el editor y lo muestra en el cuadro del prompt. Cuando está desactivado, aún puedes [agregar una selección como mención con @](#automatic-context-from-your-selection-and-open-file). Requiere Claude Code v2.1.300 o posterior |

698| `useCtrlEnterToSend` | `false` | Usa Ctrl/Cmd+Enter en lugar de Enter para enviar prompts |716| `useCtrlEnterToSend` | `false` | Usa Ctrl/Cmd+Enter en lugar de Enter para enviar prompts |

699| `scrollToBottomOnSend` | `true` | Desplaza la conversación hasta el final cuando envías un mensaje. Cuando está desactivado, la conversación se queda donde la dejaste. Requiere Claude Code v2.1.275 o posterior |717| `scrollToBottomOnSend` | `true` | Desplaza la conversación hasta el final cuando envías un mensaje. Cuando está desactivado, la conversación se queda donde la dejaste. Requiere Claude Code v2.1.275 o posterior |

700| `showMessageTimestamps` | `true` | Muestra cuándo se envió cada mensaje. Una línea de fecha marca dónde cambia el día. Requiere Claude Code v2.1.284 o posterior. Antes de v2.1.290, el valor predeterminado era `false` |718| `showMessageTimestamps` | `true` | Muestra cuándo se envió cada mensaje. Una línea de fecha marca dónde cambia el día. Requiere Claude Code v2.1.284 o posterior. Antes de v2.1.290, el valor predeterminado era `false` |


705| `continueAfterReload` | `true` | Después de recargar la ventana, Claude [continúa el paso que se interrumpió](#continue-conversations-after-a-reload) en la sesión restaurada. Requiere Claude Code v2.1.274 o posterior |723| `continueAfterReload` | `true` | Después de recargar la ventana, Claude [continúa el paso que se interrumpió](#continue-conversations-after-a-reload) en la sesión restaurada. Requiere Claude Code v2.1.274 o posterior |

706| `hideOnboarding` | `false` | Oculta la lista de verificación de introducción (ícono de birrete) |724| `hideOnboarding` | `false` | Oculta la lista de verificación de introducción (ícono de birrete) |

707| `focusView` | `false` | Oculta las llamadas a herramientas, los resultados de herramientas y el pensamiento detrás de filas expandibles, dejando visibles tus prompts y las respuestas de Claude. La lista de tareas más reciente de Claude permanece visible; esto requiere Claude Code v2.1.225 o posterior. También puedes activar o desactivar la vista Focus desde el menú de comandos. Requiere Claude Code v2.1.221 o posterior |725| `focusView` | `false` | Oculta las llamadas a herramientas, los resultados de herramientas y el pensamiento detrás de filas expandibles, dejando visibles tus prompts y las respuestas de Claude. La lista de tareas más reciente de Claude permanece visible; esto requiere Claude Code v2.1.225 o posterior. También puedes activar o desactivar la vista Focus desde el menú de comandos. Requiere Claude Code v2.1.221 o posterior |

708| `respectGitIgnore` | `true` | Excluye los patrones de .gitignore de las búsquedas de archivos y del [contexto de selección](#reference-files-and-folders) |726| `respectGitIgnore` | `true` | Excluye los patrones de .gitignore de las búsquedas de archivos y del [contexto de selección](#selected-text-from-excluded-or-ignored-files) |

709| `usePythonEnvironment` | `true` | Activa el entorno de Python del espacio de trabajo al ejecutar Claude. Requiere la extensión de Python. |727| `usePythonEnvironment` | `true` | Activa el entorno de Python del espacio de trabajo al ejecutar Claude. Requiere la extensión de Python. |

710| `environmentVariables` | `[]` | Establece variables de entorno para el proceso de Claude. Para configuración compartida, usa en su lugar la configuración de Claude Code. Una entrada [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/es/env-vars) solo se aplica cuando su valor es una ruta absoluta; la extensión no expande `~` e ignora un valor relativo. |728| `environmentVariables` | `[]` | Establece variables de entorno para el proceso de Claude. Para configuración compartida, usa en su lugar la configuración de Claude Code. Una entrada [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/es/env-vars) solo se aplica cuando su valor es una ruta absoluta; la extensión no expande `~` e ignora un valor relativo. |

711| `disableLoginPrompt` | `false` | Omite las solicitudes de autenticación (para configuraciones con proveedores externos) |729| `disableLoginPrompt` | `false` | Omite las solicitudes de autenticación (para configuraciones con proveedores externos) |


835 853 

836**Contexto de la selección y del archivo abierto.** Mientras está conectada, la CLI incluye tu selección actual del editor y la ruta del archivo activo como contexto en cada prompt que envías. La transcripción muestra una línea `⧉ Selected N lines from <file>` cuando esto ocurre. Estos casos modifican ese contexto:854**Contexto de la selección y del archivo abierto.** Mientras está conectada, la CLI incluye tu selección actual del editor y la ruta del archivo activo como contexto en cada prompt que envías. La transcripción muestra una línea `⧉ Selected N lines from <file>` cuando esto ocurre. Estos casos modifican ese contexto:

837 855 

856* **[Ajuste Attach Selection](#keep-your-selection-and-open-file-out-of-your-messages) desactivado**: la CLI no incluye tu selección como contexto.

857* **Ajuste Attach Open File desactivado**: la CLI incluye la ruta del archivo activo solo cuando también incluye una selección.

838* **Mensajes en cola**: si [pones un mensaje en cola mientras Claude trabaja](https://code.claude.com/docs/es/interactive-mode.md#queue-messages-while-claude-works), conserva la selección que tenías cuando presionaste `Enter`, independientemente de lo que selecciones después.858* **Mensajes en cola**: si [pones un mensaje en cola mientras Claude trabaja](https://code.claude.com/docs/es/interactive-mode.md#queue-messages-while-claude-works), conserva la selección que tenías cuando presionaste `Enter`, independientemente de lo que selecciones después.

839* **Archivos sensibles**: para excluir un archivo sensible como `.env`, agrega una [regla de denegación `Read`](https://code.claude.com/docs/es/permissions#read-and-edit) para su ruta. Una regla de denegación que coincida impide que tanto el texto seleccionado como el aviso de archivo abierto de ese archivo lleguen a Claude.859* **Archivos sensibles**: para excluir un archivo sensible como `.env`, agrega una [regla de denegación `Read`](https://code.claude.com/docs/es/permissions#read-and-edit) para su ruta. Una regla de denegación que coincida impide que tanto el texto seleccionado como el aviso de archivo abierto de ese archivo lleguen a Claude.

840* **Attach Open File desactivado**: si desactivas el [ajuste Attach Open File](#extension-settings), la CLI recibe la ruta del archivo activo solo mientras tienes texto seleccionado en él.

841 860 

842**Transporte y autenticación.** El servidor se vincula a `127.0.0.1` en un puerto aleatorio en el rango 10000–65535, y el puerto no se puede configurar. El transporte y el token de autenticación funcionan de la siguiente manera:861**Transporte y autenticación.** El servidor se vincula a `127.0.0.1` en un puerto aleatorio en el rango 10000–65535, y el puerto no se puede configurar. El transporte y el token de autenticación funcionan de la siguiente manera:

843 862 

workflows.md +5 −4

Details

333 333 

334El runtime del workflow ejecuta el script en un entorno aislado, separado de su conversación. Los resultados intermedios permanecen en variables de script en lugar de llegar al contexto de Claude.334El runtime del workflow ejecuta el script en un entorno aislado, separado de su conversación. Los resultados intermedios permanecen en variables de script en lugar de llegar al contexto de Claude.

335 335 

336Cada ejecución escribe su script en un archivo bajo el directorio de su sesión en `~/.claude/projects/`. Claude recibe la ruta cuando comienza la ejecución, por lo que puede solicitarla. Puede abrir ese archivo para leer la orquestación que Claude escribió, compararlo con el script de una ejecución anterior, o editarlo y pedir a Claude que reinicie desde la versión editada.336A menos que Claude inicie una ejecución desde la ruta de un archivo de script, Claude Code escribe el script de la ejecución en un archivo bajo el directorio de tu sesión en `~/.claude/projects/`. Claude recibe la ruta del script cuando comienza la ejecución, por lo que puedes solicitarla. Puedes abrir ese archivo para leer la orquestación que Claude escribió, compararlo con el script de una ejecución anterior, o editarlo y pedir a Claude que reinicie desde la versión editada.

337 337 

338Claude solo puede iniciar un workflow desde un archivo de script que la sesión ya tenga permitido leer. Para ejecutar un script guardado fuera de su directorio de trabajo, primero agregue su directorio con [`/add-dir`](https://code.claude.com/docs/es/permissions#working-directories) o una [regla de permiso Read](https://code.claude.com/docs/es/permissions.md#read-and-edit).338Claude solo puede iniciar un workflow desde un archivo de script que la sesión ya tenga permitido leer. Para ejecutar un script guardado fuera de su directorio de trabajo, primero agregue su directorio con [`/add-dir`](https://code.claude.com/docs/es/permissions#working-directories) o una [regla de permiso Read](https://code.claude.com/docs/es/permissions.md#read-and-edit).

339 339 


387 387 

388#### Reanudar después de salir de la sesión388#### Reanudar después de salir de la sesión

389 389 

390Puede reanudar una ejecución dentro de la misma sesión de Claude Code. Lo que sucede con un workflow en ejecución cuando sale de la sesión depende de cómo salga:390Si colocas tu sesión en segundo plano o sales de Claude Code mientras una ejecución de workflow está en curso, la ejecución no continúa por sí sola. La ejecución continúa solo cuando Claude la relanza con una llamada a `Workflow`, que [reproduce la ejecución a partir de sus resultados guardados](#which-agents-run-again).

391 391 

392* Si [coloca la sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md#what-carries-over-when-you-background), Claude Code reproduce la ejecución de la misma manera en la sesión en segundo plano y la continúa.392* **Colocaste la sesión en segundo plano o elegiste [`Move to background and exit`](https://code.claude.com/docs/es/agent-view#from-inside-a-session)**: si la ejecución no ha continuado cuando revisas la [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md#what-carries-over-when-you-background), pide ahí a Claude que relance el workflow. Según tu [modo de permisos](#approve-the-plan-before-it-runs), Claude Code te pide primero que apruebes el relanzamiento. Si la sesión aparece en `Needs input` en la vista de agente, [conéctate a ella](https://code.claude.com/docs/es/agent-view.md#attach-to-a-session) para responder la solicitud de aprobación.

393* Si sale de Claude Code mientras se ejecuta un workflow y [la vista de agente está activada](https://code.claude.com/docs/es/agent-view.md#from-inside-a-session), el diálogo de salida ofrece `Move to background and exit`, que lleva la ejecución de la misma manera. Si elige `Exit and stop tasks` en su lugar, o la opción no se ofrece, la ejecución se detiene con la sesión. Claude Code mantiene los resultados guardados de la ejecución bajo el directorio de esa sesión en `~/.claude/projects/`, por lo que una sesión que reanuda con `claude --resume` puede reproducirlos cuando pide a Claude que relance el workflow. En una sesión que inicia nueva, Claude no tiene ninguna ejecución anterior que reproducir e inicia el workflow de nuevo como una nueva ejecución.393* **El relanzamiento en la sesión en segundo plano falló con `nothing to resume`**: pide a Claude que inicie el workflow de nuevo como una nueva ejecución. Si Claude inició la ejecución desde la ruta de un archivo de script fuera de `~/.claude/projects/`, como uno en tu directorio de trabajo, Claude no puede relanzarla en la sesión en segundo plano.

394* **Elegiste `Exit and stop tasks`, o no se te ofreció `Move to background and exit`**: la ejecución se detuvo con la sesión, y Claude Code conserva los resultados guardados de la ejecución bajo el directorio de esa sesión en `~/.claude/projects/`. Reanuda la sesión con `claude --resume` en tu shell y luego pide a Claude que relance el workflow. En una sesión nueva, Claude no tiene ninguna ejecución anterior que relanzar e inicia el workflow de nuevo.

394 395 

395En una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), Claude Code también guarda los resultados de la ejecución con el historial de conversación de la sesión, que sobrevive cuando se reclama la VM de la sesión. Cuando [reabre tal sesión](https://code.claude.com/docs/es/claude-code-on-the-web.md#environment-expired) y pide a Claude que relance el workflow, los agentes completados aún devuelven sus resultados guardados.396En una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), Claude Code también guarda los resultados de la ejecución con el historial de conversación de la sesión, que sobrevive cuando se reclama la VM de la sesión. Cuando [reabre tal sesión](https://code.claude.com/docs/es/claude-code-on-the-web.md#environment-expired) y pide a Claude que relance el workflow, los agentes completados aún devuelven sus resultados guardados.

396 397