SpyBara
Go Premium

Documentation 2026-11-13 23:02 UTC to 2026-11-14 03:01 UTC

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

14 14 

15## Cómo funciona el checkpointing15## Cómo funciona el checkpointing

16 16 

17Cuando habilita el checkpointing de archivos, el SDK crea copias de seguridad de archivos antes de modificarlos a través de las herramientas Write, Edit o NotebookEdit. Los mensajes de usuario en el flujo de respuesta incluyen un UUID de checkpoint que puede usar como punto de restauración.17Cuando habilitas el checkpointing de archivos, el SDK crea copias de seguridad de archivos antes de modificarlos a través de las herramientas Write, Edit o NotebookEdit. Cada prompt que inicia un turno es un checkpoint, y el UUID de su mensaje de usuario es el punto de restauración.

18 18 

19> [!NOTE]19> [!NOTE]

20>20>


147 147 

148**2. Capturar UUID de checkpoint e ID de sesión**148**2. Capturar UUID de checkpoint e ID de sesión**

149 149 

150Con la opción `replay-user-messages` establecida, cada mensaje de usuario en el flujo de respuesta tiene un UUID que sirve como checkpoint.150Con la opción `replay-user-messages` establecida, el mensaje de usuario de cada prompt que inicia un turno tiene un UUID que sirve como checkpoint. Los mensajes de usuario que contienen resultados de herramientas también tienen un UUID, pero no es un checkpoint.

151 151 

152Para la mayoría de los casos de uso, capture el UUID del primer mensaje de usuario (`message.uuid`); revertir a él restaura los archivos rastreados a su estado original. Para almacenar múltiples checkpoints y revertir a estados intermedios, consulte [Múltiples puntos de restauración](#multiple-restore-points).152Para la mayoría de los casos de uso, capture el UUID del primer mensaje de usuario (`message.uuid`); revertir a él restaura los archivos rastreados a su estado original. Para almacenar múltiples checkpoints y revertir a estados intermedios, consulte [Múltiples puntos de restauración](#multiple-restore-points).

153 153 


171 171 

172### Checkpoint antes de operaciones arriesgadas172### Checkpoint antes de operaciones arriesgadas

173 173 

174Este patrón mantiene solo el UUID de checkpoint más reciente, actualizándolo antes de cada turno del agente. Si algo sale mal durante el procesamiento, puede revertir inmediatamente al último estado seguro y salir del bucle.174Este patrón mantiene solo el UUID de checkpoint más reciente y lo actualiza en cada prompt que inicia un turno. Si algo sale mal durante el procesamiento, puedes revertir inmediatamente al último estado seguro y salir del bucle.

175 175 

176Antes de ejecutar este ejemplo, reemplace `your_revert_condition` (Python) o `yourRevertCondition` (TypeScript) con su propia verificación, como detección de errores o un fallo de validación; el marcador de posición no está definido en el ejemplo.176Antes de ejecutar este ejemplo, reemplace `your_revert_condition` (Python) o `yourRevertCondition` (TypeScript) con su propia verificación, como detección de errores o un fallo de validación; el marcador de posición no está definido en el ejemplo.

177 177 


193 await client.query("Refactor the authentication module")193 await client.query("Refactor the authentication module")

194 194 

195 async for message in client.receive_response():195 async for message in client.receive_response():

196 # Update checkpoint before each agent turn starts196 # Update checkpoint at each prompt you send; a tool result isn't one

197 # This overwrites the previous checkpoint. Only keep the latest197 # This overwrites the previous checkpoint. Only keep the latest

198 if isinstance(message, UserMessage) and message.uuid:198 if (

199 isinstance(message, UserMessage)

200 and message.uuid

201 and message.tool_use_result is None

202 and message.parent_tool_use_id is None

203 ):

199 safe_checkpoint = message.uuid204 safe_checkpoint = message.uuid

200 205 

201 # Decide when to revert based on your own logic206 # Decide when to revert based on your own logic


225 let safeCheckpoint: string | undefined;230 let safeCheckpoint: string | undefined;

226 231 

227 for await (const message of response) {232 for await (const message of response) {

228 // Update checkpoint before each agent turn starts233 // Update checkpoint at each prompt you send; a tool result isn't one

229 // This overwrites the previous checkpoint. Only keep the latest234 // This overwrites the previous checkpoint. Only keep the latest

230 if (message.type === "user" && message.uuid) {235 if (message.type === "user" && "isReplay" in message && message.isReplay && message.uuid) {

231 safeCheckpoint = message.uuid;236 safeCheckpoint = message.uuid;

232 }237 }

233 238 


246 251 

247### Múltiples puntos de restauración252### Múltiples puntos de restauración

248 253 

249Si Claude realiza cambios en múltiples turnos, es posible que desee revertir a un punto específico en lugar de volver completamente. Por ejemplo, si Claude refactoriza un archivo en el turno uno y agrega pruebas en el turno dos, es posible que desee mantener la refactorización pero deshacer las pruebas.254Si Claude realiza cambios a lo largo de varios prompts, es posible que quieras revertir a un punto específico en lugar de volver completamente al inicio. Por ejemplo, si tu primer prompt refactoriza un archivo y el segundo agrega pruebas, revierte al checkpoint de tu segundo prompt para mantener la refactorización y deshacer las pruebas.

250 255 

251Este patrón almacena todos los UUIDs de checkpoint en una matriz con metadatos. Después de que se complete la sesión, puede revertir a cualquier checkpoint anterior:256Este patrón almacena cada UUID de checkpoint en una matriz con metadatos. Después de que se complete la sesión, puedes revertir a cualquier checkpoint anterior:

252 257 

253```python Python theme={null}258```python Python theme={null}

254import asyncio259import asyncio


284 await client.query("Refactor the authentication module")289 await client.query("Refactor the authentication module")

285 290 

286 async for message in client.receive_response():291 async for message in client.receive_response():

287 if isinstance(message, UserMessage) and message.uuid:292 if (

293 isinstance(message, UserMessage)

294 and message.uuid

295 and message.tool_use_result is None

296 and message.parent_tool_use_id is None

297 ):

288 checkpoints.append(298 checkpoints.append(

289 Checkpoint(299 Checkpoint(

290 id=message.uuid,300 id=message.uuid,


338 348 

339 try {349 try {

340 for await (const message of response) {350 for await (const message of response) {

341 if (message.type === "user" && message.uuid) {351 if (message.type === "user" && "isReplay" in message && message.isReplay && message.uuid) {

342 checkpoints.push({352 checkpoints.push({

343 id: message.uuid,353 id: message.uuid,

344 description: `After turn ${checkpoints.length + 1}`,354 description: `After turn ${checkpoints.length + 1}`,


638 648 

639* El checkpointing de archivos no estaba habilitado en la sesión original (`enable_file_checkpointing` o `enableFileCheckpointing` no estaba establecido en `true`)649* El checkpointing de archivos no estaba habilitado en la sesión original (`enable_file_checkpointing` o `enableFileCheckpointing` no estaba establecido en `true`)

640* La sesión no se completó correctamente antes de intentar reanudar y revertir650* La sesión no se completó correctamente antes de intentar reanudar y revertir

651* El UUID provino de un mensaje de usuario que contiene un resultado de herramienta, el cual no es un checkpoint

641 652 

642**Solución**: Asegúrese de que `enable_file_checkpointing=True` (Python) o `enableFileCheckpointing: true` (TypeScript) estuviera establecido en la sesión original, luego use el patrón mostrado en los ejemplos: capture el UUID del primer mensaje de usuario, complete la sesión completamente, luego reanude con un mensaje vacío y llame a `rewindFiles()` una sola vez.653**Solución**: Asegúrese de que `enable_file_checkpointing=True` (Python) o `enableFileCheckpointing: true` (TypeScript) estuviera establecido en la sesión original, luego use el patrón mostrado en los ejemplos: capture el UUID del primer mensaje de usuario, complete la sesión completamente, luego reanude con un mensaje vacío y llame a `rewindFiles()` una sola vez.

643 654 

Details

496| **Persistencia** | Archivo por proyecto | Guardado como archivos | Solo sesión | Solo sesión |496| **Persistencia** | Archivo por proyecto | Guardado como archivos | Solo sesión | Solo sesión |

497| **Reutilización** | Por proyecto | Entre proyectos | Duplicación de código | Duplicación de código |497| **Reutilización** | Por proyecto | Entre proyectos | Duplicación de código | Duplicación de código |

498| **Gestión** | En el sistema de archivos | CLI + archivos | En código | En código |498| **Gestión** | En el sistema de archivos | CLI + archivos | En código | En código |

499| **Herramientas predeterminadas** | Preservadas | Preservadas | Preservadas | Perdidas (a menos que se incluyan) |499| **Guía de herramientas** | Preservada | Preservada | Preservada | Perdida (a menos que se incluya) |

500| **Seguridad integrada** | Mantenida | Mantenida | Mantenida | Debe agregarse |500| **Seguridad integrada** | Mantenida | Mantenida | Mantenida | Debe agregarse |

501| **Nivel de personalización** | Solo adiciones | Adiciones; puede omitir las instrucciones de programación | Solo adiciones | Control completo |501| **Nivel de personalización** | Solo adiciones | Adiciones; puede omitir las instrucciones de programación | Solo adiciones | Control completo |

502| **Control de versiones** | Con proyecto | Sí | Con código | Con código |502| **Control de versiones** | Con proyecto | Sí | Con código | Con código |

Details

875| `allowed_tools` | `list[str]` | `[]` | Herramientas que se aprueban automáticamente sin pedir confirmación, excepto las lecturas desde [rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths). Esto no restringe a Claude solo a estas herramientas. Si nombras aquí una de las [herramientas de seguimiento de tareas](https://code.claude.com/docs/es/agent-sdk/todo-tracking.md#model-availability), Claude Code también habilita esa función en la sesión. Las demás herramientas no listadas pasan a `permission_mode` y `can_use_tool`. Usa `disallowed_tools` para bloquear herramientas. Consulta [Permisos](https://code.claude.com/docs/es/agent-sdk/permissions.md#allow-and-deny-rules) |875| `allowed_tools` | `list[str]` | `[]` | Herramientas que se aprueban automáticamente sin pedir confirmación, excepto las lecturas desde [rutas de red](https://code.claude.com/docs/es/permissions.md#network-paths). Esto no restringe a Claude solo a estas herramientas. Si nombras aquí una de las [herramientas de seguimiento de tareas](https://code.claude.com/docs/es/agent-sdk/todo-tracking.md#model-availability), Claude Code también habilita esa función en la sesión. Las demás herramientas no listadas pasan a `permission_mode` y `can_use_tool`. Usa `disallowed_tools` para bloquear herramientas. Consulta [Permisos](https://code.claude.com/docs/es/agent-sdk/permissions.md#allow-and-deny-rules) |

876| `system_prompt` | `str \| SystemPromptPreset \| SystemPromptCustom \| SystemPromptFile \| None` | `None` | Configuración del prompt del sistema. Pasa una cadena para un prompt personalizado, `{"type": "preset", "preset": "claude_code"}` para el prompt del sistema de Claude Code con `"append"` opcional, `{"type": "custom", "prompt": "..."}` para un prompt personalizado que también puede establecer `"snapshot"`, o `{"type": "file", "path": "..."}` para cargar un prompt grande desde el disco. Consulta [`SystemPromptPreset`](#systempromptpreset), [`SystemPromptCustom`](#systempromptcustom) y [`SystemPromptFile`](#systempromptfile) |876| `system_prompt` | `str \| SystemPromptPreset \| SystemPromptCustom \| SystemPromptFile \| None` | `None` | Configuración del prompt del sistema. Pasa una cadena para un prompt personalizado, `{"type": "preset", "preset": "claude_code"}` para el prompt del sistema de Claude Code con `"append"` opcional, `{"type": "custom", "prompt": "..."}` para un prompt personalizado que también puede establecer `"snapshot"`, o `{"type": "file", "path": "..."}` para cargar un prompt grande desde el disco. Consulta [`SystemPromptPreset`](#systempromptpreset), [`SystemPromptCustom`](#systempromptcustom) y [`SystemPromptFile`](#systempromptfile) |

877| `mcp_servers` | `dict[str, McpServerConfig] \| str \| Path` | `{}` | Configuraciones de servidores MCP o ruta al archivo de configuración |877| `mcp_servers` | `dict[str, McpServerConfig] \| str \| Path` | `{}` | Configuraciones de servidores MCP o ruta al archivo de configuración |

878| `strict_mcp_config` | `bool` | `False` | Cuando es `True`, usa solo los servidores pasados en `mcp_servers` e ignora el `.mcp.json` del proyecto, la configuración del usuario, los servidores MCP proporcionados por plugins y los [conectores de claude.ai](https://code.claude.com/docs/es/mcp.md#use-mcp-servers-from-claude-ai). Corresponde al flag de la CLI `--strict-mcp-config` |878| `strict_mcp_config` | `bool` | `False` | Cuando es `True`, usa los servidores pasados en `mcp_servers` e ignora el `.mcp.json` del proyecto, la configuración del usuario, los servidores MCP proporcionados por plugins y los [conectores de claude.ai](https://code.claude.com/docs/es/mcp.md#use-mcp-servers-from-claude-ai). Corresponde al flag de la CLI `--strict-mcp-config` |

879| `permission_mode` | `PermissionMode \| None` | `None` | Modo de permisos para el uso de herramientas |879| `permission_mode` | `PermissionMode \| None` | `None` | Modo de permisos para el uso de herramientas |

880| `continue_conversation` | `bool` | `False` | Continuar la conversación más reciente |880| `continue_conversation` | `bool` | `False` | Continuar la conversación más reciente |

881| `resume` | `str \| None` | `None` | ID de sesión para reanudar |881| `resume` | `str \| None` | `None` | ID de sesión para reanudar |

Details

340| `Read`, `Edit`, `Glob` | Analizar y modificar código |340| `Read`, `Edit`, `Glob` | Analizar y modificar código |

341| `Read`, `Edit`, `Bash`, `Glob`, `Grep` | Automatización completa |341| `Read`, `Edit`, `Bash`, `Glob`, `Grep` | Automatización completa |

342 342 

343Para limitar las herramientas integradas del agente a uno de estos conjuntos, pásalo como `tools`. Si en cambio indicas un conjunto en `allowedTools`, [apruebas previamente esas herramientas](https://code.claude.com/docs/es/agent-sdk/custom-tools.md#configure-allowed-tools), y el agente aún puede llamar a las demás, según tu modo de permisos.

344 

343**Modos de permiso** controlan cuánta supervisión humana desea. El SDK evalúa el modo activo junto con sus reglas de permitir y denegar en un orden fijo, descrito en [Cómo se evalúan los permisos](https://code.claude.com/docs/es/agent-sdk/permissions.md#how-permissions-are-evaluated). Para la lista completa de modos, su comportamiento y cuándo usar cada uno, consulte [Modo de permiso en Cómo funciona el bucle del agente](https://code.claude.com/docs/es/agent-sdk/agent-loop.md#permission-mode).345**Modos de permiso** controlan cuánta supervisión humana desea. El SDK evalúa el modo activo junto con sus reglas de permitir y denegar en un orden fijo, descrito en [Cómo se evalúan los permisos](https://code.claude.com/docs/es/agent-sdk/permissions.md#how-permissions-are-evaluated). Para la lista completa de modos, su comportamiento y cuándo usar cada uno, consulte [Modo de permiso en Cómo funciona el bucle del agente](https://code.claude.com/docs/es/agent-sdk/agent-loop.md#permission-mode).

344 346 

345## Próximos pasos347## Próximos pasos

Details

146| `prompt` | `string` | Sí | El prompt del sistema del agente que define su rol y comportamiento |146| `prompt` | `string` | Sí | El prompt del sistema del agente que define su rol y comportamiento |

147| `tools` | `string[]` | No | Matriz de nombres de herramientas permitidas. Si se omite, hereda todas las [herramientas disponibles para subagentes](https://code.claude.com/docs/es/sub-agents.md#available-tools) |147| `tools` | `string[]` | No | Matriz de nombres de herramientas permitidas. Si se omite, hereda todas las [herramientas disponibles para subagentes](https://code.claude.com/docs/es/sub-agents.md#available-tools) |

148| `disallowedTools` | `string[]` | No | Matriz de nombres de herramientas a eliminar del conjunto de herramientas del agente. También se aceptan patrones a nivel de servidor MCP: `mcp__server` o `mcp__server__*` elimina todas las herramientas de ese servidor, y `mcp__*` elimina todas las herramientas MCP de cualquier servidor |148| `disallowedTools` | `string[]` | No | Matriz de nombres de herramientas a eliminar del conjunto de herramientas del agente. También se aceptan patrones a nivel de servidor MCP: `mcp__server` o `mcp__server__*` elimina todas las herramientas de ese servidor, y `mcp__*` elimina todas las herramientas MCP de cualquier servidor |

149| `model` | `string` | No | Anulación de modelo para este agente. Acepta un alias como `'fable'`, `'opus'`, `'sonnet'`, `'haiku'`, `'inherit'`, o un ID de modelo completo. `'inherit'` utiliza el modelo principal. Cuando lo omite, Claude Code elige el modelo en el [orden de modelo de subagente](https://code.claude.com/docs/es/sub-agents.md#choose-a-model) |149| `model` | `string` | No | Sobrescritura de modelo para este agente. Acepta un alias como `'fable'`, `'opus'`, `'sonnet'`, `'haiku'`, `'inherit'`, o un ID de modelo completo. `'inherit'` utiliza el modelo del agente que generó a este. Cuando omites `model`, Claude Code elige el modelo en el [orden de modelo de subagente](https://code.claude.com/docs/es/sub-agents.md#choose-a-model) |

150| `skills` | `string[]` | No | Lista de nombres de skills a precargar en el contexto del agente al inicio. Como máximo se precargan los [primeros 32 nombres distintos](https://code.claude.com/docs/es/sub-agents.md#preload-skills-into-subagents) de la lista. Los skills no listados siguen siendo invocables a través de la herramienta Skill |150| `skills` | `string[]` | No | Lista de nombres de skills a precargar en el contexto del agente al inicio. Como máximo se precargan los [primeros 32 nombres distintos](https://code.claude.com/docs/es/sub-agents.md#preload-skills-into-subagents) de la lista. Los skills no listados siguen siendo invocables a través de la herramienta Skill |

151| `memory` | `'user' \| 'project' \| 'local'` | No | Fuente de memoria para este agente |151| `memory` | `'user' \| 'project' \| 'local'` | No | Fuente de memoria para este agente |

152| `mcpServers` | `(string \| object)[]` | No | Servidores MCP disponibles para este agente, por nombre o configuración en línea |152| `mcpServers` | `(string \| object)[]` | No | Servidores MCP disponibles para este agente, por nombre o configuración en línea |

Details

589| `skills` | `string[] \| 'all'` | `undefined` | Skills disponibles para la sesión. Pasa `'all'` para habilitar todos los skills descubiertos, o una lista de nombres de skills. Pasa solo nombres exactos. En Agent SDK v0.3.221 o posterior, el SDK rechaza con un error los nombres mal formados y los que usan comodines antes de iniciar el proceso de Claude Code. Cuando se establece, el SDK agrega automáticamente la herramienta Skill a `allowedTools`. Si también pasas `tools`, incluye `'Skill'` en esa lista. Consulta [Skills](https://code.claude.com/docs/es/agent-sdk/skills.md) |589| `skills` | `string[] \| 'all'` | `undefined` | Skills disponibles para la sesión. Pasa `'all'` para habilitar todos los skills descubiertos, o una lista de nombres de skills. Pasa solo nombres exactos. En Agent SDK v0.3.221 o posterior, el SDK rechaza con un error los nombres mal formados y los que usan comodines antes de iniciar el proceso de Claude Code. Cuando se establece, el SDK agrega automáticamente la herramienta Skill a `allowedTools`. Si también pasas `tools`, incluye `'Skill'` en esa lista. Consulta [Skills](https://code.claude.com/docs/es/agent-sdk/skills.md) |

590| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | Función personalizada para generar el proceso de Claude Code. Úsala para ejecutar Claude Code en máquinas virtuales, contenedores o entornos remotos |590| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | Función personalizada para generar el proceso de Claude Code. Úsala para ejecutar Claude Code en máquinas virtuales, contenedores o entornos remotos |

591| `stderr` | `(data: string) => void` | `undefined` | Callback para la salida de stderr |591| `stderr` | `(data: string) => void` | `undefined` | Callback para la salida de stderr |

592| `strictMcpConfig` | `boolean` | `false` | Usa solo los servidores pasados en `mcpServers` e ignora el `.mcp.json` del proyecto, la configuración de usuario, los servidores MCP proporcionados por plugins y los [conectores de claude.ai](https://code.claude.com/docs/es/mcp.md#use-mcp-servers-from-claude-ai) |592| `strictMcpConfig` | `boolean` | `false` | Usa los servidores pasados en `mcpServers` e ignora el `.mcp.json` del proyecto, la configuración de usuario, los servidores MCP proporcionados por plugins y los [conectores de claude.ai](https://code.claude.com/docs/es/mcp.md#use-mcp-servers-from-claude-ai) |

593| `systemPrompt` | `string \| string[] \| { type: 'custom'; prompt: string \| string[]; snapshot?: boolean } \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean; snapshot?: boolean }` | `undefined` (prompt mínimo) | Configuración del prompt del sistema. Pasa una cadena para un prompt personalizado, o `{ type: 'preset', preset: 'claude_code' }` para usar el prompt del sistema de Claude Code. Pasa un array de cadenas con la constante exportada `SYSTEM_PROMPT_DYNAMIC_BOUNDARY` entre la parte estática y la parte por solicitud para [almacenar en caché la parte estática de un prompt personalizado](https://code.claude.com/docs/es/agent-sdk/modifying-system-prompts.md#cache-the-static-part-of-a-custom-prompt). Al usar la forma de objeto preset, agrega `append` para ampliarlo con instrucciones adicionales, y establece `excludeDynamicSections: true` para mover el contexto por sesión al primer mensaje del usuario y lograr una [mejor reutilización de la caché de prompts entre máquinas](https://code.claude.com/docs/es/agent-sdk/modifying-system-prompts.md#improve-prompt-caching-across-users-and-machines). Establece `snapshot: false` para reconstruir el prompt en cada solicitud en lugar de [reutilizar el prompt que la sesión registró en su primera solicitud](https://code.claude.com/docs/es/agent-sdk/modifying-system-prompts.md#change-the-prompt-of-an-existing-session). Para establecer `snapshot` en un prompt personalizado, pasa la forma `{ type: 'custom', prompt }`. La forma `{ type: 'custom' }` y el campo `snapshot` requieren TypeScript Agent SDK v0.3.257 o posterior |593| `systemPrompt` | `string \| string[] \| { type: 'custom'; prompt: string \| string[]; snapshot?: boolean } \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean; snapshot?: boolean }` | `undefined` (prompt mínimo) | Configuración del prompt del sistema. Pasa una cadena para un prompt personalizado, o `{ type: 'preset', preset: 'claude_code' }` para usar el prompt del sistema de Claude Code. Pasa un array de cadenas con la constante exportada `SYSTEM_PROMPT_DYNAMIC_BOUNDARY` entre la parte estática y la parte por solicitud para [almacenar en caché la parte estática de un prompt personalizado](https://code.claude.com/docs/es/agent-sdk/modifying-system-prompts.md#cache-the-static-part-of-a-custom-prompt). Al usar la forma de objeto preset, agrega `append` para ampliarlo con instrucciones adicionales, y establece `excludeDynamicSections: true` para mover el contexto por sesión al primer mensaje del usuario y lograr una [mejor reutilización de la caché de prompts entre máquinas](https://code.claude.com/docs/es/agent-sdk/modifying-system-prompts.md#improve-prompt-caching-across-users-and-machines). Establece `snapshot: false` para reconstruir el prompt en cada solicitud en lugar de [reutilizar el prompt que la sesión registró en su primera solicitud](https://code.claude.com/docs/es/agent-sdk/modifying-system-prompts.md#change-the-prompt-of-an-existing-session). Para establecer `snapshot` en un prompt personalizado, pasa la forma `{ type: 'custom', prompt }`. La forma `{ type: 'custom' }` y el campo `snapshot` requieren TypeScript Agent SDK v0.3.257 o posterior |

594| `taskBudget` | `{ total: number }` | `undefined` | *Alfa.* Presupuesto de tarea del lado de la API, en tokens. Cuando se establece, se le indica al modelo su presupuesto de tokens restante para que pueda dosificar el uso de herramientas y concluir antes del límite |594| `taskBudget` | `{ total: number }` | `undefined` | *Alfa.* Presupuesto de tarea del lado de la API, en tokens. Cuando se establece, se le indica al modelo su presupuesto de tokens restante para que pueda dosificar el uso de herramientas y concluir antes del límite |

595| `thinking` | [`ThinkingConfig`](#thinkingconfig) | `{ type: 'adaptive' }` para los modelos compatibles | Controla el comportamiento de pensamiento/razonamiento de Claude. Consulta [`ThinkingConfig`](#thinkingconfig) para ver las opciones |595| `thinking` | [`ThinkingConfig`](#thinkingconfig) | `{ type: 'adaptive' }` para los modelos compatibles | Controla el comportamiento de pensamiento/razonamiento de Claude. Consulta [`ThinkingConfig`](#thinkingconfig) para ver las opciones |


1285| `tools` | No | Array de nombres de herramientas permitidas. Si se omite, hereda todas las [herramientas disponibles para subagentes](https://code.claude.com/docs/es/sub-agents.md#available-tools). Para precargar Skills en el contexto del agente, usa el campo `skills` en lugar de listar `'Skill'` aquí |1285| `tools` | No | Array de nombres de herramientas permitidas. Si se omite, hereda todas las [herramientas disponibles para subagentes](https://code.claude.com/docs/es/sub-agents.md#available-tools). Para precargar Skills en el contexto del agente, usa el campo `skills` en lugar de listar `'Skill'` aquí |

1286| `disallowedTools` | No | Array de nombres de herramientas que se prohíben explícitamente para este agente. También se aceptan patrones a nivel de servidor MCP: `mcp__server` o `mcp__server__*` elimina todas las herramientas de ese servidor, y `mcp__*` elimina todas las herramientas MCP de cualquier servidor |1286| `disallowedTools` | No | Array de nombres de herramientas que se prohíben explícitamente para este agente. También se aceptan patrones a nivel de servidor MCP: `mcp__server` o `mcp__server__*` elimina todas las herramientas de ese servidor, y `mcp__*` elimina todas las herramientas MCP de cualquier servidor |

1287| `prompt` | Sí | El prompt del sistema del agente |1287| `prompt` | Sí | El prompt del sistema del agente |

1288| `model` | No | Sobrescritura del modelo para este agente. Acepta un alias como `'fable'`, `'opus'`, `'sonnet'`, `'haiku'`, `'inherit'` o un ID de modelo completo. `'inherit'` usa el modelo principal. Cuando lo omites, Claude Code elige el modelo según el [orden de modelos de subagentes](https://code.claude.com/docs/es/sub-agents.md#choose-a-model) |1288| `model` | No | Sobrescritura del modelo para este agente. Acepta un alias como `'fable'`, `'opus'`, `'sonnet'`, `'haiku'`, `'inherit'`, o un ID de modelo completo. `'inherit'` usa el modelo del agente que generó este. Cuando omites `model`, Claude Code elige el modelo según el [orden de modelos de subagentes](https://code.claude.com/docs/es/sub-agents.md#choose-a-model) |

1289| `mcpServers` | No | Especificaciones de servidores MCP para este agente |1289| `mcpServers` | No | Especificaciones de servidores MCP para este agente |

1290| `skills` | No | Array de nombres de skills que se precargan en el contexto del agente |1290| `skills` | No | Array de nombres de skills que se precargan en el contexto del agente |

1291| `initialPrompt` | No | Se envía automáticamente como el primer turno del usuario cuando este agente se ejecuta como agente del hilo principal |1291| `initialPrompt` | No | Se envía automáticamente como el primer turno del usuario cuando este agente se ejecuta como agente del hilo principal |

agent-teams.md +26 −9

Details

102>102>

103> `tmux` tiene limitaciones conocidas en ciertos sistemas operativos y tradicionalmente funciona mejor en macOS. Usar `tmux -CC` en iTerm2 es el punto de entrada sugerido para `tmux`.103> `tmux` tiene limitaciones conocidas en ciertos sistemas operativos y tradicionalmente funciona mejor en macOS. Usar `tmux -CC` en iTerm2 es el punto de entrada sugerido para `tmux`.

104 104 

105El valor predeterminado es `"in-process"`. Establece `"auto"` para habilitar los paneles divididos cuando ya estés ejecutando dentro de una sesión de tmux, o cuando tu terminal sea iTerm2 con la CLI `it2` instalada; de lo contrario, se recurre al modo en proceso. El ajuste `"tmux"` habilita el modo de paneles divididos y detecta automáticamente si usar tmux o iTerm2 según tu terminal.105Con los equipos de agentes [habilitados](#enable-agent-teams), sigue estos pasos para darle a cada compañero de equipo su propio panel:

106 106 

107Establece `"iterm2"` para usar explícitamente los paneles divididos nativos de iTerm2. Este modo requiere la [CLI `it2`](https://github.com/mkusaka/it2) y muestra un error con el comando de instalación si falta `it2`. La solicitud de configuración que ofrece instalar `it2` o cambiar a tmux aparece con `"auto"` o `"tmux"` cuando tu terminal es iTerm2 y tmux está disponible como respaldo.107**1. Instala tmux o configura iTerm2**

108 108 

109Para sobrescribir el valor predeterminado, establece [`teammateMode`](https://code.claude.com/docs/es/settings-reference#teammatemode) en `~/.claude/settings.json`:109El modo de paneles divididos requiere [tmux](https://github.com/tmux/tmux/wiki) o iTerm2 con la [CLI `it2`](https://github.com/mkusaka/it2). Configura el que usarás para ejecutar Claude Code:

110 

111* **tmux**: instálalo mediante el gestor de paquetes de tu sistema. Consulta la [wiki de tmux](https://github.com/tmux/tmux/wiki/Installing) para ver las instrucciones específicas de cada plataforma.

112* **iTerm2**: instala la [CLI `it2`](https://github.com/mkusaka/it2) y luego habilita la API de Python en **iTerm2 > Settings > General > Magic > Enable Python API**.

113 

114**2. Activa los paneles divididos**

115 

116Los compañeros de equipo se ejecutan en proceso hasta que cambies el ajuste [`teammateMode`](https://code.claude.com/docs/es/settings-reference#teammatemode).

117 

118Establécelo en `"auto"` en `~/.claude/settings.json`:

110 119 

111```json theme={null}120```json theme={null}

112{121{


114}123}

115```124```

116 125 

126Con `"auto"`, los compañeros de equipo se abren en paneles divididos cuando ejecutas Claude Code dentro de tmux o iTerm2, y se ejecutan en proceso en otras terminales.

127 

128**3. Inicia Claude Code y genera compañeros de equipo**

129 

130Ejecuta `claude` dentro de tmux o en iTerm2 y luego pídele a Claude que genere compañeros de equipo.

131 

132Si aparece una solicitud de configuración para `it2` en iTerm2, selecciona **Install it2 now** para abrir los paneles en tu ventana de iTerm2.

133 

134Si ejecutas Claude Code fuera de tmux e iTerm2, o los paneles no se abren en tu ventana de iTerm2, vuelve a cambiar `teammateMode`:

135 

136* **Fuera de tmux e iTerm2**: con tmux instalado, establece `teammateMode` en `"tmux"`. Los paneles se abren en una sesión de tmux aparte. Para verlos, copia el comando de la línea `View teammates` en el prompt de Claude Code y ejecuta ese comando en una segunda terminal.

137* **Los paneles no se abren en tu ventana de iTerm2**: establece `teammateMode` en `"iterm2"` para usar los paneles propios de iTerm2. Así, los compañeros de equipo solo se inician cuando ejecutas Claude Code en iTerm2 con `it2` configurado.

138 

117Para establecer el modo en una sola sesión, pásalo como flag:139Para establecer el modo en una sola sesión, pásalo como flag:

118 140 

119```bash theme={null}141```bash theme={null}


122 144 

123El flag `--teammate-mode` es experimental y no aparece en `claude --help`.145El flag `--teammate-mode` es experimental y no aparece en `claude --help`.

124 146 

125El modo de paneles divididos requiere [tmux](https://github.com/tmux/tmux/wiki) o iTerm2 con la [CLI `it2`](https://github.com/mkusaka/it2). Para instalarlos manualmente:

126 

127* **tmux**: instálalo mediante el gestor de paquetes de tu sistema. Consulta la [wiki de tmux](https://github.com/tmux/tmux/wiki/Installing) para ver las instrucciones específicas de cada plataforma.

128* **iTerm2**: instala la [CLI `it2`](https://github.com/mkusaka/it2) y luego habilita la API de Python en **iTerm2 → Settings → General → Magic → Enable Python API**.

129 

130### Especifica compañeros de equipo y modelos147### Especifica compañeros de equipo y modelos

131 148 

132Claude decide cuántos compañeros de equipo generar según tu tarea, o puedes especificar exactamente lo que quieres:149Claude decide cuántos compañeros de equipo generar según tu tarea, o puedes especificar exactamente lo que quieres:


497* **Sin subagentes en segundo plano desde compañeros de equipo en proceso**: los propios subagentes de un compañero de equipo en proceso se ejecutan en primer plano, porque el trabajo en segundo plano de un compañero de equipo no puede sobrevivir al proceso del líder. Claude Code devuelve un error cuando un compañero de equipo genera un subagente cuya definición establece `background: true`. Una solicitud `run_in_background: true` de un compañero de equipo también falla, ya sea con un error o ejecutándose silenciosamente en primer plano. Los subagentes lanzados desde la conversación principal siguen el [valor predeterminado de segundo plano](https://code.claude.com/docs/es/sub-agents.md#run-subagents-in-foreground-or-background).514* **Sin subagentes en segundo plano desde compañeros de equipo en proceso**: los propios subagentes de un compañero de equipo en proceso se ejecutan en primer plano, porque el trabajo en segundo plano de un compañero de equipo no puede sobrevivir al proceso del líder. Claude Code devuelve un error cuando un compañero de equipo genera un subagente cuya definición establece `background: true`. Una solicitud `run_in_background: true` de un compañero de equipo también falla, ya sea con un error o ejecutándose silenciosamente en primer plano. Los subagentes lanzados desde la conversación principal siguen el [valor predeterminado de segundo plano](https://code.claude.com/docs/es/sub-agents.md#run-subagents-in-foreground-or-background).

498* **El líder es fijo**: la sesión principal es el líder de por vida. No puede promover un compañero de equipo a líder ni transferir liderazgo.515* **El líder es fijo**: la sesión principal es el líder de por vida. No puede promover un compañero de equipo a líder ni transferir liderazgo.

499* **Sin modos de permisos por compañero de equipo en la generación**: los compañeros de equipo comienzan con el modo de permisos descrito en [Permisos](#permissions).516* **Sin modos de permisos por compañero de equipo en la generación**: los compañeros de equipo comienzan con el modo de permisos descrito en [Permisos](#permissions).

500* **Los paneles divididos requieren tmux o iTerm2**: el modo en proceso predeterminado funciona en cualquier terminal. El modo de panel dividido no es compatible con la terminal integrada de VS Code, Windows Terminal o Ghostty.517* **Los paneles divididos requieren tmux o iTerm2**: el modo en proceso predeterminado funciona en cualquier terminal.

501 518 

502## Próximos pasos519## Próximos pasos

503 520 

agent-view.md +30 −39

Details

144| Forma | Qué significa |144| Forma | Qué significa |

145| :- | :- |145| :- | :- |

146| `✻` o `✽` animado | El proceso de la sesión se está ejecutando, o la sesión necesita tu entrada |146| `✻` o `✽` animado | El proceso de la sesión se está ejecutando, o la sesión necesita tu entrada |

147| `∙` | El proceso ha terminado. Aún puedes echar un vistazo a la fila, y cuando respondas o te adjuntes, Claude lo reinicia a partir de su conversación guardada |147| `∙` | El proceso ha terminado. Aún puedes echar un vistazo a la fila, y cuando respondas o presiones `Enter`, Claude lo reinicia a partir de su conversación guardada |

148| `✢` | Una sesión de [`/loop`](https://code.claude.com/docs/es/scheduled-tasks) en reposo entre iteraciones. La fila muestra su recuento de ejecuciones y una cuenta regresiva |148| `✢` | Una sesión de [`/loop`](https://code.claude.com/docs/es/scheduled-tasks) en reposo entre iteraciones. La fila muestra su recuento de ejecuciones y una cuenta regresiva |

149 149 

150La etiqueta `#N` o `!N` que puede aparecer en el borde derecho de una fila es un enlace al [pull request o merge request](#pull-request-status) de la sesión, no parte del icono de estado.150La etiqueta `#N` o `!N` que puede aparecer en el borde derecho de una fila es un enlace al [pull request o merge request](#pull-request-status) de la sesión, no parte del icono de estado.


316* Presiona `Enter` en un encabezado de grupo para contraerlo, excepto mientras hay un [filtro](#filter-sessions) activo, cuando todos los grupos permanecen expandidos316* Presiona `Enter` en un encabezado de grupo para contraerlo, excepto mientras hay un [filtro](#filter-sessions) activo, cuando todos los grupos permanecen expandidos

317* Presiona `Ctrl+X` para detener una sesión y `Ctrl+X` de nuevo en menos de dos segundos para eliminarla de la lista, o `Esc` para descartar la confirmación sin eliminar. La segunda pulsación elimina la sesión incluso cuando el intento de detenerla falla, por ejemplo porque el [servicio en segundo plano no responde](#agent-view-says-the-background-service-did-not-respond). En ese caso, la confirmación permanece activa otros dos segundos, y la eliminación termina por sí misma el proceso de la sesión317* Presiona `Ctrl+X` para detener una sesión y `Ctrl+X` de nuevo en menos de dos segundos para eliminarla de la lista, o `Esc` para descartar la confirmación sin eliminar. La segunda pulsación elimina la sesión incluso cuando el intento de detenerla falla, por ejemplo porque el [servicio en segundo plano no responde](#agent-view-says-the-background-service-did-not-respond). En ese caso, la confirmación permanece activa otros dos segundos, y la eliminación termina por sí misma el proceso de la sesión

318 318 

319Presionar `Ctrl+X` en un encabezado de grupo elimina todas las sesiones de ese grupo después de una confirmación. Salvo en los casos de conservación descritos en [Qué elimina borrar una sesión](#what-deleting-a-session-removes), eliminar quita la sesión de la lista. Un worktree que Claude creó para ella se elimina, se conserva o se deja en su lugar según cómo la elimines y lo que contenga el worktree. La transcripción de la conversación permanece en tu máquina local, disponible mediante `claude --resume`.319Presiona `Ctrl+X` en un encabezado de grupo para eliminar todas las sesiones de ese grupo después de una confirmación, excepto las que Claude Code [se niegue a eliminar](#delete-a-session-after-claude-code-refuses). Consulta [Qué elimina borrar una sesión](#what-deleting-a-session-removes) para saber qué pasa con el worktree de cada sesión. La transcripción de la conversación permanece en tu máquina local, disponible mediante `claude --resume`.

320 320 

321Las sesiones completadas que no caben en la pantalla se pliegan en una fila `… N more`. El grupo `Completed` ocupa el espacio vertical que queda después de los grupos activos. En una terminal corta, el encabezado se compacta en una sola línea de resumen para que las sesiones que están trabajando o necesitan entrada sigan visibles.321Las sesiones completadas que no caben en la pantalla se pliegan en una fila `… N more`. El grupo `Completed` ocupa el espacio vertical que queda después de los grupos activos. En una terminal corta, el encabezado se compacta en una sola línea de resumen para que las sesiones que están trabajando o necesitan entrada sigan visibles.

322 322 


622 622 

623#### Qué elimina borrar una sesión623#### Qué elimina borrar una sesión

624 624 

625Elimina una sesión con `Ctrl+X` dos veces en la [vista de agentes](#organize-the-list) o con [`claude rm`](#manage-sessions-from-the-shell). Excepto en los casos conservados que se indican a continuación, la sesión sale de la lista. Su transcripción permanece en tu máquina a través de `claude --resume`, y la eliminación se mantiene tras los reinicios del supervisor.625Elimina una sesión con `Ctrl+X` dos veces en la [vista de agentes](#organize-the-list) o con [`claude rm`](#manage-sessions-from-the-shell). La sesión desaparece de la lista, a menos que Claude Code [se niegue a eliminarla](#delete-a-session-after-claude-code-refuses). Su transcripción permanece en tu máquina, disponible a través de `claude --resume`.

626 626 

627Qué sucede con un worktree que Claude creó para la sesión:627Qué sucede con un worktree que Claude creó para la sesión:

628 628 

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

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

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

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

633 631 

634 Los commits que están en un remoto no bloquean la eliminación. Tampoco los commits en la copia local de la rama predeterminada de tu remoto `origin`, siempre que esa rama esté extraída en tu checkout principal, es decir, el propio directorio del repositorio y no un worktree.632Un motivo por el que Claude Code se niega a eliminar una sesión son los [commits sin push en su worktree](https://code.claude.com/docs/es/errors.md#worktree-has-commits-that-are-not-pushed-anywhere). Para conservar esos commits, haz push de ellos antes de eliminar la sesión.

635 633 

636 Después de ese rechazo, tú eliges:634Algunos worktrees permanecen en el disco, ya sea que uses la vista de agentes o `claude rm`:

637 635 

638 * Para conservar los commits, haz push de ellos o fusiónalos en esa rama predeterminada, y luego vuelve a eliminar la sesión.636* Si creaste un worktree tú mismo e iniciaste la sesión desde dentro de él, el worktree permanece en el disco para que lo conserves o lo elimines.

639 * Para descartarlos, vuelve a eliminar la sesión sin hacer push: presiona `Ctrl+X` dos veces en su fila en la vista de agentes, o ejecuta el comando `claude rm <id> --discard-unpushed` que imprimió el rechazo. Esto elimina la sesión y el worktree junto con su rama, descartando los commits sin push y cualquier cambio sin commit.637* Si un directorio de worktree que Claude creó dentro de tu repositorio ya no tiene su archivo `.git`, el directorio permanece en el disco para que lo elimines. La rama del worktree permanece en el repositorio, por lo que conservas los commits de esa rama.

640 638 

641 Cuando vuelves a eliminar, Claude Code descarta solo lo que mostró el rechazo: si el worktree ha ganado un commit desde entonces, Claude Code lo conserva de nuevo y muestra el estado actualizado.639##### Eliminar una sesión después de que Claude Code se niegue

642 640 

643 Cuando los registros de otra sesión terminada también mencionan el worktree, este se conserva cuando vuelves a eliminar; haz push de los commits y luego vuelve a eliminar.641Cuando Claude Code se niega a eliminar una sesión debido a su worktree, sigue el mensaje que muestra. Si el mensaje menciona commits sin push, consulta [Worktree has commits that are not pushed anywhere](https://code.claude.com/docs/es/errors.md#worktree-has-commits-that-are-not-pushed-anywhere).

644* Un worktree que git ya no reconoce, por ejemplo después de `git worktree prune`, no bloquea la eliminación. Claude Code elimina la sesión y deja el directorio en el disco.

645* Cuando git o tu [hook `WorktreeRemove`](https://code.claude.com/docs/es/hooks#worktreeremove) no logra eliminar el worktree, Claude Code conserva el worktree y la sesión, y el mensaje indica la causa. En el caso de un hook, el mensaje dice cómo terminó, como `exited 1`, y cita el inicio de su stderr. El mensaje también te indica cuál de estas opciones seguir:

646 642 

647 * Vuelve a eliminar la sesión para eliminar el directorio de todos modos, presionando `Ctrl+X` dos veces en su fila en la vista de agentes o ejecutando el comando `claude rm <id> --force-remove-worktree <worktree-id>` que imprimió el rechazo de `claude rm`. La rama del worktree permanece en el repositorio.643##### Resolver un mensaje `Worktree not removed`

648 644 

649 Claude Code ofrece esto solo cuando puede confirmar todo lo siguiente:645Un mensaje `Worktree not removed` significa que Claude Code o tu [hook `WorktreeRemove`](https://code.claude.com/docs/es/hooks#worktreeremove) no terminó de eliminar el worktree de la sesión. Haz push de cualquier commit y copia fuera cualquier archivo que quieras conservar, y luego sigue el mensaje.

650 646 

651 * El directorio es uno de los worktrees vinculados del repositorio en `.claude/worktrees/`647##### Resolver un mensaje `files that weren't checked against a repository`

652 * Ni el worktree ni un submódulo extraído tienen cambios sin commit en archivos rastreados

653 * Ningún registro de otra sesión lo menciona

654 648 

655 Cuando Claude Code no puede verificar el estado del checkout de un submódulo, como uno reemplazado por un repositorio git separado, tampoco ofrece esto.649Este mensaje de `claude rm` significa que quedan archivos en un directorio de worktree que no está dentro de ningún repositorio git o que administra un [hook `WorktreeCreate`](https://code.claude.com/docs/es/hooks#worktreecreate). Copia fuera cualquier archivo que quieras conservar y luego sigue el paso correspondiente a tu caso:

656 * Corrige lo que lo impide, como hacer commit o stash de los cambios sin commit, mover un repositorio git separado fuera del worktree, cerrar lo que esté usando el directorio o corregir el hook, y luego vuelve a eliminar la sesión.

657 * Elimina tú mismo el directorio y luego vuelve a eliminar la sesión.

658 650 

659Un worktree que creaste tú mismo y dentro del cual iniciaste la sesión se deja en su lugar en cualquier caso.651| Tu caso | Qué hacer |

660 652| :- | :- |

661Una sesión cuyo directorio de worktree no pertenece a ningún repositorio git, porque el repositorio se eliminó o porque un [hook `WorktreeCreate`](https://code.claude.com/docs/es/hooks#worktreecreate) creó el directorio en otro lugar, aún se puede eliminar. Mientras queden archivos en el directorio:653| Ningún hook `WorktreeCreate` administra el directorio | Para descartar los archivos, presiona `Ctrl+X` dos veces en la fila de la sesión en la vista de agentes. O elimina tú mismo el directorio y luego vuelve a ejecutar `claude rm <id>` |

662 654| Un hook `WorktreeCreate` administra el directorio y tienes un [hook `WorktreeRemove`](https://code.claude.com/docs/es/hooks#worktreeremove) | Para intentar eliminar el directorio con tu hook, presiona `Ctrl+X` dos veces en la fila de la sesión en la vista de agentes. O elimina tú mismo el directorio y luego vuelve a ejecutar `claude rm <id>` |

663* La vista de agentes pide la misma doble pulsación de `Ctrl+X` antes de descartarlos. Para un directorio creado por un hook, ejecuta en su lugar tu [hook `WorktreeRemove`](https://code.claude.com/docs/es/hooks#worktreeremove), y si no hay uno, rechaza la eliminación y conserva la sesión.655| Un hook `WorktreeCreate` administra el directorio y no tienes ningún hook `WorktreeRemove` | Elimina tú mismo el directorio y luego vuelve a ejecutar `claude rm <id>` |

664* `claude rm` conserva la sesión y el worktree, e indica el motivo.

665 

666Cualquiera de las dos vías conserva un directorio que mencionan los registros de otra sesión terminada.

667 656 

668### Establecer el modelo, el esfuerzo y el modo rápido657### Establecer el modelo, el esfuerzo y el modo rápido

669 658 


774| [`--add-dir <path>`](https://code.claude.com/docs/es/permissions#additional-directories-grant-file-access-not-configuration) | Otorga acceso a archivos en un directorio adicional |763| [`--add-dir <path>`](https://code.claude.com/docs/es/permissions#additional-directories-grant-file-access-not-configuration) | Otorga acceso a archivos en un directorio adicional |

775| [`--plugin-dir <path>`](https://code.claude.com/docs/es/plugins/create#load-a-directory-or-archive-for-one-session) | Carga un plugin desde un directorio local |764| [`--plugin-dir <path>`](https://code.claude.com/docs/es/plugins/create#load-a-directory-or-archive-for-one-session) | Carga un plugin desde un directorio local |

776| [`--mcp-config <file-or-json>`](https://code.claude.com/docs/es/mcp) | Carga servidores MCP desde un archivo de configuración o una cadena JSON |765| [`--mcp-config <file-or-json>`](https://code.claude.com/docs/es/mcp) | Carga servidores MCP desde un archivo de configuración o una cadena JSON |

777| `--strict-mcp-config` | Usa solo los servidores MCP de `--mcp-config` e ignora el resto de la configuración de MCP. Consulta [Control exclusivo con managed-mcp.json](https://code.claude.com/docs/es/managed-mcp.md#exclusive-control-with-managed-mcp-json) para ver qué hace el flag con un archivo MCP administrado |766| `--strict-mcp-config` | Omite los servidores MCP configurados en lugares como `.mcp.json` y carga los que pasas con `--mcp-config`. Consulta [Control exclusivo con managed-mcp.json](https://code.claude.com/docs/es/managed-mcp.md#exclusive-control-with-managed-mcp-json) para ver qué hace el flag con un archivo MCP administrado |

778 767 

779Repite `--add-dir`, `--plugin-dir` o `--mcp-config` una vez por valor. `claude agents` no admite la forma separada por espacios, como `--add-dir a b c`.768Repite `--add-dir`, `--plugin-dir` o `--mcp-config` una vez por valor. `claude agents` no admite la forma separada por espacios, como `--add-dir a b c`.

780 769 


802| `claude stop <id>` | Detener una sesión. También acepta `claude kill` |791| `claude stop <id>` | Detener una sesión. También acepta `claude kill` |

803| `claude respawn <id>` | Reiniciar una sesión, en ejecución o detenida, por ejemplo para usar un binario Claude Code actualizado. Una sesión que tiene una conversación guardada la reanuda |792| `claude respawn <id>` | Reiniciar una sesión, en ejecución o detenida, por ejemplo para usar un binario Claude Code actualizado. Una sesión que tiene una conversación guardada la reanuda |

804| `claude respawn --all` | Reiniciar cada sesión en ejecución, por ejemplo para mover todas las sesiones a un binario Claude Code actualizado a la vez |793| `claude respawn --all` | Reiniciar cada sesión en ejecución, por ejemplo para mover todas las sesiones a un binario Claude Code actualizado a la vez |

805| `claude rm <id>` | Eliminar una sesión de la lista, junto con un worktree que Claude creó para ella cuando es seguro eliminarlo; consulta [Qué elimina la eliminación de una sesión](#what-deleting-a-session-removes). La transcripción de la conversación permanece en tu máquina local y sigue disponible a través de `claude --resume` |794| `claude rm <id>` | Eliminar una sesión de la lista, junto con un worktree que Claude creó para ella cuando es seguro eliminarlo. Si Claude Code se niega a eliminar la sesión debido a su worktree, consulta [Eliminar una sesión después de que Claude Code se niegue](#delete-a-session-after-claude-code-refuses). La transcripción de la conversación permanece en tu máquina local y sigue disponible a través de `claude --resume` |

806| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | Eliminar una sesión cuya eliminación fue rechazada por commits no enviados, descartando el worktree junto con su rama y commits. Pasa el valor exacto que imprimió el rechazo; consulta [Qué elimina la eliminación de una sesión](#what-deleting-a-session-removes). Requiere v2.1.260 o posterior |795| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | Intentar de nuevo eliminar una sesión y descartar su worktree, después de que Claude Code se negara debido a commits no enviados. Copia el comando del mensaje de `claude rm` que lo ofrece; consulta [Worktree has commits that are not pushed anywhere](https://code.claude.com/docs/es/errors.md#worktree-has-commits-that-are-not-pushed-anywhere). Requiere v2.1.260 o posterior |

807| `claude rm <id> --force-remove-worktree <worktree-id>` | Eliminar una sesión cuya eliminación fue rechazada porque git o el hook `WorktreeRemove` no pudieron eliminar su worktree, eliminando el directorio worktree de todas formas y dejando su rama en el repositorio. Pasa el valor exacto que imprimió el rechazo; consulta [Qué elimina la eliminación de una sesión](#what-deleting-a-session-removes). Requiere v2.1.268 o posterior |796| `claude rm <id> --force-remove-worktree <worktree-id>` | Intentar de nuevo eliminar una sesión y eliminar su directorio worktree de todas formas, después de que Claude Code se negara porque no pudo eliminar el worktree. Copia el comando del mensaje de `claude rm` que lo ofrece; consulta [Resolver un mensaje `Worktree not removed`](#resolve-a-worktree-not-removed-message). Requiere v2.1.268 o posterior |

808| `claude daemon status` | Imprimir el estado del [supervisor](#the-supervisor-process), versión, directorio de socket y número de workers |797| `claude daemon status` | Imprimir el estado del [supervisor](#the-supervisor-process), versión, directorio de socket y número de workers |

809| `claude daemon logs` | Seguir el archivo de log del supervisor, [`~/.claude/daemon.log`](#where-state-is-stored), imprimiendo las líneas nuevas a medida que llegan hasta que presiones `Ctrl+C` |798| `claude daemon logs` | Seguir el archivo de log del supervisor, [`~/.claude/daemon.log`](#where-state-is-stored), imprimiendo las líneas nuevas a medida que llegan hasta que presiones `Ctrl+C` |

810| `claude daemon stop --any` | Detener el proceso supervisor y las sesiones en segundo plano que aloja. Pasa `--keep-workers` para dejar las sesiones en segundo plano en ejecución de modo que [el siguiente supervisor](#the-supervisor-process) se reconecte a ellas. El siguiente `claude agents` o `claude --bg` inicia un nuevo supervisor |799| `claude daemon stop --any` | Detener el proceso supervisor y las sesiones en segundo plano que aloja. Pasa `--keep-workers` para dejar las sesiones en segundo plano en ejecución de modo que [el siguiente supervisor](#the-supervisor-process) se reconecte a ellas. El siguiente `claude agents` o `claude --bg` inicia un nuevo supervisor |


939 928 

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

941 930 

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

943 932 

944La suspensión por sí sola no detiene las sesiones. Las sesiones se conservan durante la suspensión y el supervisor se reconecta a ellas al reactivarse.933La suspensión por sí sola no detiene las sesiones. Las sesiones se conservan durante la suspensión y el supervisor se reconecta a ellas al reactivarse.

945 934 


973 962 

974Cuando el proceso de una sesión en segundo plano sale antes de terminar de iniciarse y el host tiene poca memoria del sistema, el estado de la fila nombra la salida y añade `possibly low memory — free some up and retry`.963Cuando el proceso de una sesión en segundo plano sale antes de terminar de iniciarse y el host tiene poca memoria del sistema, el estado de la fila nombra la salida y añade `possibly low memory — free some up and retry`.

975 964 

976La nota es una hipótesis, no una causa confirmada. Claude Code la añade solo cuando el proceso salió silenciosamente, sin escribir un error y sin ser detenido por una señal, y el host reportó poca memoria en ese momento. Cuando el proceso sí escribió un error antes de salir, la fila muestra ese error en su lugar.965> [!NOTE]

966>

967> La nota es una hipótesis, no una causa confirmada. Claude Code la añade solo cuando el proceso salió silenciosamente, sin escribir un error y sin ser detenido por una señal, y el host reportó poca memoria en ese momento. Cuando el proceso sí escribió un error antes de salir, la fila muestra ese error en su lugar.

977 968 

978Libera memoria en la máquina, luego conéctate o responde a la fila y el supervisor inicia un proceso nuevo para la sesión. Cuando la memoria sigue siendo baja, el supervisor también [detiene las sesiones inactivas](#the-supervisor-process) para liberar recursos por su cuenta, y detiene también las sesiones fijadas inactivas si detener las demás no liberó nada.969Libera memoria en el host, luego presiona `Enter` en la fila, y presiónalo nuevamente si [el pie de página lo pide](#opening-a-session-says-it-has-no-saved-transcript). El [supervisor](#the-supervisor-process) inicia un proceso nuevo para la sesión. Cuando la memoria sigue siendo baja, el supervisor también [detiene las sesiones inactivas](#the-supervisor-process) para liberar recursos por su cuenta, y detiene también las sesiones fijadas inactivas si detener las demás no liberó nada.

979 970 

980### La vista de agentes dice que el servicio en segundo plano no respondió971### La vista de agentes dice que el servicio en segundo plano no respondió

981 972 


1036 1027 

1037### `.claude/worktrees/` se está llenando1028### `.claude/worktrees/` se está llenando

1038 1029 

1039Eliminar una sesión en la vista de agentes elimina el worktree que Claude creó para ella, pero [algunas eliminaciones conservan el worktree o dejan su directorio en el disco](#what-deleting-a-session-removes), por lo que los directorios sobrantes pueden acumularse. Los directorios que git ya no reconoce no aparecen en `git worktree list`, así que elimínalos a mano.1030Eliminar una sesión en la vista de agentes elimina el worktree que Claude creó para ella, pero [algunos directorios de worktree permanecen en el disco](#what-deleting-a-session-removes). Los directorios que git ya no reconoce no aparecen en `git worktree list`, así que elimínalos tú mismo.

1040 1031 

1041Enumera las entradas sobrantes con `git worktree list` en el directorio del proyecto y elimina cada una con `git worktree remove <path>`. Consulta [Limpiar worktrees](https://code.claude.com/docs/es/worktrees.md#clean-up-worktrees).1032Enumera las entradas sobrantes con `git worktree list` en el directorio del proyecto y elimina cada una con `git worktree remove <path>`. Si git se niega, consulta [Limpiar worktrees de subagentes y de sesiones en segundo plano](https://code.claude.com/docs/es/worktrees.md#clean-up-subagent-and-background-session-worktrees).

1042 1033 

1043## Limitaciones1034## Limitaciones

1044 1035 


1046 1037 

1047* **Se aplican límites de velocidad**: las sesiones en segundo plano consumen el uso de su suscripción igual que las sesiones interactivas, por lo que ejecutar diez agentes en paralelo usa cuota aproximadamente diez veces más rápido que ejecutar uno.1038* **Se aplican límites de velocidad**: las sesiones en segundo plano consumen el uso de su suscripción igual que las sesiones interactivas, por lo que ejecutar diez agentes en paralelo usa cuota aproximadamente diez veces más rápido que ejecutar uno.

1048* **Las sesiones son locales**: las sesiones en segundo plano se ejecutan en su máquina. Se conservan durante el modo de suspensión pero se detienen si la máquina se apaga.1039* **Las sesiones son locales**: las sesiones en segundo plano se ejecutan en su máquina. Se conservan durante el modo de suspensión pero se detienen si la máquina se apaga.

1049* **Los worktrees creados por Claude se eliminan con la sesión en la vista de agentes**: confirme los cambios antes de eliminar una sesión que editó archivos en su propio worktree. [Algunos borrados mantienen el worktree en su lugar](#what-deleting-a-session-removes).1040* **Los worktrees creados por Claude se eliminan con la sesión en la vista de agentes**: haz commit de los cambios antes de eliminar una sesión que editó archivos en su propio worktree. [Algunos worktrees permanecen en el disco](#what-deleting-a-session-removes).

1050 1041 

1051## Recursos relacionados1042## Recursos relacionados

1052 1043 

artifacts.md +2 −2

Details

432 432 

433Para establecer cuánto tiempo se conservan los artefactos antes de la eliminación automática, vaya a [**Configuración de la organización > Datos y privacidad**](https://claude.ai/admin-settings/data-privacy-controls). Puede establecer períodos de retención separados para artefactos que aún son privados para su autor y artefactos que han sido compartidos.433Para establecer cuánto tiempo se conservan los artefactos antes de la eliminación automática, vaya a [**Configuración de la organización > Datos y privacidad**](https://claude.ai/admin-settings/data-privacy-controls). Puede establecer períodos de retención separados para artefactos que aún son privados para su autor y artefactos que han sido compartidos.

434 434 

435### Revisar el registro de auditoría435### Auditar la actividad de artefactos con la API de Cumplimiento

436 436 

437Publicar, compartir y eliminar un artefacto aparecen en el registro de auditoría de su organización bajo los tipos de evento `claude_artifact_*`, la misma familia utilizada para artefactos creados en conversaciones de claude.ai.437En planes de Enterprise, consulta el [Activity Feed](https://platform.claude.com/docs/en/manage-claude/compliance-activity-feed) de la API de Cumplimiento para ver quién publicó, compartió o eliminó un artefacto. Para encontrar los tipos de actividad por los que filtrar, expande `activity_types` en la [referencia del Activity Feed](https://platform.claude.com/docs/en/api/compliance/activities/list) y busca los nombres que contienen `artifact`.

438 438 

439### Permitir el dominio del visor439### Permitir el dominio del visor

440 440 

Details

163Claude decide dónde va cada mensaje que envía en la conversación:163Claude decide dónde va cada mensaje que envía en la conversación:

164 164 

165* Una pregunta rápida generalmente obtiene una respuesta en la conversación.165* Una pregunta rápida generalmente obtiene una respuesta en la conversación.

166* El trabajo nuevo va a un hilo nuevo o a un hilo que ya está trabajando en esa área, y Claude le dice cuál. Cada hilo nuevo aparece bajo su mensaje como una tarjeta: una caja con el título y estado del hilo, que hace clic para abrir el hilo.166* El trabajo nuevo va a un hilo nuevo o a un hilo que ya está trabajando en esa área, y Claude te dice cuál. Cada hilo nuevo aparece en la conversación, y haces clic en él para abrir el hilo.

167* Varias tareas no relacionadas en un mensaje se convierten en hilos separados.167* Varias tareas no relacionadas en un mensaje se convierten en hilos separados.

168 168 

169Si Claude enruta algo diferente a lo que deseaba, dígalo. [Ajustar cómo Claude ejecuta un proyecto](#tune-how-claude-runs-a-project) enumera cosas que puede decirle, como reutilizar un hilo existente para seguimientos o responder en su lugar en lugar de iniciar un hilo.169Si Claude enruta algo diferente a lo que deseaba, dígalo. [Ajustar cómo Claude ejecuta un proyecto](#tune-how-claude-runs-a-project) enumera cosas que puede decirle, como reutilizar un hilo existente para seguimientos o responder en su lugar en lugar de iniciar un hilo.

170 170 

171Los resultados completos de un hilo permanecen en el hilo, y abres su tarjeta en la conversación para leerlos. Los archivos que produjo un hilo también están en la [**Library**](#see-what-needs-you-in-overview) del proyecto.171Los resultados completos de un hilo permanecen en el hilo, así que abre el hilo para leerlos. Los archivos que produjo un hilo también están en la [**Library**](#see-what-needs-you-in-overview) del proyecto.

172 172 

173A veces Claude propone hilos en lugar de iniciarlos, en una lista de **Suggested threads**. Haga clic en la flecha en una sugerencia para iniciar ese hilo. Cuando se enumeran varios, un botón debajo de la lista inicia todos ellos.173A veces Claude propone hilos en lugar de iniciarlos, en una lista de **Suggested threads**. Haga clic en la flecha en una sugerencia para iniciar ese hilo. Cuando se enumeran varios, un botón debajo de la lista inicia todos ellos.

174 174 


180* **Pull request**: abre uno cuando lo solicita, y puede abrir uno por su cuenta para una corrección de errores u otro cambio concreto.180* **Pull request**: abre uno cuando lo solicita, y puede abrir uno por su cuenta para una corrección de errores u otro cambio concreto.

181* **After it opens**: vigila la solicitud de extracción con [auto-fix](https://code.claude.com/docs/es/claude-code-on-the-web.md#auto-fix-pull-requests) activado, independientemente de si auto-fix está activado para sus otras sesiones en la nube. Envía correcciones cuando CI falla, aborda comentarios de revisión, e informa en el hilo cuando las comprobaciones pasan y la solicitud de extracción está lista para usted.181* **After it opens**: vigila la solicitud de extracción con [auto-fix](https://code.claude.com/docs/es/claude-code-on-the-web.md#auto-fix-pull-requests) activado, independientemente de si auto-fix está activado para sus otras sesiones en la nube. Envía correcciones cuando CI falla, aborda comentarios de revisión, e informa en el hilo cuando las comprobaciones pasan y la solicitud de extracción está lista para usted.

182 182 

183Cuando un hilo ha enviado una rama o abierto una solicitud de extracción, su tarjeta en la conversación puede mostrar un botón para el siguiente paso:

184 

185* **Resolve conflicts**, **Fix CI**, **Address comments**, y **Merge it** envían esa instrucción al hilo como un mensaje de usted, para que pueda indicar al hilo usted mismo en lugar de esperar a que reaccione a la solicitud de extracción.

186* **Review PR** abre la solicitud de extracción en GitHub.

187* **Create PR** aparece cuando un hilo inactivo ha enviado una rama pero no ha abierto una solicitud de extracción. Al hacer clic, se crea la solicitud de extracción desde esa rama directamente en lugar de enviar al hilo una instrucción para abrir una.

188 

189Para cambiar cuándo los hilos abren solicitudes de extracción, por ejemplo solo cuando lo solicita, o de qué rama comienzan, dígalo en la tarea o en [instrucciones del proyecto](#write-project-instructions).183Para cambiar cuándo los hilos abren solicitudes de extracción, por ejemplo solo cuando lo solicita, o de qué rama comienzan, dígalo en la tarea o en [instrucciones del proyecto](#write-project-instructions).

190 184 

191### Ver qué lo necesita en Overview185### Ver qué lo necesita en Overview


212 206 

213### Abrir un hilo cuando necesita control207### Abrir un hilo cuando necesita control

214 208 

215Haz clic en la tarjeta de un hilo en la conversación o en su fila en Overview para abrir su transcripción en el panel Overview. Desde allí puedes:209Haz clic en un hilo en la conversación o en su fila en Overview para abrir el hilo en el panel Overview. Desde allí puedes:

216 210 

217* Leer qué hizo Claude, paso a paso.211* Leer qué hizo Claude, paso a paso.

218* Dirigir la tarea escribiendo en el cuadro de mensaje del hilo. Un mensaje allí va directamente a ese hilo, mientras que un seguimiento en la conversación del proyecto lo alcanza solo cuando Claude coincide el seguimiento con ese hilo.212* Dirigir la tarea escribiendo en el cuadro de mensaje del hilo. Un mensaje allí va directamente a ese hilo, mientras que un seguimiento en la conversación del proyecto lo alcanza solo cuando Claude coincide el seguimiento con ese hilo.

Details

128| `--session-id` | Usa un ID de sesión específico para la conversación (debe ser un UUID válido) | `claude --session-id "550e8400-e29b-41d4-a716-446655440000"` |128| `--session-id` | Usa un ID de sesión específico para la conversación (debe ser un UUID válido) | `claude --session-id "550e8400-e29b-41d4-a716-446655440000"` |

129| `--setting-sources` | Lista separada por comas de fuentes de configuración a cargar (`user`, `project`, `local`). Consulta [vista de agente](https://code.claude.com/docs/es/agent-view.md#what-carries-over-when-you-background) y [equipos de agentes](https://code.claude.com/docs/es/agent-teams.md#context-and-communication) para las sesiones que comienzas desde esta que heredan la lista | `claude --setting-sources user,project` |129| `--setting-sources` | Lista separada por comas de fuentes de configuración a cargar (`user`, `project`, `local`). Consulta [vista de agente](https://code.claude.com/docs/es/agent-view.md#what-carries-over-when-you-background) y [equipos de agentes](https://code.claude.com/docs/es/agent-teams.md#context-and-communication) para las sesiones que comienzas desde esta que heredan la lista | `claude --setting-sources user,project` |

130| `--settings` | Ruta a un archivo JSON de configuración o una cadena JSON en línea. Los valores que estableces aquí anulan las mismas claves en tus archivos `settings.json` para esta sesión. Las claves que omites mantienen sus valores basados en archivos. El archivo debe ser un archivo regular no mayor de 2 MiB. Consulta [precedencia de configuración](https://code.claude.com/docs/es/settings.md#settings-precedence) | `claude --settings ./settings.json` |130| `--settings` | Ruta a un archivo JSON de configuración o una cadena JSON en línea. Los valores que estableces aquí anulan las mismas claves en tus archivos `settings.json` para esta sesión. Las claves que omites mantienen sus valores basados en archivos. El archivo debe ser un archivo regular no mayor de 2 MiB. Consulta [precedencia de configuración](https://code.claude.com/docs/es/settings.md#settings-precedence) | `claude --settings ./settings.json` |

131| `--strict-mcp-config` | Solo usa servidores MCP de `--mcp-config`, ignorando todas las demás configuraciones de MCP. Consulta [Control exclusivo con managed-mcp.json](https://code.claude.com/docs/es/managed-mcp.md#exclusive-control-with-managed-mcp-json) para ver qué hace la bandera bajo un archivo MCP gestionado | `claude --strict-mcp-config --mcp-config ./mcp.json` |131| `--strict-mcp-config` | Omite los servidores MCP configurados en lugares como `.mcp.json`, `~/.claude.json` o un plugin, y carga los que pasas con `--mcp-config`. Consulta [Control exclusivo con managed-mcp.json](https://code.claude.com/docs/es/managed-mcp.md#exclusive-control-with-managed-mcp-json) para ver qué hace la bandera bajo un archivo MCP administrado | `claude --strict-mcp-config --mcp-config ./mcp.json` |

132| `--system-prompt` | Reemplaza el indicador del sistema completo con texto personalizado | `claude --system-prompt "You are a Python expert"` |132| `--system-prompt` | Reemplaza el indicador del sistema completo con texto personalizado | `claude --system-prompt "You are a Python expert"` |

133| `--system-prompt-file` | Carga el indicador del sistema desde un archivo, reemplazando el indicador predeterminado | `claude --system-prompt-file ./custom-prompt.txt` |133| `--system-prompt-file` | Carga el indicador del sistema desde un archivo, reemplazando el indicador predeterminado | `claude --system-prompt-file ./custom-prompt.txt` |

134| `--system-prompt-snapshot` | Pasa `off` para reconstruir el indicador del sistema en cada solicitud en lugar de reutilizar el indicador [registrado en la primera solicitud de la conversación](#system-prompt-flags-in-resumed-conversations), por ejemplo mientras iteras en el texto `--append-system-prompt` entre ejecuciones de `--continue`. Requiere Claude Code v2.1.257 o posterior | `claude --system-prompt-snapshot off` |134| `--system-prompt-snapshot` | Pasa `off` para reconstruir el indicador del sistema en cada solicitud en lugar de reutilizar el indicador [registrado en la primera solicitud de la conversación](#system-prompt-flags-in-resumed-conversations), por ejemplo mientras iteras en el texto `--append-system-prompt` entre ejecuciones de `--continue`. Requiere Claude Code v2.1.257 o posterior | `claude --system-prompt-snapshot off` |

desktop.md +2 −1

Details

2127 2127 

2128Para impedirlo, despliega también `forceLoginOrgUUID` en la política de Claude Desktop (en `HKLM` en Windows), con el ID de tu organización de claude.ai. A menos que la propia política [seleccione la API de Claude](https://claude.com/docs/third-party/claude-desktop/claude-api#choose-an-authentication-approach), Claude Desktop deja de usar la clave de API o la cuenta de Console propias de una persona en el siguiente inicio de la aplicación.2128Para impedirlo, despliega también `forceLoginOrgUUID` en la política de Claude Desktop (en `HKLM` en Windows), con el ID de tu organización de claude.ai. A menos que la propia política [seleccione la API de Claude](https://claude.com/docs/third-party/claude-desktop/claude-api#choose-an-authentication-approach), Claude Desktop deja de usar la clave de API o la cuenta de Console propias de una persona en el siguiente inicio de la aplicación.

2129 2129 

2130Verifica dos casos antes de desplegarlo:2130Verifica tres casos antes de desplegarlo:

2131 2131 

2132* **Organizaciones de Claude Console**: no despliegues `forceLoginOrgUUID` por sí solo con el ID de una organización de Claude Console, o dejarías a tus usuarios sin acceso a Claude Desktop. En su lugar, consulta [Which devices offer the Claude API account sign-in](https://claude.com/docs/third-party/claude-desktop/claude-api#which-devices-offer-the-claude-api-account-sign-in).2132* **Organizaciones de Claude Console**: no despliegues `forceLoginOrgUUID` por sí solo con el ID de una organización de Claude Console, o dejarías a tus usuarios sin acceso a Claude Desktop. En su lugar, consulta [Which devices offer the Claude API account sign-in](https://claude.com/docs/third-party/claude-desktop/claude-api#which-devices-offer-the-claude-api-account-sign-in).

2133* **Enterprise Admin Console**: si entrega la configuración de Claude Desktop de tus computadoras, actualízalas primero a Claude Desktop v2.37337.0 o posterior, porque las versiones anteriores la ignoran una vez que se establece esta clave. Consulta [Keep a device on its managed profile](https://claude.com/docs/third-party/claude-desktop/admin-console#keep-a-device-on-its-managed-profile).2133* **Enterprise Admin Console**: si entrega la configuración de Claude Desktop de tus computadoras, actualízalas primero a Claude Desktop v2.37337.0 o posterior, porque las versiones anteriores la ignoran una vez que se establece esta clave. Consulta [Keep a device on its managed profile](https://claude.com/docs/third-party/claude-desktop/admin-console#keep-a-device-on-its-managed-profile).

2134* **Proveedores de terceros**: si las personas configuran su propia [configuración de inferencia de terceros](https://claude.com/docs/third-party/claude-desktop/in-app-configuration) en la aplicación, Claude Desktop ignora esa configuración a partir del siguiente inicio después de que despliegues esta clave. Para mantener a las personas en Amazon Bedrock, Agent Platform de Google Cloud, Microsoft Foundry o un gateway LLM, [despliega una configuración](https://claude.com/docs/third-party/claude-desktop/configuration) en sus computadoras en la misma política de Claude Desktop.

2134 2135 

2135### Requisitos de acceso a la red2136### Requisitos de acceso a la red

2136 2137 

Details

182* **Review allowed permissions**: vea y revoque aprobaciones de herramientas guardadas para esta tarea desde el panel **Always allowed**182* **Review allowed permissions**: vea y revoque aprobaciones de herramientas guardadas para esta tarea desde el panel **Always allowed**

183* **Delete**: elimina la tarea. Las sesiones que creó la tarea se [archivan](https://code.claude.com/docs/es/desktop.md#organize-and-find-sessions), no se eliminan. La carpeta que contiene el archivo `SKILL.md` de la tarea permanece en disco en `~/.claude/scheduled-tasks/<task-name>/`, o en `scheduled-tasks/<task-name>/` bajo [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/es/env-vars) si configuraste esa variable. Para quitar esa carpeta, elimínala tú mismo.183* **Delete**: elimina la tarea. Las sesiones que creó la tarea se [archivan](https://code.claude.com/docs/es/desktop.md#organize-and-find-sessions), no se eliminan. La carpeta que contiene el archivo `SKILL.md` de la tarea permanece en disco en `~/.claude/scheduled-tasks/<task-name>/`, o en `scheduled-tasks/<task-name>/` bajo [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/es/env-vars) si configuraste esa variable. Para quitar esa carpeta, elimínala tú mismo.

184 184 

185También puede enumerar, crear, editar y pausar tareas pidiendo a Claude en cualquier sesión de Desktop. Por ejemplo, "pausa mi tarea dependency-audit" o "muéstrame mis tareas programadas." Para eliminar una tarea, use el botón **Delete** en su página de detalles.185También puedes administrar las tareas pidiéndoselo a Claude, permitiendo que una tarea se actualice a sí misma o editando el prompt de una tarea en disco:

186 186 

187Para permitir que una tarea cambie su propia programación o prompt con la herramienta MCP `update_scheduled_task`, haz clic en **Run now** y aprueba la llamada cada vez.187* **Pídeselo a Claude**: enumera, crea, edita y pausa tareas pidiéndoselo a Claude en cualquier sesión de Desktop. Por ejemplo, "pausa mi tarea dependency-audit" o "muéstrame mis tareas programadas." Para eliminar una tarea, usa el botón **Delete** en su página de detalles.

188 188* **Permite que una tarea se actualice a sí misma**: para que una tarea cambie su propia programación o prompt con la herramienta MCP `update_scheduled_task`, haz clic en **Run now** y aprueba la llamada cada vez

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

190 190 

191## Recursos relacionados191## Recursos relacionados

192 192 

env-vars.md +1 −1

Details

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

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

358| `CLAUDE_CODE_PLUGIN_DIRS` | Directorios de plugins que se cargan para la sesión, cada uno cargado de la misma forma que lo carga un flag [`--plugin-dir`](https://code.claude.com/docs/es/plugins/cli-reference#flags-that-load-a-plugin-for-one-session). Separa varias rutas con `:` en Unix o `;` en Windows. Indica cada ruta como ruta absoluta o comienza con `~`, porque Claude Code omite las rutas relativas. Requiere Claude Code v2.1.280 o posterior. Consulta [Cargar un plugin para una sesión](https://code.claude.com/docs/es/plugins/create.md#load-a-directory-or-archive-for-one-session) |358| `CLAUDE_CODE_PLUGIN_DIRS` | Directorios de plugins que se cargan para la sesión, cada uno cargado de la misma forma que lo carga un flag [`--plugin-dir`](https://code.claude.com/docs/es/plugins/cli-reference#flags-that-load-a-plugin-for-one-session). Separa varias rutas con `:` en Unix o `;` en Windows. Indica cada ruta como ruta absoluta o comienza con `~`, porque Claude Code omite las rutas relativas. Requiere Claude Code v2.1.280 o posterior. Consulta [Cargar un plugin para una sesión](https://code.claude.com/docs/es/plugins/create.md#load-a-directory-or-archive-for-one-session) |

359| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | Controla si Claude Code recarga un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) cuando cambian los archivos del mod. La recarga se aplica a un mod que cargas desde un directorio con `--plugin-dir`, y está activada de forma predeterminada en sesiones interactivas. Establécela en `1` para activarla también en sesiones no interactivas, o en `0` para desactivarla en todas las sesiones. Requiere Claude Code v2.1.287 o posterior. Consulta [configuración y variables de entorno de los mods](https://code.claude.com/docs/es/plugins/mods/reference.md#settings-and-environment-variables) |359| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | Controla si un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) se recarga cuando cambian sus archivos. De forma predeterminada, los mods en [directorios de skills](https://code.claude.com/docs/es/plugins/org.md#keep-skills-directory-plugins-loading) se recargan en cualquier sesión que abarque más de un prompt, incluidas las [no interactivas](https://code.claude.com/docs/es/headless.md). Los mods en directorios de `--plugin-dir` se recargan solo en sesiones interactivas de terminal. Establécela en `1` para recargarlos como lo hacen los mods de directorios de skills, o en `0` para desactivar la recarga en todas partes. Requiere Claude Code v2.1.287 o posterior |

360| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | Tiempo de espera en milisegundos para clonar o actualizar un marketplace de plugins (predeterminado: 120000). Aumenta este valor para repositorios grandes o conexiones de red lentas. Consulta [Git clone timed out](https://code.claude.com/docs/es/plugins/troubleshooting.md#git-clone-timed-out-after-120s) |360| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | Tiempo de espera en milisegundos para clonar o actualizar un marketplace de plugins (predeterminado: 120000). Aumenta este valor para repositorios grandes o conexiones de red lentas. Consulta [Git clone timed out](https://code.claude.com/docs/es/plugins/troubleshooting.md#git-clone-timed-out-after-120s) |

361| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | Establécela en `1` para omitir el intento de volver a clonar y seguir usando la copia existente del marketplace cuando una actualización del marketplace no puede alcanzar el remoto o autenticarse en él. Útil en entornos sin conexión o aislados donde volver a clonar fallaría de la misma manera. Consulta [Las actualizaciones del marketplace fallan en entornos sin conexión](https://code.claude.com/docs/es/plugins/troubleshooting.md#marketplace-updates-keep-failing-offline) |361| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | Establécela en `1` para omitir el intento de volver a clonar y seguir usando la copia existente del marketplace cuando una actualización del marketplace no puede alcanzar el remoto o autenticarse en él. Útil en entornos sin conexión o aislados donde volver a clonar fallaría de la misma manera. Consulta [Las actualizaciones del marketplace fallan en entornos sin conexión](https://code.claude.com/docs/es/plugins/troubleshooting.md#marketplace-updates-keep-failing-offline) |

362| `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` | Establécela en `1` para clonar las fuentes abreviadas `owner/repo` de GitHub mediante HTTPS en lugar de SSH. Se aplica a la instalación y actualización de plugins, y a `/plugin marketplace add` y `update`. Útil en runners de CI, contenedores o cualquier entorno sin una clave SSH configurada para `github.com` |362| `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` | Establécela en `1` para clonar las fuentes abreviadas `owner/repo` de GitHub mediante HTTPS en lugar de SSH. Se aplica a la instalación y actualización de plugins, y a `/plugin marketplace add` y `update`. Útil en runners de CI, contenedores o cualquier entorno sin una clave SSH configurada para `github.com` |

errors.md +4 −8

Details

5556 5556 

5557### El worktree tiene commits que no se han enviado a ningún lugar5557### El worktree tiene commits que no se han enviado a ningún lugar

5558 5558 

5559Intentaste eliminar una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md#what-deleting-a-session-removes) cuyo worktree contiene commits que Claude Code no puede confirmar que estén guardados en otro lugar. Claude Code conserva el worktree y la fila de la sesión en lugar de destruir los commits sin que los veas. `claude rm` nombra la rama y los commits no enviados, e indica cómo proceder:5559Intentaste eliminar una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md#what-deleting-a-session-removes) cuyo worktree contiene commits que Claude Code no puede confirmar que estén guardados en otro lugar. `claude rm` indica cómo proceder:

5560 5560 

5561```text theme={null}5561```text theme={null}

5562kept 7c5dcf5d — its worktree is still at “/home/you/project/.claude/worktrees/fix-login”5562kept 7c5dcf5d — its worktree is still at “/home/you/project/.claude/worktrees/fix-login”


5566 5566 

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

5568 5568 

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

5570 

5571**Qué hacer:**5569**Qué hacer:**

5572 5570 

5573* Para conservar los commits, envía la rama del worktree, o fusiónala en la rama predeterminada activa en tu checkout principal, y luego elimina la sesión nuevamente5571* Para conservar los commits, envíalos con push. Una vez que el push los coloque en una rama de seguimiento remoto, como `origin/claude/fix-login`, intenta eliminar la sesión nuevamente.

5574* Para descartar los commits, ejecuta el comando `claude rm <id> --discard-unpushed` que imprimió el mensaje, o presiona `Ctrl+X` dos veces nuevamente en la fila de la sesión en agent view. Esto elimina la sesión y el worktree junto con su rama, los commits no enviados y cualquier cambio sin commit. Si la eliminación se rechaza de nuevo, sigue el nuevo mensaje.5572* Si el mensaje ofrece descartar los commits, primero asegúrate de que no necesitas el worktree, los commits ni ningún cambio sin commit. Luego sigue el paso que indica el mensaje: presiona `Ctrl+X` dos veces en la fila de la sesión en agent view, o ejecuta el comando `claude rm <id> --discard-unpushed <commit>@<worktree-id>` que imprimió `claude rm`. Si Claude Code se niega de nuevo, sigue el nuevo mensaje.

5575* Cuando el mensaje dice que el worktree también está registrado por otra sesión terminada, eliminar nuevamente no lo descarta: envía los commits y luego elimina la sesión nuevamente5573* Cuando el mensaje dice que el worktree también está registrado por otra sesión terminada, eliminar nuevamente no lo descarta: envía los commits y luego intenta eliminar la sesión nuevamente

5576 5574 

5577Antes de v2.1.268, `claude rm` ponía el resumen de commits en la propia línea `kept`. Cuando `claude rm` no podía resumir los commits, la línea `kept` decía `worktree has commits that are not pushed anywhere` en lugar del resumen.5575Antes de v2.1.268, `claude rm` ponía el resumen de commits en la propia línea `kept`. Cuando `claude rm` no podía resumir los commits, la línea `kept` decía `worktree has commits that are not pushed anywhere` en lugar del resumen.

5578 5576 

5579Antes de v2.1.260, el mensaje no nombraba la rama ni los commits, y no había forma de descartarlos. Aun así puedes eliminar la sesión, perdiendo los cambios sin commit pero conservando la rama y los commits. Ejecuta `git worktree remove --force --force <path>` con la ruta que imprimió el rechazo y luego `claude rm <id>`. Git necesita `--force` dos veces para un worktree bloqueado.5577Antes de v2.1.260, el mensaje no nombraba la rama ni los commits, y no había forma de descartarlos. Aun así puedes eliminar la sesión, perdiendo los cambios sin commit pero conservando la rama y los commits. Ejecuta `git worktree remove --force --force <path>` con la ruta que imprimió el rechazo y luego `claude rm <id>`. Git necesita `--force` dos veces para un worktree bloqueado.

5580 5578 

5581Antes de v2.1.248, la rama predeterminada activa en tu checkout principal no contaba: una rama que ya habías fusionado allí seguía activando este rechazo hasta que sus commits llegaran a un remoto.

5582 

5583### El proceso host de la terminal murió5579### El proceso host de la terminal murió

5584 5580 

5585La terminal de cada [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md) se ejecuta en un proceso host bajo el servicio en segundo plano, y ese proceso murió mientras el servicio aún mantenía su conexión, por lo que no se pudo acceder a la sesión.5581La terminal de cada [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md) se ejecuta en un proceso host bajo el servicio en segundo plano, y ese proceso murió mientras el servicio aún mantenía su conexión, por lo que no se pudo acceder a la sesión.

Details

35Estos tienen diferencias específicas del proveedor:35Estos tienen diferencias específicas del proveedor:

36 36 

37* **Servidores MCP**: los [conectores de claude.ai](https://code.claude.com/docs/es/mcp.md#use-mcp-servers-from-claude-ai) se cargan solo cuando tu suscripción a claude.ai es el método de autenticación activo. La [búsqueda de herramientas](https://code.claude.com/docs/es/mcp.md#configure-tool-search) no es compatible con [despliegues de Microsoft Foundry hospedados en Azure](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options). En Google Cloud's Agent Platform, la búsqueda de herramientas no es compatible con modelos anteriores a Claude Opus 4.5, Claude Sonnet 4.5 y Claude Haiku 4.537* **Servidores MCP**: los [conectores de claude.ai](https://code.claude.com/docs/es/mcp.md#use-mcp-servers-from-claude-ai) se cargan solo cuando tu suscripción a claude.ai es el método de autenticación activo. La [búsqueda de herramientas](https://code.claude.com/docs/es/mcp.md#configure-tool-search) no es compatible con [despliegues de Microsoft Foundry hospedados en Azure](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options). En Google Cloud's Agent Platform, la búsqueda de herramientas no es compatible con modelos anteriores a Claude Opus 4.5, Claude Sonnet 4.5 y Claude Haiku 4.5

38* **Subagentes**: cuando la conversación principal ejecuta Fable, el [subagente Explore integrado](https://code.claude.com/docs/es/sub-agents.md#built-in-subagents) se ejecuta en Opus con una suscripción a Claude, una cuenta de la Consola de Anthropic o un [gateway de LLM](https://code.claude.com/docs/es/llm-gateway) al que se accede mediante `ANTHROPIC_BASE_URL`. En otros proveedores, incluido Claude Platform en AWS, se ejecuta en Fable38* **Subagentes**: cuando la conversación principal ejecuta Fable, el [subagente Explore](https://code.claude.com/docs/es/sub-agents.md#built-in-subagents) integrado se ejecuta en Opus con una suscripción de Claude, una cuenta de Anthropic Console o un [gateway de LLM](https://code.claude.com/docs/es/llm-gateway) al que se accede a través de `ANTHROPIC_BASE_URL`. En otros proveedores, incluido Claude Platform on AWS, se ejecuta en Fable

39* **[Comandos](https://code.claude.com/docs/es/commands.md#all-commands)**:39* **[Comandos](https://code.claude.com/docs/es/commands.md#all-commands)**:

40 * `/design-sync` e `/import` con su forma de subcomando `claude import` no están disponibles en Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry y Claude Platform en AWS, y a través de una [puerta de enlace de aplicaciones de Claude](https://code.claude.com/docs/es/claude-apps-gateway#availability-and-limitations)40 * `/design-sync` e `/import` con su forma de subcomando `claude import` no están disponibles en Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry y Claude Platform en AWS, y a través de una [puerta de enlace de aplicaciones de Claude](https://code.claude.com/docs/es/claude-apps-gateway#availability-and-limitations)

41 * `/voice` requiere una cuenta de claude.ai41 * `/voice` requiere una cuenta de claude.ai

Details

188>188>

189> **Ponga guardrails en hooks.** Una instrucción como "nunca edite `.env`" en CLAUDE.md o una skill es una solicitud, no una garantía. Un hook `PreToolUse` que bloquea la edición es cumplimiento. Si una regla debe mantenerse cada vez, hágala un hook en lugar de una instrucción de prompt.189> **Ponga guardrails en hooks.** Una instrucción como "nunca edite `.env`" en CLAUDE.md o una skill es una solicitud, no una garantía. Un hook `PreToolUse` que bloquea la edición es cumplimiento. Si una regla debe mantenerse cada vez, hágala un hook en lugar de una instrucción de prompt.

190>190>

191> **La salida del hook aterriza en contexto.** Un hook `PostToolUse` que ejecuta su linter alimenta resultados de vuelta como texto que Claude lee; una skill `/fix-lint` le dice a Claude cómo resolverlos.191> **Combina un hook con un skill.** Usa un hook `PostToolUse` para ejecutar tu linter y [enviarle los errores a Claude](https://code.claude.com/docs/es/hooks.md#exit-code-2-behavior-per-event). Para darle a Claude tus propias reglas para corregir los errores, escribe un skill como `/fix-lint`.

192 192 

193### Entender cómo se superponen las características193### Entender cómo se superponen las características

194 194 

glossary.md +1 −1

Details

283 283 

284### Sandboxing284### Sandboxing

285 285 

286Aislamiento de sistema de archivos y red a nivel de SO para la herramienta Bash. Los comandos se ejecutan dentro de un límite que defines de antemano, para que Claude pueda trabajar libremente dentro de él sin solicitudes de aprobación por comando. El sandboxing es una capa separada de las [reglas de permisos](#permission-rule).286Aislamiento de sistema de archivos y red a nivel de SO para la herramienta Bash. Los comandos se ejecutan dentro de un límite que defines de antemano. El sandboxing es una capa separada de las [reglas de permisos](#permission-rule).

287 287 

288Más información: [Sandboxing](https://code.claude.com/docs/es/sandboxing.md)288Más información: [Sandboxing](https://code.claude.com/docs/es/sandboxing.md)

289 289 

hooks-guide.md +5 −1

Details

242 242 

243### Bloquea ediciones en archivos protegidos243### Bloquea ediciones en archivos protegidos

244 244 

245Evita que Claude modifique archivos sensibles como `.env`, `package-lock.json` o cualquier cosa dentro de `.git/`. Claude recibe comentarios que explican por qué se bloqueó la edición, para que pueda ajustar su enfoque.245Evita que las herramientas `Edit` y `Write` de Claude modifiquen archivos sensibles como `.env`, `package-lock.json` o cualquier cosa dentro de `.git/`. Claude recibe comentarios que explican por qué se bloqueó la edición, para que pueda ajustar su enfoque.

246 246 

247Este ejemplo usa un archivo de script separado al que llama el hook. El script compara la ruta del archivo de destino con una lista de patrones protegidos y termina con el código 2 para bloquear la edición.247Este ejemplo usa un archivo de script separado al que llama el hook. El script compara la ruta del archivo de destino con una lista de patrones protegidos y termina con el código 2 para bloquear la edición.

248 248 


306 306 

307Pídele a Claude que agregue un comentario a tu archivo `.env`. Claude Code bloquea la edición antes de que se ejecute y le pasa a Claude el mensaje `Blocked:` del script como retroalimentación.307Pídele a Claude que agregue un comentario a tu archivo `.env`. Claude Code bloquea la edición antes de que se ejecute y le pasa a Claude el mensaje `Blocked:` del script como retroalimentación.

308 308 

309Claude todavía puede cambiar los archivos protegidos con comandos de shell. Para bloquear algunos de esos comandos, agrega una [regla de denegación de `Edit`](https://code.claude.com/docs/es/permissions#what-read-and-edit-rules-cover) por cada ruta en `permissions.deny` en `.claude/settings.json`, como `Edit(/.env)` para el `.env` de la raíz del proyecto.

310 

311Incluso con esas reglas, Claude puede cambiar `.env` de otras formas. Para limitar en qué archivos pueden escribir los comandos, consulta [Configura el sandboxing](https://code.claude.com/docs/es/sandboxing.md#configure-sandboxing).

312 

309### Vuelve a inyectar contexto después de la compactación313### Vuelve a inyectar contexto después de la compactación

310 314 

311Cuando la ventana de contexto de Claude se llena, la compactación resume la conversación para liberar espacio. Esto puede hacer que se pierdan detalles importantes. Usa un hook `SessionStart` con un matcher `compact` para volver a inyectar contexto crítico después de cada compactación.315Cuando la ventana de contexto de Claude se llena, la compactación resume la conversación para liberar espacio. Esto puede hacer que se pierdan detalles importantes. Usa un hook `SessionStart` con un matcher `compact` para volver a inyectar contexto crítico después de cada compactación.

Details

296* El campo `output_config.effort` de nivel superior. [Reintento automático y reenvío de errores](#automatic-retry-and-error-forwarding) cubre el caso de un proveedor ascendente que lo rechaza296* El campo `output_config.effort` de nivel superior. [Reintento automático y reenvío de errores](#automatic-retry-and-error-forwarding) cubre el caso de un proveedor ascendente que lo rechaza

297* El campo `thinking` del razonamiento adaptativo, que no tiene encabezado beta297* El campo `thinking` del razonamiento adaptativo, que no tiene encabezado beta

298* Las entradas `role: "system"` que llevan [mensajes del sistema a mitad de conversación](#feature-pass-through)298* Las entradas `role: "system"` que llevan [mensajes del sistema a mitad de conversación](#feature-pass-through)

299* El valor `anthropic-beta` y el campo `safeguards` para la [revisión del clasificador del lado del servidor](https://code.claude.com/docs/es/permission-modes.md#server-side-classifier-review) del modo automático, en sesiones donde esa revisión permanece activada, como cuando `/status` muestra **Auto mode server** como `Enabled`. Para desactivar la revisión, establece `CLAUDE_CODE_AUTO_MODE_SERVER=0` antes de iniciar la sesión. En la terminal, `/status` muestra entonces **Auto mode server** como `Disabled`.

299* El valor `anthropic-beta` de OAuth que requiere la autenticación por suscripción300* El valor `anthropic-beta` de OAuth que requiere la autenticación por suscripción

300* Los valores de encabezado y campos de cuerpo que los propios desarrolladores agregan mediante [`ANTHROPIC_BETAS`](https://code.claude.com/docs/es/env-vars) o [`CLAUDE_CODE_EXTRA_BODY`](https://code.claude.com/docs/es/env-vars)301* Los valores de encabezado y campos de cuerpo que los propios desarrolladores agregan mediante [`ANTHROPIC_BETAS`](https://code.claude.com/docs/es/env-vars) o [`CLAUDE_CODE_EXTRA_BODY`](https://code.claude.com/docs/es/env-vars)

301 302 

managed-mcp.md +3 −2

Details

30| Patrón | Qué hace | Configurar |30| Patrón | Qué hace | Configurar |

31| :- | :- | :- |31| :- | :- | :- |

32| **Deshabilitar MCP** | No se cargan servidores excepto los pocos que [se cargan bajo control exclusivo](#exclusive-control-with-managed-mcp-json) | `managed-mcp.json` con un mapa de servidores vacío |32| **Deshabilitar MCP** | No se cargan servidores excepto los pocos que [se cargan bajo control exclusivo](#exclusive-control-with-managed-mcp-json) | `managed-mcp.json` con un mapa de servidores vacío |

33| **Implementación fija** | Cada usuario obtiene los mismos servidores y no puede agregar otros | `managed-mcp.json` con los servidores que desea |33| **Despliegue fijo** | Cada usuario obtiene los servidores que enumeras, y los servidores que configura no se cargan | `managed-mcp.json` con los servidores que deseas |

34| **Servidores proporcionados** | Cada usuario obtiene los servidores remotos que enumera y mantiene los suyos propios | `managedMcpServers` en configuración administrada |34| **Servidores proporcionados** | Cada usuario obtiene los servidores remotos que enumera y mantiene los suyos propios | `managedMcpServers` en configuración administrada |

35| **Catálogo aprobado** | Publique una lista de servidores aprobados; los usuarios agregan los que desean, todo lo demás se bloquea | `allowedMcpServers` + `allowManagedMcpServersOnly: true` |35| **Catálogo aprobado** | Publique una lista de servidores aprobados; los usuarios agregan los que desean, todo lo demás se bloquea | `allowedMcpServers` + `allowManagedMcpServersOnly: true` |

36| **Solo servidores de plugins** | Los usuarios no pueden agregar servidores a través de `~/.claude.json` o `.mcp.json`; los [plugins del directorio de skills](https://code.claude.com/docs/es/plugins/loading.md#skills-directory-plugins-blocked-by-managed-settings) dejan de cargarse como plugins, y los servidores de otros plugins aún se cargan | [`strictPluginOnlyCustomization`](https://code.claude.com/docs/es/settings-reference#strictpluginonlycustomization) con `mcp` en la lista |36| **Solo servidores de plugins** | Los usuarios no pueden agregar servidores a través de `~/.claude.json` o `.mcp.json`; los [plugins del directorio de skills](https://code.claude.com/docs/es/plugins/loading.md#skills-directory-plugins-blocked-by-managed-settings) dejan de cargarse como plugins, y los servidores de otros plugins aún se cargan | [`strictPluginOnlyCustomization`](https://code.claude.com/docs/es/settings-reference#strictpluginonlycustomization) con `mcp` en la lista |


49* Los servidores que el archivo define49* Los servidores que el archivo define

50* Servidores que [proporciona a través de `managedMcpServers`](#provide-servers-through-managed-settings)50* Servidores que [proporciona a través de `managedMcpServers`](#provide-servers-through-managed-settings)

51* Servidores en proceso que la aplicación que inició la sesión registra, como el servidor propio de la extensión de VS Code o los [conectores que entrega la aplicación de escritorio](https://code.claude.com/docs/es/mcp.md#how-connectors-reach-claude-code)51* Servidores en proceso que la aplicación que inició la sesión registra, como el servidor propio de la extensión de VS Code o los [conectores que entrega la aplicación de escritorio](https://code.claude.com/docs/es/mcp.md#how-connectors-reach-claude-code)

52* El servidor que Claude Code crea cuando un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) [agrega herramientas](https://code.claude.com/docs/es/plugins/mods/api.md#add-a-tool). Para bloquear las herramientas que agregan los mods de tus usuarios, [impide que se carguen los mods instalados por los usuarios](https://code.claude.com/docs/es/plugins/mods/admin.md#stop-user-installed-mods-from-loading).

52* El servidor integrado de [Claude in Chrome](https://code.claude.com/docs/es/chrome.md), si [lo permite junto con el conjunto administrado](#allow-claude-in-chrome-alongside-the-managed-set)53* El servidor integrado de [Claude in Chrome](https://code.claude.com/docs/es/chrome.md), si [lo permite junto con el conjunto administrado](#allow-claude-in-chrome-alongside-the-managed-set)

53 54 

54Los usuarios no pueden agregar, modificar ni usar ningún otro servidor MCP, incluidos los servidores proporcionados por plugins y los servidores pasados con la [bandera CLI `--mcp-config`](https://code.claude.com/docs/es/cli-reference#cli-flags). El archivo también suprime los conectores de claude.ai que Claude Code obtiene por sí mismo a menos que [los permita junto con el conjunto administrado](#allow-claude-ai-connectors-alongside-the-managed-set).55Los usuarios no pueden agregar, modificar ni usar ningún otro servidor MCP, incluidos los servidores proporcionados por plugins y los servidores pasados con la [bandera CLI `--mcp-config`](https://code.claude.com/docs/es/cli-reference#cli-flags). El archivo también suprime los conectores de claude.ai que Claude Code obtiene por sí mismo a menos que [los permita junto con el conjunto administrado](#allow-claude-ai-connectors-alongside-the-managed-set).


137}138}

138```139```

139 140 

140`claude mcp add` falla con el error de política empresarial anterior. Los servidores que los usuarios habían configurado previamente dejan de cargarse la próxima vez que inician una sesión, sin advertencia de que la política es la razón. Los servidores que proporciona a través de `managedMcpServers`, y cualquier otra cosa que permita junto con el conjunto administrado, aún se cargan bajo un mapa vacío, así que deje esas claves sin establecer para desactivar MCP completamente.141`claude mcp add` falla con el error de política empresarial anterior. Los servidores que los usuarios habían configurado previamente dejan de cargarse la próxima vez que inician una sesión, sin advertencia de que la política es la razón. Los servidores que proporcionas a través de `managedMcpServers`, y cualquier otra cosa que permitas junto con el conjunto administrado, [aún se cargan](#exclusive-control-with-managed-mcp-json) con un mapa vacío, así que deja esas claves sin establecer.

141 142 

142### Permitir conectores de claude.ai junto con el conjunto administrado143### Permitir conectores de claude.ai junto con el conjunto administrado

143 144 

mcp.md +1 −1

Details

806 806 

807* Agréguelo a [`disabledMcpjsonServers`](https://code.claude.com/docs/es/settings-reference#disabledmcpjsonservers), que lo bloquea en cada modo de permiso.807* Agréguelo a [`disabledMcpjsonServers`](https://code.claude.com/docs/es/settings-reference#disabledmcpjsonservers), que lo bloquea en cada modo de permiso.

808* Excluya la configuración del proyecto completamente con [`--setting-sources`](https://code.claude.com/docs/es/cli-reference#cli-flags) o la opción `settingSources` del SDK.808* Excluya la configuración del proyecto completamente con [`--setting-sources`](https://code.claude.com/docs/es/cli-reference#cli-flags) o la opción `settingSources` del SDK.

809* Inicie la sesión con [`--strict-mcp-config`](https://code.claude.com/docs/es/cli-reference#cli-flags). Claude Code entonces usa solo los servidores MCP que pasa con `--mcp-config`. Omitir el mensaje de aprobación para los servidores con alcance de proyecto que Claude Code no está cargando requiere Claude Code v2.1.246 o posterior; antes de v2.1.246, una sesión estricta aún esperaba aprobación para ellos, lo que dejaba las sesiones en segundo plano esperando al inicio. Vea [Control exclusivo con managed-mcp.json](https://code.claude.com/docs/es/managed-mcp.md#exclusive-control-with-managed-mcp-json) para lo que hace la bandera bajo un archivo MCP administrado.809* Inicia la sesión con [`--strict-mcp-config`](https://code.claude.com/docs/es/cli-reference#cli-flags). Claude Code entonces carga los servidores que pasas con `--mcp-config` y omite los configurados en lugares como `.mcp.json`. Omitir la solicitud de aprobación para los servidores con alcance de proyecto que Claude Code no está cargando requiere Claude Code v2.1.246 o posterior. Consulta [Control exclusivo con managed-mcp.json](https://code.claude.com/docs/es/managed-mcp.md#exclusive-control-with-managed-mcp-json) para saber qué hace el flag bajo un archivo MCP administrado.

810 810 

811[Aprobaciones de servidor de proyecto y confianza del espacio de trabajo](#project-server-approvals-and-workspace-trust) cubre cómo las aprobaciones confirmadas en el repositorio interactúan con la confianza del espacio de trabajo.811[Aprobaciones de servidor de proyecto y confianza del espacio de trabajo](#project-server-approvals-and-workspace-trust) cubre cómo las aprobaciones confirmadas en el repositorio interactúan con la confianza del espacio de trabajo.

812 812 

model-config.md +2 −2

Details

273* **`/model`**: Claude Code rechaza el cambio con un error273* **`/model`**: Claude Code rechaza el cambio con un error

274* **Bandera `--model`, `ANTHROPIC_MODEL`, o la configuración `model`**: Claude Code reemplaza el valor al inicio con una advertencia que nombra tanto los modelos solicitados como los sustituidos, y la sesión comienza en el modelo predeterminado274* **Bandera `--model`, `ANTHROPIC_MODEL`, o la configuración `model`**: Claude Code reemplaza el valor al inicio con una advertencia que nombra tanto los modelos solicitados como los sustituidos, y la sesión comienza en el modelo predeterminado

275* **[`ANTHROPIC_DEFAULT_MODEL`](#set-a-default-model-for-new-sessions)**: Claude Code ignora la variable275* **[`ANTHROPIC_DEFAULT_MODEL`](#set-a-default-model-for-new-sessions)**: Claude Code ignora la variable

276* **Anulación de subagente o compañero**: Claude Code ejecuta el subagente o compañero en un modelo de respaldo en lugar de fallar la solicitud. Consulte [Elegir un modelo](https://code.claude.com/docs/es/sub-agents.md#choose-a-model) para el respaldo del subagente y [Especificar compañeros y modelos](https://code.claude.com/docs/es/agent-teams.md#specify-teammates-and-models) para el respaldo del compañero.276* **Sobrescritura de subagente o compañero**: Claude Code ejecuta el subagente o compañero en un modelo de respaldo en lugar de hacer fallar la solicitud. Consulta [Cuando una lista de permitidos bloquea un modelo de subagente](https://code.claude.com/docs/es/sub-agents.md#when-an-allowlist-blocks-a-subagent-model) para el respaldo del subagente y [Especificar compañeros y modelos](https://code.claude.com/docs/es/agent-teams.md#specify-teammates-and-models) para el respaldo del compañero.

277 277 

278 En sesiones interactivas, Claude Code le advierte cuando sustituye el modelo de un subagente, por este respaldo o por la sustitución de versión más nueva permitida anterior, nombrando los modelos solicitados y sustituidos; no informa del respaldo de un compañero.278 En sesiones interactivas, Claude Code te advierte cuando sustituye el modelo de un subagente de nivel superior. No informa del respaldo de un compañero.

279 279 

280 Donde opera la sustitución de versión más nueva permitida anterior, un alias de familia bloqueado la sigue en su lugar. Antes de v2.1.222, un alias retrocedía como cualquier otro valor bloqueado en cada proveedor280 Donde opera la sustitución de versión más nueva permitida anterior, un alias de familia bloqueado la sigue en su lugar. Antes de v2.1.222, un alias retrocedía como cualquier otro valor bloqueado en cada proveedor

281* **Anulación de skill o comando**: Claude Code ignora la anulación, incluido un alias de familia bloqueado, y el skill o comando se ejecuta en el modelo de sesión. Un skill o comando que [se ejecuta en un subagente](https://code.claude.com/docs/es/skills.md#run-skills-in-a-subagent) sigue el comportamiento del subagente anterior en su lugar281* **Anulación de skill o comando**: Claude Code ignora la anulación, incluido un alias de familia bloqueado, y el skill o comando se ejecuta en el modelo de sesión. Un skill o comando que [se ejecuta en un subagente](https://code.claude.com/docs/es/skills.md#run-skills-in-a-subagent) sigue el comportamiento del subagente anterior en su lugar

Details

50| Usted quiere | Comience con | Aislamiento necesario | Notas |50| Usted quiere | Comience con | Aislamiento necesario | Notas |

51| :- | :- | :- | :- |51| :- | :- | :- | :- |

52| Revisar cada acción usted mismo | Modo Manual: `claude --permission-mode default` | Ninguno | Trabajo sensible, código desconocido |52| Revisar cada acción usted mismo | Modo Manual: `claude --permission-mode default` | Ninguno | Trabajo sensible, código desconocido |

53| Iterar localmente con menos solicitudes de permiso, sin un clasificador | Modo manual más el sandbox de Bash en [modo de permitir automáticamente](https://code.claude.com/docs/es/sandboxing.md#sandbox-modes): `claude --permission-mode default`, luego ejecuta `/sandbox` y selecciona permitir automáticamente | El sandbox de Bash integrado, en macOS, Linux y WSL2 | Las reglas de denegación siguen aplicándose, y las reglas de solicitud que nombran un comando, como `Bash(git push *)`, siguen pidiendo permiso. El [modo de permitir automáticamente](https://code.claude.com/docs/es/sandboxing.md#auto-allow-mode) cubre otros comandos que pueden pedir permiso. Para activar el sandbox desde un archivo de configuración en su lugar, establece [`sandbox.enabled`](https://code.claude.com/docs/es/settings-reference#sandbox-enabled) en `true` |53| Iterar localmente con menos solicitudes de permiso, sin un clasificador | Modo manual más el sandbox de Bash en [modo de permitir automáticamente](https://code.claude.com/docs/es/sandboxing.md#sandbox-modes): `claude --permission-mode default`, luego ejecuta `/sandbox` y selecciona permitir automáticamente | El sandbox de Bash integrado, en macOS, Linux y WSL2 | Las reglas de denegación siguen aplicándose, y las reglas de solicitud que nombran un comando, como `Bash(git push *)`, siguen pidiendo permiso. El [modo de permitir automáticamente](https://code.claude.com/docs/es/sandboxing.md#auto-allow-mode) cubre otros comandos que pueden pedir permiso. Para activar el sandbox desde un archivo de configuración en su lugar, establece [`sandbox.enabled`](https://code.claude.com/docs/es/settings-reference#sandbox-enabled) y [`sandbox.autoAllowBashIfSandboxed`](https://code.claude.com/docs/es/settings-reference#sandbox-autoallowbashifsandboxed) en `true` |

54| Explorar antes de cambiar nada | `claude --permission-mode plan` | Ninguno | Claude Code bloquea ediciones hasta que [apruebe un plan](#review-and-approve-a-plan) |54| Explorar antes de cambiar nada | `claude --permission-mode plan` | Ninguno | Claude Code bloquea ediciones hasta que [apruebe un plan](#review-and-approve-a-plan) |

55| Trabajar sin intervención en modo automático | `claude --permission-mode auto`, el [modo de permisos inicial integrado](#which-mode-a-session-starts-in) con v2.1.283 o posterior | Ninguno; un sandbox o contenedor agrega defensa en profundidad | Requiere un [modelo compatible](#eliminate-prompts-with-auto-mode), y su organización puede [desactivar modo automático](#eliminate-prompts-with-auto-mode) |55| Trabajar sin intervención en modo automático | `claude --permission-mode auto`, el [modo de permisos inicial integrado](#which-mode-a-session-starts-in) con v2.1.283 o posterior | Ninguno; un sandbox o contenedor agrega defensa en profundidad | Requiere un [modelo compatible](#eliminate-prompts-with-auto-mode), y su organización puede [desactivar modo automático](#eliminate-prompts-with-auto-mode) |

56| Ejecutar en CI con una lista de permitidos exacta | `claude -p "run the test suite" --permission-mode dontAsk --allowedTools "Bash(npm test)" "Read"` | Ninguno más allá de lo que proporciona su ejecutor de CI | [Cloud sessions](https://code.claude.com/docs/es/claude-code-on-the-web.md) ignora `dontAsk` de archivos de configuración |56| Ejecutar en CI con una lista de permitidos exacta | `claude -p "run the test suite" --permission-mode dontAsk --allowedTools "Bash(npm test)" "Read"` | Ninguno más allá de lo que proporciona su ejecutor de CI | [Cloud sessions](https://code.claude.com/docs/es/claude-code-on-the-web.md) ignora `dontAsk` de archivos de configuración |

permissions.md +1 −1

Details

743 743 

744Use ambos para defensa en profundidad, ya que las restricciones de sandbox aún se aplican incluso si una inyección de solicitud omite la toma de decisiones de Claude. Las rutas y dominios de la configuración de sandbox y las reglas de permisos se [fusionan en la configuración final del sandbox](https://code.claude.com/docs/es/sandboxing.md#permission-rules).744Use ambos para defensa en profundidad, ya que las restricciones de sandbox aún se aplican incluso si una inyección de solicitud omite la toma de decisiones de Claude. Las rutas y dominios de la configuración de sandbox y las reglas de permisos se [fusionan en la configuración final del sandbox](https://code.claude.com/docs/es/sandboxing.md#permission-rules).

745 745 

746Cuando el sandboxing está habilitado y deja `autoAllowBashIfSandboxed` en su valor predeterminado de `true`, los comandos Bash en sandbox se ejecutan sin solicitar incluso si sus permisos incluyen una regla ask `Bash` simple, o la [forma equivalente `Bash(*)`](#match-all-uses-of-a-tool): el límite del sandbox sustituye ese aviso de herramienta completa.746Cuando habilitas el sandboxing y estableces [`sandbox.autoAllowBashIfSandboxed`](https://code.claude.com/docs/es/settings-reference#sandbox-autoallowbashifsandboxed) en `true`, los comandos Bash en el sandbox se ejecutan sin pedir permiso. Esto se mantiene incluso con una regla ask `Bash` simple o la [forma equivalente `Bash(*)`](#match-all-uses-of-a-tool): el límite del sandbox sustituye esa solicitud de permiso para toda la herramienta.

747 747 

748En [modo plan](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode), Claude Code omite esta sustitución. Sin una regla ask, los [comandos de solo lectura integrados](#read-only-commands) aún se ejecutan sin pedir permiso, y cualquier otro comando de shell pasa por el flujo de permisos regular mientras todavía estás planificando; consulta [modo plan](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode) para saber cómo Claude Code controla los comandos allí. Con una regla ask `Bash` simple, cada comando Bash pide permiso, incluidos los comandos de solo lectura en el sandbox, igual que fuera del sandboxing.748En [modo plan](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode), Claude Code omite esta sustitución. Sin una regla ask, los [comandos de solo lectura integrados](#read-only-commands) aún se ejecutan sin pedir permiso, y cualquier otro comando de shell pasa por el flujo de permisos regular mientras todavía estás planificando; consulta [modo plan](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode) para saber cómo Claude Code controla los comandos allí. Con una regla ask `Bash` simple, cada comando Bash pide permiso, incluidos los comandos de solo lectura en el sandbox, igual que fuera del sandboxing.

749 749 

Details

438 438 

439* **Los campos de `backdrop`**: `scene` es un [nombre](https://code.claude.com/docs/es/plugins/mods/reference.md#limits) que eliges para un fondo que dibuja tu hook. Para los demás campos y `overrideColorScheme`, consulta [los tipos para tu compilación](https://code.claude.com/docs/es/plugins/mods/create.md#get-the-types-for-your-build).439* **Los campos de `backdrop`**: `scene` es un [nombre](https://code.claude.com/docs/es/plugins/mods/reference.md#limits) que eliges para un fondo que dibuja tu hook. Para los demás campos y `overrideColorScheme`, consulta [los tipos para tu compilación](https://code.claude.com/docs/es/plugins/mods/create.md#get-the-types-for-your-build).

440* **Si se dibuja el fondo**: `$.theme.set` se resuelve con `isDrawn: true` cuando una aplicación Desktop o móvil conectada a la sesión indica que dibuja fondos. De lo contrario, `isDrawn` es `false` y `reason` explica el motivo.440* **Si se dibuja el fondo**: `$.theme.set` se resuelve con `isDrawn: true` cuando una aplicación Desktop o móvil conectada a la sesión indica que dibuja fondos. De lo contrario, `isDrawn` es `false` y `reason` explica el motivo.

441* **Un fondo por sesión**: una llamada a `$.theme.set` reemplaza el fondo de la sesión y `$.theme.clear()` quita ese fondo, sin importar qué mod lo haya establecido. Llama a `$.theme.clear()` solo cuando el usuario lo pida.441* **Un tema por sesión**: un mod que llama a `$.theme.set` reemplaza el fondo y los [colores](#change-the-colors-of-the-desktop-app) de la sesión, y un mod que llama a `$.theme.clear()` los quita, sin importar qué mod los haya establecido. Llama a `$.theme.clear()` solo cuando el usuario lo pida.

442 

443### Cambia los colores de la aplicación Desktop

444 

445Para cambiar los colores de la pestaña Code de la aplicación Desktop con un mod, [pídele uno a Claude](#ask-claude-for-a-colors-mod) o [escribe uno tú mismo](#write-a-colors-mod-yourself). Ambas formas requieren Claude Code v2.1.324 o posterior en la pestaña Code, así que primero [comprueba ahí la versión](https://code.claude.com/docs/es/desktop.md#claude-code-version-in-the-code-tab). Claude Code en la terminal conserva sus propios colores.

446 

447#### Pídele a Claude un mod de colores

448 

449**1. Describe los colores**

450 

451Inicia una sesión local en la pestaña Code y dile a Claude qué colores quieres. Por ejemplo, escribe `make a mod that makes the app cream in light mode and dark brown in dark mode`. Claude escribe los archivos del mod.

452 

453**2. Aprueba el mod**

454 

455Responde las preguntas que Claude Code hace sobre los archivos del mod y la recarga en caliente. Para saber qué hace cada respuesta, consulta [Pídele a Claude un mod](https://code.claude.com/docs/es/plugins/mods/create.md#ask-claude-for-a-mod).

456 

457**3. Comprueba los colores**

458 

459La pestaña Code cambia de color cuando se carga el mod. Para ajustar un color, dile a Claude qué cambiar. Si no cambia nada, consulta [Corrige los colores de mods que no aparecen](#fix-missing-mod-colors-in-the-desktop-app).

460 

461#### Escribe un mod de colores tú mismo

462 

463`makeColors` es una función que crea un tema a partir de unos pocos colores hexadecimales. Estos pasos crean un mod llamado `paper` que la usa.

464 

465**1. Haz que Claude copie makeColors**

466 

467Inicia una sesión local en la pestaña Code y escribe `copy make-colors.js and make-colors.d.ts from your plugin-authoring skill into ~/.claude/skills/paper/hooks/`. Comprueba que ambos archivos estén en ese directorio.

468 

469**2. Guarda el manifiesto y hooks.json**

470 

471A partir de [Escribe un mod tú mismo](https://code.claude.com/docs/es/plugins/mods/create.md#write-a-mod-yourself), guarda `.claude-plugin/plugin.json` y `hooks/hooks.json` en `~/.claude/skills/paper/`, y cambia `first-mod` por `paper` en ambos archivos. Un mod [dentro de `~/.claude/skills/`](https://code.claude.com/docs/es/plugins/create#scaffold-a-plugin-that-loads-every-session) se carga cuando inicias una sesión.

472 

473**3. Escribe el código**

474 

475Guarda este archivo como `~/.claude/skills/paper/hooks/register.js`. Cuando se inicia una sesión, el código llama a `$.theme.set` con los colores para el modo claro y el modo oscuro:

476 

477```javascript theme={null}

478import { makeColors } from './make-colors.js'

479 

480const { theme } = makeColors({

481 label: 'Paper',

482 // surface-0 is the background, text-primary is the main text, and text-muted is the faint text

483 light: {

484 gray: { anchors: { 'surface-0': '#efe6d3', 'text-primary': '#2a241d', 'text-muted': '#6a5f50' } },

485 },

486 dark: {

487 gray: { anchors: { 'surface-0': '#1f1a15', 'text-primary': '#f0e7d7', 'text-muted': '#aca08d' } },

488 },

489})

490 

491export function register(on) {

492 on('session.start', async ($, e, next) => {

493 await $.theme.set({ colors: theme })

494 return next(e)

495 })

496}

497```

498 

499Para usar tus propios colores, reemplaza los valores hexadecimales por otros colores hexadecimales de seis dígitos.

500 

501**4. Comprueba los colores**

502 

503Inicia una nueva sesión local en la pestaña Code. Con los valores del ejemplo, el fondo es crema en el modo claro y marrón oscuro en el modo oscuro. Si no cambia nada, consulta [Corrige los colores de mods que no aparecen](#fix-missing-mod-colors-in-the-desktop-app).

504 

505### Corrige los colores de mods que no aparecen en la aplicación Desktop

506 

507Si usas un [proveedor externo](https://code.claude.com/docs/es/third-party-integrations.md) en lugar de una cuenta de Claude en [Claude Desktop v5.11492.5 o anterior](https://code.claude.com/docs/es/desktop.md#check-your-version), la pestaña Code conserva sus propios colores, así que omite estas comprobaciones. De lo contrario, si los colores de un mod no aparecen en la pestaña Code, o si desaparecen, comprueba estas causas:

508 

509* **Versión antigua**: [actualiza la aplicación Desktop](https://code.claude.com/docs/es/desktop.md#claude-code-version-in-the-code-tab), reiníciala e inicia una nueva sesión local en la pestaña Code. Si Claude escribió el mod, vuelve a pedírselo ahí.

510* **Mod no cargado**: si Claude escribió el mod, consulta cuándo se carga en [Pídele a Claude un mod](https://code.claude.com/docs/es/plugins/mods/create.md#ask-claude-for-a-mod). Si lo escribiste tú, compara tus archivos y sus rutas con [Escribe un mod de colores tú mismo](#write-a-colors-mod-yourself).

511* **Tema rechazado**: pídele a Claude que ejecute la llamada a [`makeColors`](#write-a-colors-mod-yourself) del mod. Si la llamada genera un error, o su lista `problems` tiene una entrada que empieza por `Desktop won't paint this theme`, haz que Claude corrija el tema. Si instalaste el mod, envía lo que Claude encuentre a su autor.

512* **Otra llamada a `$.theme`**: cuando cualquier mod de la sesión llama a `$.theme.set` o `$.theme.clear()`, los colores y el [fondo](#put-a-backdrop-behind-the-conversation) de una llamada anterior desaparecen. En tu propio mod, pasa `colors` y `backdrop` en la misma llamada a `$.theme.set`. Usa a la vez un solo mod que establezca un tema.

513 

514### Quita los colores de mods de la aplicación Desktop

515 

516Para quitar los colores de un mod de la pestaña Code, primero desactiva el mod. Un mod que sigue activado puede volver a establecer sus colores.

517 

518**1. Desactiva el mod**

519 

520* **Claude escribió el mod**: saca su directorio de la [carpeta de mods](https://code.claude.com/docs/es/plugins/mods/create.md#ask-claude-for-a-mod) de la sesión en la que Claude lo escribió.

521* **Colocaste el mod dentro de `~/.claude/skills/`**: mueve su directorio, como `~/.claude/skills/paper/`, a un lugar fuera de `~/.claude/skills/`.

522* **Instalaste el mod**: en la aplicación Desktop, [deshabilita o desinstala su plugin](https://code.claude.com/docs/es/desktop.md#install-plugins) desde **Manage plugins**. Si no ves **Manage plugins** y tienes [la CLI](https://code.claude.com/docs/es/quickstart.md), puedes [deshabilitar o desinstalar un plugin de marketplace desde tu shell](https://code.claude.com/docs/es/plugins/install.md#manage-plugins-from-your-shell).

523 

524**2. Inicia una nueva sesión**

525 

526Inicia una nueva sesión local en la pestaña Code.

527 

528**3. Quita los colores que persisten**

529 

530Si los colores siguen ahí, abre **Settings** desde la pestaña Code y busca ahí `code appearance`. Abre el resultado y selecciona **Remove colors**.

442 531 

443## Construye un árbol a partir de elementos532## Construye un árbol a partir de elementos

444 533 


677 766 

678Las mismas teclas, o en el renderizado en pantalla completa un clic en la fila, vuelven a expandir la banda. Hasta entonces, nada pulsa un botón en ella: ni una tecla de acceso rápido, ni un dígito escrito en un prompt vacío, ni un atajo de teclado para la [`action`](https://code.claude.com/docs/es/plugins/mods/reference#elements) de un botón. Si la banda tiene el foco del teclado cuando el usuario la contrae, el foco vuelve al prompt, y Ctrl+X y luego Tab omite la banda mientras está contraída.767Las mismas teclas, o en el renderizado en pantalla completa un clic en la fila, vuelven a expandir la banda. Hasta entonces, nada pulsa un botón en ella: ni una tecla de acceso rápido, ni un dígito escrito en un prompt vacío, ni un atajo de teclado para la [`action`](https://code.claude.com/docs/es/plugins/mods/reference#elements) de un botón. Si la banda tiene el foco del teclado cuando el usuario la contrae, el foco vuelve al prompt, y Ctrl+X y luego Tab omite la banda mientras está contraída.

679 768 

680La banda permanece contraída hasta que el usuario la expande, incluso después de `/clear`, y vuelve a estar expandida la próxima vez que se inicia Claude Code. Tu mod no puede expandirla ni saber que está contraída: el hook `ui.render` sigue ejecutándose, y nada en `e.props` lo indica. No hagas de la banda el único lugar donde tu mod muestra algo que el usuario tiene que responder.769La banda permanece contraída hasta que el usuario la expande, incluso después de `/clear`, y vuelve a estar expandida la próxima vez que se inicia Claude Code. Tu mod no puede expandirla. No hagas de la banda el único lugar donde tu mod muestra algo que el usuario tiene que responder. Para mostrarlo en otro lugar solo mientras la banda está contraída, lee `e.props.isCollapsed` en tu hook `ui.render`, que sigue ejecutándose. `isCollapsed` requiere Claude Code v2.1.321 o posterior.

681 770 

682### Recibir texto escrito y dibujar una fila por elemento771### Recibir texto escrito y dibujar una fila por elemento

683 772 

Details

212 212 

213Algunos de estos eventos también se disparan para las acciones propias de Claude Code, así que comprueba si `next.origin.plugin` es `engine` antes de rechazar uno.213Algunos de estos eventos también se disparan para las acciones propias de Claude Code, así que comprueba si `next.origin.plugin` es `engine` antes de rechazar uno.

214 214 

215#### Campos en las solicitudes `http.fetch` propias de Claude Code

216 

217En un hook de `http.fetch`, un [`next.origin`](#the-hook-function) de `{ plugin: 'engine', tier: 'core' }` marca una de las solicitudes propias de Claude Code, como una solicitud al modelo, y no una llamada a `$.http.fetch` de un mod. Donde está cargada la [protección integrada](https://code.claude.com/docs/es/plugins/mods/admin.md#know-what-happens-by-default), tu hook no recibe estos eventos, salvo que tu mod [cuente como uno de tu organización](https://code.claude.com/docs/es/plugins/mods/admin.md#install-your-organizations-mods).

218 

219En estos eventos, `e.init` y el `value` en el que se resuelve `next(e)` pueden contener estos campos, entre otros:

220 

221| Campo | Qué significa |

222| :- | :- |

223| `e.init.compress` | Se establece cuando Claude Code comprime el cuerpo después de tu hook. `e.init.body` contiene el cuerpo sin comprimir. Para enviar el cuerpo sin comprimir, llama a `next({ ...e, init: { ...e.init, compress: undefined } })`. |

224| `value.isStreaming` | Se establece en `true` porque Claude Code lee el cuerpo de la respuesta por sí mismo, así que `value.text` está vacío. Lee `value.status` y `value.headers` en su lugar. Para responder con tu propio `text`, devuelve un `value` sin `isStreaming`. |

225 

226Estos eventos y campos requieren Claude Code v2.1.321 o posterior.

227 

215## Métodos de la API de mods228## Métodos de la API de mods

216 229 

217La API de mods es el argumento `$` que recibe cada hook. Sus métodos están agrupados en espacios de nombres, como `$.ui`. Esta tabla enumera los métodos de cada espacio de nombres por su nombre, de modo que `open` en la fila de `$.ui` es la llamada `$.ui.open(...)`. Las guías muestran los más comunes en uso, y [los tipos para tu compilación](https://code.claude.com/docs/es/plugins/mods/create.md#get-the-types-for-your-build) documentan cada método con un ejemplo.230La API de mods es el argumento `$` que recibe cada hook. Sus métodos están agrupados en espacios de nombres, como `$.ui`. Esta tabla enumera los métodos de cada espacio de nombres por su nombre, de modo que `open` en la fila de `$.ui` es la llamada `$.ui.open(...)`. Las guías muestran los más comunes en uso, y [los tipos para tu compilación](https://code.claude.com/docs/es/plugins/mods/create.md#get-the-types-for-your-build) documentan cada método con un ejemplo.


222| [`$.ui`](https://code.claude.com/docs/es/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, [`place`](https://code.claude.com/docs/es/plugins/mods/interface#place-a-row-in-the-transcript), `focus`, `scroll`, `toast`, `notify`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit`, `view`. `view` requiere Claude Code v2.1.300 o posterior y `place`, v2.1.314 o posterior. |235| [`$.ui`](https://code.claude.com/docs/es/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, [`place`](https://code.claude.com/docs/es/plugins/mods/interface#place-a-row-in-the-transcript), `focus`, `scroll`, `toast`, `notify`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit`, `view`. `view` requiere Claude Code v2.1.300 o posterior y `place`, v2.1.314 o posterior. |

223| [`$.theme`](https://code.claude.com/docs/es/plugins/mods/interface#put-a-backdrop-behind-the-conversation) | `set`, `clear`: establece un fondo para que lo dibuje la app de escritorio o móvil, y quita el fondo. Requiere Claude Code v2.1.319 o posterior. |236| [`$.theme`](https://code.claude.com/docs/es/plugins/mods/interface#put-a-backdrop-behind-the-conversation) | `set`, `clear`: establece un fondo para que lo dibuje la app de escritorio o móvil, y quita el fondo. Requiere Claude Code v2.1.319 o posterior. |

224| [`$.command`](https://code.claude.com/docs/es/plugins/mods/api#add-a-command) | `register`, `run`, `list` |237| [`$.command`](https://code.claude.com/docs/es/plugins/mods/api#add-a-command) | `register`, `run`, `list` |

225| [`$.tool`](https://code.claude.com/docs/es/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |238| [`$.tool`](https://code.claude.com/docs/es/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list`. Cuando una `call` necesita la aprobación de una persona, como una que un hook o tu organización responde con `ask`, se resuelve con `{ deny: "<tool> wasn't run: this call needs a person's approval, and a mod's own call can't ask for it." }`, donde `<tool>` es el nombre de la herramienta. |

226| `$.agent` | `register`, `spawn`, `list`. `list()` devuelve los subagentes y compañeros de equipo de esta sesión, cada uno con un `status` de `pending`, `running`, `waiting`, `idle`, `completed`, `failed` o `killed`, donde `idle` y `waiting` requieren Claude Code v2.1.289 o posterior. |239| `$.agent` | `register`, `spawn`, `list`. `list()` devuelve los subagentes y compañeros de equipo de esta sesión, cada uno con un `status` de `pending`, `running`, `waiting`, `idle`, `completed`, `failed` o `killed`, donde `idle` y `waiting` requieren Claude Code v2.1.289 o posterior. |

227| [`$.model`](https://code.claude.com/docs/es/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |240| [`$.model`](https://code.claude.com/docs/es/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |

228| [`$.prompt`](https://code.claude.com/docs/es/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. Claude lee el texto de `submit({ text })` después de una oración que nombra a tu mod como remitente. `submit({ text, asUser: true })` envía el texto como las propias palabras del usuario, sin esa oración. |241| [`$.prompt`](https://code.claude.com/docs/es/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. Claude lee el texto de `submit({ text })` después de una oración que nombra a tu mod como remitente. `submit({ text, asUser: true })` envía el texto como las propias palabras del usuario, sin esa oración. |


250| Punto de renderizado | `e.props` | `e.requestId` | Se renderiza en |263| Punto de renderizado | `e.props` | `e.requestId` | Se renderiza en |

251| :- | :- | :- | :- |264| :- | :- | :- | :- |

252| [`Pane`](https://code.claude.com/docs/es/plugins/mods/interface#pick-where-to-draw) | `title`, `isFocused`, `bodyColumns`, `placement`, `scroll`, `view` | El `id` del panel | Terminal, Desktop, VS Code |265| [`Pane`](https://code.claude.com/docs/es/plugins/mods/interface#pick-where-to-draw) | `title`, `isFocused`, `bodyColumns`, `placement`, `scroll`, `view` | El `id` del panel | Terminal, Desktop, VS Code |

253| [`AbovePrompt`](https://code.claude.com/docs/es/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`, `isWorking`, `maxRows`, `bodyColumns`, `scroll`, `view` | Una instancia | Terminal, Desktop |266| [`AbovePrompt`](https://code.claude.com/docs/es/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`, [`isCollapsed`](https://code.claude.com/docs/es/plugins/mods/interface#when-the-user-collapses-the-band), `isWorking`, `maxRows`, `bodyColumns`, `scroll`, `view` | Una instancia | Terminal, Desktop |

254| `AbovePromptList`, la pila de filas de `AbovePrompt` | `rows`, una lista con un `{ plugin, tree }` por cada fila de mod, además de las props de `AbovePrompt` | Una instancia | Terminal, Desktop. Requiere Claude Code v2.1.323 o posterior. |267| `AbovePromptList`, la pila de filas de `AbovePrompt` | `rows`, una lista con un `{ plugin, tree }` por cada fila de mod, además de las props de `AbovePrompt` | Una instancia | Terminal, Desktop. Requiere Claude Code v2.1.323 o posterior. |

255| [`Placed`](https://code.claude.com/docs/es/plugins/mods/interface#place-a-row-in-the-transcript) | `id`, `plugin`, `onScreen` | El `requestId` que devolvió `$.ui.place` | Terminal |268| [`Placed`](https://code.claude.com/docs/es/plugins/mods/interface#place-a-row-in-the-transcript) | `id`, `plugin`, `onScreen` | El `requestId` que devolvió `$.ui.place` | Terminal |

256| [`Backdrop`](https://code.claude.com/docs/es/plugins/mods/interface#put-a-backdrop-behind-the-conversation) | `scene`, `plugin`, `glass`, `overrideColorScheme`. Antes de v2.1.323, `scene` era `id` y `overrideColorScheme` era `colorScheme`. | `backdrop` | Superficies `desktop` y `mobile`. Tu hook se ejecuta cuando la app Desktop o la app móvil solicita dibujar un fondo. |269| [`Backdrop`](https://code.claude.com/docs/es/plugins/mods/interface#put-a-backdrop-behind-the-conversation) | `scene`, `plugin`, `glass`, `overrideColorScheme`. Antes de v2.1.323, `scene` era `id` y `overrideColorScheme` era `colorScheme`. | `backdrop` | Superficies `desktop` y `mobile`. Tu hook se ejecuta cuando la app Desktop o la app móvil solicita dibujar un fondo. |


426| Nombre | Dónde | Qué hace |439| Nombre | Dónde | Qué hace |

427| :- | :- | :- |440| :- | :- | :- |

428| `CLAUDE_CODE_PLUGIN_DIRS` | Entorno, o `env` en `~/.claude/settings.json` | Directorios de plugins que se cargan como lo hace `--plugin-dir`, para aplicaciones a las que no puedes pasar un flag. Rutas absolutas separadas por `:`, o por `;` en Windows. |441| `CLAUDE_CODE_PLUGIN_DIRS` | Entorno, o `env` en `~/.claude/settings.json` | Directorios de plugins que se cargan como lo hace `--plugin-dir`, para aplicaciones a las que no puedes pasar un flag. Rutas absolutas separadas por `:`, o por `;` en Windows. |

429| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | Entorno | `1` hace que una sesión no interactiva de larga duración recargue los mods de `--plugin-dir` al guardar |442| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | Entorno | Si los mods se recargan al guardar. Consulta la [referencia de variables de entorno](https://code.claude.com/docs/es/env-vars.md) para ver los valores predeterminados y los valores posibles |

430| `prependPlugins`, `appendPlugins` | Configuración administrada. Configuración de usuario solo en una máquina sin configuración administrada ni archivo [`managed-mcp.json`](https://code.claude.com/docs/es/managed-mcp#deploy-managed-mcp-json), en una sesión cuya credencial no sea un `/login` de Team o Enterprise. | Listas de ids de plugins, como `acme-guard@acme-tools`. Los mods en `prependPlugins` se ejecutan antes de cada mod que instala un usuario, y los mods en `appendPlugins` se ejecutan después, en el orden indicado. Consulta [El orden en que se ejecutan los mods](https://code.claude.com/docs/es/plugins/mods/events.md#the-order-mods-run-in). |443| `prependPlugins`, `appendPlugins` | Configuración administrada. Configuración de usuario solo en una máquina sin configuración administrada ni archivo [`managed-mcp.json`](https://code.claude.com/docs/es/managed-mcp#deploy-managed-mcp-json), en una sesión cuya credencial no sea un `/login` de Team o Enterprise. | Listas de ids de plugins, como `acme-guard@acme-tools`. Los mods en `prependPlugins` se ejecutan antes de cada mod que instala un usuario, y los mods en `appendPlugins` se ejecutan después, en el orden indicado. Consulta [El orden en que se ejecutan los mods](https://code.claude.com/docs/es/plugins/mods/events.md#the-order-mods-run-in). |

431| `allowManagedModsOnly` | Configuración administrada, como una [opción de la protección integrada](https://code.claude.com/docs/es/plugins/mods/admin.md#set-options-on-the-built-in-guard) | Solo los mods que [cuentan como de tu organización](https://code.claude.com/docs/es/plugins/mods/admin.md#install-your-organizations-mods) y los mods integrados en Claude Code ejecutan sus hooks. Los hooks de configuración de los usuarios siguen ejecutándose. |444| `allowManagedModsOnly` | Configuración administrada, como una [opción de la protección integrada](https://code.claude.com/docs/es/plugins/mods/admin.md#set-options-on-the-built-in-guard) | Solo los mods que [cuentan como de tu organización](https://code.claude.com/docs/es/plugins/mods/admin.md#install-your-organizations-mods) y los mods integrados en Claude Code ejecutan sus hooks. Los hooks de configuración de los usuarios siguen ejecutándose. |

432| `allowModsToOverrideDenyRules` | Configuración administrada, como una [opción de la protección integrada](https://code.claude.com/docs/es/plugins/mods/admin.md#set-options-on-the-built-in-guard) | Permite que un mod instalado por un usuario apruebe una llamada a herramienta pasando por encima de la mayoría de [los resultados que se mantienen por defecto](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods), incluida una regla `deny` |445| `allowModsToOverrideDenyRules` | Configuración administrada, como una [opción de la protección integrada](https://code.claude.com/docs/es/plugins/mods/admin.md#set-options-on-the-built-in-guard) | Permite que un mod instalado por un usuario apruebe una llamada a herramienta pasando por encima de la mayoría de [los resultados que se mantienen por defecto](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods), incluida una regla `deny` |

Details

115 115 

116### Seguir las reglas del kit de pruebas116### Seguir las reglas del kit de pruebas

117 117 

118El kit de pruebas tiene algunas reglas propias, y romper una produce los errores con los que primero se topan quienes empiezan a escribir pruebas:

119 

120* **Registra cada stub antes de la primera llamada de la prueba a `$`.** Llamar a `on` después de eso lanza un error como `on("ui.render") after the test first called $`.118* **Registra cada stub antes de la primera llamada de la prueba a `$`.** Llamar a `on` después de eso lanza un error como `on("ui.render") after the test first called $`.

121 119 

122* **[`session.start`](https://code.claude.com/docs/es/plugins/mods/reference#session) no se ejecuta por sí solo.** Cada prueba empieza con tu módulo recién cargado y ninguno de sus hooks llamado, así que las variables a nivel de módulo conservan sus valores iniciales. Si un hook depende de lo que configura `session.start`, dispáralo primero:120* **[`session.start`](https://code.claude.com/docs/es/plugins/mods/reference#session) no se ejecuta por sí solo.** Cada prueba empieza con tu módulo recién cargado y ninguno de sus hooks llamado, así que las variables a nivel de módulo conservan sus valores iniciales. Si un hook depende de lo que configura `session.start`, dispáralo primero:


132 130 

133 El segundo stub responde a la llamada `$.command.register` que hace un hook de `session.start` como el [del tutorial](https://code.claude.com/docs/es/plugins/mods/create.md#write-a-mod-yourself). Sin él, esa llamada se rechaza con `no implementation for command.register` y el kit omite tu hook, así que no se ejecuta nada de lo que sigue a la llamada en el hook. La prueba no falla en ese punto. El hook omitido aparece bajo `the engine reported:` solo si falla una comprobación posterior.131 El segundo stub responde a la llamada `$.command.register` que hace un hook de `session.start` como el [del tutorial](https://code.claude.com/docs/es/plugins/mods/create.md#write-a-mod-yourself). Sin él, esa llamada se rechaza con `no implementation for command.register` y el kit omite tu hook, así que no se ejecuta nada de lo que sigue a la llamada en el hook. La prueba no falla en ese punto. El hook omitido aparece bajo `the engine reported:` solo si falla una comprobación posterior.

134 132 

135* **Un hook que devuelve `next(e)` necesita un stub que responda.** Cuando tu hook [`ui.render`](https://code.claude.com/docs/es/plugins/mods/reference#interface) devuelve `next(e)`, por ejemplo para no dibujar nada mientras Claude está inactivo, [montarlo](#test-a-drawing) falla con `no implementation for ui.render`. Registra un stub que devuelva un elemento como datos simples:133* **Registra un stub de `ui.render` para elegir lo que devuelve `next(e)`.** Cuando tu hook [`ui.render`](https://code.claude.com/docs/es/plugins/mods/reference#interface) devuelve `next(e)`, por ejemplo para no dibujar nada mientras Claude está inactivo, el [montaje](#test-a-drawing) tiene éxito sin ningún stub. Para que `next(e)` devuelva un elemento que tú elijas, registra un stub que lo devuelva como datos simples:

136 134 

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

138 // Stands for what Claude Code would draw at the site136 // Stands for what Claude Code would draw at the site

139 on('ui.render', () => ({ type: 'Text', props: {}, children: ['drawn by Claude Code'] }))137 on('ui.render', () => ({ type: 'Text', props: {}, children: ['drawn by Claude Code'] }))

140 ```138 ```

141 139 

142 Con el stub registrado, el montaje tiene éxito, y `ui.find({ type: 'Text' })` devuelve ese elemento siempre que tu hook haya devuelto `next(e)`. En v2.1.323 o posterior, para la banda, pasa el nombre de tu mod como segundo argumento a `on`, como en `{ plugin: 'my-mod' }`. Sin él, el stub no responde a tu `next(e)`.140 Donde el sitio [puede dibujar ese elemento](https://code.claude.com/docs/es/plugins/mods/interface.md#change-what-claude-code-already-draws), `ui.find({ type: 'Text' })` lo devuelve cuando tu hook devolvió `next(e)`. En v2.1.323 o posterior, para la banda, pasa el nombre de tu mod como segundo argumento a `on`, como en `{ plugin: 'my-mod' }`. Sin él, el stub no responde a tu `next(e)`. Antes de v2.1.321, el montaje falla con `no implementation for ui.render` a menos que registres el stub.

143 141 

144* **Un stub para `turn.step` es un generador asíncrono**, y la prueba lee el flujo hasta su final para obtener el resultado:142* **Un stub para `turn.step` es un generador asíncrono**, y la prueba lee el flujo hasta su final para obtener el resultado:

145 143 


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

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

318| `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| `keepsBeneath()` | En una prueba sin un stub de `ui.render`, se resuelve en `true` cuando el dibujo incluye lo que devolvió `next(e)`, y en `false` cuando tu hook lo omitió. En una prueba que registra uno, usa `find` para buscar lo que dibujó el stub. Requiere Claude Code v2.1.321 o posterior. |

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

320| `unmount()` | Elimina el dibujo |319| `unmount()` | Elimina el dibujo |

321 320 

Details

41 41 

42| Usted quiere | Comience con |42| Usted quiere | Comience con |

43| :- | :- |43| :- | :- |

44| Reducir solicitudes de permiso durante el trabajo diario en su propia máquina | La [herramienta Bash aislada](https://code.claude.com/docs/es/sandboxing.md), configurada con `/sandbox` |44| Reducir las solicitudes de permiso durante el trabajo diario en tu propia máquina | La [herramienta Bash aislada](https://code.claude.com/docs/es/sandboxing.md) en modo de aprobación automática, configurada con `/sandbox` |

45| Permitir que Claude trabaje sin supervisión con `--dangerously-skip-permissions` o modo automático | El [contenedor de desarrollo](https://code.claude.com/docs/es/devcontainer.md) preconfigurado, cualquier contenedor o máquina virtual, o el [tiempo de ejecución sandbox](#sandbox-runtime) |45| Permitir que Claude trabaje sin supervisión con `--dangerously-skip-permissions` o modo automático | El [contenedor de desarrollo](https://code.claude.com/docs/es/devcontainer.md) preconfigurado, cualquier contenedor o máquina virtual, o el [tiempo de ejecución sandbox](#sandbox-runtime) |

46| Aislar servidores MCP y hooks así como Bash, sin Docker | El tiempo de ejecución sandbox |46| Aislar servidores MCP y hooks así como Bash, sin Docker | El tiempo de ejecución sandbox |

47| Estandarizar un entorno aislado en un equipo | El [contenedor de desarrollo](https://code.claude.com/docs/es/devcontainer.md) preconfigurado, copiado en su repositorio |47| Estandarizar un entorno aislado en un equipo | El [contenedor de desarrollo](https://code.claude.com/docs/es/devcontainer.md) preconfigurado, copiado en su repositorio |

sandboxing.md +4 −7

Details

6 6 

7> Restringe los archivos y hosts de red a los que pueden acceder los comandos de shell de Claude Code con el sandbox integrado. Actívalo, define el límite y corrige lo que deje de funcionar.7> Restringe los archivos y hosts de red a los que pueden acceder los comandos de shell de Claude Code con el sandbox integrado. Actívalo, define el límite y corrige lo que deje de funcionar.

8 8 

9El sandbox de Bash es un límite que el sistema operativo impone alrededor de los comandos de shell que Claude ejecuta en tu máquina. Tú defines a qué archivos y dominios de red pueden acceder esos comandos, y los límites se aplican a los comandos de Bash, PowerShell y Monitor, y a los procesos que estos inician. Como el sistema operativo aplica los límites mientras se ejecuta un comando, Claude Code puede [ejecutar comandos en el sandbox sin pedirte](#sandbox-modes) que apruebes cada uno.9El sandbox de Bash es un límite que el sistema operativo impone alrededor de los comandos de shell que Claude ejecuta en tu máquina. Tú defines a qué archivos y dominios de red pueden acceder esos comandos, y los límites se aplican a los comandos de Bash, PowerShell y Monitor, y a los procesos que estos inician. Los comandos en el sandbox siguen pasando por el flujo de permisos habitual, a menos que elijas el [modo de permiso automático](#sandbox-modes), que puede ejecutarlos sin preguntarte.

10 10 

11El sandbox cubre solo los comandos de shell. Las herramientas de archivos de Claude, los servidores MCP y los hooks [se ejecutan fuera de él](#what-runs-outside-the-sandbox).11El sandbox cubre solo los comandos de shell. Las herramientas de archivos de Claude, los servidores MCP y los hooks [se ejecutan fuera de él](#what-runs-outside-the-sandbox).

12 12 


394| Entradas `deny` y `mask` de `credentials.envVars` | Se aplican. La depuración de variables de entorno es independiente de la capa del sistema de archivos |394| Entradas `deny` y `mask` de `credentials.envVars` | Se aplican. La depuración de variables de entorno es independiente de la capa del sistema de archivos |

395| [Entradas `mask` de `credentials.files`](#mask-credential-files) aplicadas como máscaras | Se aplican: el enmascaramiento es independiente de la capa del sistema de archivos. Una entrada que [recurrió a `deny`](#mask-credential-files) no se aplica, como cualquier entrada `deny` |395| [Entradas `mask` de `credentials.files`](#mask-credential-files) aplicadas como máscaras | Se aplican: el enmascaramiento es independiente de la capa del sistema de archivos. Una entrada que [recurrió a `deny`](#mask-credential-files) no se aplica, como cualquier entrada `deny` |

396 396 

397Otras dos cosas cambian:397Los comandos en el sandbox también heredan el `$TMPDIR` de tu shell en lugar del directorio temporal de cada usuario, porque todos los directorios temporales se pueden escribir y Claude Code ya no redirige los comandos al de cada usuario.

398 398 

399* Los comandos en el sandbox heredan el `$TMPDIR` de tu shell en lugar del directorio temporal de cada usuario, porque todos los directorios temporales se pueden escribir y Claude Code ya no redirige los comandos al de cada usuario.399En Linux, la variable a menudo no está definida en el shell padre. Las indicaciones de la herramienta Bash le dicen a Claude que cree directorios temporales con `mktemp -d` en lugar de depender de `$TMPDIR`.

400 

401 En Linux, la variable a menudo no está definida en el shell padre. Las indicaciones de la herramienta Bash le dicen a Claude que cree directorios temporales con `mktemp -d` en lugar de depender de `$TMPDIR`.

402* [`autoAllowBashIfSandboxed`](https://code.claude.com/docs/es/settings-reference#sandbox-autoallowbashifsandboxed) sigue teniendo `true` como valor predeterminado, así que los comandos en el sandbox siguen ejecutándose sin pedir confirmación. Configúralo en `false` para pedir confirmación para los comandos en el sandbox.

403 400 

404### Proteger credenciales401### Proteger credenciales

405 402 


1095}1092}

1096```1093```

1097 1094 

1098Esto activa el [modo de permiso automático](#sandbox-modes). Para el modo de permisos normal, establece también [`sandbox.autoAllowBashIfSandboxed`](https://code.claude.com/docs/es/settings-reference#sandbox-autoallowbashifsandboxed) en `false`. El cambio surte efecto en tu sesión en curso con el siguiente comando de shell que ejecute Claude, y la pestaña **Mode** de `/sandbox` marca entonces el modo vigente.1095Esto activa el [modo de permisos normal](#sandbox-modes). Para el modo de permiso automático, establece también [`sandbox.autoAllowBashIfSandboxed`](https://code.claude.com/docs/es/settings-reference#sandbox-autoallowbashifsandboxed) en `true`. El cambio surte efecto en tu sesión en curso con el siguiente comando de shell que ejecute Claude, y la pestaña **Mode** de `/sandbox` marca entonces el modo vigente.

1099 1096 

1100## Limitaciones1097## Limitaciones

1101 1098 

security.md +2 −2

Details

25 25 

26Para mitigar riesgos en sistemas agénticos:26Para mitigar riesgos en sistemas agénticos:

27 27 

28* **Herramienta bash en sandbox**: [Sandbox](https://code.claude.com/docs/es/sandboxing.md) comandos bash con aislamiento del sistema de archivos y red, reduciendo solicitudes de permiso mientras se mantiene la seguridad. Configure con `/sandbox` para definir límites donde Claude Code puede trabajar de forma autónoma28* **Herramienta Bash en sandbox**: Ejecuta comandos Bash en un [sandbox](https://code.claude.com/docs/es/sandboxing.md) con aislamiento del sistema de archivos y de red. Configúralo con `/sandbox`

29* **Límite del directorio de trabajo**: En modo Manual, Claude Code te pregunta antes de que sus herramientas de archivos lean o escriban fuera de la carpeta donde se inició y sus subcarpetas. El límite es una solicitud de permiso, por lo que un comando Bash que apruebes aún puede escribir en cualquier lugar donde pueda hacerlo tu cuenta de usuario29* **Límite del directorio de trabajo**: En modo Manual, Claude Code te pregunta antes de que sus herramientas de archivos lean o escriban fuera de la carpeta donde se inició y sus subcarpetas. El límite es una solicitud de permiso, por lo que un comando Bash que apruebes aún puede escribir en cualquier lugar donde pueda hacerlo tu cuenta de usuario

30 * Para leer una carpeta sin la solicitud, agrégala como [directorio adicional](https://code.claude.com/docs/es/permissions.md#working-directories)30 * Para leer una carpeta sin la solicitud, agrégala como [directorio adicional](https://code.claude.com/docs/es/permissions.md#working-directories)

31 * Para restringir los comandos Bash a nivel del sistema operativo, activa el [sandboxing](https://code.claude.com/docs/es/sandboxing.md#filesystem-isolation)31 * Para restringir los comandos Bash a nivel del sistema operativo, activa el [sandboxing](https://code.claude.com/docs/es/sandboxing.md#filesystem-isolation)


62* **Verificación de confianza**: En una sesión interactiva, Claude Code muestra el diálogo de confianza del espacio de trabajo cuando lo inicias en una carpeta en la que no has confiado. Los servidores del `.mcp.json` de un proyecto tienen su propia solicitud de aprobación, y [Alcance de proyecto](https://code.claude.com/docs/es/mcp.md#project-scope) enumera las sesiones que la omiten62* **Verificación de confianza**: En una sesión interactiva, Claude Code muestra el diálogo de confianza del espacio de trabajo cuando lo inicias en una carpeta en la que no has confiado. Los servidores del `.mcp.json` de un proyecto tienen su propia solicitud de aprobación, y [Alcance de proyecto](https://code.claude.com/docs/es/mcp.md#project-scope) enumera las sesiones que la omiten

63 * Nota: Una sesión con `-p` no muestra ninguna de las dos solicitudes. [Qué se ejecuta antes de que confíes en una carpeta](https://code.claude.com/docs/es/permissions.md#what-runs-before-you-trust-a-folder) enumera lo que los archivos de un repositorio pueden ejecutar allí63 * Nota: Una sesión con `-p` no muestra ninguna de las dos solicitudes. [Qué se ejecuta antes de que confíes en una carpeta](https://code.claude.com/docs/es/permissions.md#what-runs-before-you-trust-a-folder) enumera lo que los archivos de un repositorio pueden ejecutar allí

64 * Nota: Cuando inicias Claude Code directamente en tu directorio home, la aceptación de confianza se mantiene solo para la sesión actual y no se escribe en el disco, por lo que el diálogo reaparece en cada lanzamiento. No hay ningún ajuste para persistirla. En su lugar, inicia Claude Code desde un subdirectorio de proyecto, donde la aceptación de confianza se guarda por directorio64 * Nota: Cuando inicias Claude Code directamente en tu directorio home, la aceptación de confianza se mantiene solo para la sesión actual y no se escribe en el disco, por lo que el diálogo reaparece en cada lanzamiento. No hay ningún ajuste para persistirla. En su lugar, inicia Claude Code desde un subdirectorio de proyecto, donde la aceptación de confianza se guarda por directorio

65* **Detección de inyección de comandos**: En modo Manual, Claude Code pide confirmación antes de ejecutar un comando Bash que no puede analizar por completo. Una regla de permiso para parte de un comando, como `Bash(git *)`, no omite esa solicitud. Los [comandos en sandbox](https://code.claude.com/docs/es/permissions.md#how-permissions-interact-with-sandboxing) pueden ejecutarse sin ella65* **Detección de inyección de comandos**: En modo Manual, Claude Code pide confirmación antes de ejecutar un comando Bash que no puede analizar por completo. Una regla de permiso para parte de un comando, como `Bash(git *)`, no omite esa solicitud. Los [comandos en sandbox](https://code.claude.com/docs/es/permissions.md#how-permissions-interact-with-sandboxing) en [modo de permiso automático](https://code.claude.com/docs/es/sandboxing.md#auto-allow-mode) pueden ejecutarse sin ella

66* **Coincidencia de cierre seguro**: En modo Manual, los comandos no coincidentes requieren aprobación de forma predeterminada66* **Coincidencia de cierre seguro**: En modo Manual, los comandos no coincidentes requieren aprobación de forma predeterminada

67* **Almacenamiento seguro de credenciales**: Las claves de API y los tokens se almacenan en el Keychain de macOS cuando está disponible. En Linux se almacenan en un archivo con modo `0600`, y en Windows en un archivo que hereda los controles de acceso del directorio de tu perfil de usuario. Consulta [Credential Management](https://code.claude.com/docs/es/authentication.md#credential-management)67* **Almacenamiento seguro de credenciales**: Las claves de API y los tokens se almacenan en el Keychain de macOS cuando está disponible. En Linux se almacenan en un archivo con modo `0600`, y en Windows en un archivo que hereda los controles de acceso del directorio de tu perfil de usuario. Consulta [Credential Management](https://code.claude.com/docs/es/authentication.md#credential-management)

68 68 

Details

1355 1355 

1356### `sandbox.autoAllowBashIfSandboxed`1356### `sandbox.autoAllowBashIfSandboxed`

1357 1357 

1358Permite que Claude Code ejecute comandos Bash en sandbox sin una solicitud de permiso. Los comandos que no pueden ejecutarse en el sandbox siguen pasando por el flujo de permisos normal, y las reglas `deny` y las reglas `ask` limitadas por contenido, como `Bash(git push *)`, siguen aplicándose; una regla ask de `Bash` sin contenido se omite para los comandos en sandbox. Establécela en `false` para que los comandos en sandbox también pasen por el flujo de permisos normal, lo que la pestaña **Mode** de `/sandbox` llama modo de permisos normal.1358Permite que Claude Code ejecute comandos Bash en el sandbox sin una solicitud de permiso. Los comandos que no pueden ejecutarse en el sandbox siguen pasando por el flujo de permisos habitual. Las reglas `deny` y las reglas `ask` limitadas a un contenido, como `Bash(git push *)`, siguen aplicándose, pero una regla ask de `Bash` sin contenido se omite para los comandos en el sandbox. Para definirla como `true` en la configuración administrada, agrégala al bloque `sandbox` de tu [fuente administrada de mayor rango](https://code.claude.com/docs/es/managed-settings.md#how-claude-code-combines-managed-sources).

1359 1359 

1360* **Scope**: [`Any file`](#scopes)1360* **Scope**: [`Any file`](#scopes)

1361* **Type**: Boolean1361* **Type**: Boolean

1362 * `true`: Claude Code ejecuta comandos Bash en sandbox sin una solicitud de permiso, excepto en los casos que describe [Modo de aprobación automática](https://code.claude.com/docs/es/sandboxing.md#auto-allow-mode); `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` desactiva la aprobación automática1362 * `true`: Claude Code ejecuta comandos Bash en sandbox sin una solicitud de permiso, excepto en los casos que describe [Modo de aprobación automática](https://code.claude.com/docs/es/sandboxing.md#auto-allow-mode); `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` desactiva la aprobación automática

1363 * `false`: los comandos en sandbox pasan por el flujo de permisos normal, por lo que deciden tus reglas allow y tu modo de permisos. La pestaña **Mode** de `/sandbox` llama a esto modo de permisos normal1363 * `false`: los comandos en sandbox pasan por el flujo de permisos normal, por lo que deciden tus reglas allow y tu modo de permisos. La pestaña **Mode** de `/sandbox` llama a esto modo de permisos normal

1364* **Default**: `true`1364* **Valor predeterminado**: `false`. Antes de la v2.1.324, el valor predeterminado era `true`

1365 1365 

1366Esto mantiene el sandbox activado y envía los comandos en sandbox por el flujo de permisos normal:1366Para mantener el sandbox activado y ejecutar los comandos en el sandbox sin una solicitud de permiso, define ambas claves en tu bloque `sandbox`:

1367 1367 

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

1369{1369{

1370 "sandbox": {1370 "sandbox": {

1371 "enabled": true,1371 "enabled": true,

1372 "autoAllowBashIfSandboxed": false1372 "autoAllowBashIfSandboxed": true

1373 }1373 }

1374}1374}

1375```1375```


1653}1653}

1654```1654```

1655 1655 

1656Con la capa desactivada, Claude Code no aplica las entradas de `denyRead` ni las entradas `deny` de `credentials.files`, mientras que las entradas de `credentials.envVars` y las entradas `mask` aplicadas siguen funcionando. [`autoAllowBashIfSandboxed`](#sandbox-autoallowbashifsandboxed) sigue siendo `true` de forma predeterminada, así que defínelo como `false` para seguir recibiendo solicitudes de permiso. Consulta [Desactivar el aislamiento del sistema de archivos](https://code.claude.com/docs/es/sandboxing.md#disable-filesystem-isolation) para ver la lista completa de fuentes que pueden definirlo y qué cambia cuando el aislamiento está desactivado.1656Con la capa desactivada, Claude Code no aplica las entradas `deny` de `denyRead` ni de `credentials.files`, mientras que las entradas de `credentials.envVars` y las entradas `mask` aplicadas siguen funcionando. Consulta [Disable filesystem isolation](https://code.claude.com/docs/es/sandboxing.md#disable-filesystem-isolation) para ver la lista completa de fuentes que pueden definirlo y qué cambia cuando el aislamiento está desactivado.

1657 1657 

1658### `sandbox.ignoreViolations`1658### `sandbox.ignoreViolations`

1659 1659 


4870 4870 

4871### `agentPushNotifEnabled`4871### `agentPushNotifEnabled`

4872 4872 

4873Permite que Claude envíe una notificación push a tu teléfono cuando decida que vale la pena enviarla, por ejemplo cuando finaliza una tarea larga. En una sesión local, Claude puede enviarla mientras [Remote Control](https://code.claude.com/docs/es/remote-control.md) está conectado. Aparece en `/config` como **Push when Claude decides**. Cuando lo cambias allí, Claude Code también guarda el valor en tu cuenta.4873Permite que Claude envíe una notificación push a tu teléfono cuando decida que vale la pena enviarla, por ejemplo cuando finaliza una tarea larga. En una sesión local, Claude puede enviarla mientras [Remote Control](https://code.claude.com/docs/es/remote-control.md) está conectado. Aparece en `/config` como **Push when Claude decides**.

4874 4874 

4875* **Scope**: [`Any file`](#scopes). Claude Code también lee un valor dejado en `~/.claude.json` por versiones anteriores.4875* **Scope**: [`Any file`](#scopes). Claude Code también lee un valor dejado en `~/.claude.json` por versiones anteriores.

4876* **Type**: Boolean4876* **Type**: Boolean


4884}4884}

4885```4885```

4886 4886 

4887Si ejecutas sesiones bajo un servidor de [`claude remote-control`](https://code.claude.com/docs/es/remote-control#start-a-remote-control-session), estas siguen el valor guardado en tu cuenta en lugar de esta clave. Para cambiar ese valor, ejecuta `/config` en una sesión de Claude Code en tu terminal y activa o desactiva **Push when Claude decides**. Si el conmutador ya muestra el valor que quieres, cámbialo y vuelve a cambiarlo para que Claude Code guarde ese valor en tu cuenta.4887No recibes notificaciones solo con esta clave. Para configurarlas, sigue los pasos de [Notificaciones push móviles](https://code.claude.com/docs/es/remote-control.md#mobile-push-notifications).

4888 4888 

4889Consulte [Notificaciones push móviles](https://code.claude.com/docs/es/remote-control.md#mobile-push-notifications).4889Si ejecutas sesiones bajo un servidor de [`claude remote-control`](https://code.claude.com/docs/es/remote-control#start-a-remote-control-session), estas siguen el valor guardado en tu cuenta en lugar de esta clave. Para cambiar ese valor, ejecuta `/config` en una sesión de Claude Code en tu terminal y activa o desactiva **Push when Claude decides**. Si el conmutador ya muestra el valor que quieres, cámbialo y vuelve a cambiarlo para que Claude Code guarde ese valor en tu cuenta.

4890 4890 

4891### `awaySummaryEnabled`4891### `awaySummaryEnabled`

4892 4892 


5043}5043}

5044```5044```

5045 5045 

5046Consulte [Notificaciones push móviles](https://code.claude.com/docs/es/remote-control.md#mobile-push-notifications).5046No recibes notificaciones solo con esta clave. Para configurarlas, sigue los pasos de [Notificaciones push móviles](https://code.claude.com/docs/es/remote-control.md#mobile-push-notifications).

5047 5047 

5048### `preferredNotifChannel`5048### `preferredNotifChannel`

5049 5049 


5421 5421 

5422### `minimumVersion`5422### `minimumVersion`

5423 5423 

5424Evite que las actualizaciones automáticas en segundo plano y `claude update` instalen cualquier versión inferior a esta, de modo que cambiar al canal `"stable"` no lo degrada desde una compilación `"latest"` más reciente. Claude Code escribe esta clave para usted cuando elige permanecer en su versión actual mientras cambia de canal en `/config`, y la borra cuando vuelve a cambiar a `"latest"`.5424Evita que las actualizaciones automáticas en segundo plano y `claude update` instalen cualquier versión inferior a la que establezcas. Claude Code escribe esta clave por ti cuando eliges permanecer en tu versión actual mientras cambias de canal en `/config`. Claude Code borra la clave cuando vuelves a cambiar a `"latest"` en `/config`.

5425 5425 

5426* **Alcance**: [`Any file`](#scopes). Establézcalo en configuración administrada para fijar un mínimo en toda la organización que la configuración de usuario y proyecto no pueda reducir.5426* **Alcance**: [`Any file`](#scopes). Establece esta clave en la configuración administrada para fijar un mínimo en toda la organización que la configuración de usuario y de proyecto no pueda sobrescribir.

5427* **Tipo**: cadena, un número de versión como `"2.1.100"`; un valor que no sea una versión válida se ignora5427* **Tipo**: cadena, un número de versión como `"2.1.323"`; un valor que no sea una versión válida se ignora

5428* **Predeterminado**: sin establecer, por lo que las actualizaciones pueden instalar cualquier versión que el canal ofrezca5428* **Predeterminado**: sin establecer, por lo que las actualizaciones pueden instalar cualquier versión que el canal ofrezca

5429 5429 

5430Este ejemplo sigue el canal stable y se niega a instalar cualquier versión inferior a 2.1.100:5430Este ejemplo sigue el canal stable y se niega a instalar cualquier versión inferior a 2.1.323:

5431 5431 

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

5433{5433{

5434 "autoUpdatesChannel": "stable",5434 "autoUpdatesChannel": "stable",

5435 "minimumVersion": "2.1.100"5435 "minimumVersion": "2.1.323"

5436}5436}

5437```5437```

5438 5438 

setup.md +19 −10

Details

40>40>

41> **macOS, Linux, WSL:**41> **macOS, Linux, WSL:**

42>42>

43> ```bash theme={null}43> ```bash theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}

44> curl -fsSL https://claude.ai/install.sh | bash44> curl -fsSL https://claude.ai/install.sh | bash

45> ```45> ```

46>46>


48>48>

49> **Windows PowerShell:**49> **Windows PowerShell:**

50>50>

51> ```powershell theme={null}51> ```powershell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}

52> irm https://claude.ai/install.ps1 | iex52> irm https://claude.ai/install.ps1 | iex

53> ```53> ```

54>54>

55> **Windows CMD:**55> **Windows CMD:**

56>56>

57> ```batch theme={null}57> ```batch theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}

58> curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd58> curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

59> ```59> ```

60>60>


72 72 

73> [tab] Homebrew73> [tab] Homebrew

74>74>

75> ```bash theme={null}75> ```bash theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}

76> brew install --cask claude-code76> brew install --cask claude-code

77> ```77> ```

78>78>


84 84 

85> [tab] WinGet85> [tab] WinGet

86>86>

87> ```powershell theme={null}87> ```powershell theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null} theme={null}

88> winget install Anthropic.ClaudeCode88> winget install Anthropic.ClaudeCode

89> ```89> ```

90>90>


220}220}

221```221```

222 222 

223Con este ajuste, una instalación nativa se actualiza a la versión estable incluso cuando esa versión es más antigua que la tuya. Para evitar la degradación, también [fija una versión mínima](#pin-a-minimum-version).

224 

223Un modelo recién lanzado puede requerir una versión de Claude Code más nueva que la que ofrece el canal estable. Para usar el modelo ahora, cámbiate al canal latest.225Un modelo recién lanzado puede requerir una versión de Claude Code más nueva que la que ofrece el canal estable. Para usar el modelo ahora, cámbiate al canal latest.

224 226 

225Para implementaciones empresariales, puede aplicar un canal de lanzamiento consistente en toda su organización usando [configuración administrada](https://code.claude.com/docs/es/managed-settings.md).227Para implementaciones empresariales, puede aplicar un canal de lanzamiento consistente en toda su organización usando [configuración administrada](https://code.claude.com/docs/es/managed-settings.md).


230 232 

231### Fijar una versión mínima233### Fijar una versión mínima

232 234 

233La configuración `minimumVersion` establece un piso. Las actualizaciones automáticas en segundo plano y `claude update` se niegan a instalar cualquier versión por debajo de este valor, por lo que cambiar al canal `"stable"` no lo degrada si ya está en una compilación `"latest"` más nueva.235Para mover una instalación nativa al [canal de lanzamiento](#configure-release-channel) `"stable"` sin una degradación, establece [`minimumVersion`](https://code.claude.com/docs/es/settings-reference#minimumversion) en la versión que estás ejecutando. Las actualizaciones automáticas en segundo plano y `claude update` se niegan a instalar cualquier versión por debajo del mínimo.

236 

237Establece el mínimo en `/config` para que Claude Code complete tu versión actual, o en tu archivo de configuración para escribir el número tú mismo:

234 238 

235Cambiar de `"latest"` a `"stable"` a través de `/config` le solicita que permanezca en la versión actual o permita la degradación. Elegir permanecer establece `minimumVersion` en esa versión. Cambiar de nuevo a `"latest"` lo borra.239* **En `/config`**: cambia **Canal de actualización automática** a stable y luego selecciona **Permanecer en la versión actual**. Si vuelves a cambiar a latest en `/config`, Claude Code borra el mínimo.

240* **En tu [archivo de configuración](https://code.claude.com/docs/es/settings.md)**: ejecuta `claude --version` en tu shell y establece `minimumVersion` en el número al inicio de la salida. En la misma edición, establece `autoUpdatesChannel` en `"stable"`.

236 241 

237Agréguelo a su [archivo settings.json](https://code.claude.com/docs/es/settings.md) para fijar un piso explícitamente:242Este `~/.claude/settings.json` cambia a stable una instalación en la versión 2.1.323:

238 243 

239```json theme={null}244```json theme={null}

240{245{

241 "autoUpdatesChannel": "stable",246 "autoUpdatesChannel": "stable",

242 "minimumVersion": "2.1.100"247 "minimumVersion": "2.1.323"

243}248}

244```249```

245 250 

246En [configuración administrada](https://code.claude.com/docs/es/managed-settings.md), esto aplica un mínimo en toda la organización que la configuración de usuario y proyecto no puede anular.251La instalación permanece en 2.1.323 hasta que el canal stable ofrezca una versión más nueva.

252 

253#### Establecer límites de versión para tu organización

254 

255En la [configuración administrada](https://code.claude.com/docs/es/managed-settings.md), `minimumVersion` aplica un mínimo en toda la organización que la configuración de usuario y de proyecto no puede sobrescribir.

247 256 

248El pin `minimumVersion` solo restringe las actualizaciones. Para hacer que Claude Code se niegue a iniciar fuera de un rango de versión, use la configuración administrada `requiredMinimumVersion` y `requiredMaximumVersion` en su lugar. Las actualizaciones también respetan el techo `requiredMaximumVersion`. Consulte [`requiredMinimumVersion`](https://code.claude.com/docs/es/settings-reference#requiredminimumversion) y [`requiredMaximumVersion`](https://code.claude.com/docs/es/settings-reference#requiredmaximumversion).257El pin `minimumVersion` solo restringe las actualizaciones. Para hacer que Claude Code se niegue a iniciar fuera de un rango de versión, use la configuración administrada `requiredMinimumVersion` y `requiredMaximumVersion` en su lugar. Las actualizaciones también respetan el techo `requiredMaximumVersion`. Consulte [`requiredMinimumVersion`](https://code.claude.com/docs/es/settings-reference#requiredminimumversion) y [`requiredMaximumVersion`](https://code.claude.com/docs/es/settings-reference#requiredmaximumversion).

249 258 

skills.md +4 −2

Details

22 22 

23Claude Code incluye un conjunto de skills incluidas, como `/doctor`, `/code-review`, `/batch`, `/debug`, `/loop` y `/claude-api`. Las skills incluidas se basan en prompts: proporcionan a Claude instrucciones detalladas y le permiten orquestar el trabajo utilizando sus herramientas. La mayoría de los comandos integrados en su lugar ejecutan lógica fija directamente.23Claude Code incluye un conjunto de skills incluidas, como `/doctor`, `/code-review`, `/batch`, `/debug`, `/loop` y `/claude-api`. Las skills incluidas se basan en prompts: proporcionan a Claude instrucciones detalladas y le permiten orquestar el trabajo utilizando sus herramientas. La mayoría de los comandos integrados en su lugar ejecutan lógica fija directamente.

24 24 

25Para invocar un skill incluido, escribe `/` seguido del nombre del skill. Claude invoca algunos skills incluidos automáticamente cuando es relevante; otros, incluido [`/verify`](#run-and-verify-your-app), se ejecutan solo cuando tú los invocas.25Para invocar un skill incluido, escribe `/` seguido del nombre del skill. Claude invoca algunos skills incluidos automáticamente cuando es relevante.

26 26 

27La mayoría de las skills incluidas están disponibles en cada sesión. Algunas dependen de una característica específica: `/workflow-authoring`, por ejemplo, está disponible solo cuando [los flujos de trabajo dinámicos](https://code.claude.com/docs/es/workflows.md) están habilitados.27La mayoría de las skills incluidas están disponibles en cada sesión. Algunas dependen de una característica específica: `/workflow-authoring`, por ejemplo, está disponible solo cuando [los flujos de trabajo dinámicos](https://code.claude.com/docs/es/workflows.md) están habilitados.

28 28 


320 320 

321Si creas un directorio de skills de nivel superior que no existía cuando empezó la sesión, ejecuta [`/reload-skills`](https://code.claude.com/docs/es/commands#all-commands) para recoger los skills que pusiste ahí. Claude Code todavía no vigila ese directorio, así que vuelve a ejecutar `/reload-skills` después de cada cambio posterior ahí.321Si creas un directorio de skills de nivel superior que no existía cuando empezó la sesión, ejecuta [`/reload-skills`](https://code.claude.com/docs/es/commands#all-commands) para recoger los skills que pusiste ahí. Claude Code todavía no vigila ese directorio, así que vuelve a ejecutar `/reload-skills` después de cada cambio posterior ahí.

322 322 

323La detección de cambios en vivo cubre solo el texto de `SKILL.md`. Para una carpeta de skill que también es un [plugin](https://code.claude.com/docs/es/plugins/loading.md#plugins-shared-through-a-repository), los cambios en `hooks/`, `.mcp.json`, `agents/` y `output-styles/` necesitan `/reload-plugins` para surtir efecto.323> [!NOTE]

324>

325> La detección de cambios en vivo cubre el texto de `SKILL.md`. Para una carpeta de skill que también es un [plugin](https://code.claude.com/docs/es/plugins/loading.md#plugins-shared-through-a-repository), los cambios en `.mcp.json`, `agents/` y `output-styles/` necesitan `/reload-plugins` para surtir efecto. Los cambios en `hooks/` también lo necesitan, excepto el archivo de módulo de un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) cuando [se recarga por sí solo](https://code.claude.com/docs/es/env-vars.md).

324 326 

325### Elimina un skill327### Elimina un skill

326 328 

sub-agents.md +59 −42

Details

36>36>

37> Un agente rápido y de solo lectura optimizado para buscar y analizar bases de código.37> Un agente rápido y de solo lectura optimizado para buscar y analizar bases de código.

38>38>

39> * **Modelo**: el modelo de la conversación principal. Cuando la conversación principal ejecuta Fable, el modelo de Explore depende de cómo te conectes:39> * **Modelo**: el modelo de la [conversación principal](#which-model-a-nested-subagent-runs-on). Cuando la conversación principal ejecuta Fable, Explore se ejecuta en Opus o se mantiene en Fable, según cómo te conectes.

40> * Con una suscripción a Claude, una cuenta de Anthropic Console o un [gateway de LLM](https://code.claude.com/docs/es/llm-gateway) al que accedes mediante `ANTHROPIC_BASE_URL`, Explore se ejecuta en el modelo Opus al que se resuelve el [alias `opus`](https://code.claude.com/docs/es/model-config#model-aliases).40> * Con una suscripción a Claude, una cuenta de Anthropic Console o un [gateway de LLM](https://code.claude.com/docs/es/llm-gateway) al que accedes mediante `ANTHROPIC_BASE_URL`, Explore se ejecuta en el modelo Opus al que se resuelve el [alias `opus`](https://code.claude.com/docs/es/model-config#model-aliases).

41> * En Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, [Claude Platform on AWS](https://code.claude.com/docs/es/claude-platform-on-aws.md) o un [gateway de Claude apps](https://code.claude.com/docs/es/claude-apps-gateway), Explore se mantiene en el modelo de la conversación principal.41> * En Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, [Claude Platform on AWS](https://code.claude.com/docs/es/claude-platform-on-aws.md) o un [gateway de Claude apps](https://code.claude.com/docs/es/claude-apps-gateway), Explore se mantiene en Fable.

42> * **Herramientas**: herramientas de solo lectura; Write y Edit están denegadas42> * **Herramientas**: herramientas de solo lectura; Write y Edit están denegadas

43> * **Propósito**: descubrimiento de archivos, búsqueda de código, exploración de base de código43> * **Propósito**: descubrimiento de archivos, búsqueda de código, exploración de base de código

44>44>


52>52>

53> Un agente de investigación utilizado durante el [modo plan](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode) para recopilar contexto antes de presentar un plan.53> Un agente de investigación utilizado durante el [modo plan](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode) para recopilar contexto antes de presentar un plan.

54>54>

55> * **Modelo**: hereda de la conversación principal, a menos que establezca `CLAUDE_CODE_SUBAGENT_MODEL` y [lo fuerce en todos los subagentes](#run-every-subagent-on-one-model)55> * **Modelo**: hereda de la [conversación principal](#which-model-a-nested-subagent-runs-on), a menos que establezcas `CLAUDE_CODE_SUBAGENT_MODEL` y [lo fuerces en todos los subagentes](#run-every-subagent-on-one-model)

56> * **Herramientas**: herramientas de solo lectura; Write y Edit están denegadas56> * **Herramientas**: herramientas de solo lectura; Write y Edit están denegadas

57> * **Propósito**: investigación de base de código para planificación57> * **Propósito**: investigación de base de código para planificación

58>58>


62>62>

63> Un agente capaz para tareas complejas y de múltiples pasos que requieren tanto exploración como acción.63> Un agente capaz para tareas complejas y de múltiples pasos que requieren tanto exploración como acción.

64>64>

65> * **Modelo**: el modelo [`CLAUDE_CODE_SUBAGENT_MODEL`](#choose-a-model) si establece uno y nada asigna un modelo de otra manera, de lo contrario el modelo de la conversación principal; [Choose a model](#choose-a-model) establece el orden completo, y [Run every subagent on one model](#run-every-subagent-on-one-model) muestra cómo hacer que la variable anule esas fuentes65> * **Modelo**: el modelo de la conversación principal de forma predeterminada, siguiendo el [orden de modelo](#choose-a-model)

66> * **Herramientas**: todas las herramientas [disponibles para subagentes](#available-tools)66> * **Herramientas**: todas las herramientas [disponibles para subagentes](#available-tools)

67> * **Propósito**: investigación compleja, operaciones de múltiples pasos, modificaciones de código67> * **Propósito**: investigación compleja, operaciones de múltiples pasos, modificaciones de código

68>68>


346 346 

347### Elegir un modelo347### Elegir un modelo

348 348 

349El campo `model` controla qué modelo usa el subagente:349De forma predeterminada, un subagente que defines se ejecuta en el mismo modelo que la conversación que lo inicia. Para elegir su modelo tú mismo, establece el campo [`model`](#supported-frontmatter-fields) de su definición en uno de estos valores:

350 350 

351* **Alias de modelo**: use uno de los alias disponibles: `sonnet`, `opus`, `haiku`, o `fable`351* **Alias de modelo**: `sonnet`, `opus`, `haiku` o `fable`

352* **ID de modelo completo**: use un ID de modelo completo como `claude-opus-5-5` o `claude-sonnet-5`. Acepta los mismos valores que la bandera `--model`352* **ID de modelo completo**: un valor que acepte el flag [`--model`](https://code.claude.com/docs/es/cli-reference#cli-flags), como `claude-opus-5-5` o `claude-sonnet-5`

353* **inherit**: use el mismo modelo que la conversación principal353* **`inherit`**: el modelo de la conversación principal, o el modelo del subagente que lo genera en el caso de un [subagente anidado](#which-model-a-nested-subagent-runs-on)

354 354 

355Cuando Claude invoca un subagente, también puede pasar un parámetro `model` para esa invocación específica. En una llamada a la herramienta Agent, ese parámetro acepta un alias de modelo: `sonnet`, `opus`, `haiku` o `fable`. Claude no puede pasar un ID de modelo completo ni `inherit` en esa llamada. Claude Code resuelve el modelo del subagente en este orden:355Cuando más de una fuente establece un modelo, Claude Code usa la primera en este orden:

356 356 

3571. El parámetro `model` por invocación3571. El parámetro `model` por invocación, que Claude puede pasar cuando inicia el subagente. En una llamada a la herramienta Agent, el parámetro acepta un alias de modelo, no un ID de modelo completo ni `inherit`.

3582. El frontmatter `model` de la definición del subagente, donde `inherit` selecciona el modelo de la conversación principal3582. El campo `model` de la definición del subagente, incluido `inherit`

3593. La variable de entorno [`CLAUDE_CODE_SUBAGENT_MODEL`](https://code.claude.com/docs/es/model-config#environment-variables), cuando la establece en un alias de modelo o ID de modelo3593. La variable de entorno [`CLAUDE_CODE_SUBAGENT_MODEL`](https://code.claude.com/docs/es/model-config#environment-variables)

3604. El modelo de la conversación principal3604. El modelo de la conversación principal, o el modelo del subagente que lo genera en el caso de un subagente anidado

361 361 

362Si un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) instalado establece un modelo en su hook [`agent.spawn`](https://code.claude.com/docs/es/plugins/mods/reference#subagents), Claude Code usa ese modelo en lugar del parámetro por invocación.362Si Claude pasó un alias, el subagente conserva ese alias cuando se [reanuda o recibe un mensaje de seguimiento](#resume-subagents). Si un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) instalado establece un modelo en su hook [`agent.spawn`](https://code.claude.com/docs/es/plugins/mods/reference#subagents), Claude Code usa ese modelo en lugar del parámetro por invocación.

363 

364En dos casos, un alias de familia como `opus` en el parámetro por invocación o el frontmatter se resuelve al modelo de la conversación principal en lugar de la [versión a la que apunta el alias](https://code.claude.com/docs/es/model-config.md#model-aliases):

365 

366* **El modelo de la conversación principal pertenece a esa familia**: el subagente se ejecuta en el modelo exacto de la conversación principal, incluyendo cualquier sufijo `[1m]`, por lo que obtiene la misma ventana de [contexto extendido](https://code.claude.com/docs/es/model-config.md#extended-context) que la conversación principal.

367* **Claude Code no puede determinar la familia del modelo de la conversación principal, en [un proveedor distinto de la API de Anthropic](https://code.claude.com/docs/es/third-party-integrations.md)**: esto puede suceder con un [ARN de perfil de inferencia de aplicación](https://code.claude.com/docs/es/amazon-bedrock.md#iam-configuration) en Amazon Bedrock que Claude Code no ha resuelto a un modelo de respaldo. Este caso cubre solo el alias `opus`, y no se aplica cuando establece [`ANTHROPIC_DEFAULT_OPUS_MODEL`](https://code.claude.com/docs/es/model-config#environment-variables), ya que `opus` entonces se resuelve al modelo que establece.

368 

369Un alias en `CLAUDE_CODE_SUBAGENT_MODEL` siempre se resuelve en la versión a la que apunta el alias, incluso cuando nombra la familia de la conversación principal. Establecer la variable en `inherit` es lo mismo que dejarla sin establecer.

370 363 

371Establecer `CLAUDE_CODE_SUBAGENT_MODEL` por sí solo no cambia el modelo en el que se ejecutan los subagentes integrados Explore y Plan. Para cambiarlo, consulte [Ejecutar cada subagente en un modelo](#run-every-subagent-on-one-model).364Establecer `CLAUDE_CODE_SUBAGENT_MODEL` por sí solo no cambia el modelo en el que se ejecutan los subagentes integrados Explore y Plan. Para cambiarlo, consulte [Ejecutar cada subagente en un modelo](#run-every-subagent-on-one-model).

372 365 

373Antes de v2.1.251, `CLAUDE_CODE_SUBAGENT_MODEL` venía primero en este orden y anulaba tanto el parámetro por invocación como el frontmatter, incluyendo `model: inherit`.366#### En qué modelo se ejecuta un subagente anidado

374 367 

375Claude Code verifica el parámetro por invocación, frontmatter y valores de variable de entorno contra la lista de permitidos [`availableModels`](https://code.claude.com/docs/es/model-config#restrict-model-selection) de su organización. Para un valor bloqueado, sustituye otro modelo:368De forma predeterminada, un [subagente anidado](#let-subagents-spawn-their-own-subagents) que defines se ejecuta en el modelo de su padre, el subagente que lo generó. Para ejecutar el subagente anidado en otro modelo, establece su campo `model` en ese modelo.

376 369 

377* Cuando el valor bloqueado es un alias de familia como `opus`, Claude Code ejecuta el subagente en la versión más nueva de esa familia que la lista de permitidos permite, siguiendo las mismas [reglas de sustitución y alcance de proveedor](https://code.claude.com/docs/es/model-config.md#restrict-model-selection) que `/model`. Antes de v2.1.222, Claude Code ejecutaba el subagente en el modelo heredado para un alias de familia bloqueado también.370Por ejemplo, supón que tu conversación principal se ejecuta en Opus e inicia un subagente revisor en Haiku. De forma predeterminada, estos subagentes se ejecutan en Haiku, no en Opus, cuando el revisor los genera:

378* Para cualquier otro valor bloqueado, en proveedores donde esa sustitución no opera, o cuando la lista de permitidos no permite ninguna versión de la familia, Claude Code ejecuta el subagente en el modelo heredado en su lugar. Si establece `CLAUDE_CODE_SUBAGENT_MODEL`, Claude Code intenta ese modelo primero, bajo estas mismas reglas.

379 371 

380En sesiones interactivas, Claude Code muestra una advertencia nombrando el modelo solicitado y el modelo en el que se ejecuta el subagente, para cualquiera de las sustituciones.372* Un subagente con `model: inherit` o sin campo `model`

373* Los subagentes integrados Explore, Plan y de propósito general

374* Una [bifurcación](#fork-the-current-conversation)

381 375 

382Para comprobar con qué modelo se ejecuta un subagente, ejecuta [`/tasks`](https://code.claude.com/docs/es/commands). Claude Code muestra el modelo en la fila del subagente y agrega el [nivel de esfuerzo](https://code.claude.com/docs/es/model-config.md#adjust-effort-level) establecido para ese subagente, si lo hay. Requiere Claude Code v2.1.242 o posterior.376En modo plan, estos subagentes se ejecutan en Opus si estableces el modelo de tu sesión en [`opusplan`](https://code.claude.com/docs/es/model-config#opusplan-model-setting), o en Sonnet si lo estableces en `haiku`.

383 377 

384Un parámetro `model` por invocación también se aplica cuando el subagente se [reanuda o se le envía un mensaje de seguimiento](#resume-subagents), por lo que el subagente permanece en ese modelo.378#### Comprobar el modelo de un subagente

385 379 

386A partir de v2.1.198, los subagentes también heredan la configuración de [pensamiento extendido](https://code.claude.com/docs/es/model-config.md#extended-thinking) de la conversación principal: si el pensamiento está activado en su sesión, está activado para el subagente, y si está desactivado, permanece desactivado. No hay una configuración de pensamiento por subagente. Antes de v2.1.198, los subagentes se ejecutaban con pensamiento extendido deshabilitado independientemente de la configuración de la conversación principal.380Para comprobar con qué modelo se ejecuta un subagente, ejecuta [`/tasks`](https://code.claude.com/docs/es/commands). Claude Code muestra el modelo en la fila del subagente y agrega el [nivel de esfuerzo](https://code.claude.com/docs/es/model-config.md#adjust-effort-level) establecido para ese subagente, si lo hay. Requiere Claude Code v2.1.242 o posterior.

387 381 

388#### Ejecutar cada subagente en un modelo382#### Ejecutar cada subagente en un modelo

389 383 

390`CLAUDE_CODE_SUBAGENT_MODEL` es un valor predeterminado, por lo que la definición de un subagente o un modelo que Claude pasa aún tiene precedencia sobre él. Para aplicar un modelo a cada subagente, [compañero de equipo](https://code.claude.com/docs/es/agent-teams.md#specify-teammates-and-models), y [agente de flujo de trabajo](https://code.claude.com/docs/es/workflows.md), también establezca `CLAUDE_CODE_SUBAGENT_MODEL_FORCE` en `1`. Requiere Claude Code v2.1.257 o posterior.384Para aplicar un modelo a cada subagente, [compañero de equipo](https://code.claude.com/docs/es/agent-teams.md#specify-teammates-and-models) y [agente de flujo de trabajo](https://code.claude.com/docs/es/workflows.md), establece `CLAUDE_CODE_SUBAGENT_MODEL` en ese modelo y `CLAUDE_CODE_SUBAGENT_MODEL_FORCE` en `1`. Requiere Claude Code v2.1.257 o posterior.

391 

392* Si establece ambas variables, los subagentes se ejecutan en el modelo en `CLAUDE_CODE_SUBAGENT_MODEL`.

393* Si estableces solo `CLAUDE_CODE_SUBAGENT_MODEL_FORCE`, los subagentes se ejecutan en el modelo de la conversación principal, excepto el subagente integrado Explore, que se ejecuta en el [modelo indicado para él en Subagentes integrados](#built-in-subagents).

394 385 

395Por ejemplo, para ejecutar cada subagente en Haiku, establezca ambas variables en el bloque `env` de un [archivo de configuración](https://code.claude.com/docs/es/settings.md):386Por ejemplo, para ejecutar cada subagente en Haiku, establezca ambas variables en el bloque `env` de un [archivo de configuración](https://code.claude.com/docs/es/settings.md):

396 387 


405 396 

406Para verificar que la configuración surtió efecto, ejecute [`/tasks`](https://code.claude.com/docs/es/commands) mientras se ejecuta un subagente. La fila del subagente muestra el modelo en el que se ejecuta.397Para verificar que la configuración surtió efecto, ejecute [`/tasks`](https://code.claude.com/docs/es/commands) mientras se ejecuta un subagente. La fila del subagente muestra el modelo en el que se ejecuta.

407 398 

408Mientras `CLAUDE_CODE_SUBAGENT_MODEL_FORCE` está [activado](https://code.claude.com/docs/es/env-vars.md), Claude Code ignora el campo `model` de las definiciones de subagentes, y Claude no puede pasar un modelo cuando inicia un subagente. Estos subagentes siguen ejecutándose en el modelo de la conversación principal:399Mientras `CLAUDE_CODE_SUBAGENT_MODEL_FORCE` está [activado](https://code.claude.com/docs/es/env-vars.md), Claude Code ignora el campo `model` de las definiciones de subagentes, y Claude no puede pasar un modelo cuando inicia un subagente. Los siguientes subagentes siguen ejecutándose en el modelo de su conversación padre:

409 400 

410* Una [bifurcación](#fork-the-current-conversation)401* Una [bifurcación](#fork-the-current-conversation)

411* Una [skill que se ejecuta en un subagente](https://code.claude.com/docs/es/skills.md#run-skills-in-a-subagent) con `model: inherit`402* Una [skill que se ejecuta en un subagente](https://code.claude.com/docs/es/skills.md#run-skills-in-a-subagent) con `model: inherit`

412 403 

404Si estableces solo `CLAUDE_CODE_SUBAGENT_MODEL_FORCE`, los subagentes se ejecutan en el modelo de la conversación principal, excepto el subagente integrado Explore, que se ejecuta en el [modelo indicado para él en Subagentes integrados](#built-in-subagents).

405 

406#### Qué versión selecciona un alias de modelo

407 

408De forma predeterminada, un subagente con un alias de modelo se ejecuta en la [versión a la que apunta el alias](https://code.claude.com/docs/es/model-config.md#model-aliases). Con un alias de familia como `opus` en el campo `model` o en el parámetro por invocación, el subagente se ejecuta en el modelo de su conversación padre en dos casos:

409 

410* **Misma familia**: por ejemplo, si tu conversación principal se ejecuta en `claude-opus-4-7`, un subagente con `model: opus` también se ejecuta en esa versión. Para ejecutar otra versión, establece un ID de modelo completo en el campo `model`.

411* **Familia desconocida**: Claude Code no puede determinar la familia del modelo padre, por ejemplo con un ARN de Amazon Bedrock que [no puede consultar](https://code.claude.com/docs/es/amazon-bedrock.md#iam-configuration). Este caso se aplica solo al alias `opus` en [un proveedor distinto de la API de Anthropic](https://code.claude.com/docs/es/third-party-integrations.md). Para elegir la versión de Opus, establece [`ANTHROPIC_DEFAULT_OPUS_MODEL`](https://code.claude.com/docs/es/model-config#environment-variables).

412 

413#### Cuando una lista de permitidos bloquea el modelo de un subagente

414 

415Si la lista de modelos permitidos [`availableModels`](https://code.claude.com/docs/es/model-config#restrict-model-selection) de tu organización bloquea el modelo establecido para un subagente, el subagente se ejecuta en el primero de estos que aplique:

416 

4171. Para un alias de familia bloqueado, la versión permitida más reciente de esa familia, en [proveedores que admiten esta sustitución](https://code.claude.com/docs/es/model-config.md#restrict-model-selection)

4182. El modelo en `CLAUDE_CODE_SUBAGENT_MODEL`, si lo estableces, bajo estas mismas reglas

4193. El modelo de la conversación principal, o el modelo del subagente que lo genera en el caso de un subagente anidado

420 

421Para un subagente de nivel superior en una sesión interactiva, una advertencia nombra el modelo solicitado y su reemplazo. Para ejecutar un modelo concreto, cambia el valor bloqueado por uno que la lista de permitidos permita.

422 

423### Pensamiento extendido en subagentes

424 

425Los subagentes heredan la configuración de [pensamiento extendido](https://code.claude.com/docs/es/model-config.md#extended-thinking) de tu conversación principal. No hay un ajuste de pensamiento por subagente.

426 

413### Elegir un nivel de esfuerzo427### Elegir un nivel de esfuerzo

414 428 

415Para ejecutar un subagente con su propio [nivel de esfuerzo](https://code.claude.com/docs/es/model-config.md#adjust-effort-level), establece el campo [`effort`](#supported-frontmatter-fields) en su definición.429Para ejecutar un subagente con su propio [nivel de esfuerzo](https://code.claude.com/docs/es/model-config.md#adjust-effort-level), establece el campo [`effort`](#supported-frontmatter-fields) en su definición.


426 440 

427#### Herramientas disponibles441#### Herramientas disponibles

428 442 

429Los subagentes heredan las [herramientas integradas](https://code.claude.com/docs/es/tools-reference.md) y herramientas MCP disponibles en la conversación principal, reducidas por dos filtros: el primero elimina una lista corta de herramientas de cada subagente, y el segundo reduce el conjunto de herramientas integradas para subagentes que se ejecutan en [segundo plano](#run-subagents-in-foreground-or-background), que es el predeterminado. En macOS, Linux y WSL, un subagente también puede recibir las herramientas Glob y Grep cuando la conversación principal no las tiene, como se describe en [Comportamiento de la herramienta Glob](https://code.claude.com/docs/es/tools-reference.md#glob-tool-behavior). [Las bifurcaciones](#fork-the-current-conversation) omiten ambos filtros y reciben el grupo de herramientas exacto de la conversación principal. El primer filtro elimina estas herramientas, incluso cuando se enumeran en el campo `tools`:443Los subagentes heredan las [herramientas integradas](https://code.claude.com/docs/es/tools-reference.md) y herramientas MCP disponibles en la conversación principal, reducidas por dos filtros. El primero elimina una lista corta de herramientas de cada subagente. El segundo reduce el conjunto de herramientas integradas para subagentes que se ejecutan en [segundo plano](#run-subagents-in-foreground-or-background), que es el predeterminado.

444 

445En macOS, Linux y WSL, un subagente también puede recibir las herramientas Glob y Grep cuando la conversación principal no las tiene, como se describe en [Comportamiento de la herramienta Glob](https://code.claude.com/docs/es/tools-reference.md#glob-tool-behavior). [Las bifurcaciones](#fork-the-current-conversation) omiten ambos filtros y reciben el grupo de herramientas exacto de su conversación padre. El primer filtro elimina estas herramientas, incluso cuando se enumeran en el campo `tools`:

430 446 

431* `Agent`, cuando el subagente está en el [límite de profundidad](#let-subagents-spawn-their-own-subagents); en una [bifurcación](#fork-the-current-conversation) la herramienta permanece listada pero devuelve un error en lugar de generar447* `Agent`, cuando el subagente está en el [límite de profundidad](#let-subagents-spawn-their-own-subagents); en una [bifurcación](#fork-the-current-conversation) la herramienta permanece listada pero devuelve un error en lugar de generar

432* `AskUserQuestion`448* `AskUserQuestion`


1077 1093 

1078Con este valor, tus subagentes pueden delegar a una segunda capa de los suyos, y esa segunda capa no puede delegar más. Establece `1` para desactivar el anidamiento.1094Con este valor, tus subagentes pueden delegar a una segunda capa de los suyos, y esa segunda capa no puede delegar más. Establece `1` para desactivar el anidamiento.

1079 1095 

1080Un subagente anidado se configura de la misma manera que uno de nivel superior y se resuelve desde los mismos [alcances](#choose-the-subagent-scope). Para evitar que un subagente genere otros mientras el anidamiento está activado, como un revisor que debe permanecer de solo lectura, omite `Agent` de su lista [`tools`](#available-tools) o añádelo a `disallowedTools`.1096Define un subagente anidado en los mismos [alcances](#choose-the-subagent-scope) que uno de nivel superior. Por defecto, un subagente anidado que defines se ejecuta en el [modelo del subagente que lo genera](#which-model-a-nested-subagent-runs-on). Para evitar que un subagente genere otros mientras el anidamiento está activado, como un revisor que debe permanecer de solo lectura, omite `Agent` de su lista [`tools`](#available-tools) o añádelo a `disallowedTools`.

1081 1097 

1082En la terminal, Claude Code muestra subagentes anidados como un árbol en el panel de subagentes debajo de la entrada del prompt y marca cada fila que aún tiene descendientes en el panel con un conteo `(+N)` de ellos. Abre una fila para ver los hermanos y descendientes directos de ese subagente con una ruta de vuelta a `main`.1098En la terminal, Claude Code muestra subagentes anidados como un árbol en el panel de subagentes debajo de la entrada del prompt y marca cada fila que aún tiene descendientes en el panel con un conteo `(+N)` de ellos. Abre una fila para ver los hermanos y descendientes directos de ese subagente con una ruta de vuelta a `main`.

1083 1099 


1221>1237>

1222> Cuando [la vista de agente está desactivada](https://code.claude.com/docs/es/agent-view.md#turn-off-agent-view), `/subtask` no está disponible y `/fork` inicia el subagente bifurcado en su lugar; de lo contrario, `/fork` copia toda la sesión en una nueva [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md#from-inside-a-session).1238> Cuando [la vista de agente está desactivada](https://code.claude.com/docs/es/agent-view.md#turn-off-agent-view), `/subtask` no está disponible y `/fork` inicia el subagente bifurcado en su lugar; de lo contrario, `/fork` copia toda la sesión en una nueva [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md#from-inside-a-session).

1223 1239 

1224Un fork es un subagente que hereda toda la conversación hasta ahora en lugar de comenzar de nuevo. Esto elimina el aislamiento de entrada que los subagentes de otra manera proporcionan: un fork ve el mismo mensaje del sistema, herramientas, modelo e historial de mensajes que la sesión principal, para que pueda entregarle una tarea secundaria sin re-explicar la situación. Las propias llamadas de herramientas del fork aún permanecen fuera de su conversación y solo su resultado final regresa, por lo que su ventana de contexto principal permanece limpia. Use un fork cuando cualquier otro subagente necesitaría demasiado contexto para ser útil, o cuando desee probar varios enfoques en paralelo desde el mismo punto de partida.1240Un fork es un subagente que hereda toda la conversación hasta ahora en lugar de comenzar de nuevo. Usa un fork cuando cualquier otro subagente necesitaría demasiado contexto para ser útil, o cuando quieras probar varios enfoques en paralelo desde el mismo punto de partida.

1241 

1242* **Entrada**: un fork ve el mismo prompt del sistema, herramientas, [modelo](#which-model-a-nested-subagent-runs-on) e historial de mensajes que su conversación principal

1243* **Salida**: las propias llamadas a herramientas del fork permanecen fuera de su conversación principal y solo regresa su resultado final

1225 1244 

1226Claude puede iniciar un fork por sí mismo mientras el modo fork está activado, como lo está de forma predeterminada. Para detener los forks, consulta [Desactivar el modo fork](#turn-fork-mode-on-or-off).1245Claude puede iniciar un fork por sí mismo mientras el modo fork está activado, como lo está de forma predeterminada. Para detener los forks, consulta [Desactivar el modo fork](#turn-fork-mode-on-or-off).

1227 1246 


1257 1276 

1258### Cómo los forks difieren de otros subagentes1277### Cómo los forks difieren de otros subagentes

1259 1278 

1260Un fork hereda todo lo que la sesión principal tiene en el momento en que se genera. Cualquier otro subagente comienza desde cero a partir de su definición.

1261 

1262| | Fork | Subagente que no es fork |1279| | Fork | Subagente que no es fork |

1263| :- | :- | :- |1280| :- | :- | :- |

1264| Contexto | Historial de conversación completo | Contexto fresco con la solicitud que pasa |1281| Contexto | Historial de conversación completo | Contexto fresco con la solicitud que pasa |

1265| Mensaje del sistema y herramientas | Igual que la sesión principal | Del [archivo de definición](#write-subagent-files) del subagente, [filtrado para ejecuciones de fondo](#available-tools) |1282| Prompt del sistema y herramientas | Igual que la conversación principal | Del [archivo de definición](#write-subagent-files) del subagente, [filtrado para ejecuciones en segundo plano](#available-tools) |

1266| Modelo | Igual que la sesión principal | Del campo `model` del subagente |1283| Modelo | Igual que la [conversación principal](#which-model-a-nested-subagent-runs-on) | Sigue el [orden de modelos de subagentes](#choose-a-model) |

1267| Caché de solicitud | Compartido con la sesión principal | Caché separado |1284| Caché de prompts | Compartida con la conversación principal | Caché separada |

1268 1285 

1269Como el prompt del sistema y las definiciones de herramientas del fork son idénticos a los del principal, su primera solicitud reutiliza la [caché de prompts](https://code.claude.com/docs/es/prompt-caching.md#subagents-and-the-cache) del principal. Gracias a esa reutilización, un fork cuesta menos que un subagente nuevo para tareas que necesitan el mismo contexto.1286Como el prompt del sistema y las definiciones de herramientas del fork son idénticos a los del principal, su primera solicitud reutiliza la [caché de prompts](https://code.claude.com/docs/es/prompt-caching.md#subagents-and-the-cache) del principal. Gracias a esa reutilización, un fork cuesta menos que un subagente nuevo para tareas que necesitan el mismo contexto.

1270 1287 

workflows.md +1 −1

Details

454* Verifique `/model` antes de una ejecución grande si generalmente cambia a un modelo más pequeño para trabajo rutinario454* Verifique `/model` antes de una ejecución grande si generalmente cambia a un modelo más pequeño para trabajo rutinario

455* Pida a Claude que use un modelo más pequeño para etapas que no necesitan el más fuerte cuando describe la tarea455* Pida a Claude que use un modelo más pequeño para etapas que no necesitan el más fuerte cuando describe la tarea

456 456 

457Cuando la [lista de permitidos `availableModels`](https://code.claude.com/docs/es/model-config#restrict-model-selection) de tu organización bloquea un modelo que el script solicita para un agente, ese agente se ejecuta en un modelo sustituido en su lugar, siguiendo las mismas [reglas de sustitución que los subagentes](https://code.claude.com/docs/es/sub-agents.md#choose-a-model).457Cuando la [lista de permitidos `availableModels`](https://code.claude.com/docs/es/model-config#restrict-model-selection) de tu organización bloquea un modelo que el script solicita para un agente, ese agente se ejecuta en un modelo sustituido en su lugar, siguiendo las mismas [reglas de sustitución que los subagentes](https://code.claude.com/docs/es/sub-agents.md#when-an-allowlist-blocks-a-subagent-model).

458 458 

459### Establecer una directriz de tamaño459### Establecer una directriz de tamaño

460 460 

worktrees.md +5 −2

Details

232 232 

233Con la [base](#choose-the-base-branch) predeterminada `"fresh"`, un worktree reabierto se restablece a la rama predeterminada del repositorio en lugar de continuar en su punta anterior cuando se cumplen todas las siguientes condiciones:233Con la [base](#choose-the-base-branch) predeterminada `"fresh"`, un worktree reabierto se restablece a la rama predeterminada del repositorio en lugar de continuar en su punta anterior cuando se cumplen todas las siguientes condiciones:

234 234 

235* No tiene cambios sin confirmar ni archivos sin seguimiento.235* El [sandbox](https://code.claude.com/docs/es/sandboxing.md#filesystem-isolation) no está restringiendo la escritura de archivos en tu sesión, y ni los archivos de configuración `.claude` del worktree ni los del checkout principal habilitan el sandbox.

236* El worktree no tiene cambios sin confirmar ni archivos sin seguimiento.

236* Todavía está en la rama que Claude Code creó para él.237* Todavía está en la rama que Claude Code creó para él.

237* No tiene commits propios, o su solicitud de extracción o solicitud de fusión fue fusionada y su rama remota fue eliminada.238* No tiene commits propios, o su solicitud de extracción o solicitud de fusión fue fusionada y su rama remota fue eliminada.

238 239 


240 241 

241En todos los otros casos, Claude Code reabre el worktree en su punta anterior:242En todos los otros casos, Claude Code reabre el worktree en su punta anterior:

242 243 

243* El worktree falla cualquiera de las condiciones.244* El worktree o la sesión no cumple alguna de las condiciones.

244* Claude Code no puede verificar el estado del worktree.245* Claude Code no puede verificar el estado del worktree.

245* `worktree.baseRef` es `"head"`.246* `worktree.baseRef` es `"head"`.

246* El nombre es una referencia de solicitud de extracción o solicitud de fusión.247* El nombre es una referencia de solicitud de extracción o solicitud de fusión.

247 248 

249Si usas el sandbox con la base `"fresh"`, ejecuta `git fetch origin` y luego pasa un nombre nuevo a `--worktree` para empezar desde la rama predeterminada más reciente.

250 

248### Reemplace la creación de worktree con un hook251### Reemplace la creación de worktree con un hook

249 252 

250Configure un [hook `WorktreeCreate`](https://code.claude.com/docs/es/hooks#worktreecreate) para reemplazar completamente la lógica predeterminada de `git worktree`, incluida la colocación de worktrees en algún lugar que no sea `.claude/worktrees/`. Para un ejemplo completo, consulte [Control de versiones no-git](#non-git-version-control).253Configure un [hook `WorktreeCreate`](https://code.claude.com/docs/es/hooks#worktreecreate) para reemplazar completamente la lógica predeterminada de `git worktree`, incluida la colocación de worktrees en algún lugar que no sea `.claude/worktrees/`. Para un ejemplo completo, consulte [Control de versiones no-git](#non-git-version-control).