SpyBara
Go Premium

Documentation 2026-09-30 23:00 UTC to 2026-10-01 21:02 UTC

66 files changed +4,203 −477. View all changes and history on the product overview
2026
Thu 1 21:59

admin-setup.md +1 −0

Details

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

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

108| [Login enforcement](/docs/es/settings-reference#forceloginmethod) | Restringir el inicio de sesión a un método específico u organización de Anthropic. La restricción de método se aplica en la extensión de VS Code, Agent SDK, `claude setup-token` e `/install-github-app`, y la pantalla de inicio de sesión interactivo del terminal, a la que se accede mediante `/login` u onboarding de primera ejecución, preselecciona el método sin aplicarlo; Claude Code verifica la organización para inicios de sesión de cuenta claude.ai en el terminal, extensión de VS Code y Agent SDK, y no la verifica para inicios de sesión de Claude Console o para inicio de sesión de [gateway](/docs/es/claude-apps-gateway). Antes de v2.1.212, solo los inicios de sesión del terminal aplicaban cualquiera de las claves. Cuando se establece, las sesiones autenticadas por `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` o `apiKeyHelper` se bloquean al inicio; las sesiones del proveedor de nube no se ven afectadas a menos que una de esas credenciales, o una clave API guardada por un inicio de sesión anterior de Claude Console, también esté presente | `forceLoginMethod`, `forceLoginOrgUUID` |108| [Login enforcement](/docs/es/settings-reference#forceloginmethod) | Restringir el inicio de sesión a un método específico u organización de Anthropic. La restricción de método se aplica en la extensión de VS Code, Agent SDK, `claude setup-token` e `/install-github-app`, y la pantalla de inicio de sesión interactivo del terminal, a la que se accede mediante `/login` u onboarding de primera ejecución, preselecciona el método sin aplicarlo; Claude Code verifica la organización para inicios de sesión de cuenta claude.ai en el terminal, extensión de VS Code y Agent SDK, y no la verifica para inicios de sesión de Claude Console o para inicio de sesión de [gateway](/docs/es/claude-apps-gateway). Antes de v2.1.212, solo los inicios de sesión del terminal aplicaban cualquiera de las claves. Cuando se establece, las sesiones autenticadas por `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` o `apiKeyHelper` se bloquean al inicio; las sesiones del proveedor de nube no se ven afectadas a menos que una de esas credenciales, o una clave API guardada por un inicio de sesión anterior de Claude Console, también esté presente | `forceLoginMethod`, `forceLoginOrgUUID` |

109| [Provider restrictions](/docs/es/settings-reference#allowedproviders) | Limitar qué proveedores de API puede usar una máquina. Una sesión en un proveedor que no está en la lista se rechaza al inicio, al iniciar sesión y cuando contacta a continuación con la API. Requiere Claude Code v2.1.285 o posterior | `allowedProviders` |

109| [Disable agent view](/docs/es/agent-view#how-background-sessions-are-hosted) | Desactivar `claude agents`, `--bg`, `/background` y el supervisor bajo demanda | `disableAgentView` |110| [Disable agent view](/docs/es/agent-view#how-background-sessions-are-hosted) | Desactivar `claude agents`, `--bg`, `/background` y el supervisor bajo demanda | `disableAgentView` |

110| [Configure the corporate launcher](/docs/es/corporate-launcher) | Prefijo del [supervisor de agente de fondo](/docs/es/agent-view#how-background-sessions-are-hosted), sus workers y los [otros procesos de fondo cubiertos](/docs/es/corporate-launcher#what-the-launcher-covers) con un lanzador corporativo requerido en lugar de desactivar la vista de agente | `processWrapper` |111| [Configure the corporate launcher](/docs/es/corporate-launcher) | Prefijo del [supervisor de agente de fondo](/docs/es/agent-view#how-background-sessions-are-hosted), sus workers y los [otros procesos de fondo cubiertos](/docs/es/corporate-launcher#what-the-launcher-covers) con un lanzador corporativo requerido en lugar de desactivar la vista de agente | `processWrapper` |

111| [Model restrictions](/docs/es/model-config#restrict-model-selection) | `availableModels` filtra qué modelos aparecen en el selector. Agregar `enforceAvailableModels` también restringe el modelo predeterminado seleccionado automáticamente. Consulte [surface coverage](/docs/es/model-config#surface-coverage) para ver cómo esta configuración llega a la CLI, web e IDE | `availableModels`, `enforceAvailableModels` |112| [Model restrictions](/docs/es/model-config#restrict-model-selection) | `availableModels` filtra qué modelos aparecen en el selector. Agregar `enforceAvailableModels` también restringe el modelo predeterminado seleccionado automáticamente. Consulte [surface coverage](/docs/es/model-config#surface-coverage) para ver cómo esta configuración llega a la CLI, web e IDE | `availableModels`, `enforceAvailableModels` |

Details

418 ```418 ```

419</CodeGroup>419</CodeGroup>

420 420 

421Para confirmar el bloqueo, registre la devolución de llamada bajo `PreToolUse` con un matcher `Write|Edit` y pida al agente que cree un archivo bajo `/etc`: el resultado de la herramienta Write en el flujo de mensajes contiene `Writing to /etc is not allowed`, y no se crea ningún archivo.

422 

421<h3 id="auto-approve-specific-tools">423<h3 id="auto-approve-specific-tools">

422 Aprobar automáticamente herramientas específicas424 Aprobar automáticamente herramientas específicas

423</h3>425</h3>


468 470 

469Cuando se dispara un evento, todos los hooks coincidentes se ejecutan en paralelo. Para decisiones de permiso, el resultado más restrictivo se aplica: un único `deny` bloquea la llamada de herramienta independientemente de lo que devuelvan los otros hooks. Debido a que el orden de finalización es no determinista, escriba cada hook para actuar de forma independiente en lugar de depender de que otro hook se haya ejecutado primero.471Cuando se dispara un evento, todos los hooks coincidentes se ejecutan en paralelo. Para decisiones de permiso, el resultado más restrictivo se aplica: un único `deny` bloquea la llamada de herramienta independientemente de lo que devuelvan los otros hooks. Debido a que el orden de finalización es no determinista, escriba cada hook para actuar de forma independiente en lugar de depender de que otro hook se haya ejecutado primero.

470 472 

471El ejemplo a continuación registra tres verificaciones independientes para cada llamada de herramienta:473El ejemplo a continuación registra tres verificaciones independientes para cada llamada de herramienta. Los nombres de hook en él, como `audit_logger` en Python o `auditLogger` en TypeScript, representan devoluciones de llamada que usted define:

472 474 

473<CodeGroup>475<CodeGroup>

474 ```python Python theme={null}476 ```python Python theme={null}


500 Filtrar con matchers de múltiples herramientas502 Filtrar con matchers de múltiples herramientas

501</h3>503</h3>

502 504 

503Use matchers de múltiples herramientas para compartir una devolución de llamada entre herramientas relacionadas. Este ejemplo registra tres matchers con diferentes alcances:505Use matchers de múltiples herramientas para compartir una devolución de llamada entre herramientas relacionadas. Este ejemplo registra tres matchers con diferentes alcances, y cada hook que nombra representa una devolución de llamada que usted define:

504 506 

505* Una lista exacta separada por tuberías (`Write|Edit|NotebookEdit`) dispara `file_security_hook` solo para herramientas de modificación de archivos.507* Una lista exacta separada por tuberías (`Write|Edit|NotebookEdit`) dispara `file_security_hook` solo para herramientas de modificación de archivos.

506* Una expresión regular (`^mcp__`) dispara `mcp_audit_hook` para cualquier herramienta MCP cuyo nombre comience con `mcp__`.508* Una expresión regular (`^mcp__`) dispara `mcp_audit_hook` para cualquier herramienta MCP cuyo nombre comience con `mcp__`.


585 ```587 ```

586</CodeGroup>588</CodeGroup>

587 589 

590Para confirmar que el hook se dispara, registre la devolución de llamada y pida al agente que delegue una pequeña tarea a un subagente, como listar los archivos en el directorio actual: cuando el subagente termina, la devolución de llamada imprime las líneas `[SUBAGENT] Completed:` con el ID del subagente y la ruta de la transcripción.

591 

588<h3 id="make-http-requests-from-hooks">592<h3 id="make-http-requests-from-hooks">

589 Realizar solicitudes HTTP desde hooks593 Realizar solicitudes HTTP desde hooks

590</h3>594</h3>

Details

121 121 

122Los modos de permisos proporcionan control global sobre cómo Claude utiliza las herramientas. Puede establecer el modo de permisos al llamar a `query()` o cambiarlo dinámicamente durante sesiones de transmisión.122Los modos de permisos proporcionan control global sobre cómo Claude utiliza las herramientas. Puede establecer el modo de permisos al llamar a `query()` o cambiarlo dinámicamente durante sesiones de transmisión.

123 123 

124Si no establece uno, Claude Code elige el modo de permisos inicial según las reglas en [Qué modo inicia una sesión](/docs/es/permission-modes#which-mode-a-session-starts-in):

125 

126* Un `permissions.defaultMode` de los [archivos de configuración](/docs/es/settings#where-settings-live) de la sesión cuando uno se aplica

127* De lo contrario, el valor predeterminado integrado, que puede ser [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode)

128 

129Una sesión que comienza en modo automático descarta reglas de permiso amplias como una entrada `Bash` simple, como [Cómo el modo automático evalúa acciones](/docs/es/permission-modes#how-auto-mode-evaluates-actions) describe. Si su aplicación depende del modo `default` o de tal regla, pase `default` explícitamente.

130 

131Antes de TypeScript Agent SDK v0.3.286, omitir `permissionMode` era lo mismo que pasar `default`.

132 

124<h3 id="available-modes">133<h3 id="available-modes">

125 Modos disponibles134 Modos disponibles

126</h3>135</h3>

agent-sdk/python.md +242 −68

Details

517 async def set_model(self, model: str | None = None) -> None517 async def set_model(self, model: str | None = None) -> None

518 async def rewind_files(self, user_message_id: str) -> None518 async def rewind_files(self, user_message_id: str) -> None

519 async def get_mcp_status(self) -> McpStatusResponse519 async def get_mcp_status(self) -> McpStatusResponse

520 async def get_context_usage(self) -> ContextUsageResponse

520 async def reconnect_mcp_server(self, server_name: str) -> None521 async def reconnect_mcp_server(self, server_name: str) -> None

521 async def toggle_mcp_server(self, server_name: str, enabled: bool) -> None522 async def toggle_mcp_server(self, server_name: str, enabled: bool) -> None

522 async def stop_task(self, task_id: str) -> None523 async def stop_task(self, task_id: str) -> None


540| `set_model(model)` | Cambiar el modelo para la sesión actual. Pase `None` para restablecer al [modelo predeterminado de Claude Code](/docs/es/model-config) |541| `set_model(model)` | Cambiar el modelo para la sesión actual. Pase `None` para restablecer al [modelo predeterminado de Claude Code](/docs/es/model-config) |

541| `rewind_files(user_message_id)` | Restaurar archivos a su estado en el mensaje de usuario especificado. Requiere `enable_file_checkpointing=True`. Ver [File checkpointing](/docs/es/agent-sdk/file-checkpointing) |542| `rewind_files(user_message_id)` | Restaurar archivos a su estado en el mensaje de usuario especificado. Requiere `enable_file_checkpointing=True`. Ver [File checkpointing](/docs/es/agent-sdk/file-checkpointing) |

542| `get_mcp_status()` | Obtener el estado de todos los servidores MCP configurados. Devuelve [`McpStatusResponse`](#mcpstatusresponse) |543| `get_mcp_status()` | Obtener el estado de todos los servidores MCP configurados. Devuelve [`McpStatusResponse`](#mcpstatusresponse) |

544| `get_context_usage()` | Obtener un desglose del uso de la ventana de contexto por categoría, skill y herramienta. Los mismos datos que `/context` muestra en una sesión interactiva. Devuelve [`ContextUsageResponse`](#contextusageresponse). Para calcular el desglose, Claude Code realiza varias solicitudes de API de conteo de tokens que no aparecen en el flujo de mensajes; ver [cómo se manejan estas solicitudes](#contextusageresponse) |

543| `reconnect_mcp_server(server_name)` | Reintentar conectar a un servidor MCP que falló o fue desconectado |545| `reconnect_mcp_server(server_name)` | Reintentar conectar a un servidor MCP que falló o fue desconectado |

544| `toggle_mcp_server(server_name, enabled)` | Habilitar o deshabilitar un servidor MCP a mitad de sesión. Deshabilitar elimina sus herramientas |546| `toggle_mcp_server(server_name, enabled)` | Habilitar o deshabilitar un servidor MCP a mitad de sesión. Deshabilitar elimina sus herramientas |

545| `stop_task(task_id)` | Detener una tarea de fondo en ejecución. Un [`TaskNotificationMessage`](#tasknotificationmessage) con estado `"stopped"` sigue en el flujo de mensajes |547| `stop_task(task_id)` | Detener una tarea de fondo en ejecución. Un [`TaskNotificationMessage`](#tasknotificationmessage) con estado `"stopped"` sigue en el flujo de mensajes |


616 Ejemplo - Entrada de streaming con ClaudeSDKClient618 Ejemplo - Entrada de streaming con ClaudeSDKClient

617</h4>619</h4>

618 620 

621`query()` también acepta un iterable asincrónico de dicts de mensaje de usuario, por lo que puede ensamblar el prompt en el momento del envío o incluir bloques de contenido como imágenes. Claude Code comienza a responder al primer mensaje generado tan pronto como llega, sin esperar a que el iterable termine, y `receive_response()` se detiene en el `ResultMessage` que termina esa respuesta. Coloque todo lo que Claude debe leer antes de responder en un mensaje, como hace este generador, y empareje cada llamada a `query()` con su propio bucle `receive_response()`.

622 

619```python theme={null}623```python theme={null}

620import asyncio624import asyncio

621from claude_agent_sdk import ClaudeSDKClient625from claude_agent_sdk import ClaudeSDKClient

622 626 

623 627 

624async def message_stream():628async def message_stream():

625 """Generate messages dynamically."""629 """Assemble the prompt at send time and yield it as one user message."""

626 yield {630 readings = {"Temperature": "25°C", "Humidity": "60%"}

627 "type": "user",631 data = ", ".join(f"{name}: {value}" for name, value in readings.items())

628 "message": {"role": "user", "content": "Analyze the following data:"},

629 }

630 await asyncio.sleep(0.5)

631 yield {

632 "type": "user",

633 "message": {"role": "user", "content": "Temperature: 25°C, Humidity: 60%"},

634 }

635 await asyncio.sleep(0.5)

636 yield {632 yield {

637 "type": "user",633 "type": "user",

638 "message": {"role": "user", "content": "What patterns do you see?"},634 "message": {

635 "role": "user",

636 "content": f"Analyze the following sensor data and describe any patterns you see: {data}",

637 },

639 }638 }

640 639 

641 640 


1607| `scope` | `str` (opcional) | Alcance de configuración |1606| `scope` | `str` (opcional) | Alcance de configuración |

1608| `tools` | `list` (opcional) | Herramientas proporcionadas por este servidor, cada una con campos `name`, `description`, y `annotations` |1607| `tools` | `list` (opcional) | Herramientas proporcionadas por este servidor, cada una con campos `name`, `description`, y `annotations` |

1609 1608 

1609<h3 id="contextusageresponse">

1610 `ContextUsageResponse`

1611</h3>

1612 

1613Respuesta de [`ClaudeSDKClient.get_context_usage()`](#methods). Este es el mismo payload que Claude Code renderiza para el comando `/context` en una sesión interactiva, por lo que junto con los conteos de tokens lleva campos de visualización como `color` y `gridRows` que Claude Code utiliza para dibujar la cuadrícula de uso de `/context`.

1614 

1615Claude Code construye este payload enviando varias solicitudes a la API de [conteo de tokens](https://platform.claude.com/docs/en/build-with-claude/token-counting). Estas solicitudes no aparecen en el flujo de mensajes, por lo que el seguimiento de costos que lee el flujo no las verá. En la API de Anthropic, el conteo de tokens no se factura.

1616 

1617```python theme={null}

1618class ContextUsageResponse(TypedDict):

1619 categories: list[ContextUsageCategory]

1620 totalTokens: int

1621 maxTokens: int

1622 rawMaxTokens: int

1623 percentage: float

1624 model: str

1625 isAutoCompactEnabled: bool

1626 memoryFiles: list[dict[str, Any]]

1627 mcpTools: list[dict[str, Any]]

1628 agents: list[dict[str, Any]]

1629 gridRows: list[list[dict[str, Any]]]

1630 autoCompactThreshold: NotRequired[int]

1631 deferredBuiltinTools: NotRequired[list[dict[str, Any]]]

1632 systemTools: NotRequired[list[dict[str, Any]]]

1633 systemPromptSections: NotRequired[list[dict[str, Any]]]

1634 slashCommands: NotRequired[dict[str, Any]]

1635 skills: NotRequired[dict[str, Any]] # uso de skills con desglose de frontmatter

1636 messageBreakdown: NotRequired[dict[str, Any]] # tokens de mensaje por tipo

1637 apiUsage: NotRequired[dict[str, Any] | None]

1638```

1639 

1640Cada entrada `ContextUsageCategory` lleva `name`, `tokens`, `color`, y una bandera `isDeferred` opcional. `totalTokens` es el uso de contexto actual de la sesión, y `maxTokens` es la ventana contra la que se mide el uso. Esa ventana es la ventana de contexto del modelo, o la ventana de compactación automática más baja cuando se aplica una, y `rawMaxTokens` lleva el mismo valor que `maxTokens`. `apiUsage` contiene el uso de la respuesta de API más reciente, no un total acumulado para la sesión. Claude Code deja sin establecer las claves opcionales `deferredBuiltinTools`, `systemTools` y `systemPromptSections`, por lo que espere que estén ausentes incluso aunque el tipo las declare.

1641 

1610<h3 id="sdkpluginconfig">1642<h3 id="sdkpluginconfig">

1611 `SdkPluginConfig`1643 `SdkPluginConfig`

1612</h3>1644</h3>


2712 2744 

2713Documentación de esquemas de entrada/salida para todas las herramientas integradas de Claude Code. Aunque el SDK de Python no exporta estos como tipos, representan la estructura de entradas y salidas de herramientas en mensajes.2745Documentación de esquemas de entrada/salida para todas las herramientas integradas de Claude Code. Aunque el SDK de Python no exporta estos como tipos, representan la estructura de entradas y salidas de herramientas en mensajes.

2714 2746 

2747Cada salida mostrada es el valor que usted lee desde [`UserMessage.tool_use_result`](#usermessage) para esa herramienta. Los nombres de clave aparecen exactamente como Claude Code los emite. Una clave anotada `| None` con un comentario "presente cuando" u "opcional" se omite cuando no aplica.

2748 

2715<h3 id="agent">2749<h3 id="agent">

2716 Agent2750 Agent

2717</h3>2751</h3>


2885 2919 

2886**Nombre de herramienta:** `Bash`2920**Nombre de herramienta:** `Bash`

2887 2921 

2888Para lo que establece el límite de primer plano, ver [Límites de tiempo de espera y salida](/docs/es/tools-reference#timeout-and-output-limits). Para el límite de tiempo en segundo plano, ver [Comandos en segundo plano](/docs/es/tools-reference#background-commands).2922Para lo que establece el límite de primer plano, ver [Límites de tiempo de espera y salida](/docs/es/tools-reference#timeout-and-output-limits). Para el límite de tiempo en segundo plano, ver [Límite de tiempo para comandos en segundo plano](/docs/es/tools-reference#time-limit-for-background-commands).

2889 2923 

2890**Entrada:**2924**Entrada:**

2891 2925 


2962 2996 

2963```python theme={null}2997```python theme={null}

2964{2998{

2965 "message": str, # Confirmation message2999 "filePath": str, # The file that was edited

2966 "replacements": int, # Number of replacements made3000 "oldString": str, # The text that was replaced

2967 "file_path": str, # File path that was edited3001 "newString": str, # The text that replaced it

3002 "originalFile": str | None, # File contents before the edit

3003 "structuredPatch": [ # Diff hunks for the change

3004 {

3005 "oldStart": int,

3006 "oldLines": int,

3007 "newStart": int,

3008 "newLines": int,

3009 "lines": list[str],

3010 }

3011 ],

3012 "userModified": bool, # Whether the user changed the proposed edit before accepting it

3013 "replaceAll": bool, # Whether all occurrences were replaced

3014 "gitDiff": { # Optional git diff summary for the file

3015 "filename": str,

3016 "status": "modified" | "added",

3017 "additions": int,

3018 "deletions": int,

3019 "changes": int,

3020 "patch": str,

3021 "repository": str | None, # GitHub owner/repo when available

3022 } | None,

2968}3023}

2969```3024```

2970 3025 


2984}3039}

2985```3040```

2986 3041 

2987**Salida (archivos de texto):**3042La salida toma una de las siguientes formas dependiendo de lo que Claude leyó. Verifique la clave `type` para distinguirlas.

3043 

3044**Salida (tipo: `"text"`):**

3045 

3046```python theme={null}

3047{

3048 "type": "text",

3049 "file": {

3050 "filePath": str, # The file that was read

3051 "content": str, # The returned content

3052 "numLines": int, # Number of lines in the returned content

3053 "startLine": int, # Line number the content starts at

3054 "totalLines": int, # Total number of lines in the file

3055 "truncatedByTokenCap": bool | None, # Present and True when a whole-file read exceeded the token cap and content is the first page

3056 },

3057}

3058```

3059 

3060**Salida (tipo: `"image"`):**

3061 

3062```python theme={null}

3063{

3064 "type": "image",

3065 "file": {

3066 "base64": str, # Base64-encoded image data

3067 "type": "image/jpeg" | "image/png" | "image/gif" | "image/webp", # Image MIME type

3068 "originalSize": int, # Original file size in bytes

3069 "dimensions": { # Optional sizing info for coordinate mapping

3070 "originalWidth": int | None, # Optional; original width in pixels

3071 "originalHeight": int | None, # Optional; original height in pixels

3072 "displayWidth": int | None, # Optional; width after resizing

3073 "displayHeight": int | None, # Optional; height after resizing

3074 } | None,

3075 },

3076}

3077```

3078 

3079**Salida (tipo: `"notebook"`):**

3080 

3081```python theme={null}

3082{

3083 "type": "notebook",

3084 "file": {

3085 "filePath": str, # The notebook that was read

3086 "cells": list, # Notebook cells

3087 },

3088}

3089```

3090 

3091**Salida (tipo: `"pdf"`):**

3092 

3093```python theme={null}

3094{

3095 "type": "pdf",

3096 "file": {

3097 "filePath": str, # The PDF that was read

3098 "base64": str, # Base64-encoded PDF data

3099 "originalSize": int, # File size in bytes

3100 },

3101}

3102```

3103 

3104**Salida (tipo: `"parts"`):**

2988 3105 

2989```python theme={null}3106```python theme={null}

2990{3107{

2991 "content": str, # File contents with line numbers3108 "type": "parts",

2992 "total_lines": int, # Total number of lines in file3109 "file": {

2993 "lines_returned": int, # Lines actually returned3110 "filePath": str, # The PDF that was read

3111 "originalSize": int, # File size in bytes

3112 "count": int, # Number of pages extracted as images

3113 "outputDir": str, # Directory containing the extracted page images

3114 },

3115 "firstPage": int | None, # Optional document page number of the first extracted page

2994}3116}

2995```3117```

2996 3118 

2997**Salida (imágenes):**3119**Salida (tipo: `"file_unchanged"`):**

2998 3120 

2999```python theme={null}3121```python theme={null}

3000{3122{

3001 "image": str, # Base64 encoded image data3123 "type": "file_unchanged", # The file is unchanged since Claude last read it in this session, so the content isn't repeated

3002 "mime_type": str, # Image MIME type3124 "file": {

3003 "file_size": int, # File size in bytes3125 "filePath": str,

3126 },

3127 "source": "seeded" | None, # Present when the earlier copy came from a CLAUDE.md or memory file loaded at startup rather than a Read call

3004}3128}

3005```3129```

3006 3130 


3023 3147 

3024```python theme={null}3148```python theme={null}

3025{3149{

3026 "message": str, # Success message3150 "type": "create" | "update", # Whether the write created a new file or overwrote an existing one

3027 "bytes_written": int, # Number of bytes written3151 "filePath": str, # The file that was written

3028 "file_path": str, # File path that was written3152 "content": str, # The content that was written

3153 "structuredPatch": [ # Diff hunks; empty for a new file, when nothing changed, or when Claude Code skipped the diff

3154 {

3155 "oldStart": int,

3156 "oldLines": int,

3157 "newStart": int,

3158 "newLines": int,

3159 "lines": list[str],

3160 }

3161 ],

3162 "originalFile": str | None, # Previous content; None for a new file or when the previous content was too large to include

3163 "gitDiff": { # Optional git diff summary for the file

3164 "filename": str,

3165 "status": "modified" | "added",

3166 "additions": int,

3167 "deletions": int,

3168 "changes": int,

3169 "patch": str,

3170 "repository": str | None, # GitHub owner/repo when available

3171 } | None,

3172 "userModified": bool | None, # Optional; whether the user edited the proposed content before accepting it

3029}3173}

3030```3174```

3031 3175 


3048 3192 

3049```python theme={null}3193```python theme={null}

3050{3194{

3051 "matches": list[str], # Array of matching file paths3195 "durationMs": int, # Time taken to run the search, in milliseconds

3052 "count": int, # Number of matches found3196 "numFiles": int, # Number of paths returned, after any truncation

3053 "search_path": str, # Search directory used3197 "filenames": list[str], # Matching file paths

3198 "truncated": bool, # Whether the results were truncated at the 100-file limit

3199 "totalMatches": int | None, # Optional total number of matching files before truncation; a lower bound when countIsComplete is False

3200 "countIsComplete": bool | None, # Optional; whether totalMatches is exact

3054}3201}

3055```3202```

3056 3203 

3204`totalMatches` y `countIsComplete` requieren Claude Code v2.1.191 o posterior.

3205 

3057<h3 id="grep">3206<h3 id="grep">

3058 Grep3207 Grep

3059</h3>3208</h3>


3074 "-B": int | None, # Lines to show before each match3223 "-B": int | None, # Lines to show before each match

3075 "-A": int | None, # Lines to show after each match3224 "-A": int | None, # Lines to show after each match

3076 "-C": int | None, # Lines to show before and after3225 "-C": int | None, # Lines to show before and after

3226 "context": int | None, # Lines to show before and after; -C is an alias

3227 "-o": bool | None, # Print only the matched parts of each line

3077 "head_limit": int | None, # Limit output to first N lines/entries3228 "head_limit": int | None, # Limit output to first N lines/entries

3229 "offset": int | None, # Skip first N lines/entries before applying head_limit

3078 "multiline": bool | None, # Enable multiline mode3230 "multiline": bool | None, # Enable multiline mode

3079}3231}

3080```3232```

3081 3233 

3082**Salida (modo content):**3234**Salida:**

3083 3235 

3084```python theme={null}3236```python theme={null}

3085{3237{

3086 "matches": [3238 "mode": "content" | "files_with_matches" | "count" | None, # The output mode that was used

3087 {3239 "numFiles": int, # Number of files in the result; always 0 in content mode

3088 "file": str,3240 "filenames": list[str], # Matching files in files_with_matches mode; empty in the other modes

3089 "line_number": int | None,3241 "content": str | None, # Matching lines in content mode, or per-file counts in count mode

3090 "line": str,3242 "numLines": int | None, # Number of lines in content, present in content mode

3091 "before_context": list[str] | None,3243 "numMatches": int | None, # Total match count, present in count mode

3092 "after_context": list[str] | None,3244 "totalFiles": int | None, # Optional total before head_limit and offset, in files_with_matches mode

3093 }3245 "totalLines": int | None, # Optional total before head_limit and offset, in content mode

3094 ],3246 "appliedLimit": int | None, # Present when head_limit truncated the result

3095 "total_matches": int,3247 "appliedOffset": int | None, # Present when an offset was applied

3096}3248}

3097```3249```

3098 3250 

3099**Salida (modo files\_with\_matches):**3251Grep devuelve esta forma de diccionario en cada modo de salida. Qué claves opcionales están presentes depende de `output_mode`.

3100 3252 

3101```python theme={null}3253`totalFiles` requiere Claude Code v2.1.208 o posterior. `totalLines` requiere Claude Code v2.1.210 o posterior.

3102{

3103 "files": list[str], # Files containing matches

3104 "count": int, # Number of files with matches

3105}

3106```

3107 3254 

3108<h3 id="notebookedit">3255<h3 id="notebookedit">

3109 NotebookEdit3256 NotebookEdit


3127 3274 

3128```python theme={null}3275```python theme={null}

3129{3276{

3130 "message": str, # Success message3277 "new_source": str, # The source written to the cell

3131 "edit_type": "replaced" | "inserted" | "deleted", # Type of edit performed3278 "old_source": str | None, # Previous cell source, present for replace and delete

3132 "cell_id": str | None, # Cell ID that was affected3279 "cell_id": str | None, # ID of the edited cell, when available

3133 "total_cells": int, # Total cells in notebook after edit3280 "cell_type": "code" | "markdown", # The cell type

3281 "language": str, # The notebook's programming language

3282 "edit_mode": str, # The edit mode that was used

3283 "error": str | None, # Error message when the operation failed

3284 "notebook_path": str, # The notebook file

3285 "original_file": str, # Notebook content before the edit

3286 "updated_file": str, # Notebook content after the edit

3134}3287}

3135```3288```

3136 3289 


3228 3381 

3229```python theme={null}3382```python theme={null}

3230{3383{

3231 "message": str, # Success message3384 "oldTodos": [ # The todo list before the update

3232 "stats": {"total": int, "pending": int, "in_progress": int, "completed": int},3385 {

3386 "content": str,

3387 "status": "pending" | "in_progress" | "completed",

3388 "activeForm": str,

3389 }

3390 ],

3391 "newTodos": [ # The todo list after the update

3392 {

3393 "content": str,

3394 "status": "pending" | "in_progress" | "completed",

3395 "activeForm": str,

3396 }

3397 ],

3233}3398}

3234```3399```

3235 3400 


3401 3566 

3402```python theme={null}3567```python theme={null}

3403{3568{

3404 "message": str, # Confirmation message3569 "plan": str | None, # The plan that was presented to the user

3405 "approved": bool | None, # Whether user approved the plan3570 "isAgent": bool, # True when a subagent called the tool

3571 "filePath": str | None, # Present when the plan was saved to a file

3572 "hasTaskTool": bool | None, # Optional; whether the Agent tool is available in the current context

3573 "planWasEdited": bool | None, # Present and True when the user edited the plan before approving

3574 "awaitingLeaderApproval": bool | None, # Present and True when a teammate sent the plan to the team lead for approval

3575 "requestId": str | None, # Optional ID of that approval request

3406}3576}

3407```3577```

3408 3578 


3420}3590}

3421```3591```

3422 3592 

3593El resultado es una lista en lugar de un diccionario, por lo que `tool_use_result` contiene una `list` para esta herramienta.

3594 

3423**Salida:**3595**Salida:**

3424 3596 

3425```python theme={null}3597```python theme={null}

3426{3598[ # One entry per resource

3427 "resources": [

3428 {3599 {

3429 "uri": str,3600 "uri": str, # Resource URI

3430 "name": str,3601 "name": str, # Resource name

3431 "description": str | None,3602 "mimeType": str | None, # Optional MIME type

3432 "mimeType": str | None,3603 "description": str | None, # Optional description

3433 "server": str,3604 "server": str, # Server that provides this resource

3434 }3605 }

3435 ],3606]

3436 "total": int,

3437}

3438```3607```

3439 3608 

3440<h3 id="readmcpresource">3609<h3 id="readmcpresource">


3457```python theme={null}3626```python theme={null}

3458{3627{

3459 "contents": [3628 "contents": [

3460 {"uri": str, "mimeType": str | None, "text": str | None, "blob": str | None}3629 {

3630 "uri": str, # Resource URI

3631 "mimeType": str | None, # Optional MIME type

3632 "text": str | None, # Text content, or a note about the binary content

3633 "blobSavedTo": str | None, # Present when Claude Code saved binary content to disk; path of the saved file

3634 }

3461 ],3635 ],

3462 "server": str,3636 "error": str | None, # Present when the server couldn't read the resource

3463}3637}

3464```3638```

3465 3639 

Details

575| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | Defina el formato de salida para los resultados del agente. Vea [Structured outputs](/docs/es/agent-sdk/structured-outputs) para detalles |575| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | Defina el formato de salida para los resultados del agente. Vea [Structured outputs](/docs/es/agent-sdk/structured-outputs) para detalles |

576| `outputStyle` | `string` | `undefined` | No es un campo `Options`. Establezca `outputStyle` en el objeto [`settings`](/docs/es/settings) en línea o en un archivo de configuración en su lugar. Vea [Activate an output style](/docs/es/agent-sdk/modifying-system-prompts#activate-an-output-style) |576| `outputStyle` | `string` | `undefined` | No es un campo `Options`. Establezca `outputStyle` en el objeto [`settings`](/docs/es/settings) en línea o en un archivo de configuración en su lugar. Vea [Activate an output style](/docs/es/agent-sdk/modifying-system-prompts#activate-an-output-style) |

577| `pathToClaudeCodeExecutable` | `string` | Auto-resuelto desde el binario nativo incluido | Ruta al ejecutable de Claude Code. Solo se necesita si las dependencias opcionales se omitieron durante la instalación o su plataforma no está en el conjunto compatible |577| `pathToClaudeCodeExecutable` | `string` | Auto-resuelto desde el binario nativo incluido | Ruta al ejecutable de Claude Code. Solo se necesita si las dependencias opcionales se omitieron durante la instalación o su plataforma no está en el conjunto compatible |

578| `permissionMode` | [`PermissionMode`](#permissionmode) | `'default'` | Modo de permiso para la sesión |578| `permissionMode` | [`PermissionMode`](#permissionmode) | `undefined` | Modo de permiso para la sesión. Si lo omite, la sesión puede comenzar en modo automático. Vea [Permission modes](/docs/es/agent-sdk/permissions#permission-modes) para cómo Claude Code elige el modo de permiso inicial |

579| `permissionPromptToolName` | `string` | `undefined` | Nombre de herramienta MCP para solicitudes de permiso |579| `permissionPromptToolName` | `string` | `undefined` | Nombre de herramienta MCP para solicitudes de permiso |

580| `permissionPrompts` | `'host' \| 'none'` | `'host'` | Quién responde a los mensajes de permiso: `'host'` los enruta a su devolución de llamada [`canUseTool`](#canusetool) o a la herramienta `permissionPromptToolName`, y `'none'` [niega las llamadas que habrían solicitado](/docs/es/agent-sdk/permissions#how-permissions-are-evaluated). Requiere Claude Code v2.1.259 o posterior |580| `permissionPrompts` | `'host' \| 'none'` | `'host'` | Quién responde a los mensajes de permiso: `'host'` los enruta a su devolución de llamada [`canUseTool`](#canusetool) o a la herramienta `permissionPromptToolName`, y `'none'` [niega las llamadas que habrían solicitado](/docs/es/agent-sdk/permissions#how-permissions-are-evaluated). Requiere Claude Code v2.1.259 o posterior |

581| `persistSession` | `boolean` | `true` | Cuando es `false`, deshabilita la persistencia de sesión en disco. Las sesiones no se pueden reanudar más tarde |581| `persistSession` | `boolean` | `true` | Cuando es `false`, deshabilita la persistencia de sesión en disco. Las sesiones no se pueden reanudar más tarde |


709| `supportedModels()` | Devuelve modelos disponibles con información de visualización |709| `supportedModels()` | Devuelve modelos disponibles con información de visualización |

710| `supportedAgents()` | Devuelve subagentes disponibles como [`AgentInfo`](#agentinfo)`[]` |710| `supportedAgents()` | Devuelve subagentes disponibles como [`AgentInfo`](#agentinfo)`[]` |

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

712| `getContextUsage(opts?)` | Devuelve un [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) desglosando el uso de la ventana de contexto de la sesión por categoría, skill y herramienta. Con el `detail` predeterminado, es el mismo dato que `/context` muestra en una sesión interactiva. La [opción `detail`](#sdkcontrolgetcontextusageresponse) requiere Agent SDK v0.3.257 o posterior |712| `getContextUsage(opts?)` | Devuelve un [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) desglosando el uso de la ventana de contexto de la sesión por categoría, skill y herramienta. Con el `detail` predeterminado, es el mismo dato que `/context` muestra en una sesión interactiva, calculado con solicitudes de API de conteo de tokens que no aparecen en la transmisión de mensajes; vea [cómo se manejan estas solicitudes](#sdkcontrolgetcontextusageresponse). La [opción `detail`](#sdkcontrolgetcontextusageresponse) requiere Agent SDK v0.3.257 o posterior |

713| `readFile(path, options?)` | Lee un archivo del sistema de archivos de la sesión. Claude Code resuelve la ruta contra `cwd`; [What `readFile()` can read](#what-readfile-can-read) enumera los archivos que sirve. Pase `{ maxBytes }` para cambiar el límite de lectura (predeterminado 1 MB, techo 10 MB) y `{ encoding: 'base64' }` para archivos binarios como imágenes. Se resuelve con un [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse), o `null` en denegación de permiso, un archivo faltante, o un error de transporte. Requiere TypeScript SDK v0.2.121 o posterior |713| `readFile(path, options?)` | Lee un archivo del sistema de archivos de la sesión. Claude Code resuelve la ruta contra `cwd`; [What `readFile()` can read](#what-readfile-can-read) enumera los archivos que sirve. Pase `{ maxBytes }` para cambiar el límite de lectura (predeterminado 1 MB, techo 10 MB) y `{ encoding: 'base64' }` para archivos binarios como imágenes. Se resuelve con un [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse), o `null` en denegación de permiso, un archivo faltante, o un error de transporte. Requiere TypeScript SDK v0.2.121 o posterior |

714| `reloadPlugins(options?)` | Recarga plugins desde el disco, por lo que los plugins que instala o edita a mitad de sesión llegan a la sesión en ejecución. Se resuelve con un [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse) que enumera los comandos, subagentes, plugins y estado del servidor MCP de la sesión. Requiere Agent SDK v0.2.85 o posterior. La [opción `holdOnCacheImpact`](#sdkcontrolreloadpluginsresponse) requiere Agent SDK v0.3.268 o posterior |714| `reloadPlugins(options?)` | Recarga plugins desde el disco, por lo que los plugins que instala o edita a mitad de sesión llegan a la sesión en ejecución. Se resuelve con un [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse) que enumera los comandos, subagentes, plugins y estado del servidor MCP de la sesión. Requiere Agent SDK v0.2.85 o posterior. La [opción `holdOnCacheImpact`](#sdkcontrolreloadpluginsresponse) requiere Agent SDK v0.3.268 o posterior |

715| `reloadSkills()` | Recarga skills desde el disco, por lo que los skills que agrega o edita a mitad de sesión se ponen a disposición de la sesión en ejecución. Se resuelve con un [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) que enumera los skills disponibles después de la recarga. Requiere Agent SDK v0.3.163 o posterior |715| `reloadSkills()` | Recarga skills desde el disco, por lo que los skills que agrega o edita a mitad de sesión se ponen a disposición de la sesión en ejecución. Se resuelve con un [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) que enumera los skills disponibles después de la recarga. Requiere Agent SDK v0.3.163 o posterior |

716| `reloadOutputStyles()` | Re-lee [estilos de salida](/docs/es/output-styles) desde el disco, por lo que un archivo de estilo que agrega o edita a mitad de sesión se pone a disposición de la sesión en ejecución. Se resuelve con un [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) que enumera los nombres de estilo disponibles después de la recarga. Requiere Agent SDK v0.3.261 o posterior |716| `reloadOutputStyles()` | Re-lee [estilos de salida](/docs/es/output-styles) desde el disco, por lo que un archivo de estilo que agrega o edita a mitad de sesión se pone a disposición de la sesión en ejecución. Se resuelve con un [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) que enumera los nombres de estilo disponibles después de la recarga. Requiere Agent SDK v0.3.261 o posterior |

717| `accountInfo()` | Devuelve información de cuenta |717| `accountInfo()` | Devuelve información de cuenta |

718| `reconnectMcpServer(serverName)` | Reconecte un servidor MCP por nombre. Si el nombre también coincide con una entrada en un archivo de configuración como `.mcp.json` o `~/.claude.json`, Claude Code reconecta el servidor que configuró a través de [`mcpServers`](#options) o `setMcpServers()`, no la entrada del archivo de configuración. Ese orden de resolución requiere Claude Code v2.1.257 o posterior |718| `reconnectMcpServer(serverName)` | Reconecte un servidor MCP por nombre. Si el nombre también coincide con una entrada en un archivo de configuración como `.mcp.json` o `~/.claude.json`, Claude Code reconecta el servidor que configuró a través de [`mcpServers`](#options) o `setMcpServers()`, no la entrada del archivo de configuración. Ese orden de resolución requiere Claude Code v2.1.257 o posterior |

719| `toggleMcpServer(serverName, enabled)` | Habilite o deshabilite un servidor MCP por nombre, con la misma resolución de nombre que `reconnectMcpServer()`. Deshabilitar desconecta el servidor |719| `toggleMcpServer(serverName, enabled)` | Habilite o deshabilite un servidor MCP por nombre, con la misma resolución de nombre que `reconnectMcpServer()`. Deshabilitar un servidor stdio, SSE o HTTP lo desconecta y elimina sus herramientas; para un servidor que agregó a mitad de sesión con `setMcpServers()`, la eliminación de herramientas requiere Claude Code v2.1.285 o posterior |

720| `setMcpServers(servers)` | Reemplace dinámicamente el conjunto de servidores MCP para esta sesión. Se resuelve con un [`McpSetServersResult`](#mcpsetserversresult) que nombra qué servidores se agregaron y eliminaron, y cualquier error |720| `setMcpServers(servers)` | Reemplace dinámicamente el conjunto de servidores MCP para esta sesión. Se resuelve con un [`McpSetServersResult`](#mcpsetserversresult) que nombra qué servidores se agregaron y eliminaron, y cualquier error |

721| `readMcpResource(serverName, uri)` | *Alpha.* Lee un recurso MCP Apps `ui://` de un servidor MCP conectado para que su aplicación pueda renderizar el widget de una herramienta. Se resuelve con un [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse). Requiere TypeScript Agent SDK v0.3.280 o posterior |721| `readMcpResource(serverName, uri)` | *Alpha.* Lee un recurso MCP Apps `ui://` de un servidor MCP conectado para que su aplicación pueda renderizar el widget de una herramienta. Se resuelve con un [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse). Requiere TypeScript Agent SDK v0.3.280 o posterior |

722| `streamInput(stream)` | Transmita mensajes de entrada a la consulta para conversaciones de múltiples turnos |722| `streamInput(stream)` | Transmita mensajes de entrada a la consulta para conversaciones de múltiples turnos |


909 909 

910Tipo de retorno de [`getContextUsage()`](#query-object). Con el `detail` predeterminado, esta es la misma carga que Claude Code renderiza para el comando `/context` en una sesión interactiva, por lo que junto con los conteos de tokens lleva campos de visualización como `color` y `gridRows` que Claude Code usa para dibujar la cuadrícula de uso de `/context`.910Tipo de retorno de [`getContextUsage()`](#query-object). Con el `detail` predeterminado, esta es la misma carga que Claude Code renderiza para el comando `/context` en una sesión interactiva, por lo que junto con los conteos de tokens lleva campos de visualización como `color` y `gridRows` que Claude Code usa para dibujar la cuadrícula de uso de `/context`.

911 911 

912El argumento `detail` opcional del método elige cómo Claude Code cuenta cada categoría. Con el predeterminado, `'full'`, Claude Code cuenta cada categoría con solicitudes de API de conteo de tokens. Pase `{ detail: 'summary' }` para obtener una respuesta del uso de la última respuesta y estimaciones locales en su lugar. No se realizan solicitudes de conteo de tokens, y los números por categoría son aproximados. El argumento `detail` requiere Agent SDK v0.3.257 o posterior.912El argumento `detail` opcional del método elige cómo Claude Code cuenta cada categoría. El argumento `detail` requiere Agent SDK v0.3.257 o posterior.

913 

914* **`'full'`**: el predeterminado. Claude Code cuenta cada categoría con solicitudes de API de [conteo de tokens](https://platform.claude.com/docs/en/build-with-claude/token-counting). Estas solicitudes no aparecen en la transmisión de mensajes, por lo que el seguimiento de costos que lee la transmisión no las verá. En la API de Anthropic, el conteo de tokens no se factura.

915* **`'summary'`**: pase `{ detail: 'summary' }` para obtener una respuesta del uso de la última respuesta y estimaciones locales en su lugar. No se realizan solicitudes de conteo de tokens, y los números por categoría son aproximados.

913 916 

914Cuando envía `/context` como un mensaje en lugar de llamar al método, Claude Code adjunta una carga [`SDKContextUsage`](#sdkcontextusage) al campo `context_usage` del mensaje del asistente que entrega el resultado. Ese campo requiere Agent SDK v0.3.232 o posterior.917Cuando envía `/context` como un mensaje en lugar de llamar al método, Claude Code adjunta una carga [`SDKContextUsage`](#sdkcontextusage) al campo `context_usage` del mensaje del asistente que entrega el resultado. Ese campo requiere Agent SDK v0.3.232 o posterior.

915 918 


1015* `memoryFiles` enumera cada archivo de memoria cargado con su costo.1018* `memoryFiles` enumera cada archivo de memoria cargado con su costo.

1016* `skills.skillFrontmatter` atribuye los tokens de la lista de skills a cada skill incluido. Los conteos por skill miden la entrada de cada skill tal como Claude Code realmente la envía, que puede ser más corta que el frontmatter completo del skill. Compare `skills.totalSkills` con `skills.includedSkills` para ver si cada skill descubierto hizo en la lista.1019* `skills.skillFrontmatter` atribuye los tokens de la lista de skills a cada skill incluido. Los conteos por skill miden la entrada de cada skill tal como Claude Code realmente la envía, que puede ser más corta que el frontmatter completo del skill. Compare `skills.totalSkills` con `skills.includedSkills` para ver si cada skill descubierto hizo en la lista.

1017 1020 

1018`totalTokens` es el uso de contexto actual de la sesión, y `maxTokens` es la ventana contra la que se mide el uso. Esa ventana es la ventana de contexto del modelo, o la ventana de auto-compactación más baja cuando se aplica una. `rawMaxTokens` lleva el mismo valor que `maxTokens`, y `percentage` es `totalTokens` como un porcentaje redondeado de esa ventana.1021`totalTokens` es el uso de contexto actual de la sesión, y `maxTokens` es la ventana contra la que se mide el uso. Esa ventana es la ventana de contexto del modelo, o la ventana de auto-compactación más baja cuando se aplica una. `rawMaxTokens` lleva el mismo valor que `maxTokens`, y `percentage` es `totalTokens` como un porcentaje redondeado de esa ventana. `apiUsage` contiene el uso de la respuesta de API más reciente, no un total acumulado para la sesión.

1019 1022 

1020Claude Code deja los diagnósticos opcionales `deferredBuiltinTools`, `systemTools`, y `systemPromptSections` sin establecer, así que espere que estén ausentes incluso aunque el tipo los declare.1023Claude Code deja los diagnósticos opcionales `deferredBuiltinTools`, `systemTools`, y `systemPromptSections` sin establecer, así que espere que estén ausentes incluso aunque el tipo los declare.

1021 1024 


1849```typescript theme={null}1852```typescript theme={null}

1850type SDKStartupFailureReason =1853type SDKStartupFailureReason =

1851 | "org_pin_api_key_conflict"1854 | "org_pin_api_key_conflict"

1855 | "provider_not_allowed"

1852 | "org_verify_failed"1856 | "org_verify_failed"

1853 | "org_pin_mismatch"1857 | "org_pin_mismatch"

1854 | "managed_settings_invalid"1858 | "managed_settings_invalid"


1871| Valor | Qué detuvo la sesión |1875| Valor | Qué detuvo la sesión |

1872| :- | :- |1876| :- | :- |

1873| `org_pin_api_key_conflict` | La configuración administrada [requiere un inicio de sesión de puerta de enlace de primera parte o en la nube](/docs/es/authentication#restrict-login-to-your-organization), y se configura una clave de API de Anthropic, token de autenticación o `apiKeyHelper` en su lugar |1877| `org_pin_api_key_conflict` | La configuración administrada [requiere un inicio de sesión de puerta de enlace de primera parte o en la nube](/docs/es/authentication#restrict-login-to-your-organization), y se configura una clave de API de Anthropic, token de autenticación o `apiKeyHelper` en su lugar |

1878| `provider_not_allowed` | La configuración administrada [enumera los proveedores de API que esta máquina puede usar](/docs/es/settings-reference#allowedproviders), y la sesión está configurada para un proveedor que no está en la lista, o para un punto final que la configuración no fija. Requiere Claude Code v2.1.285 o posterior |

1874| `org_verify_failed` | La organización del inicio de sesión no pudo verificarse contra el pin, por ejemplo debido a un fallo de red o un token revocado |1879| `org_verify_failed` | La organización del inicio de sesión no pudo verificarse contra el pin, por ejemplo debido a un fallo de red o un token revocado |

1875| `org_pin_mismatch` | El inicio de sesión pertenece a una organización que el pin no permite |1880| `org_pin_mismatch` | El inicio de sesión pertenece a una organización que el pin no permite |

1876| `managed_settings_invalid` | La configuración de política administrada no pudo leerse, el pin no nombra ninguna organización, o [restricciones de modelo administradas](/docs/es/errors#managed-settings-block-the-default-model) no dejan ningún modelo permitido para la opción Predeterminado |1881| `managed_settings_invalid` | La configuración de política administrada no pudo leerse, el pin no nombra ninguna organización, o [restricciones de modelo administradas](/docs/es/errors#managed-settings-block-the-default-model) no dejan ningún modelo permitido para la opción Predeterminado |


2120 `SDKContextUsage`2125 `SDKContextUsage`

2121</h3>2126</h3>

2122 2127 

2123Forma estructurada del informe `/context`, llevada como `context_usage` en el [`SDKAssistantMessage`](#sdkassistantmessage) que entrega un resultado `/context`. Agent SDK v0.3.232 y posterior exportan el tipo. A diferencia de [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse), lleva solo los datos necesarios para renderizar el desglose de uso, sin campos de visualización como `color` y `gridRows`.2128Forma estructurada del informe `/context`, llevada como `context_usage` en el [`SDKAssistantMessage`](#sdkassistantmessage) que entrega un resultado `/context`. Agent SDK v0.3.232 y posterior exportan el tipo. A diferencia de [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse), lleva solo los datos necesarios para renderizar el desglose de uso, sin campos de visualización como `color` y `gridRows`. Claude Code calcula el informe con solicitudes de API de conteo de tokens que no aparecen en la transmisión de mensajes; consulte [cómo se manejan estas solicitudes](#sdkcontrolgetcontextusageresponse).

2124 2129 

2125```typescript theme={null}2130```typescript theme={null}

2126type SDKContextUsage = {2131type SDKContextUsage = {


3236};3241};

3237```3242```

3238 3243 

3239Ejecuta comandos Bash con tiempo de espera opcional y ejecución en segundo plano. El directorio de trabajo persiste entre comandos, incluyendo comandos ejecutados en turnos posteriores de una sesión de múltiples turnos; el estado del shell como variables de entorno exportadas no. Para los límites sobre qué cambios de directorio se mantienen, vea [Lo que persiste entre comandos](/docs/es/tools-reference#what-persists-between-commands). Para lo que establece el límite de primer plano, vea [Límites de tiempo de espera y salida](/docs/es/tools-reference#timeout-and-output-limits). Para el límite de tiempo en segundo plano, vea [Comandos en segundo plano](/docs/es/tools-reference#background-commands).3244Ejecuta comandos Bash con tiempo de espera opcional y ejecución en segundo plano. El directorio de trabajo persiste entre comandos, incluyendo comandos ejecutados en turnos posteriores de una sesión de múltiples turnos; el estado del shell como variables de entorno exportadas no. Para los límites sobre qué cambios de directorio se mantienen, vea [Lo que persiste entre comandos](/docs/es/tools-reference#what-persists-between-commands). Para lo que establece el límite de primer plano, vea [Límites de tiempo de espera y salida](/docs/es/tools-reference#timeout-and-output-limits). Para el límite de tiempo en segundo plano, vea [Límite de tiempo para comandos en segundo plano](/docs/es/tools-reference#time-limit-for-background-commands).

3240 3245 

3241<h3 id="monitor">3246<h3 id="monitor">

3242 Monitor3247 Monitor


4140 4145 

4141`timedOutAfterMs` es el tiempo de espera en milisegundos, establecido cuando el comando alcanzó su tiempo de espera y se movió al fondo en lugar de comenzar allí explícitamente. `backgroundCwdHint` se establece cuando el comando en segundo plano contenía un builtin de cambio de directorio como `cd`, `pushd`, `popd`, o `chdir`, y nota que el directorio de trabajo de la sesión no cambió. Ambos campos requieren Claude Code v2.1.210 o posterior.4146`timedOutAfterMs` es el tiempo de espera en milisegundos, establecido cuando el comando alcanzó su tiempo de espera y se movió al fondo en lugar de comenzar allí explícitamente. `backgroundCwdHint` se establece cuando el comando en segundo plano contenía un builtin de cambio de directorio como `cd`, `pushd`, `popd`, o `chdir`, y nota que el directorio de trabajo de la sesión no cambió. Ambos campos requieren Claude Code v2.1.210 o posterior.

4142 4147 

4143Cuando un subagente ejecutándose en primer plano posee un comando en segundo plano, el comando [termina cuando ese subagente da su respuesta final](/docs/es/tools-reference#background-commands). Claude Code establece `backgroundEndsWithFinalResponse` a `true` en tales comandos, y omite el campo cuando el comando sobrevive al turno, como los comandos iniciados por la conversación principal o por subagentes de fondo. El campo requiere Claude Code v2.1.227 o posterior.4148Cuando un subagente ejecutándose en primer plano posee un comando en segundo plano, el comando [termina cuando ese subagente da su respuesta final](/docs/es/tools-reference#when-a-background-command-stops). Claude Code establece `backgroundEndsWithFinalResponse` a `true` en tales comandos, y omite el campo cuando el comando sobrevive al turno, como los comandos iniciados por la conversación principal o por subagentes de fondo. El campo requiere Claude Code v2.1.227 o posterior.

4144 4149 

4145Claude Code establece `gitOperation.commit.branch` a la rama nombrada en la línea de resumen del commit de git, y la omite para un commit realizado en un HEAD desacoplado. El campo requiere Agent SDK v0.3.227 o posterior. Claude Code reporta un comando `gh pr reopen` como la acción PR `reopened`, que requiere Agent SDK v0.3.234 o posterior.4150Claude Code establece `gitOperation.commit.branch` a la rama nombrada en la línea de resumen del commit de git, y la omite para un commit realizado en un HEAD desacoplado. El campo requiere Agent SDK v0.3.227 o posterior. Claude Code reporta un comando `gh pr reopen` como la acción PR `reopened`, que requiere Agent SDK v0.3.234 o posterior.

4146 4151 

agent-view.md +2 −20

Details

8 8 

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

10 10 

11<img src="https://mintcdn.com/claude-code/1B48Qz2Z9hac4SLG/images/agent-view-light.png?fit=max&auto=format&n=1B48Qz2Z9hac4SLG&q=85&s=7a186c96ed47d6700d084d77e786be65" className="dark:hidden" alt="Vista de agentes en una terminal: el encabezado muestra Claude Code v2.1.140, el modelo, el directorio de trabajo y un recuento de resumen. Las sesiones se agrupan bajo Necesita entrada, Trabajando y Completado, con una entrada de distribución en la parte inferior y un pie de página de sugerencias de teclado." width="1772" height="780" data-path="images/agent-view-light.png" />11<img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/agent-view-light.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=d6905012bee31f3e6b3920b09c05dd02" className="dark:hidden" alt="Vista de agentes en una terminal. Una línea en la parte superior cuenta las sesiones que esperan entrada, las que están trabajando y las completadas. Cuatro sesiones se agrupan bajo Necesita entrada, Trabajando y Completado. Cada fila muestra el nombre de la sesión, su estado más reciente o pregunta, y una hora. En la parte inferior hay una entrada para describir una nueva tarea y una fila de sugerencias de teclado." width="1872" height="680" data-path="images/agent-view-light.png" />

12 12 

13<img src="https://mintcdn.com/claude-code/1B48Qz2Z9hac4SLG/images/agent-view-dark.png?fit=max&auto=format&n=1B48Qz2Z9hac4SLG&q=85&s=a5bed7434bae368faea3a8f023b52aa2" className="hidden dark:block" alt="Vista de agentes en una terminal: el encabezado muestra Claude Code v2.1.140, el modelo, el directorio de trabajo y un recuento de resumen. Las sesiones se agrupan bajo Necesita entrada, Trabajando y Completado, con una entrada de distribución en la parte inferior y un pie de página de sugerencias de teclado." width="1772" height="780" data-path="images/agent-view-dark.png" />13<img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/agent-view-dark.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=fc3c195bfc57e313ced1f1beb36cee93" className="hidden dark:block" alt="Vista de agentes en una terminal. Una línea en la parte superior cuenta las sesiones que esperan entrada, las que están trabajando y las completadas. Cuatro sesiones se agrupan bajo Necesita entrada, Trabajando y Completado. Cada fila muestra el nombre de la sesión, su estado más reciente o pregunta, y una hora. En la parte inferior hay una entrada para describir una nueva tarea y una fila de sugerencias de teclado." width="1872" height="680" data-path="images/agent-view-dark.png" />

14 14 

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

16 16 


966 966 

967Claude Code nunca reinicia una fila que ejecuta un [comando shell](#run-a-shell-command), desde `Enter` o desde `claude attach`, porque eso ejecutaría el comando nuevamente; el mensaje de la fila y `claude attach` ambos dicen que el comando no se ejecuta nuevamente.967Claude Code nunca reinicia una fila que ejecuta un [comando shell](#run-a-shell-command), desde `Enter` o desde `claude attach`, porque eso ejecutaría el comando nuevamente; el mensaje de la fila y `claude attach` ambos dicen que el comando no se ejecuta nuevamente.

968 968 

969<h4 id="terminal-host-died">

970 Terminal host murió

971</h4>

972 

973En Linux y WSL, el supervisor verifica cada proceso host cada pocos segundos, independientemente de si abre la sesión o no, y marca la sesión como fallida cuando el proceso ha salido pero su conexión al supervisor nunca se cerró.

974 

975* En la vista de agentes, la fila muestra `terminal host process died — press Enter to restart`. Presione `Enter` en ella y Claude Code reinicia la sesión en un proceso host nuevo.

976* Desde el shell, `claude attach <id>` reinicia una sesión ya marcada como fallida. De lo contrario, reporta la causa y sale, diciéndole que ejecute `claude attach <id>` nuevamente.

977 

978<h4 id="session-isn’t-responding">

979 La sesión no está respondiendo

980</h4>

981 

982Cuando el supervisor acepta una apertura pero no llega salida durante aproximadamente diez segundos, Claude Code termina el intento y ofrece un reinicio. Una sesión que simplemente se estancó, por ejemplo durante el sueño de la máquina, no llega a esta oferta: el supervisor la [reinicia al abrir](#read-session-state) por sí solo.

983 

984* En la vista de agentes, el pie de página muestra `Press enter again to restart this session — it isn't responding (its conversation is saved and resumes).` Presione `Enter` en la misma fila nuevamente y Claude Code detiene el proceso que no responde y reinicia la sesión; no detiene nada sin ese segundo press.

985* Desde el shell, `claude attach <id>` reporta la causa y sale, diciéndole que ejecute `claude stop <id>`, luego `claude attach <id>`.

986 

987<h3 id="a-session-fails-before-starting-with-a-possibly-low-memory-note">969<h3 id="a-session-fails-before-starting-with-a-possibly-low-memory-note">

988 Una sesión falla antes de iniciarse con una nota `possibly low memory`970 Una sesión falla antes de iniciarse con una nota `possibly low memory`

989</h3>971</h3>

Details

384 384 

385Los alias de modelo como `opus` no actúan como fijaciones, ni tampoco un ID de modelo que Claude Code no reconozca, como un ARN de perfil de inferencia de aplicación.385Los alias de modelo como `opus` no actúan como fijaciones, ni tampoco un ID de modelo que Claude Code no reconozca, como un ARN de perfil de inferencia de aplicación.

386 386 

387Cuando estas verificaciones encuentran un modelo que su cuenta no puede invocar, Claude Code recuerda el rechazo en esta máquina durante hasta un día, e inicia durante ese tiempo omitiendo el modelo recordado sin consultar a Amazon Bedrock nuevamente. Claude Code verifica un rechazo recordado de un modelo predeterminado actual nuevamente al iniciar una vez que han pasado diez minutos desde la última verificación, por lo que una predeterminada que su administrador vuelve a habilitar regresa. Para desactivar la memoria, establezca [`CLAUDE_CODE_SKIP_MODEL_ACCESS_MEMORY=1`](/docs/es/env-vars).

388 

389<h3 id="when-a-model-is-disabled-mid-session">

390 Cuando un modelo se deshabilita durante la sesión

391</h3>

392 

393Si su cuenta pierde acceso al modelo en el que se ejecuta su sesión, por ejemplo porque un administrador lo deshabilita en su cuenta de Amazon Bedrock, Claude Code cambia la sesión a otro modelo en lugar de fallar en cada solicitud, y muestra `Switched to <fallback> because <model> is not available`. Intenta los mismos modelos que la alternativa de inicio: versiones anteriores del mismo nivel primero y, para una sesión de Opus sin ninguna versión de Opus disponible, el modelo Sonnet predeterminado.

394 

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

396 

397Una [cadena de modelo alternativo](/docs/es/model-config#fallback-model-chains) que configure reemplaza el cambio de nivel: en estos rechazos Claude Code cambia a su alternativa configurada en su lugar. Para que las solicitudes rechazadas fallen en lugar de cambiar, establezca [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](/docs/es/env-vars). Una cadena alternativa que configuró aún cambia en estos rechazos; elimine la cadena también si desea que cada solicitud rechazada falle.

398 

387<h2 id="cross-region-inference-profile-prefixes">399<h2 id="cross-region-inference-profile-prefixes">

388 Prefijos de perfil de inferencia entre regiones400 Prefijos de perfil de inferencia entre regiones

389</h2>401</h2>

artifacts.md +1 −1

Details

398| [Variable de entorno](/docs/es/env-vars) | Establezca `CLAUDE_CODE_DISABLE_ARTIFACT=1` |398| [Variable de entorno](/docs/es/env-vars) | Establezca `CLAUDE_CODE_DISABLE_ARTIFACT=1` |

399| [Regla de permiso](/docs/es/permissions) | Agregue `Artifact` a `permissions.deny` |399| [Regla de permiso](/docs/es/permissions) | Agregue `Artifact` a `permissions.deny` |

400 400 

401Una vez que desactive los artefactos en un archivo [`--settings`](/docs/es/cli-reference#cli-flags) o con `CLAUDE_CODE_DISABLE_ARTIFACT`, o su administrador los desactiva en [configuración administrada](/docs/es/server-managed-settings), ningún archivo de configuración los vuelve a activar. Antes de v2.1.242, un archivo más alto en la [pila de precedencia](/docs/es/settings#settings-precedence) podría volver a activar los artefactos incluso cuando un archivo de precedencia más baja establecía `"enableArtifact": false`.401Una vez que desactive los artefactos en un archivo [`--settings`](/docs/es/cli-reference#cli-flags) o con `CLAUDE_CODE_DISABLE_ARTIFACT`, o su administrador los desactiva en [configuración administrada](/docs/es/server-managed-settings), ningún archivo de configuración los vuelve a activar.

402 402 

403También puede establecer `"enableArtifact": false` en `.claude/settings.json` o `.claude/settings.local.json` de un proyecto para desactivar los artefactos en sesiones en ese proyecto. Un `"enableArtifact": true` en cualquiera de los archivos no los vuelve a activar. Honrar la clave en la configuración del proyecto y local requiere Claude Code v2.1.242 o posterior.403También puede establecer `"enableArtifact": false` en `.claude/settings.json` o `.claude/settings.local.json` de un proyecto para desactivar los artefactos en sesiones en ese proyecto. Un `"enableArtifact": true` en cualquiera de los archivos no los vuelve a activar. Honrar la clave en la configuración del proyecto y local requiere Claude Code v2.1.242 o posterior.

404 404 

Details

194* **Sesiones de proveedor de nube como Amazon Bedrock**: bloqueadas solo mientras una credencial `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` o `apiKeyHelper`, o una clave API guardada por un inicio de sesión anterior de Claude Console, aún esté presente en la máquina. Elimínela y la sesión se inicia. Estas sesiones se autentican contra su proveedor de nube, cuyas políticas de acceso las rigen194* **Sesiones de proveedor de nube como Amazon Bedrock**: bloqueadas solo mientras una credencial `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` o `apiKeyHelper`, o una clave API guardada por un inicio de sesión anterior de Claude Console, aún esté presente en la máquina. Elimínela y la sesión se inicia. Estas sesiones se autentican contra su proveedor de nube, cuyas políticas de acceso las rigen

195* **[Perfil de Anthropic o credenciales de federación](#anthropic-profiles-and-federation-credentials)**: no bloqueadas a menos que una credencial `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` o `apiKeyHelper`, o una clave API guardada por un inicio de sesión anterior de Claude Console, también esté presente en la máquina. Las claves no verifican a qué organización pertenece el perfil195* **[Perfil de Anthropic o credenciales de federación](#anthropic-profiles-and-federation-credentials)**: no bloqueadas a menos que una credencial `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` o `apiKeyHelper`, o una clave API guardada por un inicio de sesión anterior de Claude Console, también esté presente en la máquina. Las claves no verifican a qué organización pertenece el perfil

196 196 

197<h3 id="restrict-which-api-providers-a-machine-may-use">

198 Restringir qué proveedores de API puede usar una máquina

199</h3>

200 

201[`allowedProviders`](/docs/es/settings-reference#allowedproviders) en [configuración administrada](/docs/es/managed-settings) enumera qué servicios puede usar una máquina administrada para acceder a Claude, como la API de Anthropic, Amazon Bedrock o una puerta de enlace LLM. Complementa `forceLoginMethod` y `forceLoginOrgUUID`, que rigen qué cuenta usa una sesión cuando se comunica con Anthropic. Requiere Claude Code v2.1.285 o posterior.

202 

203```json managed-settings.json theme={null}

204{

205 "forceLoginMethod": "claudeai",

206 "forceLoginOrgUUID": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],

207 "allowedProviders": ["anthropic", "bedrock"]

208}

209```

210 

211Con este archivo, un desarrollador que inició sesión en su organización de claude.ai o configurado para Amazon Bedrock se inicia normalmente. Una sesión configurada para cualquier otro proveedor se rechaza al inicio, y una sesión en ejecución que cambia a uno se rechaza en su próxima solicitud. [La configuración administrada no permite este proveedor de API](/docs/es/errors#managed-settings-dont-allow-this-api-provider) muestra cada mensaje.

212 

213* **Permitir una puerta de enlace LLM o proxy**: enumere `"customEndpoint"` y establezca la URL de la puerta de enlace en el bloque `env` administrado de la misma fuente. La [referencia de configuración](/docs/es/settings-reference#allowedproviders) enumera cada valor y dice qué variables de punto final necesitan un pin `env` administrado.

214* **Implementar en máquinas administradas**: coloque la lista en la fuente administrada que lleva el resto de su política. La nota [Scope](/docs/es/settings-reference#allowedproviders) de la entrada dice cómo se combina una lista administrada por servidor con ella.

215* **Solo configuración administrada por servidor**: una lista que establece solo en [configuración administrada por servidor](/docs/es/server-managed-settings) llega solo a sesiones que obtienen la configuración de su organización, así que trátela como una conveniencia para máquinas que no puede alcanzar con administración de dispositivos, no como aplicación. [Disponibilidad de plataforma](/docs/es/server-managed-settings#platform-availability) enumera qué sesiones las obtienen.

216 

197<h2 id="credential-management">217<h2 id="credential-management">

198 Gestión de credenciales218 Gestión de credenciales

199</h2>219</h2>

Details

283 Editar reglas desde `/permissions`283 Editar reglas desde `/permissions`

284</h2>284</h2>

285 285 

286Para ver y editar reglas de clasificador sin abrir un archivo de configuración, ejecute [`/permissions`](/docs/es/permissions#manage-permissions) y seleccione la pestaña **Auto mode**. La pestaña requiere Claude Code v2.1.246 o posterior, y aparece solo cuando [el modo automático está disponible](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) para su sesión.286Para ver y editar reglas de clasificador y entradas de `environment` sin abrir un archivo de configuración, ejecute [`/permissions`](/docs/es/permissions#manage-permissions) y seleccione la pestaña **Auto mode**. La pestaña requiere Claude Code v2.1.246 o posterior, y aparece solo cuando [el modo automático está disponible](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) para su sesión.

287 287 

288La pestaña enumera las entradas `allow`, `soft_deny`, `hard_deny` y `environment` de cada uno de los [ámbitos que lee el clasificador](#where-the-classifier-reads-configuration), y muestra si las reglas integradas están en vigor para cada sección. Claude Code muestra entradas de [configuración administrada](/docs/es/server-managed-settings) o la bandera `--settings` como solo lectura, y guarda cada cambio que realiza en la pestaña en `~/.claude/settings.json`. Desde la pestaña puede:288Claude Code muestra entradas de [configuración administrada](/docs/es/server-managed-settings) o la bandera `--settings` como solo lectura, y guarda cada cambio que realiza en la pestaña en `~/.claude/settings.json`.

289 

290* Agregar, editar o eliminar reglas en las secciones `allow`, `soft_deny` y `hard_deny`. Cuando agrega la primera regla a una sección, Claude Code también inserta `"$defaults"` para que las [reglas integradas](#override-the-block-and-allow-rules) sigan en vigor.

291* Desactivar o reactivar las reglas integradas para `allow`, `soft_deny` o `hard_deny`. Claude Code registra la opción agregando o eliminando `"$defaults"` en su lista para esa sección, por lo que una sección necesita al menos una regla propia antes de poder desactivar sus reglas integradas.

292* Editar las entradas `environment` como un documento en su editor. Si aún no ha configurado ninguna entrada `environment`, Claude Code primero le pregunta si desea reemplazar el entorno integrado, luego abre el editor en el texto integrado completo. Cuando guarda, Claude Code reemplaza su matriz `autoMode.environment` con el documento. Incluya la línea `"$defaults"` para [mantener las entradas integradas](#define-trusted-infrastructure).

293 289 

294<h2 id="route-all-shell-commands-through-the-classifier">290<h2 id="route-all-shell-commands-through-the-classifier">

295 Enrutar todos los comandos de shell a través del clasificador291 Enrutar todos los comandos de shell a través del clasificador

Details

1387 1387 

1388`parentSettingsBehavior: "merge"` mantiene el funcionamiento de la entrega de Claude Desktop de la lista de permitidos de salida a sus sesiones de Claude Code integradas; [Entregar política a sesiones de Claude Desktop](/docs/es/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) explica el mecanismo y dónde debe estar la aceptación.1388`parentSettingsBehavior: "merge"` mantiene el funcionamiento de la entrega de Claude Desktop de la lista de permitidos de salida a sus sesiones de Claude Code integradas; [Entregar política a sesiones de Claude Desktop](/docs/es/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) explica el mecanismo y dónde debe estar la aceptación.

1389 1389 

1390Para evitar que los desarrolladores eludan la puerta de enlace con una variable de proveedor de nube o un `ANTHROPIC_BASE_URL` propio, agregue `"allowedProviders": ["gateway"]` al mismo archivo. Claude Code entonces rechaza cada sesión en la máquina que no esté configurada para una puerta de enlace en la nube, y admite una puerta de enlace solo cuando es la que `forceLoginGatewayUrl` nombra o una cuya URL el bloque `env` del archivo establece como `ANTHROPIC_BASE_URL`. `claude gateway` se niega a ejecutarse en una máquina que establece la lista, así que mantenga la clave fuera del host de la puerta de enlace. Consulte la entrada [`allowedProviders`](/docs/es/settings-reference#allowedproviders) en la referencia de configuración. Requiere Claude Code v2.1.285 o posterior.

1391 

1390Implemente el archivo `managed-settings.json` en cada dispositivo, típicamente a través de su plataforma MDM. La ruta del archivo difiere por plataforma. Consulte [dónde almacena cada mecanismo la política](/docs/es/managed-settings#where-each-mechanism-stores-the-policy).1392Implemente el archivo `managed-settings.json` en cada dispositivo, típicamente a través de su plataforma MDM. La ruta del archivo difiere por plataforma. Consulte [dónde almacena cada mecanismo la política](/docs/es/managed-settings#where-each-mechanism-stores-the-policy).

1391 1393 

1392De forma predeterminada, una política de registro en Windows o una plist de preferencias administradas en macOS reemplaza el archivo `managed-settings.json` en lugar de fusionarse con él, aparte de las [claves de excepción y verificaciones entre fuentes anteriores](#precedence-with-other-managed-sources). Las tres claves en este fragmento siguen la regla de fuente de prioridad más alta, por lo que las flotas que entregan política a través de Política de grupo o perfiles de configuración deben poner las tres en ese mecanismo en su lugar.1394De forma predeterminada, una política de registro en Windows o una plist de preferencias administradas en macOS reemplaza el archivo `managed-settings.json` en lugar de fusionarse con él, aparte de las [claves de excepción y verificaciones entre fuentes anteriores](#precedence-with-other-managed-sources). Las tres claves en este fragmento siguen la regla de fuente de prioridad más alta, por lo que las flotas que entregan política a través de Política de grupo o perfiles de configuración deben poner las tres en ese mecanismo en su lugar.

Details

1561| `paste-cache/` | Contenidos de pastes grandes |1561| `paste-cache/` | Contenidos de pastes grandes |

1562| `image-cache/<session>/` | Imágenes adjuntas guardadas por Claude Code v2.1.274 y anteriores. Las versiones posteriores guardan imágenes pegadas y adjuntas fuera de `~/.claude`, en un directorio `images/` para cada sesión bajo el directorio temporal que [`CLAUDE_CODE_TMPDIR`](/docs/es/env-vars) controla. El barrido elimina los directorios sobrantes de otras sesiones aquí, sin importar su edad. |1562| `image-cache/<session>/` | Imágenes adjuntas guardadas por Claude Code v2.1.274 y anteriores. Las versiones posteriores guardan imágenes pegadas y adjuntas fuera de `~/.claude`, en un directorio `images/` para cada sesión bajo el directorio temporal que [`CLAUDE_CODE_TMPDIR`](/docs/es/env-vars) controla. El barrido elimina los directorios sobrantes de otras sesiones aquí, sin importar su edad. |

1563| `uploads/<session>/` | Archivos que adjunta desde la web o aplicación móvil, y fotos que adjunta desde la aplicación móvil, al enviar mensajes a una sesión de [Remote Control](/docs/es/remote-control). Un adjunto a una [sesión en la nube](/docs/es/claude-code-on-the-web) se guarda en el propio entorno en la nube de esa sesión, no en su máquina. |1563| `uploads/<session>/` | Archivos que adjunta desde la web o aplicación móvil, y fotos que adjunta desde la aplicación móvil, al enviar mensajes a una sesión de [Remote Control](/docs/es/remote-control). Un adjunto a una [sesión en la nube](/docs/es/claude-code-on-the-web) se guarda en el propio entorno en la nube de esa sesión, no en su máquina. |

1564| `dev-mods/<session>/` | [Mods que Claude escribió](/docs/es/plugins/mods/create#ask-claude-for-a-mod) durante la sesión |

1564| `session-env/` | Metadatos de entorno por sesión |1565| `session-env/` | Metadatos de entorno por sesión |

1565| `tasks/` | Listas de tareas escritas por las herramientas de tareas, un directorio por lista |1566| `tasks/` | Listas de tareas escritas por las herramientas de tareas, un directorio por lista |

1566| `shell-snapshots/` | Alias, funciones y opciones de shell capturadas al inicio y aplicadas por la [herramienta Bash](/docs/es/tools-reference#bash-tool-behavior) a cada comando. Se elimina al salir correctamente. El barrido borra cualquiera dejado después de un bloqueo. |1567| `shell-snapshots/` | Alias, funciones y opciones de shell capturadas al inicio y aplicadas por la [herramienta Bash](/docs/es/tools-reference#bash-tool-behavior) a cada comando. Se elimina al salir correctamente. El barrido borra cualquiera dejado después de un bloqueo. |

Details

84| `--dangerously-skip-permissions` | Omite solicitudes de permiso. Equivalente a `--permission-mode bypassPermissions`. Consulta [modos de permisos](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) para ver qué esto hace y no omite. Para sesiones iniciadas con `--bg`, el modo [persiste cuando el supervisor reinicia la sesión](/docs/es/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |84| `--dangerously-skip-permissions` | Omite solicitudes de permiso. Equivalente a `--permission-mode bypassPermissions`. Consulta [modos de permisos](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode) para ver qué esto hace y no omite. Para sesiones iniciadas con `--bg`, el modo [persiste cuando el supervisor reinicia la sesión](/docs/es/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |

85| `--debug` | Habilita el modo de depuración con filtrado de categoría opcional, como `--debug='mcp,startup'` o `--debug='!1p'`. El filtro se vincula solo en la forma `=`; un filtro separado por espacios habilita el modo de depuración sin filtrado | `claude --debug='mcp,startup'` |85| `--debug` | Habilita el modo de depuración con filtrado de categoría opcional, como `--debug='mcp,startup'` o `--debug='!1p'`. El filtro se vincula solo en la forma `=`; un filtro separado por espacios habilita el modo de depuración sin filtrado | `claude --debug='mcp,startup'` |

86| `--debug-file <path>` | Escribe registros de depuración en una ruta de archivo específica. Habilita implícitamente el modo de depuración. Tiene prioridad sobre `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |86| `--debug-file <path>` | Escribe registros de depuración en una ruta de archivo específica. Habilita implícitamente el modo de depuración. Tiene prioridad sobre `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |

87| `--desktop` | Abre la [aplicación Claude Desktop](/docs/es/desktop) en el directorio actual y sale sin iniciar una sesión en la terminal. Añade `--continue`, o `--resume` con un ID de sesión, para [abrir esa sesión en Desktop](/docs/es/desktop#coming-from-the-cli) en su lugar. `--resume` aquí toma solo un ID de sesión, no un nombre o ruta de transcripción. No toma indicador ni otras banderas excepto `--verbose` y las banderas `--debug`, ya que la aplicación inicia la sesión por sí misma. Disponible en macOS y Windows x64 cuando estés conectado con una suscripción de Claude. Requiere Claude Code v2.1.285 o posterior | `claude --desktop` |

87| `--disable-slash-commands` | Deshabilita todos los skills y comandos para esta sesión | `claude --disable-slash-commands` |88| `--disable-slash-commands` | Deshabilita todos los skills y comandos para esta sesión | `claude --disable-slash-commands` |

88| `--disallowedTools`, `--disallowed-tools` | Reglas de negación. Un nombre de herramienta desnudo elimina las herramientas coincidentes del contexto de Claude: `"Edit"` elimina Edit, `"*"` elimina todas las herramientas, y `"mcp__*"` elimina todas las herramientas MCP. Una regla con alcance como `Bash(rm *)` deja la herramienta disponible y niega solo llamadas que coincidan [como se escriben](/docs/es/permissions#bash-rule-limits). Una regla que nombra [`EndConversation`](/docs/es/tools-reference#endconversation-tool-behavior) no puede eliminarla mientras cualquier otra herramienta permanezca | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |89| `--disallowedTools`, `--disallowed-tools` | Reglas de negación. Un nombre de herramienta desnudo elimina las herramientas coincidentes del contexto de Claude: `"Edit"` elimina Edit, `"*"` elimina todas las herramientas, y `"mcp__*"` elimina todas las herramientas MCP. Una regla con alcance como `Bash(rm *)` deja la herramienta disponible y niega solo llamadas que coincidan [como se escriben](/docs/es/permissions#bash-rule-limits). Una regla que nombra [`EndConversation`](/docs/es/tools-reference#endconversation-tool-behavior) no puede eliminarla mientras cualquier otra herramienta permanezca | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |

89| `--effort` | Establece el [nivel de esfuerzo](/docs/es/model-config#adjust-effort-level) para la sesión actual. Opciones: `low`, `medium`, `high`, `xhigh`, `max`, o `ultracode`. Los niveles disponibles dependen del modelo. `ultracode` solicita esfuerzo `xhigh` con [ultracode](/docs/es/workflows#let-claude-decide-with-ultracode) activado, y requiere Claude Code v2.1.203 o posterior. Anula la configuración [`modelSettings`](/docs/es/settings-reference#modelsettings) y [`effortLevel`](/docs/es/settings-reference#effortlevel) para esta sesión y no persiste | `claude --effort high` |90| `--effort` | Establece el [nivel de esfuerzo](/docs/es/model-config#adjust-effort-level) para la sesión actual. Opciones: `low`, `medium`, `high`, `xhigh`, `max`, o `ultracode`. Los niveles disponibles dependen del modelo. `ultracode` solicita esfuerzo `xhigh` con [ultracode](/docs/es/workflows#let-claude-decide-with-ultracode) activado, y requiere Claude Code v2.1.203 o posterior. Anula la configuración [`modelSettings`](/docs/es/settings-reference#modelsettings) y [`effortLevel`](/docs/es/settings-reference#effortlevel) para esta sesión y no persiste | `claude --effort high` |


111| `--no-chrome` | Deshabilita la [integración del navegador Chrome](/docs/es/chrome) para esta sesión | `claude --no-chrome` |112| `--no-chrome` | Deshabilita la [integración del navegador Chrome](/docs/es/chrome) para esta sesión | `claude --no-chrome` |

112| `--no-session-persistence` | Deshabilita la persistencia de sesión para que las sesiones no se guarden en disco y no se puedan reanudar. Solo modo print. La variable de entorno [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/es/env-vars) hace lo mismo en cualquier modo | `claude -p --no-session-persistence "query"` |113| `--no-session-persistence` | Deshabilita la persistencia de sesión para que las sesiones no se guarden en disco y no se puedan reanudar. Solo modo print. La variable de entorno [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/es/env-vars) hace lo mismo en cualquier modo | `claude -p --no-session-persistence "query"` |

113| `--output-format` | Especifica el formato de salida para el modo print (opciones: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |114| `--output-format` | Especifica el formato de salida para el modo print (opciones: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |

114| `--permission-mode` | Comienza en un [modo de permisos](/docs/es/permission-modes) especificado. Acepta `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`, o `manual` como alias para `default`. El alias `manual` selecciona el modo de permisos que la UI etiqueta como Manual y requiere Claude Code v2.1.200 o posterior; `claude --help` lo enumera en lugar de `default`, y ambos valores funcionan. Anula `defaultMode` de archivos de configuración. Sin esta bandera o `--dangerously-skip-permissions`, una nueva sesión comienza en el modo de permisos descrito en [qué modo de permisos comienza una sesión](/docs/es/permission-modes#which-mode-a-session-starts-in). Para `-p`, eso es `default` cuando nada está configurado | `claude --permission-mode plan` |115| `--permission-mode` | Comienza en un [modo de permisos](/docs/es/permission-modes) especificado. Acepta `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`, o `manual` como alias para `default`. El alias `manual` selecciona el modo de permisos que la UI etiqueta como Manual y requiere Claude Code v2.1.200 o posterior; `claude --help` lo enumera en lugar de `default`, y ambos valores funcionan. Anula `defaultMode` de archivos de configuración. Sin esta bandera o `--dangerously-skip-permissions`, una nueva sesión comienza en el modo de permisos descrito en [qué modo de permisos comienza una sesión](/docs/es/permission-modes#which-mode-a-session-starts-in), que también cubre lo que comienza una ejecución `-p` | `claude --permission-mode plan` |

115| `--permission-prompt-tool` | Especifica una herramienta MCP para manejar solicitudes de permiso en modo no interactivo. Claude Code espera a que el servidor MCP de esa herramienta se conecte antes de ejecutar el primer turno, hasta el tiempo de espera de inicio [`MCP_TIMEOUT`](/docs/es/env-vars), 30 segundos por defecto. <br /><br />La herramienta de indicador no puede aprobar una herramienta MCP marcada como [requiriendo interacción del usuario](/docs/es/mcp#require-approval-for-a-specific-tool): Claude Code convierte un resultado `allow` para una en una negación. Esta restricción requiere Claude Code v2.1.199 o posterior | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |116| `--permission-prompt-tool` | Especifica una herramienta MCP para manejar solicitudes de permiso en modo no interactivo. Claude Code espera a que el servidor MCP de esa herramienta se conecte antes de ejecutar el primer turno, hasta el tiempo de espera de inicio [`MCP_TIMEOUT`](/docs/es/env-vars), 30 segundos por defecto. <br /><br />La herramienta de indicador no puede aprobar una herramienta MCP marcada como [requiriendo interacción del usuario](/docs/es/mcp#require-approval-for-a-specific-tool): Claude Code convierte un resultado `allow` para una en una negación. Esta restricción requiere Claude Code v2.1.199 o posterior | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |

116| `--permission-prompts` | Establece quién responde solicitudes de permiso en modo print. Con el `host` predeterminado, Claude Code las envía al host del Agent SDK o a la herramienta `--permission-prompt-tool`. Pasa `none` cuando nadie puede responder, y Claude Code las niega en su lugar. Consulta [Desactivar solicitudes de permiso en ejecuciones desatendidas](/docs/es/headless#turn-off-permission-prompts-in-unattended-runs). Requiere Claude Code v2.1.259 o posterior | `claude -p --permission-prompts none "query"` |117| `--permission-prompts` | Establece quién responde solicitudes de permiso en modo print. Con el `host` predeterminado, Claude Code las envía al host del Agent SDK o a la herramienta `--permission-prompt-tool`. Pasa `none` cuando nadie puede responder, y Claude Code las niega en su lugar. Consulta [Desactivar solicitudes de permiso en ejecuciones desatendidas](/docs/es/headless#turn-off-permission-prompts-in-unattended-runs). Requiere Claude Code v2.1.259 o posterior | `claude -p --permission-prompts none "query"` |

117| `--plugin-dir` | Carga un plugin desde un directorio o archivo `.zip`, o varios desde una [carpeta de plugins](/docs/es/plugins/create#load-a-directory-or-archive-for-one-session), solo para esta sesión. Cada bandera toma una ruta. Repite la bandera para más rutas: `--plugin-dir A --plugin-dir B.zip`. Pasar una carpeta de plugins requiere Claude Code v2.1.265 o posterior | `claude --plugin-dir ./my-plugin` |118| `--plugin-dir` | Carga un plugin desde un directorio o archivo `.zip`, o varios desde una [carpeta de plugins](/docs/es/plugins/create#load-a-directory-or-archive-for-one-session), solo para esta sesión. Cada bandera toma una ruta. Repite la bandera para más rutas: `--plugin-dir A --plugin-dir B.zip`. Pasar una carpeta de plugins requiere Claude Code v2.1.265 o posterior | `claude --plugin-dir ./my-plugin` |

118| `--plugin-url` | Obtén un archivo `.zip` de plugin desde una URL solo para esta sesión. Repite la bandera para múltiples plugins, o pasa URLs separadas por espacios en un valor entrecomillado único | `claude --plugin-url https://example.com/plugin.zip` |119| `--plugin-url` | Obtén un archivo `.zip` de plugin desde una URL solo para esta sesión. Repite la bandera para múltiples plugins, o pasa URLs separadas por espacios en un valor entrecomillado único | `claude --plugin-url https://example.com/plugin.zip` |

119| `--print`, `-p` | Imprime la respuesta sin modo interactivo (consulta la [documentación del Agent SDK](/docs/es/agent-sdk/overview) para detalles de uso programático) | `claude -p "query"` |120| `--print`, `-p` | Imprime la respuesta sin modo interactivo (consulta la [documentación del Agent SDK](/docs/es/agent-sdk/overview) para detalles de uso programático). Para `--resume` en una sesión en segundo plano que aún se está ejecutando, consulta [Reanudar una sesión](/docs/es/sessions#resume-a-running-background-session) | `claude -p "query"` |

120| `--prompt-suggestions` | Emite un mensaje `prompt_suggestion` con un indicador de usuario siguiente predicho después de cada turno que genera uno; conversaciones muy cortas pueden no producir ninguno. Requiere `--print`, `--output-format stream-json`, y `--verbose`. Consulta [Sugerencias de indicador](/docs/es/interactive-mode#prompt-suggestions) | `claude -p --prompt-suggestions --output-format stream-json --verbose "query"` |121| `--prompt-suggestions` | Emite un mensaje `prompt_suggestion` con un indicador de usuario siguiente predicho después de cada turno que genera uno; conversaciones muy cortas pueden no producir ninguno. Requiere `--print`, `--output-format stream-json`, y `--verbose`. Consulta [Sugerencias de indicador](/docs/es/interactive-mode#prompt-suggestions) | `claude -p --prompt-suggestions --output-format stream-json --verbose "query"` |

121| `--ref <branch>` | Con `--environment`, basa el checkout de la nueva sesión en una ref nombrada en lugar de `HEAD` local | `claude -p "Run the smoke test" --environment ccpool_abc123 --ref main` |122| `--ref <branch>` | Con `--environment`, basa el checkout de la nueva sesión en una ref nombrada en lugar de `HEAD` local | `claude -p "Run the smoke test" --environment ccpool_abc123 --ref main` |

122| `--remote` | Alias deprecado para `--cloud`, incluyendo la forma de sesión existente | `claude --remote "Fix the login bug"` |123| `--remote` | Alias deprecado para `--cloud`, incluyendo la forma de sesión existente | `claude --remote "Fix the login bug"` |


124| `--remote-control-session-name-prefix <prefix>` | Prefijo para nombres de sesión de [Remote Control](/docs/es/remote-control) generados automáticamente cuando no se establece un nombre explícito. Por defecto es el nombre de host de tu máquina, produciendo nombres como `myhost-graceful-unicorn`. Establece `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` para el mismo efecto | `claude remote-control --remote-control-session-name-prefix dev-box` |125| `--remote-control-session-name-prefix <prefix>` | Prefijo para nombres de sesión de [Remote Control](/docs/es/remote-control) generados automáticamente cuando no se establece un nombre explícito. Por defecto es el nombre de host de tu máquina, produciendo nombres como `myhost-graceful-unicorn`. Establece `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` para el mismo efecto | `claude remote-control --remote-control-session-name-prefix dev-box` |

125| `--replay-user-messages` | Re-emite mensajes del usuario desde stdin de vuelta en stdout para reconocimiento. Requiere `--input-format stream-json` y `--output-format stream-json` | `claude -p --input-format stream-json --output-format stream-json --verbose --replay-user-messages` |126| `--replay-user-messages` | Re-emite mensajes del usuario desde stdin de vuelta en stdout para reconocimiento. Requiere `--input-format stream-json` y `--output-format stream-json` | `claude -p --input-format stream-json --output-format stream-json --verbose --replay-user-messages` |

126| `--restricted` | Comienza en modo restringido. Úsalo cuando un arnés de evaluación ejecute `claude` en una máquina compartida y Claude Code no debe ejecutar comandos ni leer la configuración de usuario y proyecto de esa máquina. Claude Code elimina las herramientas integradas que ejecutan comandos o código, y WebFetch, a menos que las nombres individualmente en `--tools`, no a través del preset `default`. También confina las herramientas de archivo integradas a los [directorios de trabajo](/docs/es/permissions#working-directories), carga solo [configuración gestionada](/docs/es/managed-settings) y `--settings`, rechaza [`bypassPermissions`](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode), y [rechaza crear sesiones en la nube](/docs/es/errors#cloud-sessions-cannot-be-created-from-a-restricted-session). Requiere Claude Code v2.1.248 o posterior | `claude --restricted -p "query"` |127| `--restricted` | Comienza en modo restringido. Úsalo cuando un arnés de evaluación ejecute `claude` en una máquina compartida y Claude Code no debe ejecutar comandos ni leer la configuración de usuario y proyecto de esa máquina. Claude Code elimina las herramientas integradas que ejecutan comandos o código, y WebFetch, a menos que las nombres individualmente en `--tools`, no a través del preset `default`. También confina las herramientas de archivo integradas a los [directorios de trabajo](/docs/es/permissions#working-directories), carga solo [configuración gestionada](/docs/es/managed-settings) y `--settings`, rechaza [`bypassPermissions`](/docs/es/permission-modes#skip-all-checks-with-bypasspermissions-mode), y [rechaza crear sesiones en la nube](/docs/es/errors#cloud-sessions-cannot-be-created-from-a-restricted-session). Requiere Claude Code v2.1.248 o posterior | `claude --restricted -p "query"` |

127| `--resume`, `-r` | Reanuda una sesión específica por ID o nombre, o muestra un selector interactivo para elegir una sesión. En lugar de un ID, puedes pasar la ruta absoluta al archivo de [transcripción](/docs/es/sessions#where-transcripts-are-stored) `.jsonl` de una sesión. El selector y búsqueda de nombre incluyen sesiones que añadieron este directorio con `/add-dir`. Cuando pasas un ID de sesión, Claude Code busca en el directorio del proyecto actual y sus git worktrees, luego en todos los demás proyectos en esta máquina. Antes de v2.1.223, la búsqueda de ID cubría solo el directorio del proyecto actual y sus git worktrees. [Las sesiones en segundo plano](/docs/es/agent-view) aparecen en el selector marcadas con `bg` | `claude --resume auth-refactor` |128| `--resume`, `-r` | Reanuda una sesión específica por ID o nombre, o muestra un selector interactivo para elegir una sesión. En lugar de un ID, puedes pasar la ruta absoluta al archivo de [transcripción](/docs/es/sessions#where-transcripts-are-stored) `.jsonl` de una sesión. El selector y búsqueda de nombre incluyen sesiones que añadieron este directorio con `/add-dir`. Cuando pasas un ID de sesión, Claude Code busca en el directorio del proyecto actual y sus git worktrees, luego en todos los demás proyectos en esta máquina. Antes de v2.1.223, la búsqueda de ID cubría solo el directorio del proyecto actual y sus git worktrees. [Las sesiones en segundo plano](/docs/es/agent-view) aparecen en el selector marcadas con `bg`. Reanudar una que aún se está ejecutando [abre esa sesión](/docs/es/sessions#resume-a-running-background-session) en esta terminal a través de `claude attach`, y un indicador que pasas en la línea de comandos va a ella como su siguiente turno. Antes de v2.1.285, Claude Code rechazaba e imprimía el comando `claude attach` para ejecutar en su lugar | `claude --resume auth-refactor` |

128| `--safe-mode` | Comienza con todas las personalizaciones deshabilitadas para solucionar problemas de una configuración rota: CLAUDE.md, skills, plugins, hooks, servidores MCP, comandos y agentes personalizados, estilos de salida, flujos de trabajo, temas personalizados, atajos de teclado personalizados, comandos de línea de estado y sugerencia de archivos, servidores LSP, y memoria automática no se cargan. La autenticación, selección de modelo, herramientas integradas y permisos funcionan normalmente, lo que difiere de [`--bare`](/docs/es/headless#start-faster-with-bare-mode). La política de configuración gestionada aún se aplica, incluyendo hooks configurados por política, línea de estado y comandos de sugerencia de archivos; plugins gestionados, skills gestionados, CLAUDE.md gestionado, y servidores MCP configurados por política no. Útil para verificar si una personalización es lo que desencadena [alternancia automática de modelo](/docs/es/model-config#automatic-model-fallback). Establece [`CLAUDE_CODE_SAFE_MODE`](/docs/es/env-vars) | `claude --safe-mode` |129| `--safe-mode` | Comienza con todas las personalizaciones deshabilitadas para solucionar problemas de una configuración rota: CLAUDE.md, skills, plugins, hooks, servidores MCP, comandos y agentes personalizados, estilos de salida, flujos de trabajo, temas personalizados, atajos de teclado personalizados, comandos de línea de estado y sugerencia de archivos, servidores LSP, y memoria automática no se cargan. La autenticación, selección de modelo, herramientas integradas y permisos funcionan normalmente, lo que difiere de [`--bare`](/docs/es/headless#start-faster-with-bare-mode). La política de configuración gestionada aún se aplica, incluyendo hooks configurados por política, línea de estado y comandos de sugerencia de archivos; plugins gestionados, skills gestionados, CLAUDE.md gestionado, y servidores MCP configurados por política no. Útil para verificar si una personalización es lo que desencadena [alternancia automática de modelo](/docs/es/model-config#automatic-model-fallback). Establece [`CLAUDE_CODE_SAFE_MODE`](/docs/es/env-vars) | `claude --safe-mode` |

129| `--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"` |130| `--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"` |

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

Details

439 439 

440* **Comandos que ejecuta Claude**: un entorno en la nube no establece su propio tiempo de espera de comando, por lo que se aplican los valores predeterminados de la herramienta Bash. Claude espera 2 minutos para un comando de primer plano de forma predeterminada y puede solicitar hasta 10 minutos.440* **Comandos que ejecuta Claude**: un entorno en la nube no establece su propio tiempo de espera de comando, por lo que se aplican los valores predeterminados de la herramienta Bash. Claude espera 2 minutos para un comando de primer plano de forma predeterminada y puede solicitar hasta 10 minutos.

441 441 

442 Cuando un comando alcanza su [tiempo de espera](/docs/es/tools-reference#timeout-and-output-limits), Claude Code [lo mueve al fondo](/docs/es/tools-reference#background-commands) en lugar de detenerlo, a menos que el comando comience con `sleep`. Un comando movido de esta manera puede seguir ejecutándose hasta 30 minutos más antes de que Claude Code lo detenga en su [límite de tiempo de fondo](/docs/es/tools-reference#background-commands). Establecer `BASH_DEFAULT_TIMEOUT_MS` por encima de `1800000` milisegundos alarga ese límite así como el valor predeterminado de primer plano.442 Cuando un comando alcanza su [tiempo de espera](/docs/es/tools-reference#timeout-and-output-limits), Claude Code [lo mueve al fondo](/docs/es/tools-reference#foreground-commands-that-move-to-the-background) en lugar de detenerlo, a menos que el comando comience con `sleep`. Un comando movido de esta manera puede seguir ejecutándose hasta 30 minutos más antes de que Claude Code lo detenga en su [límite de tiempo de fondo](/docs/es/tools-reference#time-limit-for-background-commands). Establecer `BASH_DEFAULT_TIMEOUT_MS` por encima de `1800000` milisegundos alarga ese límite así como el valor predeterminado de primer plano.

443* **Hooks SessionStart**: Claude Code cancela un hook `command` después de 600 segundos a menos que establezca [`timeout`](/docs/es/hooks#common-fields), en segundos, en la entrada del hook. Claude Code no aplica el tiempo de espera en un hook que ejecuta con [`async: true`](/docs/es/hooks#run-hooks-in-the-background).443* **Hooks SessionStart**: Claude Code cancela un hook `command` después de 600 segundos a menos que establezca [`timeout`](/docs/es/hooks#common-fields), en segundos, en la entrada del hook. Claude Code no aplica el tiempo de espera en un hook que ejecuta con [`async: true`](/docs/es/hooks#run-hooks-in-the-background).

444* **Script de configuración**: un script que tarda más de aproximadamente cinco minutos no se almacena en caché. [Requisitos de script](#script-requirements) cubre cómo mantenerse por debajo de eso.444* **Script de configuración**: un script que tarda más de aproximadamente cinco minutos no se almacena en caché. [Requisitos de script](#script-requirements) cubre cómo mantenerse por debajo de eso.

445* **Sesiones inactivas**: después de unos minutos sin actividad, la VM de una sesión se pausa con sus archivos guardados, y una VM pausada puede reclamarse más tarde. [Establecer variables de entorno](#set-environment-variables) describe qué recoge una sesión en cada caso, y [Entorno expirado](/docs/es/claude-code-on-the-web#environment-expired) cubre cómo reabrir una sesión cuya VM fue reclamada.445* **Sesiones inactivas**: después de unos minutos sin actividad, la VM de una sesión se pausa con sus archivos guardados, y una VM pausada puede reclamarse más tarde. [Establecer variables de entorno](#set-environment-variables) describe qué recoge una sesión en cada caso, y [Entorno expirado](/docs/es/claude-code-on-the-web#environment-expired) cubre cómo reabrir una sesión cuya VM fue reclamada.

commands.md +1 −1

Details

132| `/remote-control` | Hace que esta sesión esté disponible para [Remote Control](/docs/es/remote-control) desde claude.ai. Ejecutarlo mientras no has iniciado sesión imprime que Remote Control requiere una suscripción de claude.ai y te dice cómo iniciar sesión; antes de v2.1.206 reportaba `Unknown command: /remote-control`. Alias: `/rc` |132| `/remote-control` | Hace que esta sesión esté disponible para [Remote Control](/docs/es/remote-control) desde claude.ai. Ejecutarlo mientras no has iniciado sesión imprime que Remote Control requiere una suscripción de claude.ai y te dice cómo iniciar sesión; antes de v2.1.206 reportaba `Unknown command: /remote-control`. Alias: `/rc` |

133| `/remote-env` | Elige el entorno predeterminado para [sesiones en la nube](/docs/es/cloud-environments#select-an-environment-from-the-cli) que inicias desde la CLI |133| `/remote-env` | Elige el entorno predeterminado para [sesiones en la nube](/docs/es/cloud-environments#select-an-environment-from-the-cli) que inicias desde la CLI |

134| `/rename [name]` | Renombra la sesión actual y muestra el nombre en la barra de prompts. Sin un nombre, genera automáticamente uno desde el historial de conversación. También disponible en modo no interactivo (`-p`); requiere Claude Code v2.1.205 o posterior. Desde cada superficie de renombramiento, incluidos claude.ai y la aplicación de escritorio, Claude Code reemplaza caracteres de control e invisibles en el nuevo nombre con espacios y limita el nombre a 200 caracteres. Si el nombre está vacío una vez que se eliminan los caracteres invisibles, Claude Code lo rechaza y muestra `That name is empty once invisible characters are removed. Usage: /rename <name>`. El reemplazo de caracteres y el límite de longitud requieren Claude Code v2.1.221 o posterior. Si otra sesión activa en esta máquina ya usa un nombre que pasas, Claude Code aplica [una variante del mismo](/docs/es/sessions#name-your-sessions) en su lugar |134| `/rename [name]` | Renombra la sesión actual y muestra el nombre en la barra de prompts. Sin un nombre, genera automáticamente uno desde el historial de conversación. También disponible en modo no interactivo (`-p`); requiere Claude Code v2.1.205 o posterior. Desde cada superficie de renombramiento, incluidos claude.ai y la aplicación de escritorio, Claude Code reemplaza caracteres de control e invisibles en el nuevo nombre con espacios y limita el nombre a 200 caracteres. Si el nombre está vacío una vez que se eliminan los caracteres invisibles, Claude Code lo rechaza y muestra `That name is empty once invisible characters are removed. Usage: /rename <name>`. El reemplazo de caracteres y el límite de longitud requieren Claude Code v2.1.221 o posterior. Si otra sesión activa en esta máquina ya usa un nombre que pasas, Claude Code aplica [una variante del mismo](/docs/es/sessions#name-your-sessions) en su lugar |

135| `/resume [session]` | Reanuda una conversación por ID o nombre, o abre el selector de sesión. [Las sesiones de fondo](/docs/es/agent-view) aparecen en el selector marcadas con `bg`; una que aún se está ejecutando no se puede reanudar aquí, así que adjúntate a ella desde `claude agents` o detenla allí primero. Alias: `/continue` |135| `/resume [session]` | Reanuda una conversación por ID o nombre, o abre el selector de sesión. [Las sesiones de fondo](/docs/es/agent-view) aparecen en el selector marcadas con `bg`. Reanudar una que aún se está ejecutando, desde el selector o por ID o nombre, [abre esa sesión](/docs/es/sessions#resume-a-running-background-session): tu conversación actual se mueve al fondo y esta terminal se adjunta a la que se está ejecutando. Presiona `←` en un prompt vacío para volver a la vista de agente, que también enumera la conversación que dejaste. Antes de v2.1.285, Claude Code se negaba y te decía que abrieras la sesión con `claude attach` o la detuvieras primero. Alias: `/continue` |

136| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [pr#\|branch\|path]` | Alias de [`/code-review`](/docs/es/code-review#review-a-diff-locally): revisa el diff actual, o un número de PR, rama o ruta que pases, como `/review 1234`, y toma los mismos niveles de esfuerzo e indicadores. Sin un nivel dado, la revisión reutiliza el último nivel `low` a `max` que escribiste; consulta [Revisar un diff localmente](/docs/es/code-review#review-a-diff-locally) para las reglas exactas. Para una revisión en la nube profunda, usa [`/code-review ultra`](/docs/es/ultrareview). Antes de v2.1.223, `/review` era un comando separado que ejecutaba una revisión de una sola pasada, de solo lectura de una solicitud de extracción de GitHub por número, enumerando PRs abiertos para elegir cuando se ejecuta sin argumento; de v2.1.186 a v2.1.201, ejecutaba el mismo motor multiagente que `/code-review medium` |136| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [pr#\|branch\|path]` | Alias de [`/code-review`](/docs/es/code-review#review-a-diff-locally): revisa el diff actual, o un número de PR, rama o ruta que pases, como `/review 1234`, y toma los mismos niveles de esfuerzo e indicadores. Sin un nivel dado, la revisión reutiliza el último nivel `low` a `max` que escribiste; consulta [Revisar un diff localmente](/docs/es/code-review#review-a-diff-locally) para las reglas exactas. Para una revisión en la nube profunda, usa [`/code-review ultra`](/docs/es/ultrareview). Antes de v2.1.223, `/review` era un comando separado que ejecutaba una revisión de una sola pasada, de solo lectura de una solicitud de extracción de GitHub por número, enumerando PRs abiertos para elegir cuando se ejecuta sin argumento; de v2.1.186 a v2.1.201, ejecutaba el mismo motor multiagente que `/code-review medium` |

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

138| `/run` | **[Skill](/docs/es/skills#bundled-skills).** Lanza y conduce la aplicación de tu proyecto para ver un cambio funcionando, no solo pasando pruebas. Consulta [Ejecutar y verificar tu aplicación](/docs/es/skills#run-and-verify-your-app) |138| `/run` | **[Skill](/docs/es/skills#bundled-skills).** Lanza y conduce la aplicación de tu proyecto para ver un cambio funcionando, no solo pasando pruebas. Consulta [Ejecutar y verificar tu aplicación](/docs/es/skills#run-and-verify-your-app) |

Details

1634 1634 

1635Si necesita una ventana más grande en lugar de una conversación más pequeña, los modelos Fable, Sonnet 5 y posteriores, Opus 4.6 y posteriores, y Sonnet 4.6 admiten una ventana de contexto de 1 millón de tokens. Vea [Extended context](/docs/es/model-config#extended-context) para disponibilidad por plan y cómo seleccionar una variante de modelo `[1m]`. La compactación funciona de la misma manera en el límite más grande.1635Si necesita una ventana más grande en lugar de una conversación más pequeña, los modelos Fable, Sonnet 5 y posteriores, Opus 4.6 y posteriores, y Sonnet 4.6 admiten una ventana de contexto de 1 millón de tokens. Vea [Extended context](/docs/es/model-config#extended-context) para disponibilidad por plan y cómo seleccionar una variante de modelo `[1m]`. La compactación funciona de la misma manera en el límite más grande.

1636 1636 

1637Sonnet 5.5 y Sonnet 5 se ejecutan con la ventana de contexto de 1M y no tienen variante `[1m]` para seleccionar. Vea [Sonnet 5.5 and Sonnet 5 context window](/docs/es/model-config#sonnet-5-5-and-sonnet-5-context-window) para sus umbrales de compactación automática y la excepción de la puerta de enlace LLM.1637Sonnet 5.5 y Sonnet 5 se ejecutan con la ventana de contexto de 1M y no tienen variante `[1m]` para seleccionar. Vea [Sonnet 5.5 and Sonnet 5 context window](/docs/es/model-config#sonnet-5-5-and-sonnet-5-context-window) para sus umbrales de compactación automática, y [the context window behind a gateway](/docs/es/model-config#context-window-behind-a-gateway) para cómo Claude Code dimensiona la ventana cuando establece `ANTHROPIC_BASE_URL` en una [LLM gateway](/docs/es/llm-gateway).

1638 1638 

1639El punto donde se ejecuta la compactación automática depende de su modelo y configuración. Vea [Default auto-compact thresholds](/docs/es/model-config#default-auto-compact-thresholds) para los límites por modelo, y [Correct the window for a gateway or custom model ID](/docs/es/model-config#correct-the-window-for-a-gateway-or-custom-model-id) si Claude Code asume la ventana incorrecta para su ID de modelo, como un alias de [LLM gateway](/docs/es/llm-gateway).1639El punto donde se ejecuta la compactación automática depende de su modelo y configuración. Vea [Default auto-compact thresholds](/docs/es/model-config#default-auto-compact-thresholds) para los límites por modelo, y [Correct the window for a gateway or custom model ID](/docs/es/model-config#correct-the-window-for-a-gateway-or-custom-model-id) si Claude Code asume la ventana incorrecta para su ID de modelo, como un alias de [LLM gateway](/docs/es/llm-gateway).

1640 1640 

costs.md +1 −1

Details

51 51 

52Los fallos, reconstrucciones esperadas, y partes cálidas o frías de la línea significan lo siguiente:52Los fallos, reconstrucciones esperadas, y partes cálidas o frías de la línea significan lo siguiente:

53 53 

54* **Misses (Fallos)**: solicitudes que reprocesaron contenido que el caché ya contenía, con la hora del último fallo y cuántos tokens esas solicitudes escribieron de nuevo en el caché. Claude Code cuenta una solicitud como un fallo cuando la solicitud reprocesó más del 5% y al menos 2,000 tokens de lo que podría haber leído desde caché. [Las acciones que invalidan el caché](/docs/es/prompt-caching#actions-that-invalidate-the-cache) enumeran las causas habituales. Cuando Claude Code puede identificar una causa probable para el último fallo, la línea también la nombra, por ejemplo `likely cause: tool definitions changed`. El texto de causa probable requiere Claude Code v2.1.260 o posterior.54* **Misses (Fallos)**: solicitudes que reprocesaron contenido que el caché ya contenía, con la hora del último fallo y cuántos tokens esas solicitudes escribieron de nuevo en el caché. [Las acciones que invalidan el caché](/docs/es/prompt-caching#actions-that-invalidate-the-cache) enumeran las causas habituales. Cuando Claude Code puede identificar una causa probable para el último fallo, la línea también la nombra, por ejemplo `likely cause: tool definitions changed`. El texto de causa probable requiere Claude Code v2.1.260 o posterior.

55* **Expected rebuilds (Reconstrucciones esperadas)**: cuando Claude Code ha reescrito la conversación, por [compactación](/docs/es/prompt-caching#compacting-the-conversation) o por borrar resultados de herramientas antiguos del contexto, cuenta el mismo tipo de fallo como una reconstrucción esperada en su lugar. Esta parte aparece solo después de que ha ocurrido al menos una reconstrucción esperada.55* **Expected rebuilds (Reconstrucciones esperadas)**: cuando Claude Code ha reescrito la conversación, por [compactación](/docs/es/prompt-caching#compacting-the-conversation) o por borrar resultados de herramientas antiguos del contexto, cuenta el mismo tipo de fallo como una reconstrucción esperada en su lugar. Esta parte aparece solo después de que ha ocurrido al menos una reconstrucción esperada.

56* **Warm or cold (Cálido o frío)**: si el prefijo en caché aún está dentro de su [vida útil de caché](/docs/es/prompt-caching#cache-lifetime), con el TTL en vigor. Cuando el caché está frío, la línea muestra cuánto tiempo la sesión ha estado inactiva. Cuando ninguna respuesta ha reportado tokens de caché, la línea termina con `no prompt caching reported by the API` en su lugar.56* **Warm or cold (Cálido o frío)**: si el prefijo en caché aún está dentro de su [vida útil de caché](/docs/es/prompt-caching#cache-lifetime), con el TTL en vigor. Cuando el caché está frío, la línea muestra cuánto tiempo la sesión ha estado inactiva. Cuando ninguna respuesta ha reportado tokens de caché, la línea termina con `no prompt caching reported by the API` en su lugar.

57 57 

desktop.md +8 −0

Details

967 967 

968Para mover una sesión de CLI a Desktop, ejecute `/desktop` en la terminal. Claude guarda su sesión y la abre en la aplicación de escritorio, luego sale de la CLI. Este comando está disponible en macOS y Windows x64 cuando inicia sesión con una suscripción de Claude. No está disponible con autenticación de clave API ni en Amazon Bedrock, Google Cloud's Agent Platform o Microsoft Foundry.968Para mover una sesión de CLI a Desktop, ejecute `/desktop` en la terminal. Claude guarda su sesión y la abre en la aplicación de escritorio, luego sale de la CLI. Este comando está disponible en macOS y Windows x64 cuando inicia sesión con una suscripción de Claude. No está disponible con autenticación de clave API ni en Amazon Bedrock, Google Cloud's Agent Platform o Microsoft Foundry.

969 969 

970Desde su shell, [`claude --desktop`](/docs/es/cli-reference#cli-flags) abre Desktop directamente sin iniciar una sesión de terminal. Requiere Claude Code v2.1.285 o posterior y tiene los mismos requisitos de plataforma e inicio de sesión que `/desktop`. Sin otros argumentos, abre Desktop en el directorio actual. Para abrir una sesión de CLI existente en Desktop, agregue `--continue` para la conversación más reciente en este directorio, o `--resume` con el ID de sesión que `/status` muestra:

971 

972```bash theme={null}

973claude --desktop --resume <session-id>

974```

975 

976Claude Code imprime `Opening session <session-id> in Claude Desktop`, la sesión se abre en la aplicación y el comando sale. Un nombre de sesión no funciona en lugar del ID. Claude Code no mueve una sesión que está abierta en otra terminal o aún se ejecuta en segundo plano. Si Claude Desktop no está instalado, el comando imprime un enlace de descarga y sale.

977 

970También puede retomar una sesión de CLI desde dentro de Desktop con `/resume`. El comando está disponible en sesiones locales, no en sesiones SSH, WSL o en la nube.978También puede retomar una sesión de CLI desde dentro de Desktop con `/resume`. El comando está disponible en sesiones locales, no en sesiones SSH, WSL o en la nube.

971 979 

972Para continuar una sesión de terminal en Desktop:980Para continuar una sesión de terminal en Desktop:

desktop-linux.md +12 −0

Details

163 163 

164Si `claude-desktop` sale con este mensaje, lo inició como root. Inicie sesión como usuario normal e inícielo desde allí.164Si `claude-desktop` sale con este mensaje, lo inició como root. Inicie sesión como usuario normal e inícielo desde allí.

165 165 

166<h3 id="your-sign-in-won’t-be-saved-on-this-device">

167 Su inicio de sesión no se guardará en este dispositivo

168</h3>

169 

170Claude Desktop guarda su inicio de sesión en el llavero de su escritorio, como GNOME Keyring o KDE Wallet. Si no puede acceder a un llavero desbloqueado, su inicio de sesión no se guarda y debe iniciar sesión nuevamente cada vez que inicia la aplicación. Elija el caso que coincida con su sistema:

171 

172* **Sin llavero instalado, en un escritorio que no sea KDE Plasma**: si instaló con `--no-install-recommends`, o en una imagen mínima que omite paquetes recomendados, apt no instaló un llavero. Instale GNOME Keyring con `sudo apt install gnome-keyring`.

173* **KDE Plasma con GNOME Keyring también instalado**: KDE Wallet viene con el escritorio Plasma. Los dos llaveros entran en conflicto, y Claude Desktop puede mostrar este aviso aunque KDE Wallet funcione. Elimine el extra con `sudo apt remove gnome-keyring`, luego reinicie su computadora.

174* **Llavero instalado pero bloqueado**: desbloquéelo.

175 

176Después de la corrección, reinicie la aplicación e inicie sesión. Luego cierre y lance nuevamente para confirmar que la aplicación se abre con usted aún conectado.

177 

166<h3 id="cowork-isn’t-available">178<h3 id="cowork-isn’t-available">

167 Cowork no está disponible179 Cowork no está disponible

168</h3>180</h3>

env-vars.md +10 −8

Details

56 </Tab>56 </Tab>

57</Tabs>57</Tabs>

58 58 

59La línea de asignación no imprime nada en caso de éxito, así que confirme que la variable está establecida imprimiéndola en el mismo shell antes de ejecutar `claude`:59La línea de asignación no imprime nada en caso de éxito. Para confirmar que la variable está establecida, imprímala en el mismo shell:

60 60 

61<Tabs>61<Tabs>

62 <Tab title="macOS, Linux, WSL">62 <Tab title="macOS, Linux, WSL">


127Las variables numéricas como tiempos de espera, presupuestos de tokens y conteos de reintentos aceptan notación científica y deletreos con separadores de dígitos además de dígitos simples, excepto donde la fila de una variable indica que solo acepta dígitos simples. Por ejemplo, Claude Code lee `2e3` como 2000 y `64_000` como 64000. Antes de v2.1.211, estos deletreos podían establecer silenciosamente un valor mucho más pequeño, como `1e6` estableciendo un tiempo de espera a 1.127Las variables numéricas como tiempos de espera, presupuestos de tokens y conteos de reintentos aceptan notación científica y deletreos con separadores de dígitos además de dígitos simples, excepto donde la fila de una variable indica que solo acepta dígitos simples. Por ejemplo, Claude Code lee `2e3` como 2000 y `64_000` como 64000. Antes de v2.1.211, estos deletreos podían establecer silenciosamente un valor mucho más pequeño, como `1e6` estableciendo un tiempo de espera a 1.

128 128 

129<Note>129<Note>

130 Para variables que activan o desactivan un comportamiento, establezca `1` o `true` para activarlo y `0` o `false` para desactivarlo, en cualquier mayúscula.130 Para variables que activan o desactivan un comportamiento, establezca `1`, `true`, `yes` u `on` para activarlo y `0`, `false`, `no` u `off` para desactivarlo, en cualquier mayúscula.

131 131 

132 Algunas variables solo leen si las establece en absoluto, por lo que cualquier valor no vacío, incluido `0`, activa el comportamiento, y desactiva el comportamiento desestableciendo la variable o estableciéndola en un valor vacío. Estas variables funcionan de esa manera:132 Algunas variables solo leen si las establece en absoluto, por lo que cualquier valor no vacío, incluido `0`, activa el comportamiento, y desactiva el comportamiento desestableciendo la variable o estableciéndola en un valor vacío. Estas variables funcionan de esa manera:

133 133 


192| `API_FORCE_IDLE_TIMEOUT` | Anule el tiempo de espera de inactividad del cuerpo de 5 minutos que aborta una respuesta del modelo de transmisión cuando no llegan bytes. Establezca en `0` para desactivar el tiempo de espera, por ejemplo cuando una [puerta de enlace](/docs/es/llm-gateway) lenta o un modelo local hace una pausa más larga que 5 minutos entre fragmentos, o `1` para mantenerlo activado para cada proveedor. Cuando no está establecido, el tiempo de espera está activo en proveedores que no sean la API directa de Anthropic, [Claude Platform on AWS](/docs/es/claude-platform-on-aws) y Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` establecido. Los [perros guardianes de transmisión](/docs/es/network-config#streaming-idle-watchdogs) se ejecutan independientemente de él y abortan una pausa larga silenciosa incluso cuando establece `0` aquí |192| `API_FORCE_IDLE_TIMEOUT` | Anule el tiempo de espera de inactividad del cuerpo de 5 minutos que aborta una respuesta del modelo de transmisión cuando no llegan bytes. Establezca en `0` para desactivar el tiempo de espera, por ejemplo cuando una [puerta de enlace](/docs/es/llm-gateway) lenta o un modelo local hace una pausa más larga que 5 minutos entre fragmentos, o `1` para mantenerlo activado para cada proveedor. Cuando no está establecido, el tiempo de espera está activo en proveedores que no sean la API directa de Anthropic, [Claude Platform on AWS](/docs/es/claude-platform-on-aws) y Amazon Bedrock con `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` establecido. Los [perros guardianes de transmisión](/docs/es/network-config#streaming-idle-watchdogs) se ejecutan independientemente de él y abortan una pausa larga silenciosa incluso cuando establece `0` aquí |

193| `API_TIMEOUT_MS` | Tiempo de espera para solicitudes de API en milisegundos (predeterminado: 600000, o 10 minutos; máximo: 2147483647). Aumente esto cuando las solicitudes agoten el tiempo de espera en redes lentas o cuando enrute a través de un proxy. Los valores por encima del máximo desbordan el temporizador subyacente y causan que las solicitudes fallen inmediatamente |193| `API_TIMEOUT_MS` | Tiempo de espera para solicitudes de API en milisegundos (predeterminado: 600000, o 10 minutos; máximo: 2147483647). Aumente esto cuando las solicitudes agoten el tiempo de espera en redes lentas o cuando enrute a través de un proxy. Los valores por encima del máximo desbordan el temporizador subyacente y causan que las solicitudes fallen inmediatamente |

194| `AWS_BEARER_TOKEN_BEDROCK` | Clave de API de Amazon Bedrock para autenticación (consulte [Claves de API de Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |194| `AWS_BEARER_TOKEN_BEDROCK` | Clave de API de Amazon Bedrock para autenticación (consulte [Claves de API de Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |

195| `BASH_DEFAULT_TIMEOUT_MS` | Tiempo de espera predeterminado para un comando de herramienta Bash o PowerShell en primer plano, en milisegundos (predeterminado: 120000, o 2 minutos). Un tiempo de espera predeterminado más largo que 30 minutos también se convierte en el [límite de tiempo predeterminado para comandos de fondo](/docs/es/tools-reference#background-commands). El límite de tiempo de fondo requiere Claude Code v2.1.285 o posterior |195| `BASH_DEFAULT_TIMEOUT_MS` | Tiempo de espera predeterminado para un comando de herramienta Bash o PowerShell en primer plano, en milisegundos (predeterminado: 120000, o 2 minutos). Un tiempo de espera predeterminado más largo que 30 minutos también se convierte en el [límite de tiempo predeterminado para comandos de fondo](/docs/es/tools-reference#time-limit-for-background-commands). El límite de tiempo de fondo requiere Claude Code v2.1.285 o posterior |

196| `BASH_MAX_OUTPUT_LENGTH` | Número máximo de caracteres de salida de bash que Claude Code lee en el resultado de un comando (predeterminado: 30000; máximo: 150000). Si establece la configuración [`bashOutputMaxChars`](/docs/es/settings-reference#bashoutputmaxchars), Claude Code ignora esta variable. Consulte [Límites de salida](/docs/es/tools-reference#output-limits) |196| `BASH_MAX_OUTPUT_LENGTH` | Número máximo de caracteres de salida de bash que Claude Code lee en el resultado de un comando (predeterminado: 30000; máximo: 150000). Si establece la configuración [`bashOutputMaxChars`](/docs/es/settings-reference#bashoutputmaxchars), Claude Code ignora esta variable. Consulte [Límites de salida](/docs/es/tools-reference#output-limits) |

197| `BASH_MAX_TIMEOUT_MS` | Tiempo de espera máximo que el modelo puede establecer para un comando de herramienta Bash o PowerShell en primer plano, en milisegundos (predeterminado: 600000, o 10 minutos). El techo efectivo es el mayor de este y `BASH_DEFAULT_TIMEOUT_MS`. Un techo efectivo más largo que 2 horas también se convierte en el [límite de tiempo máximo para comandos de fondo](/docs/es/tools-reference#background-commands). El límite de tiempo de fondo requiere Claude Code v2.1.285 o posterior |197| `BASH_MAX_TIMEOUT_MS` | Tiempo de espera máximo que el modelo puede establecer para un comando de herramienta Bash o PowerShell en primer plano, en milisegundos (predeterminado: 600000, o 10 minutos). El techo efectivo es el mayor de este y `BASH_DEFAULT_TIMEOUT_MS`. Un techo efectivo más largo que 2 horas también se convierte en el [límite de tiempo máximo para comandos de fondo](/docs/es/tools-reference#time-limit-for-background-commands). El límite de tiempo de fondo requiere Claude Code v2.1.285 o posterior |

198| `BETA_TRACING_ENDPOINT` | Punto de conexión OTLP para [rastreo beta detallado](/docs/es/monitoring-usage#traces-beta): con `ENABLE_BETA_TRACING_DETAILED=1`, los registros y rastreos van allí en lugar de a los exportadores configurados. Establézcalo en su shell, configuración de usuario o configuración administrada. Se ignora en [configuración de proyecto y local](/docs/es/settings-reference#variables-claude-code-ignores-in-env) |198| `BETA_TRACING_ENDPOINT` | Punto de conexión OTLP para [rastreo beta detallado](/docs/es/monitoring-usage#traces-beta): con `ENABLE_BETA_TRACING_DETAILED=1`, los registros y rastreos van allí en lugar de a los exportadores configurados. Establézcalo en su shell, configuración de usuario o configuración administrada. Se ignora en [configuración de proyecto y local](/docs/es/settings-reference#variables-claude-code-ignores-in-env) |

199| `CCR_FORCE_BUNDLE` | Establezca en `1` para forzar [`claude --cloud`](/docs/es/claude-code-on-the-web#send-local-repositories-without-github) a agrupar y cargar su repositorio local en lugar de clonar desde su remoto |199| `CCR_FORCE_BUNDLE` | Establezca en `1` para forzar [`claude --cloud`](/docs/es/claude-code-on-the-web#send-local-repositories-without-github) a agrupar y cargar su repositorio local en lugar de clonar desde su remoto |

200| `CLAUDECODE` | Establezca en `1` en subprocesos que Claude Code genera (herramientas Bash y PowerShell, sesiones tmux, comandos [hook](/docs/es/hooks), comandos [línea de estado](/docs/es/statusline), subprocesos de [servidor MCP](/docs/es/mcp) stdio). Las extensiones IDE también establecen esto en sus terminales integrados. Use para detectar cuándo un script se ejecuta dentro de un subproceso generado por Claude Code. Para verificar si el proceso actual fue generado directamente por una llamada de herramienta o hook, en lugar de dentro de un servidor MCP stdio que Claude Code inició, use `CLAUDE_CODE_CHILD_SESSION` en su lugar |200| `CLAUDECODE` | Establezca en `1` en subprocesos que Claude Code genera (herramientas Bash y PowerShell, sesiones tmux, comandos [hook](/docs/es/hooks), comandos [línea de estado](/docs/es/statusline), subprocesos de [servidor MCP](/docs/es/mcp) stdio). Las extensiones IDE también establecen esto en sus terminales integrados. Use para detectar cuándo un script se ejecuta dentro de un subproceso generado por Claude Code. Para verificar si el proceso actual fue generado directamente por una llamada de herramienta o hook, en lugar de dentro de un servidor MCP stdio que Claude Code inició, use `CLAUDE_CODE_CHILD_SESSION` en su lugar |


263| `CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING` | Establezca en `1` para desabilitar [checkpointing](/docs/es/checkpointing) de archivos. El comando `/rewind` no podrá restaurar cambios de código. Anula la configuración [`fileCheckpointingEnabled`](/docs/es/settings-reference#filecheckpointingenabled) |263| `CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING` | Establezca en `1` para desabilitar [checkpointing](/docs/es/checkpointing) de archivos. El comando `/rewind` no podrá restaurar cambios de código. Anula la configuración [`fileCheckpointingEnabled`](/docs/es/settings-reference#filecheckpointingenabled) |

264| `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` | Establezca en `1` para eliminar instrucciones de flujo de trabajo de commit y PR integradas y la instantánea de estado de git del contexto de Claude. Útil cuando se usan sus propias skills de flujo de trabajo de git. Tiene prioridad sobre la configuración [`includeGitInstructions`](/docs/es/settings-reference#includegitinstructions) cuando se establece |264| `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` | Establezca en `1` para eliminar instrucciones de flujo de trabajo de commit y PR integradas y la instantánea de estado de git del contexto de Claude. Útil cuando se usan sus propias skills de flujo de trabajo de git. Tiene prioridad sobre la configuración [`includeGitInstructions`](/docs/es/settings-reference#includegitinstructions) cuando se establece |

265| `CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP` | Establezca en `1` para evitar la remapeo automático de Opus 4.0 y 4.1 a la versión actual de Opus en la API de Anthropic. Use cuando desee fijar intencionalmente un modelo más antiguo. El remapeo no se ejecuta en Amazon Bedrock, Google Cloud's Agent Platform o Microsoft Foundry |265| `CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP` | Establezca en `1` para evitar la remapeo automático de Opus 4.0 y 4.1 a la versión actual de Opus en la API de Anthropic. Use cuando desee fijar intencionalmente un modelo más antiguo. El remapeo no se ejecuta en Amazon Bedrock, Google Cloud's Agent Platform o Microsoft Foundry |

266| `CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK` | Establezca en `1` para evitar que Claude Code en [Amazon Bedrock](/docs/es/amazon-bedrock#when-a-model-is-disabled-mid-session) y [Google Cloud's Agent Platform](/docs/es/google-vertex-ai#when-a-model-is-disabled-mid-session) cambie a un modelo más antiguo cuando su cuenta pierde acceso al modelo de una sesión a mitad de sesión; la solicitud rechazada falla de inmediato en su lugar. Una [cadena de modelo de alternativa](/docs/es/model-config#fallback-model-chains) que configure aún cambia en ese rechazo, y las [comprobaciones de modelo de inicio](/docs/es/amazon-bedrock#startup-model-checks) aún se retroceden al lanzamiento. Requiere Claude Code v2.1.285 o posterior |

266| `CLAUDE_CODE_DISABLE_MOUSE` | Establezca en `1` para desabilitar el seguimiento del ratón en [renderizado de pantalla completa](/docs/es/fullscreen). El desplazamiento por teclado con `PgUp` y `PgDn` aún funciona. Use esto para mantener el comportamiento de copia al seleccionar nativo de su terminal |267| `CLAUDE_CODE_DISABLE_MOUSE` | Establezca en `1` para desabilitar el seguimiento del ratón en [renderizado de pantalla completa](/docs/es/fullscreen). El desplazamiento por teclado con `PgUp` y `PgDn` aún funciona. Use esto para mantener el comportamiento de copia al seleccionar nativo de su terminal |

267| `CLAUDE_CODE_DISABLE_MOUSE_CLICKS` | Establezca en `1` para desabilitar el manejo de clics, arrastres y desplazamientos en [renderizado de pantalla completa](/docs/es/fullscreen) mientras mantiene el desplazamiento de rueda del ratón. Use esto cuando desee que el desplazamiento de rueda funcione dentro de Claude Code pero no desee que los clics posicionen el cursor, expandan la salida de herramientas o abran enlaces. `CLAUDE_CODE_DISABLE_MOUSE` tiene prioridad cuando ambos están establecidos. Requiere Claude Code v2.1.195 o posterior |268| `CLAUDE_CODE_DISABLE_MOUSE_CLICKS` | Establezca en `1` para desabilitar el manejo de clics, arrastres y desplazamientos en [renderizado de pantalla completa](/docs/es/fullscreen) mientras mantiene el desplazamiento de rueda del ratón. Use esto cuando desee que el desplazamiento de rueda funcione dentro de Claude Code pero no desee que los clics posicionen el cursor, expandan la salida de herramientas o abran enlaces. `CLAUDE_CODE_DISABLE_MOUSE` tiene prioridad cuando ambos están establecidos. Requiere Claude Code v2.1.195 o posterior |

268| `CLAUDE_CODE_DISABLE_MTLS_RELOAD_ON_STALE_CONNECTION` | Establezca en `1` para evitar que Claude Code vuelva a leer el [certificado de cliente mTLS y la clave](/docs/es/network-config#mtls-authentication) cuando una solicitud de API falla con un error a nivel de conexión, como un reinicio de conexión o un error de protocolo de enlace TLS. Con la recarga deshabilitada, Claude Code carga archivos rotados solo cuando aplica configuración a continuación o en el siguiente inicio. Requiere Claude Code v2.1.232 o posterior |269| `CLAUDE_CODE_DISABLE_MTLS_RELOAD_ON_STALE_CONNECTION` | Establezca en `1` para evitar que Claude Code vuelva a leer el [certificado de cliente mTLS y la clave](/docs/es/network-config#mtls-authentication) cuando una solicitud de API falla con un error a nivel de conexión, como un reinicio de conexión o un error de protocolo de enlace TLS. Con la recarga deshabilitada, Claude Code carga archivos rotados solo cuando aplica configuración a continuación o en el siguiente inicio. Requiere Claude Code v2.1.232 o posterior |


285| `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` | Anule la disponibilidad de [resumen de sesión](/docs/es/interactive-mode#session-recap). Establezca en `0` para forzar los resúmenes desactivados independientemente del toggle `/config`. Establezca en `1` para forzar los resúmenes activados cuando [`awaySummaryEnabled`](/docs/es/settings-reference#awaysummaryenabled) es `false`. Tiene prioridad sobre la configuración y el toggle `/config` |286| `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` | Anule la disponibilidad de [resumen de sesión](/docs/es/interactive-mode#session-recap). Establezca en `0` para forzar los resúmenes desactivados independientemente del toggle `/config`. Establezca en `1` para forzar los resúmenes activados cuando [`awaySummaryEnabled`](/docs/es/settings-reference#awaysummaryenabled) es `false`. Tiene prioridad sobre la configuración y el toggle `/config` |

286| `CLAUDE_CODE_ENABLE_BACKGROUND_PLUGIN_REFRESH` | Establezca en `1` para actualizar el estado del plugin en límites de turno en [modo no interactivo](/docs/es/headless) después de que se complete una instalación de fondo. Desactivado de forma predeterminada porque la actualización cambia el prompt del sistema a mitad de sesión, lo que invalida [almacenamiento en caché de prompt](/docs/es/prompt-caching) para ese turno |287| `CLAUDE_CODE_ENABLE_BACKGROUND_PLUGIN_REFRESH` | Establezca en `1` para actualizar el estado del plugin en límites de turno en [modo no interactivo](/docs/es/headless) después de que se complete una instalación de fondo. Desactivado de forma predeterminada porque la actualización cambia el prompt del sistema a mitad de sesión, lo que invalida [almacenamiento en caché de prompt](/docs/es/prompt-caching) para ese turno |

287| `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` | Establezca en `1` para enrutar la encuesta de calidad de sesión "¿Cómo está Claude?" a su propio [recopilador de OpenTelemetry](/docs/es/monitoring-usage) cuando el tráfico no esencial vinculado a Anthropic está bloqueado. Las calificaciones de encuesta se emiten solo como eventos OTEL a su recopilador configurado. Ningún dato de encuesta se envía a Anthropic en este modo. Se aplica cuando `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, `DISABLE_TELEMETRY` o `DO_NOT_TRACK` está establecido, y no tiene efecto de otra manera. `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` y la política de comentarios del producto de la organización tienen prioridad |288| `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` | Establezca en `1` para enrutar la encuesta de calidad de sesión "¿Cómo está Claude?" a su propio [recopilador de OpenTelemetry](/docs/es/monitoring-usage) cuando el tráfico no esencial vinculado a Anthropic está bloqueado. Las calificaciones de encuesta se emiten solo como eventos OTEL a su recopilador configurado. Ningún dato de encuesta se envía a Anthropic en este modo. Se aplica cuando `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, `DISABLE_TELEMETRY` o `DO_NOT_TRACK` está establecido, y no tiene efecto de otra manera. `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` y la política de comentarios del producto de la organización tienen prioridad |

288| `CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING` | Controla si las entradas de llamadas de herramientas se transmiten desde la API mientras Claude las genera. Con esto desactivado, una entrada de herramienta grande como una escritura de archivo larga llega solo después de que Claude termina de generarla, lo que puede parecer que se cuelga. Habilitado de forma predeterminada en la API de Anthropic. En Amazon Bedrock y Google Cloud's Agent Platform, habilitado por modelo donde el contenedor implementado lo admite. Establezca en `0` para optar por no participar. Establezca en `1` para forzar cuando enrute a través de un proxy a través de `ANTHROPIC_BASE_URL`, `ANTHROPIC_VERTEX_BASE_URL` o `ANTHROPIC_BEDROCK_BASE_URL`. Desactivado de forma predeterminada en Microsoft Foundry y conexiones de [puerta de enlace](/docs/es/llm-gateway) |289| `CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING` | Controla si las entradas de llamadas de herramientas se transmiten desde la API mientras Claude las genera. Con esto desactivado, una entrada de herramienta grande como una escritura de archivo larga llega solo después de que Claude termina de generarla, lo que puede parecer que se cuelga. Habilitado de forma predeterminado en la API de Anthropic. En Amazon Bedrock y Google Cloud's Agent Platform, habilitado por modelo donde el contenedor implementado lo admite. Establezca en `0` para optar por no participar. Establezca en `1` para forzar cuando enrute a través de un proxy a través de `ANTHROPIC_BASE_URL`, `ANTHROPIC_VERTEX_BASE_URL` o `ANTHROPIC_BEDROCK_BASE_URL`. Desactivado de forma predeterminada en Microsoft Foundry y conexiones de [puerta de enlace](/docs/es/llm-gateway) |

289| `CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY` | Establezca en `1` para rellenar el selector `/model` desde el punto de conexión `/v1/models` de su puerta de enlace cuando `ANTHROPIC_BASE_URL` apunta a una puerta de enlace compatible con Anthropic como LiteLLM, Kong o un proxy interno. Desactivado de forma predeterminada porque las puertas de enlace respaldadas por una clave de API compartida mostrarían de otra manera a cada usuario cada modelo al que la clave puede acceder. Los modelos descubiertos aún se filtran por una lista de permitidos [`availableModels`](/docs/es/settings-reference#availablemodels) que la sesión recibe; entregue la lista a través de [MDM o un archivo de configuración administrada](/docs/es/managed-settings#delivery-mechanisms), ya que [la entrega administrada por servidor no está disponible en configuraciones de puerta de enlace](/docs/es/server-managed-settings#platform-availability) |290| `CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY` | Establezca en `1` para rellenar el selector `/model` desde el punto de conexión `/v1/models` de su puerta de enlace cuando `ANTHROPIC_BASE_URL` apunta a una puerta de enlace compatible con Anthropic como LiteLLM, Kong o un proxy interno. Desactivado de forma predeterminada porque las puertas de enlace respaldadas por una clave de API compartida mostrarían de otra manera a cada usuario cada modelo al que la clave puede acceder. Los modelos descubiertos aún se filtran por una lista de permitidos [`availableModels`](/docs/es/settings-reference#availablemodels) que la sesión recibe; entregue la lista a través de [MDM o un archivo de configuración administrada](/docs/es/managed-settings#delivery-mechanisms), ya que [la entrega administrada por servidor no está disponible en configuraciones de puerta de enlace](/docs/es/server-managed-settings#platform-availability) |

290| `CLAUDE_CODE_ENABLE_OPUS_4_7_FAST_MODE` | Eliminado en v2.1.142, cuando el predeterminado de [modo rápido](/docs/es/fast-mode) se movió de Opus 4.6 a Opus 4.7 |291| `CLAUDE_CODE_ENABLE_OPUS_4_7_FAST_MODE` | Eliminado en v2.1.142, cuando el predeterminado de [modo rápido](/docs/es/fast-mode) se movió de Opus 4.6 a Opus 4.7 |

291| `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` | Establezca en `false` para desactivar sugerencias de prompt, las predicciones atenuadas que aparecen en su entrada de prompt. Tiene prioridad sobre la configuración [`promptSuggestionEnabled`](/docs/es/settings-reference#promptsuggestionenabled), que es lo que el toggle **Sugerencias de prompt** en `/config` escribe. Claude Code también [pausa sugerencias mientras su cuenta está cerca o en su límite de uso](/docs/es/interactive-mode#when-claude-code-skips-suggestions). Establezca en `true` para mantenerlas activadas hasta que alcance el límite. Requiere Claude Code v2.1.238 o posterior. Consulte [Sugerencias de prompt](/docs/es/interactive-mode#prompt-suggestions) |292| `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` | Establezca en `false` para desactivar sugerencias de prompt, las predicciones atenuadas que aparecen en su entrada de prompt. Tiene prioridad sobre la configuración [`promptSuggestionEnabled`](/docs/es/settings-reference#promptsuggestionenabled), que es lo que el toggle **Sugerencias de prompt** en `/config` escribe. Claude Code también [pausa sugerencias mientras su cuenta está cerca o en su límite de uso](/docs/es/interactive-mode#when-claude-code-skips-suggestions). Establezca en `true` para mantenerlas activadas hasta que alcance el límite. Requiere Claude Code v2.1.238 o posterior. Consulte [Sugerencias de prompt](/docs/es/interactive-mode#prompt-suggestions) |


381| `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK` | Establezca en `1` para omitir la verificación de disponibilidad de [modo rápido](/docs/es/fast-mode#use-fast-mode-behind-proxies-and-llm-gateways) del lado del cliente, para proxies que interceptan la solicitud de la verificación en lugar de rechazarla. La API aún rechaza solicitudes de modo rápido cuando su organización tiene modo rápido deshabilitado |382| `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK` | Establezca en `1` para omitir la verificación de disponibilidad de [modo rápido](/docs/es/fast-mode#use-fast-mode-behind-proxies-and-llm-gateways) del lado del cliente, para proxies que interceptan la solicitud de la verificación en lugar de rechazarla. La API aún rechaza solicitudes de modo rápido cuando su organización tiene modo rápido deshabilitado |

382| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Omita la autenticación de Azure para Microsoft Foundry, para un proxy o puerta de enlace que inyecta su propio encabezado `Authorization`. Claude Code envía solicitudes sin una credencial de Azure y preserva el encabezado `Authorization` que suministra, por ejemplo a través de `ANTHROPIC_CUSTOM_HEADERS`. Se ignora cuando `ANTHROPIC_FOUNDRY_API_KEY` o `ANTHROPIC_FOUNDRY_AUTH_TOKEN` está establecido. Antes de v2.1.203, esta variable dejó al cliente de Microsoft Foundry incapaz de enviar solicitudes a menos que también se estableciera una clave de API |383| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Omita la autenticación de Azure para Microsoft Foundry, para un proxy o puerta de enlace que inyecta su propio encabezado `Authorization`. Claude Code envía solicitudes sin una credencial de Azure y preserva el encabezado `Authorization` que suministra, por ejemplo a través de `ANTHROPIC_CUSTOM_HEADERS`. Se ignora cuando `ANTHROPIC_FOUNDRY_API_KEY` o `ANTHROPIC_FOUNDRY_AUTH_TOKEN` está establecido. Antes de v2.1.203, esta variable dejó al cliente de Microsoft Foundry incapaz de enviar solicitudes a menos que también se estableciera una clave de API |

383| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Omita la autenticación de AWS para Amazon Bedrock Mantle (por ejemplo, cuando se usa una puerta de enlace LLM) |384| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Omita la autenticación de AWS para Amazon Bedrock Mantle (por ejemplo, cuando se usa una puerta de enlace LLM) |

385| `CLAUDE_CODE_SKIP_MODEL_ACCESS_MEMORY` | Las [comprobaciones de modelo de inicio](/docs/es/amazon-bedrock#startup-model-checks) en [Amazon Bedrock](/docs/es/amazon-bedrock) y [Google Cloud's Agent Platform](/docs/es/google-vertex-ai) recuerdan en esta máquina qué modelos encontraron que su cuenta no puede invocar, durante hasta un día. Establezca en `1` para desactivar esa memoria. Requiere Claude Code v2.1.285 o posterior |

384| `CLAUDE_CODE_SKIP_PROMPT_HISTORY` | Establezca en `1` para omitir escribir historial de prompts y transcripciones de sesión en disco. Las sesiones iniciadas con esta variable establecida no aparecen en `--resume`, `--continue` o historial de flecha hacia arriba. Útil para sesiones de scripts efímeros |386| `CLAUDE_CODE_SKIP_PROMPT_HISTORY` | Establezca en `1` para omitir escribir historial de prompts y transcripciones de sesión en disco. Las sesiones iniciadas con esta variable establecida no aparecen en `--resume`, `--continue` o historial de flecha hacia arriba. Útil para sesiones de scripts efímeros |

385| `CLAUDE_CODE_SKIP_VERTEX_AUTH` | Omita la autenticación de Google para Google Cloud's Agent Platform (por ejemplo, cuando se usa una puerta de enlace LLM) |387| `CLAUDE_CODE_SKIP_VERTEX_AUTH` | Omita la autenticación de Google para Google Cloud's Agent Platform (por ejemplo, cuando se usa una puerta de enlace LLM) |

386| `CLAUDE_CODE_STARTUP_FAILURE_RESULTS` | Establezca en `1` para que una sesión iniciada con `--output-format stream-json` escriba un [mensaje de resultado que nombre por qué Claude Code se negó a iniciar](/docs/es/agent-sdk/typescript#startup_failure_reason) para fallos de inicio que de otra manera terminan solo con stderr. Requiere Claude Code v2.1.274 o posterior |388| `CLAUDE_CODE_STARTUP_FAILURE_RESULTS` | Establezca en `1` para que una sesión iniciada con `--output-format stream-json` escriba un [mensaje de resultado que nombre por qué Claude Code se negó a iniciar](/docs/es/agent-sdk/typescript#startup_failure_reason) para fallos de inicio que de otra manera terminan solo con stderr. Requiere Claude Code v2.1.274 o posterior |


454| `ENABLE_CLAUDEAI_MCP_SERVERS` | Establezca en `false` para evitar que Claude Code obtenga [servidores MCP de claude.ai](/docs/es/mcp#use-mcp-servers-from-claude-ai). Habilitado de forma predeterminada para usuarios con sesión iniciada. Para desabilitar por proyecto u organización, establezca [`disableClaudeAiConnectors`](/docs/es/settings-reference#disableclaudeaiconnectors) en configuración en su lugar |456| `ENABLE_CLAUDEAI_MCP_SERVERS` | Establezca en `false` para evitar que Claude Code obtenga [servidores MCP de claude.ai](/docs/es/mcp#use-mcp-servers-from-claude-ai). Habilitado de forma predeterminada para usuarios con sesión iniciada. Para desabilitar por proyecto u organización, establezca [`disableClaudeAiConnectors`](/docs/es/settings-reference#disableclaudeaiconnectors) en configuración en su lugar |

455| `ENABLE_PROMPT_CACHING_1H` | Establezca en `1` para solicitar un [TTL de caché de prompt](/docs/es/prompt-caching#cache-lifetime) de 1 hora en lugar del predeterminado de 5 minutos. Destinado a usuarios de clave de API, [Amazon Bedrock](/docs/es/amazon-bedrock), [Google Cloud's Agent Platform](/docs/es/google-vertex-ai), [Microsoft Foundry](/docs/es/microsoft-foundry) y [Claude Platform on AWS](/docs/es/claude-platform-on-aws). Los usuarios de suscripción dentro del uso incluido reciben el TTL de 1 hora automáticamente en la [conversación principal](/docs/es/prompt-caching#which-ttl-each-request-gets). Los usuarios de suscripción que extraen [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) pueden establecerlo para mantener el TTL de 1 hora. Las escrituras de caché de 1 hora se facturan a una tasa más alta. Para elegir el TTL por depósito de solicitud en su lugar, use `CLAUDE_CODE_PROMPT_CACHE_TTL` y `CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL`, que tienen prioridad sobre esta variable |457| `ENABLE_PROMPT_CACHING_1H` | Establezca en `1` para solicitar un [TTL de caché de prompt](/docs/es/prompt-caching#cache-lifetime) de 1 hora en lugar del predeterminado de 5 minutos. Destinado a usuarios de clave de API, [Amazon Bedrock](/docs/es/amazon-bedrock), [Google Cloud's Agent Platform](/docs/es/google-vertex-ai), [Microsoft Foundry](/docs/es/microsoft-foundry) y [Claude Platform on AWS](/docs/es/claude-platform-on-aws). Los usuarios de suscripción dentro del uso incluido reciben el TTL de 1 hora automáticamente en la [conversación principal](/docs/es/prompt-caching#which-ttl-each-request-gets). Los usuarios de suscripción que extraen [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) pueden establecerlo para mantener el TTL de 1 hora. Las escrituras de caché de 1 hora se facturan a una tasa más alta. Para elegir el TTL por depósito de solicitud en su lugar, use `CLAUDE_CODE_PROMPT_CACHE_TTL` y `CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL`, que tienen prioridad sobre esta variable |

456| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | Deprecated. Use `ENABLE_PROMPT_CACHING_1H` en su lugar |458| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | Deprecated. Use `ENABLE_PROMPT_CACHING_1H` en su lugar |

457| `ENABLE_TOOL_SEARCH` | Controla [búsqueda de herramientas MCP](/docs/es/mcp#scale-with-mcp-tool-search). Sin establecer, Claude Code difiere todas las herramientas MCP de forma predeterminada. Aún las carga por adelantado en modelos de Google Cloud's Agent Platform anteriores a la generación Claude 4.5, en una implementación de Microsoft Foundry alojada en Azure, y cuando `ANTHROPIC_BASE_URL` apunta a un host que no es de primera parte. `true` siempre difiere y envía el encabezado beta, excepto en esos mismos modelos de Agent Platform y implementaciones de Microsoft Foundry; las solicitudes fallan en proxies que no admiten `tool_reference`. `auto` carga por adelantado cuando las definiciones de herramientas caben dentro del 10% del contexto. `auto:N` establece un umbral personalizado, como `auto:5` para 5%. `false` carga todas las herramientas por adelantado. Un valor que establece usted mismo se ignora cuando `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` está establecido. Antes de v2.1.221, Claude Code deshabilitaba la búsqueda de herramientas para todos los modelos en Google Cloud's Agent Platform a menos que estableciera esta variable en `true` |459| `ENABLE_TOOL_SEARCH` | Controla [búsqueda de herramientas MCP](/docs/es/mcp#scale-with-mcp-tool-search). Sin establecer, Claude Code difiere todas las herramientas MCP de forma predeterminada. Aún las carga por adelantado en modelos de Google Cloud's Agent Platform anteriores a la generación Claude 4.5, en una implementación de Microsoft Foundry alojada en Azure, y cuando `ANTHROPIC_BASE_URL` apunta a un host que no es de primera parte. `true` siempre difiere y envía el encabezado beta, excepto en esos mismos modelos de Agent Platform e implementaciones de Microsoft Foundry; las solicitudes fallan en proxies que no admiten `tool_reference`. `auto` carga por adelantado cuando las definiciones de herramientas caben dentro del 10% del contexto. `auto:N` establece un umbral personalizado, como `auto:5` para 5%. `false` carga todas las herramientas por adelantado. Un valor que establece usted mismo se ignora cuando `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` está establecido. Antes de v2.1.221, Claude Code deshabilitaba la búsqueda de herramientas para todos los modelos en Google Cloud's Agent Platform a menos que estableciera esta variable en `true` |

458| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | Establezca en cualquier valor no vacío, como `1`, para hacer que Claude Code deje de reintentar en errores de sobrecarga repetida para cada modelo cuando no hay ningún modelo de alternativa configurado. **Establecerlo en `0` o `false` aún habilita esto**, a diferencia de la mayoría de variables de activación/desactivación; desestablezca la variable para restaurar el comportamiento de reintento predeterminado. Sin él, Claude Code deja de reintentar de esta manera en modelos que reconoce como modelos Opus, Fable o Mythos cuando se autentica con una clave de API o un [proveedor de terceros](/docs/es/third-party-integrations) en lugar de una suscripción a Claude. En Claude Code v2.1.160 o posterior, Claude Code cambia a su [cadena de modelo de alternativa](/docs/es/model-config#fallback-model-chains) configurada en errores de sobrecarga repetida para cualquier modelo principal, por lo que esta variable no afecta el cambio a un modelo de alternativa |460| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | Establezca en cualquier valor no vacío, como `1`, para hacer que Claude Code deje de reintentar en errores de sobrecarga repetida para cada modelo cuando no hay ningún modelo de alternativa configurado. **Establecerlo en `0` o `false` aún habilita esto**, a diferencia de la mayoría de variables de activación/desactivación; desestablezca la variable para restaurar el comportamiento de reintento predeterminado. Sin él, Claude Code deja de reintentar de esta manera en modelos que reconoce como modelos Opus, Fable o Mythos cuando se autentica con una clave de API o un [proveedor de terceros](/docs/es/third-party-integrations) en lugar de una suscripción a Claude. En Claude Code v2.1.160 o posterior, Claude Code cambia a su [cadena de modelo de alternativa](/docs/es/model-config#fallback-model-chains) configurada en errores de sobrecarga repetida para cualquier modelo principal, por lo que esta variable no afecta el cambio a un modelo de alternativa |

459| `FORCE_AUTOUPDATE_PLUGINS` | Establezca en `1` para forzar actualizaciones automáticas de plugins incluso cuando el auto-actualizador principal está deshabilitado a través de `DISABLE_AUTOUPDATER` |461| `FORCE_AUTOUPDATE_PLUGINS` | Establezca en `1` para forzar actualizaciones automáticas de plugins incluso cuando el auto-actualizador principal está deshabilitado a través de `DISABLE_AUTOUPDATER` |

460| `FORCE_HYPERLINK` | Establezca en `1` para habilitar hipervínculos OSC 8 clicables cuando su terminal los admite pero no se detectan automáticamente, o `0` para deshabilitarlos. Sin establecer, Claude Code habilita hipervínculos solo cuando detecta soporte de terminal. Claude Code analiza este valor como un número, no un booleano, por lo que un valor como `false`, `no` u `off` habilita hipervínculos en lugar de deshabilitarlos. El [distintivo de PR o solicitud de fusión](/docs/es/interactive-mode#pr-review-status) de pie de página se renderiza como un hipervínculo incluso cuando Claude Code no puede detectar soporte de terminal, como sobre SSH. Establezca `0` para renderizar el distintivo como texto simple |462| `FORCE_HYPERLINK` | Establezca en `1` para habilitar hipervínculos OSC 8 clicables cuando su terminal los admite pero no se detectan automáticamente, o `0` para deshabilitarlos. Sin establecer, Claude Code habilita hipervínculos solo cuando detecta soporte de terminal. Claude Code analiza este valor como un número, no un booleano, por lo que un valor como `false`, `no` u `off` habilita hipervínculos en lugar de deshabilitarlos. El [distintivo de PR o solicitud de fusión](/docs/es/interactive-mode#pr-review-status) de pie de página se renderiza como un hipervínculo incluso cuando Claude Code no puede detectar soporte de terminal, como sobre SSH. Establezca `0` para renderizar el distintivo como texto simple |


464| `IS_DEMO` | Establezca en cualquier valor no vacío, como `1`, para habilitar el modo de demostración: oculta su correo electrónico y nombre de organización del encabezado y la salida `/status`, y omite la incorporación. **Establecerlo en `0` o `false` aún habilita el modo de demostración**, a diferencia de la mayoría de variables de activación/desactivación; desestablezca la variable para desactivarlo. Útil cuando transmite o graba una sesión |466| `IS_DEMO` | Establezca en cualquier valor no vacío, como `1`, para habilitar el modo de demostración: oculta su correo electrónico y nombre de organización del encabezado y la salida `/status`, y omite la incorporación. **Establecerlo en `0` o `false` aún habilita el modo de demostración**, a diferencia de la mayoría de variables de activación/desactivación; desestablezca la variable para desactivarlo. Útil cuando transmite o graba una sesión |

465| `MAX_MCP_OUTPUT_TOKENS` | Número máximo de tokens permitidos en respuestas de herramientas MCP. Claude Code muestra una advertencia cuando la salida excede 10,000 tokens. Las herramientas que declaran [`anthropic/maxResultSizeChars`](/docs/es/mcp#raise-the-limit-for-a-specific-tool) usan ese límite de caracteres para contenido de texto en su lugar, pero el contenido de imagen de esas herramientas aún está sujeto a esta variable (predeterminado: 25000) |467| `MAX_MCP_OUTPUT_TOKENS` | Número máximo de tokens permitidos en respuestas de herramientas MCP. Claude Code muestra una advertencia cuando la salida excede 10,000 tokens. Las herramientas que declaran [`anthropic/maxResultSizeChars`](/docs/es/mcp#raise-the-limit-for-a-specific-tool) usan ese límite de caracteres para contenido de texto en su lugar, pero el contenido de imagen de esas herramientas aún está sujeto a esta variable (predeterminado: 25000) |

466| `MAX_STRUCTURED_OUTPUT_RETRIES` | Número de intentos que Claude Code permite cuando la respuesta del modelo falla en la validación contra el [`--json-schema`](/docs/es/cli-reference#cli-flags) en modo no interactivo con la bandera `-p`; después de esos muchos intentos fallidos sin salida válida, la ejecución falla. El mismo tope se aplica cuando la salida estructurada de un subagente de [flujo de trabajo](/docs/es/workflows) falla en la validación. El valor predeterminado es 5, un primer intento más cuatro reintentos |468| `MAX_STRUCTURED_OUTPUT_RETRIES` | Número de intentos que Claude Code permite cuando la respuesta del modelo falla en la validación contra el [`--json-schema`](/docs/es/cli-reference#cli-flags) en modo no interactivo con la bandera `-p`; después de esos muchos intentos fallidos sin salida válida, la ejecución falla. El mismo tope se aplica cuando la salida estructurada de un subagente de [flujo de trabajo](/docs/es/workflows) falla en la validación. El valor predeterminado es 5, un primer intento más cuatro reintentos |

467| `MAX_THINKING_TOKENS` | Presupuesto de token fijo para [pensamiento extendido](https://platform.claude.com/docs/en/build-with-claude/extended-thinking). Claude Code lo limita a un token por debajo de los tokens de salida máximos de la solicitud y nunca por debajo de 1,024. Consulte `CLAUDE_CODE_MAX_OUTPUT_TOKENS` para cómo se establece ese límite. Sin establecer y con el pensamiento habilitado, los modelos con [razonamiento adaptativo](/docs/es/model-config#adjust-effort-level) eligen su propia profundidad de pensamiento, y otros modelos usan el tope. Establezca en `0` para desabilitar el pensamiento en la API de Anthropic, excepto en Opus 5.5, Sonnet 5.5 y los modelos Fable, que no pueden tener el pensamiento deshabilitado. En [proveedores de terceros](/docs/es/third-party-integrations), `0` omite el parámetro `thinking` en su lugar. Con el pensamiento desactivado en la API de Anthropic, Claude Code envía esfuerzo `high` en lugar de un nivel más alto a modelos que sabe que [no aceptan esa combinación](/docs/es/errors#effort-isnt-available-with-thinking-turned-off), como Opus 5. Claude Code ignora valores distintos de cero en modelos de razonamiento adaptativo, excepto en los modelos donde `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` desactiva el razonamiento adaptativo |469| `MAX_THINKING_TOKENS` | Presupu esto de token fijo para [pensamiento extendido](https://platform.claude.com/docs/en/build-with-claude/extended-thinking). Claude Code lo limita a un token por debajo de los tokens de salida máximos de la solicitud y nunca por debajo de 1,024. Consulte `CLAUDE_CODE_MAX_OUTPUT_TOKENS` para cómo se establece ese límite. Sin establecer y con el pensamiento habilitado, los modelos con [razonamiento adaptativo](/docs/es/model-config#adjust-effort-level) eligen su propia profundidad de pensamiento, y otros modelos usan el tope. Establezca en `0` para desabilitar el pensamiento en la API de Anthropic, excepto en Opus 5.5, Sonnet 5.5 y los modelos Fable, que no pueden tener el pensamiento deshabilitado. En [proveedores de terceros](/docs/es/third-party-integrations), `0` omite el parámetro `thinking` en su lugar. Con el pensamiento desactivado en la API de Anthropic, Claude Code envía esfuerzo `high` en lugar de un nivel más alto a modelos que sabe que [no aceptan esa combinación](/docs/es/errors#effort-isnt-available-with-thinking-turned-off), como Opus 5. Claude Code ignora valores distintos de cero en modelos de razonamiento adaptativo, excepto en los modelos donde `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` desactiva el razonamiento adaptativo |

468| `MCP_CLIENT_SECRET` | Secreto de cliente de OAuth para servidores MCP que requ ieren [credenciales preconfiguradas](/docs/es/mcp#use-pre-configured-oauth-credentials). Evita el prompt interactivo al agregar un servidor con `--client-secret` |470| `MCP_CLIENT_SECRET` | Secreto de cliente de OAuth para servidores MCP que requieren [credenciales preconfiguradas](/docs/es/mcp#use-pre-configured-oauth-credentials). Evita el prompt interactivo al agregar un servidor con `--client-secret` |

469| `MCP_CONNECTION_NONBLOCKING` | Controla si el inicio espera a que se conecten los servidores MCP antes de la primera consulta. El inicio de MCP es no bloqueante de forma predeterminada: los servidores se conectan en segundo plano y sus herramientas se vuelven disponibles a medida que terminan. Establezca en `0` para hacer que Claude Code espere a que se conecten los servidores antes de la primera consulta. Los servidores configurados con [`alwaysLoad: true`](/docs/es/mcp#exempt-a-server-from-deferral) aún hacen que el inicio espere independientemente, excepto cuando se sirven desde la [caché de descubrimiento](/docs/es/mcp#server-status-detail), ya que sus herramientas deben estar presentes cuando se construye el primer prompt. En modo no interactivo (`-p`) sin `--input-format stream-json`, Claude Code también espera a los servidores aún pendientes antes del primer turno independientemente de esta variable. Cuando pasa [`--mcp-config`](/docs/es/cli-reference#cli-flags) explícitamente, la espera tiene un plazo más largo; consulte esa entrada de bandera para la excepción de servidor en caché |471| `MCP_CONNECTION_NONBLOCKING` | Controla si el inicio espera a que se conecten los servidores MCP antes de la primera consulta. El inicio de MCP es no bloqueante de forma predeterminada: los servidores se conectan en segundo plano y sus herramientas se vuelven disponibles a medida que terminan. Establezca en `0` para hacer que Claude Code espere a que se conecten los servidores antes de la primera consulta. Los servidores configurados con [`alwaysLoad: true`](/docs/es/mcp#exempt-a-server-from-deferral) aún hacen que el inicio espere independientemente, excepto cuando se sirven desde la [caché de descubrimiento](/docs/es/mcp#server-status-detail), ya que sus herramientas deben estar presentes cuando se construye el primer prompt. En modo no interactivo (`-p`) sin `--input-format stream-json`, Claude Code también espera a los servidores aún pendientes antes del primer turno independientemente de esta variable. Cuando pasa [`--mcp-config`](/docs/es/cli-reference#cli-flags) explícitamente, la espera tiene un plazo más largo; consulte esa entrada de bandera para la excepción de servidor en caché |

470| `MCP_CONNECT_TIMEOUT_MS` | Cuánto tiempo espera el inicio de MCP bloqueante, en milisegundos, para que se conecte el lote antes de tomar una instantánea de la lista de herramientas (predeterminado: 5000). Se aplica cuando `MCP_CONNECTION_NONBLOCKING=0` o para servidores marcados [`alwaysLoad: true`](/docs/es/mcp#exempt-a-server-from-deferral). Los servidores aún pendientes en el plazo siguen conectándose en segundo plano. Distinto de `MCP_TIMEOUT`, que limita el intento de conexión de un servidor individual |472| `MCP_CONNECT_TIMEOUT_MS` | Cuánto tiempo espera el inicio de MCP bloqueante, en milisegundos, para que se conecte el lote antes de tomar una instantánea de la lista de herramientas (predeterminado: 5000). Se aplica cuando `MCP_CONNECTION_NONBLOCKING=0` o para servidores marcados [`alwaysLoad: true`](/docs/es/mcp#exempt-a-server-from-deferral). Los servidores aún pendientes en el plazo siguen conectándose en segundo plano. Distinto de `MCP_TIMEOUT`, que limita el intento de conexión de un servidor individual |

471| `MCP_DISCOVERY_CACHE` | Activa o desactiva la [caché de descubrimiento de MCP](/docs/es/mcp#server-status-detail). Con la caché activada, un servidor HTTP o SSE remoto que ha usado antes puede mostrar el [estado `cached`](/docs/es/mcp#server-status-detail), y Claude Code se conecta en su primera llamada de herramienta en lugar de al inicio. La caché está desactivada de forma predeterminada a menos que un lanzamiento gradual la haya habilitado para su cuenta. Establezca en `1` para activarla, o `0` para mantenerla desactivada incluso cuando el lanzamiento la ha habilitado. Antes de v2.1.238, la caché estaba activada de forma predeterminada. El estado `cached` requiere Claude Code v2.1.221 o posterior |473| `MCP_DISCOVERY_CACHE` | Activa o desactiva la [caché de descubrimiento de MCP](/docs/es/mcp#server-status-detail). Con la caché activada, un servidor HTTP o SSE remoto que ha usado antes puede mostrar el [estado `cached`](/docs/es/mcp#server-status-detail), y Claude Code se conecta en su primera llamada de herramienta en lugar de al inicio. La caché está desactivada de forma predeterminada a menos que un lanzamiento gradual la haya habilitado para su cuenta. Establezca en `1` para activarla, o `0` para mantenerla desactivada incluso cuando el lanzamiento la ha habilitado. Antes de v2.1.238, la caché estaba activada de forma predeterminada. El estado `cached` requiere Claude Code v2.1.221 o posterior |

errors.md +66 −38

Details

236| `Couldn't open Claude Desktop` | [Errores de línea de comandos](#couldnt-open-claude-desktop) |236| `Couldn't open Claude Desktop` | [Errores de línea de comandos](#couldnt-open-claude-desktop) |

237| `Failed to open Claude Desktop. Please try opening it manually.` | [Errores de línea de comandos](#couldnt-open-claude-desktop) |237| `Failed to open Claude Desktop. Please try opening it manually.` | [Errores de línea de comandos](#couldnt-open-claude-desktop) |

238| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Errores de línea de comandos](#terminal-setup-left-your-zed-keymap-unchanged) |238| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Errores de línea de comandos](#terminal-setup-left-your-zed-keymap-unchanged) |

239| `Your Zed keymap isn't a readable list of keybindings` | [Errores de línea de comandos](#terminal-setup-left-your-zed-keymap-unchanged) |239| `Your Zed keymap isn't a readable list of atajos de teclado` | [Errores de línea de comandos](#terminal-setup-left-your-zed-keymap-unchanged) |

240| `Skill usage reports are not available on this connection.` | [Errores de línea de comandos](#skill-usage-reports-are-not-available-on-this-connection) |240| `Skill usage reports are not available on this connection.` | [Errores de línea de comandos](#skill-usage-reports-are-not-available-on-this-connection) |

241| `Custom output styles can't be selected over Remote Control or from a relayed message` | [Errores de línea de comandos](#custom-output-styles-cant-be-selected-over-remote-control) |241| `Custom output styles can't be selected over Remote Control or from a relayed message` | [Errores de línea de comandos](#custom-output-styles-cant-be-selected-over-remote-control) |

242| `Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load` | [Errores de línea de comandos](#output-styles-are-saved-to-local-settings-which-this-session-doesnt-load) |242| `Output styles are saved to local settings (.claude/settings.local.json), which this session doesn't load` | [Errores de línea de comandos](#output-styles-are-saved-to-local-settings-which-this-session-doesnt-load) |


322| `Transcript writes are failing (...)` | [Advertencias de guardado de sesión](#transcript-writes-are-failing) |322| `Transcript writes are failing (...)` | [Advertencias de guardado de sesión](#transcript-writes-are-failing) |

323| `Transcript saving is off — CLAUDE_CODE_SKIP_PROMPT_HISTORY is set` | [Advertencias de guardado de sesión](#transcript-saving-is-off-skip-prompt-history) |323| `Transcript saving is off — CLAUDE_CODE_SKIP_PROMPT_HISTORY is set` | [Advertencias de guardado de sesión](#transcript-saving-is-off-skip-prompt-history) |

324| `Transcript saving is off — inherited CLAUDE_CODE_CHILD_SESSION marker` | [Advertencias de guardado de sesión](#transcript-saving-is-off-child-session-marker) |324| `Transcript saving is off — inherited CLAUDE_CODE_CHILD_SESSION marker` | [Advertencias de guardado de sesión](#transcript-saving-is-off-child-session-marker) |

325| `Claude Code's fullscreen renderer didn't finish starting last time on this machine` / `Claude Code's fullscreen renderer has repeatedly failed to start on this machine` | [Advertencias de configuración](#fullscreen-failed-start-notice) |325| `Claude Code's fullscreen renderer didn't finish starting last time on this machine` / `Claude Code's fullscreen renderer has repeatedly failed to start on this machine` | [Representación en pantalla completa](/docs/es/fullscreen#fullscreen-renderer-didnt-finish-starting) |

326| `Claude Code exited after an unrecoverable interface error (...)` | [Advertencias de configuración](#exited-after-an-unrecoverable-interface-error) |326| `Claude Code exited after an unrecoverable interface error (...)` | [Advertencias de configuración](#exited-after-an-unrecoverable-interface-error) |

327| `Agent descriptions are over the 15.0k-token limit` | [Advertencias de configuración](#agent-descriptions-are-over-the-15000-token-limit) |327| `Agent descriptions are over the 15.0k-token limit` | [Advertencias de configuración](#agent-descriptions-are-over-the-15000-token-limit) |

328| `Not loaded: rename <path>, then restart — its name uses "<name>", a name reserved for the skills synced from your claude.ai account` | [Advertencias de configuración](#a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved) |328| `Not loaded: rename <path>, then restart — its name uses "<name>", a name reserved for the skills synced from your claude.ai account` | [Advertencias de configuración](#a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved) |


331| `Remote managed settings failed to load (<cause>)` | [Advertencias de configuración](#remote-managed-settings-failed-to-load) |331| `Remote managed settings failed to load (<cause>)` | [Advertencias de configuración](#remote-managed-settings-failed-to-load) |

332| `Managed settings were not approved; exiting without applying them.` | [Advertencias de configuración](#managed-settings-were-not-approved) |332| `Managed settings were not approved; exiting without applying them.` | [Advertencias de configuración](#managed-settings-were-not-approved) |

333| `Claude Code can't start: your organization's managed settings block the default model` / `Claude Code can't start: your organization allows only the models listed in "availableModels"` | [Advertencias de configuración](#managed-settings-block-the-default-model) |333| `Claude Code can't start: your organization's managed settings block the default model` / `Claude Code can't start: your organization allows only the models listed in "availableModels"` | [Advertencias de configuración](#managed-settings-block-the-default-model) |

334| `Your organization's managed settings allow Claude Code to use: <providers>` | [Advertencias de configuración](#managed-settings-dont-allow-this-api-provider) |

335| `Your organization's managed settings allow Claude Code to use no API provider at all` | [Advertencias de configuración](#managed-settings-dont-allow-this-api-provider) |

334| `MCP server <name> is blocked by enterprise managed policy` | [Advertencias de configuración](#mcp-server-is-blocked-by-enterprise-managed-policy) |336| `MCP server <name> is blocked by enterprise managed policy` | [Advertencias de configuración](#mcp-server-is-blocked-by-enterprise-managed-policy) |

335| `Managed settings document could not be parsed as a JSON object; none of its settings are in effect. Fix or remove it.` | [Advertencias de configuración](#managed-settings-document-could-not-be-parsed) |337| `Managed settings document could not be parsed as a JSON object; none of its settings are in effect. Fix or remove it.` | [Advertencias de configuración](#managed-settings-document-could-not-be-parsed) |

336| `Managed settings drop-in directory could not be read` | [Advertencias de configuración](#managed-settings-document-could-not-be-parsed) |338| `Managed settings drop-in directory could not be read` | [Advertencias de configuración](#managed-settings-document-could-not-be-parsed) |

339| `Unable to read managed policy settings` | [Advertencias de configuración](#unable-to-read-managed-policy-settings) |

337| `otelHeadersHelper failed; telemetry is not being exported. See /status: ...` | [Advertencias de configuración](#otelheadershelper-failed) |340| `otelHeadersHelper failed; telemetry is not being exported. See /status: ...` | [Advertencias de configuración](#otelheadershelper-failed) |

338| `"crossSessionInbound" must be one of "accept", "hold", "refuse"` | [Advertencias de configuración](#crosssessioninbound-must-be-one-of-accept-hold-refuse) |341| `"crossSessionInbound" must be one of "accept", "hold", "refuse"` | [Advertencias de configuración](#crosssessioninbound-must-be-one-of-accept-hold-refuse) |

339| `headersHelper not run — this workspace has no persisted trust` | [Advertencias de configuración](#headershelper-not-run) |342| `headersHelper not run — this workspace has no persisted trust` | [Advertencias de configuración](#headershelper-not-run) |


3657 No se pudo abrir Claude Desktop3660 No se pudo abrir Claude Desktop

3658</h3>3661</h3>

3659 3662 

3660Ejecutó [`/desktop`](/docs/es/desktop#coming-from-the-cli), o su alias `/app`, y el comando del sistema que Claude Code usa para abrir Claude Desktop falló. La sesión permanece en la terminal.3663Ejecutó [`/desktop`](/docs/es/desktop#coming-from-the-cli) o su alias `/app` en una sesión, o [`claude --desktop`](/docs/es/cli-reference#cli-flags) en su shell, y el comando del sistema que Claude Code usa para abrir Claude Desktop falló. Después de `/desktop`, la sesión permanece en la terminal; `claude --desktop` imprime el mensaje sin el prefijo `Error:` y sale con estado 1.

3664 

3665El texto entre paréntesis nombra el comando que falló, con su estado de salida y la primera línea de su salida de error cuando la produjo. En macOS ese comando es `open`, como en este ejemplo; en Windows es `rundll32`:

3661 3666 

3662```text theme={null}3667```text theme={null}

3663Error: Couldn't open Claude Desktop (`open` exited 1: LSOpenURLsWithRole() failed for the URL claude://resume?session=<session-id> with error -10814). Open Claude Desktop and run /desktop again.3668Error: Couldn't open Claude Desktop (`open` exited 1: LSOpenURLsWithRole() failed for the URL claude://resume?session=<session-id> with error -10814). Open Claude Desktop and try again.

3664```3669```

3665 3670 

3666**Qué hacer:**3671**Qué hacer:**

3667 3672 

3668* Abra Claude Desktop usted mismo, luego ejecute `/desktop` nuevamente3673* Abra Claude Desktop usted mismo, luego ejecute `/desktop` o `claude --desktop` nuevamente

3669* Para leer la salida de error completa de ese comando, active el registro de depuración con `/debug`, ejecute `/desktop` nuevamente, y verifique el registro de depuración3674* Para leer la salida de error completa del comando fallido, active el registro de depuración con `/debug` y ejecute `/desktop` nuevamente, o ejecute `claude --desktop --debug-file <path>`, luego verifique el registro de depuración

3670 3675 

3671Antes de v2.1.275, el mensaje era `Failed to open Claude Desktop. Please try opening it manually.` y no decía qué falló.3676Antes de v2.1.285, el mensaje terminaba `Open Claude Desktop and run /desktop again.` Antes de v2.1.275, era `Failed to open Claude Desktop. Please try opening it manually.` y no decía qué falló.

3672 3677 

3673<h3 id="terminal-setup-left-your-zed-keymap-unchanged">3678<h3 id="terminal-setup-left-your-zed-keymap-unchanged">

3674 /terminal-setup dejó su mapa de atajos de teclado de Zed sin cambios3679 /terminal-setup dejó su mapa de atajos de teclado de Zed sin cambios


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

3922```3927```

3923 3928 

3924Antes de v2.1.251, Claude Code cargaba una ruta `commands` declarada en una entrada de marketplace incluso cuando apuntaba fuera del directorio del plugin. Claude Code ya rechazaba las rutas declaradas en `plugin.json` y las otras rutas de componentes en una entrada de marketplace.3929Antes de v2.1.251, Claude Code cargaba una ruta `commands` declarada en una entrada de marketplace incluso cuando apuntaba fuera del directorio del plugin.

3925 3930 

3926Antes de v2.1.257, la verificación solo miraba la ortografía de la ruta, no dónde conducía un enlace simbólico.3931Antes de v2.1.257, la verificación solo miraba la ortografía de la ruta, no dónde conducía un enlace simbólico.

3927 3932 


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

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

4003 4008 

4004Un archivo faltante no es una falla: Claude Code lo trata como un registro sin marketplaces.

4005 

4006Con un archivo vacío, `claude plugin install` informa:4009Con un archivo vacío, `claude plugin install` informa:

4007 4010 

4008```text theme={null}4011```text theme={null}


4460 4463 

4461Los comandos que abren un diálogo interactivo no pueden hacerlo mientras no hay terminal conectada a una sesión en segundo plano. `/install-github-app`, la lista de configuración `/mcp`, y las acciones de autenticación en el menú del servidor MCP responden con un mensaje. Para `/install-github-app` y la lista de configuración `/mcp`, la sesión también aparece bajo **Needs input** en [agent view](/docs/es/agent-view) para que pueda encontrarla, conectarse y ejecutar el comando nuevamente. Mientras una terminal está conectada, estos comandos funcionan normalmente.4464Los comandos que abren un diálogo interactivo no pueden hacerlo mientras no hay terminal conectada a una sesión en segundo plano. `/install-github-app`, la lista de configuración `/mcp`, y las acciones de autenticación en el menú del servidor MCP responden con un mensaje. Para `/install-github-app` y la lista de configuración `/mcp`, la sesión también aparece bajo **Needs input** en [agent view](/docs/es/agent-view) para que pueda encontrarla, conectarse y ejecutar el comando nuevamente. Mientras una terminal está conectada, estos comandos funcionan normalmente.

4462 4465 

4463Antes de v2.1.216, la sesión no aparecía bajo **Needs input** después de `/install-github-app` o la lista de configuración `/mcp` se rechazaba. En v2.1.213 a v2.1.215, los comandos seguían funcionando mientras una terminal estaba conectada, y el mensaje de rechazo le indicaba que se conectara y ejecutara el comando nuevamente. De v2.1.208 a v2.1.212, Claude Code los rechazaba incluso mientras una terminal estaba conectada, con un mensaje como `Can't open MCP settings in a background session`; en esas versiones, ejecute el comando desde una sesión `claude` normal en su lugar, o actualice. Antes de v2.1.208, abrían su diálogo dentro de la sesión en segundo plano. En v2.1.208 solamente, Claude Code también rechazó el selector `/model` en una sesión en segundo plano, y `/upgrade` imprimió la URL de actualización en lugar de abrir un navegador.4466Antes de v2.1.216, la sesión no aparecía bajo **Needs input** después de que `/install-github-app` o la lista de configuración `/mcp` se rechazara. En v2.1.213 a v2.1.215, los comandos seguían funcionando mientras una terminal estaba conectada, y el mensaje de rechazo le indicaba que se conectara y ejecutara el comando nuevamente. De v2.1.208 a v2.1.212, Claude Code los rechazaba incluso mientras una terminal estaba conectada, con un mensaje como `Can't open MCP settings in a background session`; en esas versiones, ejecute el comando desde una sesión `claude` normal en su lugar, o actualice. Antes de v2.1.208, abrían su diálogo dentro de la sesión en segundo plano. En v2.1.208 solamente, Claude Code también rechazó el selector `/model` en una sesión en segundo plano, y `/upgrade` imprimió la URL de actualización en lugar de abrir un navegador.

4464 4467 

4465La redacción nombra el comando. La lista de configuración `/mcp` reporta:4468La redacción nombra el comando. La lista de configuración `/mcp` reporta:

4466 4469 


4487 4490 

4488**Qué hacer:**4491**Qué hacer:**

4489 4492 

4490* Generalmente nada: el mensaje completo va a Claude como un error de herramienta, y Claude reintenta con la ruta directa que nombra. Para una edición de archivo bloqueada, la vista de conversación muestra solo una línea corta `Error editing file`; el mensaje completo aparece en la vista de transcripción, que abre con `Ctrl+O`. Un comando bloqueado lo imprime en su salida de comando.4493* Generalmente nada: el mensaje completo va a Claude como un error de herramienta, y Claude reintenta con la ruta directa que nombra. Para una edición de archivo bloqueada, la vista de conversación muestra solo una línea corta `Error editing file`; el mensaje completo aparece en la vista de transcripción, que abre con `Ctrl+O`. Un comando bloqueado lo imprime en su salida.

4491* Si el bloqueo se repite en el mismo archivo, la ruta probablemente se ejecuta a través de un enlace simbólico confirmado cuyo destino contiene `..`, como `docs/current -> ../README.md`; pida a Claude que edite el archivo de destino por su ruta real en lugar de a través del enlace4494* Si el bloqueo se repite en el mismo archivo, la ruta probablemente se ejecuta a través de un enlace simbólico confirmado cuyo destino contiene `..`, como `docs/current -> ../README.md`; pida a Claude que edite el archivo de destino por su ruta real en lugar de a través del enlace

4492 4495 

4493<h3 id="write-or-command-blocked-because-the-path-names-a-network-location">4496<h3 id="write-or-command-blocked-because-the-path-names-a-network-location">


4626terminal host process died — press Enter to restart4629terminal host process died — press Enter to restart

4627```4630```

4628 4631 

4629Si abre la fila antes de que se ejecute la verificación, el pie de página muestra `This session's terminal host process died (the conversation is saved) — press Enter to restart it` y la fila se vuelve fallida.

4630 

4631Desde el shell, `claude attach <id>` reinicia una sesión ya marcada como fallida por un host muerto, y de lo contrario imprime la causa y sale:4632Desde el shell, `claude attach <id>` reinicia una sesión ya marcada como fallida por un host muerto, y de lo contrario imprime la causa y sale:

4632 4633 

4633```text theme={null}4634```text theme={null}


5023 5024 

5024Claude Code escribe la mayoría de estos mensajes en stderr, no en la conversación, y escribe la mayoría de ellos al iniciar. Una entrada lo indica cuando su mensaje aparece en otro lugar, como en el registro de depuración o como un aviso de inicio en la vista de conversación, o en otro momento, como la [línea de diagnóstico de modelo no reconocido](#unrecognized-model-id-on-a-request) en el momento de la solicitud.5025Claude Code escribe la mayoría de estos mensajes en stderr, no en la conversación, y escribe la mayoría de ellos al iniciar. Una entrada lo indica cuando su mensaje aparece en otro lugar, como en el registro de depuración o como un aviso de inicio en la vista de conversación, o en otro momento, como la [línea de diagnóstico de modelo no reconocido](#unrecognized-model-id-on-a-request) en el momento de la solicitud.

5025 5026 

5026<h3 id="fullscreen-failed-start-notice">

5027 El renderizador de pantalla completa no terminó de iniciarse

5028</h3>

5029 

5030Una sesión anterior de [pantalla completa](/docs/es/fullscreen) en esta máquina se cerró antes de terminar de iniciarse, por lo que Claude Code inicia esta sesión en el renderizador clásico e imprime uno de estos avisos:

5031 

5032```text theme={null}

5033Claude Code's fullscreen renderer didn't finish starting last time on this machine, so this launch is using the classic renderer. It will try fullscreen again next launch; /tui default keeps the classic renderer.

5034 

5035Claude Code's fullscreen renderer has repeatedly failed to start on this machine, so it has been turned off here. Run /tui fullscreen to try it again (this also resets after an update).

5036```

5037 

5038**Qué hacer:**

5039 

5040* Siga [Fullscreen rendering](/docs/es/fullscreen#fullscreen-renderer-didnt-finish-starting). Dice qué aviso obtiene, qué hace Claude Code en sesiones posteriores, y cómo intentar pantalla completa de nuevo o mantener el renderizador clásico.

5041* Si la sesión que se cerró imprimió un mensaje de salida, consulte [Claude Code se cerró después de un error de interfaz irrecuperable](#exited-after-an-unrecoverable-interface-error) para ver qué nombre tiene.

5042 

5043Antes de v2.1.236, Claude Code no imprimía ningún aviso y seguía iniciando sesiones en renderización de pantalla completa después de un inicio fallido.

5044 

5045<h3 id="exited-after-an-unrecoverable-interface-error">5027<h3 id="exited-after-an-unrecoverable-interface-error">

5046 Claude Code se cerró después de un error de interfaz irrecuperable5028 Claude Code se cerró después de un error de interfaz irrecuperable

5047</h3>5029</h3>


5193* Si administra la configuración, agregue un modelo que sus usuarios puedan ejecutar a `availableModels`, o estreche las entradas `deniedModels` que bloquean cada alternativa. [Block specific models or versions](/docs/es/model-config#block-specific-models-or-versions) describe cómo la opción Predeterminada se reduce5175* Si administra la configuración, agregue un modelo que sus usuarios puedan ejecutar a `availableModels`, o estreche las entradas `deniedModels` que bloquean cada alternativa. [Block specific models or versions](/docs/es/model-config#block-specific-models-or-versions) describe cómo la opción Predeterminada se reduce

5194* Si no las administra, envíe el mensaje a su administrador. Sus propios archivos de configuración no pueden ampliar una lista `availableModels` o `deniedModels` administrada5176* Si no las administra, envíe el mensaje a su administrador. Sus propios archivos de configuración no pueden ampliar una lista `availableModels` o `deniedModels` administrada

5195 5177 

5178<h3 id="managed-settings-dont-allow-this-api-provider">

5179 La configuración administrada no permite este proveedor de API

5180</h3>

5181 

5182Su [configuración administrada](/docs/es/managed-settings) de la organización establece una lista [`allowedProviders`](/docs/es/settings-reference#allowedproviders), y el proveedor de API de la sesión no está en ella o la sesión usa un endpoint que no está fijado de la manera que esa entrada requiere. Claude Code se niega al iniciar, antes de un inicio de sesión, o cuando la sesión contacta a continuación la API. El mensaje comienza con los proveedores permitidos:

5183 

5184```text theme={null}

5185Your organization's managed settings allow Claude Code to use: Anthropic API, Amazon Bedrock.

5186```

5187 

5188Cuando la lista está vacía, el mensaje dice en su lugar:

5189 

5190```text theme={null}

5191Your organization's managed settings allow Claude Code to use no API provider at all (allowedProviders is an empty list), so it cannot start on this machine.

5192```

5193 

5194Cuando cada entrada no es reconocida, el paréntesis dice en su lugar `(allowedProviders lists only unrecognized entries)`.

5195 

5196**Qué hacer:**

5197 

5198* Siga los pasos `To continue:` del mensaje

5199* Si administra la configuración, las líneas del mensaje que comienzan con `Admins:` nombran la entrada a agregar o el valor a fijar, y la entrada [`allowedProviders`](/docs/es/settings-reference#allowedproviders) dice qué bloque `env` de qué fuente puede fijarlo

5200 

5196<h3 id="mcp-server-is-blocked-by-enterprise-managed-policy">5201<h3 id="mcp-server-is-blocked-by-enterprise-managed-policy">

5197 El servidor MCP está bloqueado por la política administrada empresarial5202 El servidor MCP está bloqueado por la política administrada empresarial

5198</h3>5203</h3>


5235 5240 

5236[Find entries Claude Code dropped](/docs/es/managed-settings#find-entries-claude-code-dropped) enumera lo que hace que cada fuente sea no analizable.5241[Find entries Claude Code dropped](/docs/es/managed-settings#find-entries-claude-code-dropped) enumera lo que hace que cada fuente sea no analizable.

5237 5242 

5238Claude Code se niega a iniciar incluso cuando otra fuente de administrador entrega una política válida. Ve este error en sesiones interactivas, `claude -p`, sesiones del SDK de agente, [sesiones en segundo plano](/docs/es/agent-view), y la mayoría de subcomandos, `claude doctor` incluido. El rechazo falla cerrado a propósito: la configuración en un documento que Claude Code no puede analizar no se puede aplicar, y iniciar de todas formas ejecutaría sesiones sin los controles de la organización.5243Claude Code se niega a iniciar incluso cuando otra fuente de administrador entrega una política válida. Ve este error en sesiones interactivas, `claude -p`, sesiones del SDK de agente, [sesiones en segundo plano](/docs/es/agent-view), y la mayoría de subcomandos, `claude doctor` incluido. El rechazo falla cerrado a propósito: la configuración en un documento que Claude Code no puede analizar no se puede aplicar, e iniciar de todas formas ejecutaría sesiones sin los controles de la organización.

5239 5244 

5240Un problema de esquema en un documento analizable no produce este error. [Find entries Claude Code dropped](/docs/es/managed-settings#find-entries-claude-code-dropped) cubre qué hace Claude Code con uno.5245Un problema de esquema en un documento analizable no produce este error. [Find entries Claude Code dropped](/docs/es/managed-settings#find-entries-claude-code-dropped) cubre qué hace Claude Code con uno.

5241 5246 


5246* Si administra la máquina, corrija el documento nombrado para que se analice como un objeto JSON, o elimine el archivo, perfil o valor del registro. Un `managed-settings.json` vacío cuenta como `{}` y no bloquea el inicio.5251* Si administra la máquina, corrija el documento nombrado para que se analice como un objeto JSON, o elimine el archivo, perfil o valor del registro. Un `managed-settings.json` vacío cuenta como `{}` y no bloquea el inicio.

5247* Si no lo hace, pida a su administrador que corrija el documento implementado. Nada en sus propios archivos de configuración causa o borra este error.5252* Si no lo hace, pida a su administrador que corrija el documento implementado. Nada en sus propios archivos de configuración causa o borra este error.

5248 5253 

5254<h3 id="unable-to-read-managed-policy-settings">

5255 No se pudo leer la configuración de política administrada

5256</h3>

5257 

5258Su organización implementa [configuración administrada](/docs/es/managed-settings), y una de las fuentes implementadas existe pero no se pudo leer, por una razón como un error de E/S en lugar de que el sistema operativo niegue la lectura. Sin otra fuente de administrador suministrando una política, Claude Code se cierra al iniciar en lugar de ejecutarse sin la política que la fuente puede llevar:

5259 

5260```text theme={null}

5261Unable to read managed policy settings.

5262This machine may require organization login enforcement, but the policy file failed to load.

5263Contact your administrator.

5264 

5265Detail: <source>: <reason>

5266```

5267 

5268En el mismo estado, los flujos de inicio de sesión, las solicitudes de API de una sesión que ya se está ejecutando, y el servidor [`claude gateway`](/docs/es/claude-apps-gateway) se rechazan con una variante de la primera línea que nombra [`allowedProviders`](/docs/es/settings-reference#allowedproviders).

5269 

5270Una lectura que el sistema operativo negó, como en un archivo de solo raíz, no produce esta salida: [la sesión se inicia sin las políticas de esa fuente](/docs/es/managed-settings#find-entries-claude-code-dropped). Para una fuente que no se puede analizar, Claude Code se cierra con [un mensaje diferente que nombra la fuente](#managed-settings-document-could-not-be-parsed).

5271 

5272**Qué hacer:**

5273 

5274* Si administra la máquina, corrija el problema que nombra la línea `Detail:` para que la fuente implementada se pueda leer, o elimine la fuente

5275* Si no lo hace, envíe el mensaje a su administrador. Nada en sus propios archivos de configuración causa o borra este error

5276 

5277Antes de v2.1.285, solo las sesiones que iniciaron sesión con credenciales de claude.ai o Claude Console se cerraban con este mensaje, y una lectura que el sistema operativo negó también lo produjo.

5278 

5249<h3 id="otelheadershelper-failed">5279<h3 id="otelheadershelper-failed">

5250 otelHeadersHelper falló5280 otelHeadersHelper falló

5251</h3>5281</h3>


5344* Corrija la regla en la fuente que nombra la advertencia entre paréntesis: una ruta de archivo de configuración, o la bandera `--allowed-tools` misma. Una ruta `claude-settings-<hash>.json` que no existe en el disco representa un valor `--settings` en línea. Corrija el JSON que pasa a esa bandera.5374* Corrija la regla en la fuente que nombra la advertencia entre paréntesis: una ruta de archivo de configuración, o la bandera `--allowed-tools` misma. Una ruta `claude-settings-<hash>.json` que no existe en el disco representa un valor `--settings` en línea. Corrija el JSON que pasa a esa bandera.

5345* Si la fuente dice `managed policy settings`, reenvíe la advertencia a quien mantenga su configuración administrada, ya que no puede borrarla usted mismo.5375* Si la fuente dice `managed policy settings`, reenvíe la advertencia a quien mantenga su configuración administrada, ya que no puede borrarla usted mismo.

5346 5376 

5347Claude Code no advierte sobre reglas de negación y solicitud con la misma forma: se niega o solicita los comandos adicionales que coinciden en lugar de aprobarlos. Tampoco advierte sobre reglas cuyo subcomando viene antes del primer `*`, como `Bash(git commit *)`, o reglas en las que ninguna palabra que no sea una opción sigue al `*`, como `Bash(git *)`, o sobre reglas de prefijo `:*` como `Bash(git:*)`.

5348 

5349En una [sesión en segundo plano](/docs/es/agent-view) o con `--output-format json` o `stream-json`, Claude Code escribe la advertencia en el registro de depuración en lugar de stderr, por lo que la salida leída por máquina se mantiene limpia. Ejecute con `--debug` para capturarla en `~/.claude/debug/<session-id>.txt`. Antes de v2.1.246, Claude Code aceptaba estas reglas sin una advertencia.5377En una [sesión en segundo plano](/docs/es/agent-view) o con `--output-format json` o `stream-json`, Claude Code escribe la advertencia en el registro de depuración en lugar de stderr, por lo que la salida leída por máquina se mantiene limpia. Ejecute con `--debug` para capturarla en `~/.claude/debug/<session-id>.txt`. Antes de v2.1.246, Claude Code aceptaba estas reglas sin una advertencia.

5350 5378 

5351<h3 id="crosssessioninbound-must-be-one-of-accept-hold-refuse">5379<h3 id="crosssessioninbound-must-be-one-of-accept-hold-refuse">


5458 Las respuestas parecen de menor calidad que lo habitual5486 Las respuestas parecen de menor calidad que lo habitual

5459</h2>5487</h2>

5460 5488 

5461Si las respuestas de Claude parecen menos capaces de lo que espera pero no se muestra ningún error, la causa suele ser el estado de la conversación en lugar del modelo en sí. Claude Code no cambia silenciosamente las versiones del modelo. Puede cambiar a un modelo de respaldo en tres casos específicos:5489Si las respuestas de Claude parecen menos capaces de lo que espera pero no se muestra ningún error, la causa suele ser el estado de la conversación en lugar del modelo en sí. Claude Code no cambia silenciosamente las versiones del modelo. Puede cambiar a un modelo de respaldo en estos casos:

5462 5490 

5463* Un [`--fallback-model`](/docs/es/cli-reference#cli-flags) configurado toma el control después de un error de disponibilidad, solo para ese turno, con un aviso en la transcripción5491* Un [`--fallback-model`](/docs/es/cli-reference#cli-flags) configurado toma el control después de un error de disponibilidad, solo para ese turno, con un aviso en la transcripción

5464* Una verificación de inicio de Amazon Bedrock o de la plataforma de agentes de Google Cloud encuentra su modelo predeterminado no disponible5492* Una verificación de inicio de Amazon Bedrock o de la plataforma de agentes de Google Cloud encuentra su modelo predeterminado no disponible, o su cuenta [pierde acceso a él durante la sesión](/docs/es/amazon-bedrock#when-a-model-is-disabled-mid-session)

5465* El [respaldo automático de modelo](/docs/es/model-config#automatic-model-fallback) en Fable 5.1, Fable 5, Opus 5.5, Sonnet 5.5 y Opus 5 mueve la sesión al modelo de respaldo de la categoría marcada, cuando esa categoría tiene uno, y muestra un aviso en la transcripción5493* El [respaldo automático de modelo](/docs/es/model-config#automatic-model-fallback) en Fable 5.1, Fable 5, Opus 5.5, Sonnet 5.5 y Opus 5 mueve la sesión al modelo de respaldo de la categoría marcada, cuando esa categoría tiene uno, y muestra un aviso en la transcripción

5466 5494 

5467La verificación de selección de modelo a continuación detecta el segundo y tercer caso; el primero aparece como un aviso de transcripción en lugar de un cambio de `/model`. La [configuración del modelo](/docs/es/model-config) explica cuándo se aplica cada respaldo.5495La verificación de selección de modelo a continuación detecta el segundo y tercer caso; el primero aparece como un aviso de transcripción en lugar de un cambio de `/model`. La [configuración del modelo](/docs/es/model-config) explica cuándo se aplica cada respaldo.

Details

293 293 

294Los alias de modelo como `opus` no actúan como fijaciones, ni tampoco un ID de modelo que Claude Code no reconoce.294Los alias de modelo como `opus` no actúan como fijaciones, ni tampoco un ID de modelo que Claude Code no reconoce.

295 295 

296Cuando estas verificaciones encuentran un modelo que su proyecto no puede invocar, Claude Code recuerda el rechazo en esta máquina durante hasta un día, e inicia durante ese tiempo omitiendo el modelo recordado sin preguntar a Agent Platform nuevamente. Claude Code verifica un rechazo recordado de un modelo predeterminado actual nuevamente al iniciar una vez que han pasado diez minutos desde la última verificación, por lo que un valor predeterminado que su administrador vuelve a habilitar regresa. Para desactivar la memoria, establezca [`CLAUDE_CODE_SKIP_MODEL_ACCESS_MEMORY=1`](/docs/es/env-vars).

297 

298<h3 id="when-a-model-is-disabled-mid-session">

299 Cuando un modelo se deshabilita durante la sesión

300</h3>

301 

302Si su proyecto pierde acceso al modelo en el que se ejecuta su sesión, por ejemplo porque un administrador lo deshabilita en [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden), Claude Code cambia la sesión a otro modelo en lugar de fallar en cada solicitud, y muestra `Switched to <fallback> because <model> is not available`. Intenta los mismos modelos que el retroceso de inicio: versiones anteriores del mismo nivel primero y, para una sesión de Opus sin ninguna versión de Opus disponible, el modelo Sonnet predeterminado.

303 

304El cambio se aplica solo a un nivel que no ha fijado, la misma condición que el retroceso de inicio. Una sesión en una versión específica que eligió mantiene su modelo y, sin una cadena de modelo de retroceso, la solicitud falla en su lugar. En [modo automático](/docs/es/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry), Claude Code cambia solo a un modelo que el modo automático admite en Agent Platform. Si ninguno de esos modelos está disponible tampoco, la solicitud falla.

305 

306Una [cadena de modelo de retroceso](/docs/es/model-config#fallback-model-chains) que configure reemplaza el cambio de nivel: en estos rechazos Claude Code cambia a su retroceso configurado en su lugar. Para que las solicitudes rechazadas fallen en lugar de cambiar, establezca [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](/docs/es/env-vars). Una cadena de retroceso que configuró aún cambia en estos rechazos; elimine la cadena también si desea que cada solicitud rechazada falle.

307 

296<h2 id="iam-configuration">308<h2 id="iam-configuration">

297 Configuración de IAM309 Configuración de IAM

298</h2>310</h2>

headless.md +2 −2

Details

296 Aprobar herramientas automáticamente296 Aprobar herramientas automáticamente

297</h3>297</h3>

298 298 

299Utilice `--allowedTools` para permitir que Claude use ciertas herramientas sin solicitar confirmación. Este ejemplo ejecuta un conjunto de pruebas y corrige fallos, permitiendo que Claude ejecute comandos Bash y lea/edite archivos sin pedir permiso:299Utilice `--allowedTools` para permitir que Claude use ciertas herramientas sin solicitar confirmación. Enumerar `Read` y `Edit` permite que Claude lea y edite archivos sin pedir permiso. Enumerar `Bash` hace lo mismo para comandos de shell, excepto en una ejecución que comienza en [modo automático](/docs/es/permission-modes#how-auto-mode-evaluates-actions), donde Claude Code descarta una entrada `Bash` desnuda como una regla de permiso amplia y el modo automático evalúa cada comando en su lugar. Este ejemplo ejecuta un conjunto de pruebas y corrige fallos con esas tres herramientas enumeradas:

300 300 

301```bash theme={null}301```bash theme={null}

302claude -p "Run the test suite and fix any failures" \302claude -p "Run the test suite and fix any failures" \

303 --allowedTools "Bash,Read,Edit"303 --allowedTools "Bash,Read,Edit"

304```304```

305 305 

306Para establecer una línea base para toda la sesión en lugar de enumerar herramientas individuales, pase un [modo de permiso](/docs/es/permission-modes). Para `-p`, el [modo de permiso de inicio integrado](/docs/es/permission-modes#which-mode-a-session-starts-in) es Manual en cada plan, por lo que pase el modo de permiso que desee:306Para establecer una línea base para toda la sesión en lugar de enumerar herramientas individuales, pase un [modo de permiso](/docs/es/permission-modes). Una ejecución donde nada establece un modo de permiso toma el [modo de permiso de inicio integrado](/docs/es/permission-modes#which-mode-a-session-starts-in), que puede ser `auto`, así que pase el que desee:

307 307 

308* **`auto`**: pase `--permission-mode auto` para que un clasificador revise la mayoría de las acciones en lugar de usted308* **`auto`**: pase `--permission-mode auto` para que un clasificador revise la mayoría de las acciones en lugar de usted

309* **`dontAsk`**: Claude Code deniega cualquier llamada que de otro modo solicitaría, lo que es útil para ejecuciones de CI bloqueadas. Las acciones que no necesitan aprobación en modo Manual aún se ejecutan, como lecturas de archivos en sus directorios de trabajo y el [conjunto de comandos de solo lectura](/docs/es/permissions#read-only-commands), y también lo hacen las acciones que sus entradas `--allowedTools` o reglas `permissions.allow` cubren. `AskUserQuestion`, herramientas de conector [que su organización configuró para `ask`](/docs/es/mcp#organization-controls-on-connector-tools), y herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) se deniegan incluso cuando una regla de permiso coincide309* **`dontAsk`**: Claude Code deniega cualquier llamada que de otro modo solicitaría, lo que es útil para ejecuciones de CI bloqueadas. Las acciones que no necesitan aprobación en modo Manual aún se ejecutan, como lecturas de archivos en sus directorios de trabajo y el [conjunto de comandos de solo lectura](/docs/es/permissions#read-only-commands), y también lo hacen las acciones que sus entradas `--allowedTools` o reglas `permissions.allow` cubren. `AskUserQuestion`, herramientas de conector [que su organización configuró para `ask`](/docs/es/mcp#organization-controls-on-connector-tools), y herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) se deniegan incluso cuando una regla de permiso coincide

hooks.md +53 −53

Details

12 12 

13Los hooks son comandos de shell definidos por el usuario, puntos finales HTTP, llamadas a herramientas MCP, prompts de LLM o subagentes que se ejecutan automáticamente en puntos específicos del ciclo de vida de Claude Code. Claude Code dispara los mismos eventos de hooks dondequiera que se ejecute: sesiones en la terminal, extensiones de IDE, la [aplicación de escritorio](/docs/es/desktop-quickstart) y [Claude Code en la web](/docs/es/claude-code-on-the-web). Utilice esta referencia para buscar esquemas de eventos, opciones de configuración, formatos de entrada/salida JSON y características avanzadas como hooks asincronos, hooks HTTP y hooks de herramientas MCP.13Los hooks son comandos de shell definidos por el usuario, puntos finales HTTP, llamadas a herramientas MCP, prompts de LLM o subagentes que se ejecutan automáticamente en puntos específicos del ciclo de vida de Claude Code. Claude Code dispara los mismos eventos de hooks dondequiera que se ejecute: sesiones en la terminal, extensiones de IDE, la [aplicación de escritorio](/docs/es/desktop-quickstart) y [Claude Code en la web](/docs/es/claude-code-on-the-web). Utilice esta referencia para buscar esquemas de eventos, opciones de configuración, formatos de entrada/salida JSON y características avanzadas como hooks asincronos, hooks HTTP y hooks de herramientas MCP.

14 14 

15Un plugin también puede registrar hooks como funciones JavaScript que Claude Code llama en su propio proceso, que pueden dibujarse en la interfaz así como actuar sobre eventos. Un plugin que lo hace es un [mod](/docs/es/plugins/mods/overview), y esos hooks de función se cubren en [Reaccionar a eventos](/docs/es/plugins/mods/events) en lugar de aquí. Los hooks en esta página siguen funcionando junto con los mods.

16 

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

16 Ciclo de vida de los hooks18 Ciclo de vida de los hooks

17</h2>19</h2>


249Consulta [Cómo se resuelve un hook](#how-a-hook-resolves) arriba para un recorrido completo con un ejemplo anotado.251Consulta [Cómo se resuelve un hook](#how-a-hook-resolves) arriba para un recorrido completo con un ejemplo anotado.

250 252 

251<Note>253<Note>

252 Esta página utiliza términos específicos para cada nivel: **evento de hook** para el punto del ciclo de vida, **grupo de matcher** para el filtro, y **manejador de hook** para el comando de shell, punto final HTTP, herramienta MCP, prompt o agente que se ejecuta. "Hook" por sí solo se refiere a la característica general.254 Esta página utiliza términos específicos para cada nivel: **evento de hook** para el punto del ciclo de vida, **grupo de matcher** para el filtro, y **manejador de hook** para el comando shell, punto final HTTP, herramienta MCP, prompt o agente que se ejecuta. "Hook" por sí solo se refiere a la característica general.

253</Note>255</Note>

254 256 

255<h3 id="hook-locations">257<h3 id="hook-locations">

256 Ubicaciones de hooks258 Ubicaciones de hooks

257</h3>259</h3>

258 260 

259Dónde definas un hook determina su alcance:261Dónde defines un hook determina su alcance:

260 262 

261| Ubicación | Alcance | Compartible |263| Ubicación | Alcance | Compartible |

262| :- | :- | :- |264| :- | :- | :- |

263| `~/.claude/settings.json` | Todos tus proyectos | No, local en tu máquina |265| `~/.claude/settings.json` | Todos tus proyectos | No, local en tu máquina |

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

265| `.claude/settings.local.json` | Proyecto único | No, ignorado por git cuando Claude Code guarda una configuración en él |267| `.claude/settings.local.json` | Proyecto único | No, ignorado por git cuando Claude Code guarda una configuración en él |

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

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

268| [Skill](/docs/es/skills) frontmatter | El resto de la sesión una vez que se invoca la skill. Consulta [Hooks en skills y agentes](#hooks-in-skills-and-agents) | Sí, definido en el archivo de skill |270| [Skill](/docs/es/skills) frontmatter | El resto de la sesión una vez que se invoca la skill. Consulta [Hooks en skills y agentes](#hooks-in-skills-and-agents) | Sí, definido en el archivo de skill |

269| [Subagente](/docs/es/sub-agents) frontmatter | Mientras ese subagente se está ejecutando | Sí, definido en el archivo del subagente |271| [Subagent](/docs/es/sub-agents) frontmatter | Mientras ese subagente se está ejecutando | Sí, definido en el archivo del subagente |

270 272 

271Las [sesiones en la nube](/docs/es/claude-code-on-the-web) no leen tu `~/.claude/settings.json` local. En un [entorno autohospedado](/docs/es/self-hosted-environments-configuration#permissions-and-tool-approval), Claude Code también ejecuta los hooks que el operador sembró desde `~/.claude/` del host del ejecutor, y ejecuta los hooks en el archivo de configuración administrada de la imagen del ejecutor cuando ese archivo está entre las [fuentes administradas que Claude Code aplica](/docs/es/managed-settings#how-claude-code-combines-managed-sources), lo que por defecto significa solo cuando ni la configuración administrada por servidor ni una política de Claude Code entregada por MDM suministran el nivel administrado. Consulta [qué se transfiere de tu configuración](/docs/es/cloud-environments#what-carries-over-from-your-setup) para saber qué archivos de configuración y plugins, y por lo tanto qué hooks, llegan a una sesión en la nube.273Las [sesiones en la nube](/docs/es/claude-code-on-the-web) no leen tu `~/.claude/settings.json` local. En un [entorno autohospedado](/docs/es/self-hosted-environments-configuration#permissions-and-tool-approval), Claude Code también ejecuta los hooks que el operador sembró desde el `~/.claude/` del host del ejecutor, y ejecuta los hooks en el archivo de configuración administrada de la imagen del ejecutor cuando ese archivo está entre las [fuentes administradas que Claude Code aplica](/docs/es/managed-settings#how-claude-code-combines-managed-sources), lo que por defecto significa solo cuando ni la configuración administrada por servidor ni una política de Claude Code entregada por MDM suministran el nivel administrado. Consulta [qué se transfiere de tu configuración](/docs/es/cloud-environments#what-carries-over-from-your-setup) para saber qué archivos de configuración y plugins, y por lo tanto qué hooks, llegan a una sesión en la nube.

272 274 

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

274 276 

275Los hooks de archivos de configuración, configuración de política administrada y plugins también se ejecutan dentro de [subagentes](/docs/es/sub-agents). Cuando un subagente llama a una herramienta, eventos de herramienta como `PreToolUse` y `PostToolUse` activan los mismos hooks configurados que en la conversación principal, y la entrada lleva los campos de entrada comunes `agent_id` y `agent_type` [](#common-input-fields) que identifican al subagente.277Los hooks de archivos de configuración, configuración de política administrada y plugins también se ejecutan dentro de [subagentes](/docs/es/sub-agents). Cuando un subagente llama a una herramienta, eventos de herramienta como `PreToolUse` y `PostToolUse` activan los mismos hooks configurados que en la conversación principal, y la entrada lleva los campos de entrada comunes `agent_id` y `agent_type` [](#common-input-fields) que identifican al subagente.

276 278 

277Los administradores pueden usar [`allowManagedHooksOnly`](/docs/es/settings-reference#allowmanagedhooksonly) en [configuración administrada](/docs/es/managed-settings) para restringir qué hooks se ejecutan:279Los administradores pueden usar [`allowManagedHooksOnly`](/docs/es/settings-reference#allowmanagedhooksonly) en [configuración administrada](/docs/es/managed-settings) para restringir qué hooks se ejecutan:

278 280 

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

280* Claude Code también reduce tu configuración [`statusLine`](/docs/es/statusline), [`fileSuggestion`](/docs/es/settings-reference#filesuggestion) y [`subagentStatusLine`](/docs/es/statusline#subagent-status-lines) a la configuración administrada282* Claude Code también reduce tu configuración [`statusLine`](/docs/es/statusline), [`fileSuggestion`](/docs/es/settings-reference#filesuggestion) y [`subagentStatusLine`](/docs/es/statusline#subagent-status-lines) a la configuración administrada

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

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

283 285 

284Consulta [qué se ejecuta bajo `allowManagedHooksOnly`](/docs/es/settings-reference#what-runs-under-allowmanagedhooksonly).286Consulta [qué se ejecuta bajo `allowManagedHooksOnly`](/docs/es/settings-reference#what-runs-under-allowmanagedhooksonly).

285 287 


294 Patrones de matcher296 Patrones de matcher

295</h3>297</h3>

296 298 

297El campo `matcher` filtra cuándo se activan los hooks. Cómo se evalúa un matcher depende de los caracteres que contiene:299El campo `matcher` filtra cuándo se activan los hooks. Cómo se evalúa un matcher depende de los caracteres que contenga:

298 300 

299| Valor de matcher | Evaluado como | Ejemplo |301| Valor de matcher | Evaluado como | Ejemplo |

300| :- | :- | :- |302| :- | :- | :- |

301| `"*"`, `""` u omitido | Coincidir con todo | se activa en cada ocurrencia del evento |303| `"*"`, `""` u omitido | Coincidir con todo | se activa en cada ocurrencia del evento |

302| Solo letras, dígitos, `_`, `-`, espacios, `,` y `\|` | Cadena exacta, o lista de cadenas exactas separadas por `\|` o `,` con espacios en blanco opcionales alrededor | `Bash` coincide solo con la herramienta Bash; `Edit\|Write` y `Edit, Write` cada una coincide con cualquiera de las herramientas exactamente; `code-reviewer` coincide solo con ese tipo de agente |304| Solo letras, dígitos, `_`, `-`, espacios, `,` y `\|` | Cadena exacta, o lista de cadenas exactas separadas por `\|` o `,` con espacios en blanco opcionales alrededor | `Bash` coincide solo con la herramienta Bash; `Edit\|Write` y `Edit, Write` cada una coincide con cualquiera de las herramientas exactamente; `code-reviewer` coincide solo con ese tipo de agente |

303| Contiene cualquier otro carácter | Expresión regular de JavaScript, sin anclar | `^Notebook` coincide con cualquier herramienta cuyo nombre comienza con `Notebook`; `mcp__memory__.*` coincide con cada herramienta del servidor `memory` |305| Contiene cualquier otro carácter | Expresión regular de JavaScript, sin anclar | `^Notebook` coincide con cualquier herramienta cuyo nombre comience con `Notebook`; `mcp__memory__.*` coincide con cada herramienta del servidor `memory` |

304 306 

305Un matcher en la ruta de expresión regular se prueba con `RegExp.prototype.test` de JavaScript, que tiene éxito en una coincidencia en cualquier lugar del valor. `Edit.*` coincide tanto con `Edit` como con `NotebookEdit`; envuelve el patrón en `^` y `$`, como en `^Edit$`, cuando necesites una coincidencia de cadena completa.307Un matcher en la ruta de expresión regular se prueba con `RegExp.prototype.test` de JavaScript, que tiene éxito en una coincidencia en cualquier lugar del valor. `Edit.*` coincide tanto con `Edit` como con `NotebookEdit`; envuelve el patrón en `^` y `$`, como en `^Edit$`, cuando necesites una coincidencia de cadena completa.

306 308 


334 336 

335Hacer coincidir `StopFailure` en `cloud_credential_error` requiere Claude Code v2.1.267 o posterior, la primera versión que reporta fallos de carga de credenciales bajo ese valor en lugar de `server_error` o `unknown`.337Hacer coincidir `StopFailure` en `cloud_credential_error` requiere Claude Code v2.1.267 o posterior, la primera versión que reporta fallos de carga de credenciales bajo ese valor en lugar de `server_error` o `unknown`.

336 338 

337Para la mayoría de eventos, Claude Code evalúa el matcher contra un campo de la [entrada JSON](#hook-input-and-output) que envía a tu hook en stdin. Para eventos de herramienta, ese campo es `tool_name`. Para `PreModelSwitch` y `PostModelSwitch`, Claude Code evalúa el matcher contra el nombre canónico que deriva de `to_model`, como se describe en [PreModelSwitch](#premodelswitch). Cada sección de [evento de hook](#hook-events) lista el conjunto completo de valores de matcher y el esquema de entrada para ese evento.339Para la mayoría de eventos, Claude Code evalúa el matcher contra un campo de la [entrada JSON](#hook-input-and-output) que envía a tu hook en stdin. Para eventos de herramienta, ese campo es `tool_name`. Para `PreModelSwitch` y `PostModelSwitch`, Claude Code evalúa el matcher contra el nombre canónico que deriva de `to_model`, como se describe en [PreModelSwitch](#premodelswitch). Cada sección de [evento de hook](#hook-events) enumera el conjunto completo de valores de matcher y el esquema de entrada para ese evento.

338 340 

339Este ejemplo ejecuta un script de linting solo cuando Claude escribe o edita un archivo:341Este ejemplo ejecuta un script de linting solo cuando Claude escribe o edita un archivo:

340 342 


358 360 

359Si añades un campo `matcher` a un evento sin soporte de matcher, se ignora silenciosamente.361Si añades un campo `matcher` a un evento sin soporte de matcher, se ignora silenciosamente.

360 362 

361Para eventos de herramienta, puedes filtrar más estrictamente estableciendo el campo [`if`](#common-fields) en manejadores de hook individuales. `if` utiliza [sintaxis de regla de permisos](/docs/es/permissions) para coincidir contra el nombre de la herramienta y los argumentos juntos, por lo que `"Bash(git *)"` se ejecuta cuando cualquier subcomando de la entrada de Bash coincide con `git *` y `"Edit(*.ts)"` se ejecuta solo para archivos TypeScript.363Para eventos de herramienta, puedes filtrar más estrictamente estableciendo el campo [`if`](#common-fields) en manejadores de hook individuales. `if` utiliza [sintaxis de regla de permisos](/docs/es/permissions) para coincidir contra el nombre de la herramienta y los argumentos juntos, así que `"Bash(git *)"` se ejecuta cuando cualquier subcomando de la entrada de Bash coincide con `git *` y `"Edit(*.ts)"` se ejecuta solo para archivos TypeScript.

362 364 

363<h4 id="match-mcp-tools">365<h4 id="match-mcp-tools">

364 Coincidir herramientas MCP366 Coincidir herramientas MCP

365</h4>367</h4>

366 368 

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

368 370 

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

370 372 

371* `mcp__memory__create_entities`: herramienta crear entidades del servidor Memory373* `mcp__memory__create_entities`: herramienta crear entidades del servidor Memory

372* `mcp__filesystem__read_file`: herramienta leer archivo del servidor Filesystem374* `mcp__filesystem__read_file`: herramienta leer archivo del servidor Filesystem

373* `mcp__github__search_repositories`: herramienta de búsqueda del servidor GitHub375* `mcp__github__search_repositories`: herramienta buscar del servidor GitHub

374 376 

375Para coincidir con cada herramienta de un servidor, añade `.*` al prefijo del servidor. El `.*` es obligatorio: un matcher como `mcp__memory` o `mcp__brave-search` contiene solo caracteres de coincidencia exacta, por lo que se compara como una cadena exacta y no coincide con ninguna herramienta.377Para hacer coincidir cada herramienta de un servidor, añade `.*` al prefijo del servidor. El `.*` es obligatorio: un matcher como `mcp__memory` o `mcp__brave-search` contiene solo caracteres de coincidencia exacta, así que se compara como una cadena exacta y no coincide con ninguna herramienta.

376 378 

377* `mcp__memory__.*` coincide con todas las herramientas del servidor `memory`379* `mcp__memory__.*` coincide con todas las herramientas del servidor `memory`

378* `mcp__brave-search__.*` coincide con todas las herramientas de un servidor cuyo nombre contiene un guión380* `mcp__brave-search__.*` coincide con todas las herramientas de un servidor cuyo nombre contiene un guión

379* `mcp__.*__write.*` coincide con cualquier herramienta cuyo nombre comienza con `write` de cualquier servidor381* `mcp__.*__write.*` coincide con cualquier herramienta cuyo nombre comienza con `write` de cualquier servidor

380 382 

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

382 384 

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

384 386 


413 Campos de manejador de hook415 Campos de manejador de hook

414</h3>416</h3>

415 417 

416Cada objeto en el array `hooks` interno es un manejador de hook: el comando de shell, punto final HTTP, herramienta MCP, prompt LLM o agente que se ejecuta cuando el matcher coincide. Hay cinco tipos:418Cada objeto en el array `hooks` interno es un manejador de hook: el comando shell, punto final HTTP, herramienta MCP, prompt LLM o agente que se ejecuta cuando el matcher coincide. Hay cinco tipos:

417 419 

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

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

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

421* **[Hooks de prompt](#prompt-and-agent-hook-fields)** (`type: "prompt"`): envían un prompt a un modelo Claude para evaluación de un solo turno. El modelo devuelve su decisión como JSON. Consulta [Hooks basados en prompt](#prompt-based-hooks).423* **[Hooks de prompt](#prompt-and-agent-hook-fields)** (`type: "prompt"`): envían un prompt a un modelo Claude para evaluación de un solo turno. El modelo devuelve su decisión como JSON. Consulta [Hooks basados en prompt](#prompt-based-hooks).


425 427 

426Los manejadores se ejecutan en el directorio actual con el entorno de Claude Code. Si el directorio actual ya no existe, por ejemplo un worktree o directorio temporal que otro shell eliminó a mitad de sesión, Claude Code ejecuta hooks de comando desde el primero de estos que aún existe: el directorio en el que comenzó la sesión, la raíz del proyecto, tu directorio de inicio o el directorio temporal del sistema. Claude Code registra una advertencia nombrando el directorio de respaldo en el [registro de depuración](#debug-hooks).428Los manejadores se ejecutan en el directorio actual con el entorno de Claude Code. Si el directorio actual ya no existe, por ejemplo un worktree o directorio temporal que otro shell eliminó a mitad de sesión, Claude Code ejecuta hooks de comando desde el primero de estos que aún existe: el directorio en el que comenzó la sesión, la raíz del proyecto, tu directorio de inicio o el directorio temporal del sistema. Claude Code registra una advertencia nombrando el directorio de respaldo en el [registro de depuración](#debug-hooks).

427 429 

428La variable de entorno `$CLAUDE_CODE_REMOTE` es `"true"` en entornos web remotos y no está establecida en la CLI local. Claude Code v2.1.199 y posterior establece [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/es/env-vars) en el ID de sesión de [Control Remoto](/docs/es/remote-control) mientras la sesión local tiene una conexión activa de Control Remoto.430La variable de entorno `$CLAUDE_CODE_REMOTE` es `"true"` en entornos web remotos y no está establecida en la CLI local. Claude Code v2.1.199 y posterior establece [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/es/env-vars) en el ID de sesión de [Remote Control](/docs/es/remote-control) mientras la sesión local tiene una conexión activa de Remote Control.

429 431 

430<h4 id="common-fields">432<h4 id="common-fields">

431 Campos comunes433 Campos comunes


436| Campo | Requerido | Descripción |438| Campo | Requerido | Descripción |

437| :- | :- | :- |439| :- | :- | :- |

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

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

440| `timeout` | no | Segundos antes de cancelar. Claude Code no lo aplica en un hook de comando que ejecutas con [`async: true`](#run-hooks-in-the-background). Valores por defecto: 600 para `command`, `http` y `mcp_tool`; 30 para `prompt`; 60 para `agent`. Claude Code reduce el valor por defecto de `command`, `http` y `mcp_tool` a 30 en [`UserPromptSubmit`](#userpromptsubmit), [`PreModelSwitch`](#premodelswitch) y [`PostModelSwitch`](#postmodelswitch), y a 10 en [`MessageDisplay`](#messagedisplay). Los hooks de [`SessionEnd`](#sessionend) comparten un presupuesto de 1.5 segundos; si tu configuración establece un `timeout` por hook más largo, Claude Code aumenta el presupuesto para que coincida, hasta 60 segundos |442| `timeout` | no | Segundos antes de cancelar. Claude Code no lo aplica en un hook de comando que ejecutes con [`async: true`](#run-hooks-in-the-background). Valores por defecto: 600 para `command`, `http` y `mcp_tool`; 30 para `prompt`; 60 para `agent`. Claude Code reduce el valor por defecto de `command`, `http` y `mcp_tool` a 30 en [`UserPromptSubmit`](#userpromptsubmit), [`PreModelSwitch`](#premodelswitch) y [`PostModelSwitch`](#postmodelswitch), y a 10 en [`MessageDisplay`](#messagedisplay). Los hooks de [`SessionEnd`](#sessionend) comparten un presupuesto de 1.5 segundos; si tu configuración establece un `timeout` por hook más largo, Claude Code aumenta el presupuesto para que coincida, hasta 60 segundos |

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

442| `once` | no | Si es `true`, Claude Code elimina el hook después de su primera ejecución exitosa. Una ejecución que falla, bloquea con código de salida 2 o agota el tiempo de espera deja el hook en su lugar, por lo que se ejecuta de nuevo en el siguiente evento coincidente. Solo se respeta para hooks declarados en [frontmatter de skill](#hooks-in-skills-and-agents); se ignora en archivos de configuración y frontmatter de agente |444| `once` | no | Si es `true`, Claude Code elimina el hook después de su primera ejecución exitosa. Una ejecución que falla, bloquea con código de salida 2 o agota el tiempo de espera deja el hook en su lugar, así que se ejecuta de nuevo en el siguiente evento coincidente. Solo se respeta para hooks declarados en [frontmatter de skill](#hooks-in-skills-and-agents); se ignora en archivos de configuración y frontmatter de agente |

443 445 

444El campo `if` contiene exactamente una regla de permisos. No hay sintaxis `&&`, `||` o de lista para combinar reglas; para aplicar múltiples condiciones, define un manejador de hook separado para cada una.446El campo `if` contiene exactamente una regla de permisos. No hay sintaxis `&&`, `||` o de lista para combinar reglas; para aplicar múltiples condiciones, define un manejador de hook separado para cada una.

445 447 

446En una condición `if` para una herramienta de archivo, un patrón de directorio de un solo segmento como `"Edit(src/**)"` coincide solo con el directorio `src` en el directorio de trabajo y los archivos bajo él. Para coincidir con un directorio llamado `src` a cualquier profundidad, escribe `"Edit(**/src/**)"`. Antes de v2.1.214, `"Edit(src/**)"` coincidía con un directorio llamado `src` a cualquier profundidad bajo el directorio de trabajo.448En una condición `if` para una herramienta de archivo, un patrón de directorio de un solo segmento como `"Edit(src/**)"` coincide solo con el directorio `src` en el directorio de trabajo y los archivos bajo él. Para hacer coincidir un directorio llamado `src` a cualquier profundidad, escribe `"Edit(**/src/**)"`. Antes de v2.1.214, `"Edit(src/**)"` coincidía con un directorio llamado `src` a cualquier profundidad bajo el directorio de trabajo.

447 449 

448<span id="bash-if-matching" />Para patrones de Bash, si tu comando de hook se ejecuta depende de la forma del patrón y del comando de Bash que Claude está invocando. Las asignaciones `VAR=value` iniciales se eliminan antes de hacer coincidir.450<span id="bash-if-matching" />Para patrones de Bash, si tu comando de hook se ejecuta depende de la forma del patrón y del comando de Bash que Claude está invocando. Las asignaciones `VAR=value` iniciales se eliminan antes de hacer coincidir.

449 451 

450| Patrón `if` | Comando de Bash | ¿Se ejecuta el hook? | Por qué |452| patrón `if` | comando Bash | ¿Se ejecuta el hook? | Por qué |

451| :- | :- | :- | :- |453| :- | :- | :- | :- |

452| `Bash(git *)` | `FOO=bar git push` | sí | las asignaciones iniciales se eliminan; `git push` coincide |454| `Bash(git *)` | `FOO=bar git push` | sí | las asignaciones iniciales se eliminan; `git push` coincide |

453| `Bash(git *)` | `npm test && git push` | sí | cada subcomando se verifica; `git push` coincide |455| `Bash(git *)` | `npm test && git push` | sí | cada subcomando se verifica; `git push` coincide |

454| `Bash(rm *)` | `echo $(rm -rf /)` | sí | los comandos dentro de `$()` y backticks se verifican; `rm -rf /` coincide |456| `Bash(rm *)` | `echo $(rm -rf /)` | sí | los comandos dentro de `$()` y backticks se verifican; `rm -rf /` coincide |

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

456| `Bash(cat *)` | `echo before $(date) after` | no | una sustitución puede estar en cualquier posición de argumento, por lo que se verifican el comando completo y `date`; ninguno coincide con `cat *` |

457| `Bash(git *)` | `$TOOL git push` | sí | Claude Code no puede saber a qué se expande el nombre del comando, por lo que ejecuta el hook |

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

459 459 

460Cuando Claude Code no puede determinar qué comandos ejecuta la entrada de Bash, ejecuta tu hook independientemente del patrón. Porque el filtro `if` es de mejor esfuerzo, utiliza el [sistema de permisos](/docs/es/permissions) en lugar de un hook para aplicar una autorización o denegación dura.460Cuando Claude Code no puede determinar qué comandos ejecuta la entrada de Bash, ejecuta tu hook independientemente del patrón. Debido a que el filtro `if` es de mejor esfuerzo, utiliza el [sistema de permisos](/docs/es/permissions) en lugar de un hook para aplicar una autorización o denegación dura.

461 461 

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

463 Campos de hook de comando463 Campos de hook de comando


467 467 

468| Campo | Requerido | Descripción |468| Campo | Requerido | Descripción |

469| :- | :- | :- |469| :- | :- | :- |

470| `command` | sí | Comando de shell a ejecutar. Con `args`, el ejecutable a generar directamente. Consulta [Forma exec y forma shell](#exec-form-and-shell-form) |470| `command` | sí | Comando shell a ejecutar. Con `args`, el ejecutable a generar directamente. Consulta [Forma exec y forma shell](#exec-form-and-shell-form) |

471| `args` | no | Lista de argumentos. Cuando está presente, `command` se resuelve como un ejecutable y se genera directamente con `args` como el vector de argumentos, sin shell involucrado. Consulta [Forma exec y forma shell](#exec-form-and-shell-form) |471| `args` | no | Lista de argumentos. Cuando está presente, `command` se resuelve como un ejecutable y se genera directamente con `args` como el vector de argumentos, sin shell involucrado. Consulta [Forma exec y forma shell](#exec-form-and-shell-form) |

472| `async` | no | Si es `true`, se ejecuta en segundo plano sin bloquear. Consulta [Ejecutar hooks en segundo plano](#run-hooks-in-the-background) |472| `async` | no | Si es `true`, se ejecuta en segundo plano sin bloquear. Consulta [Ejecutar hooks en segundo plano](#run-hooks-in-the-background) |

473| `asyncRewake` | no | Si es `true`, se ejecuta en segundo plano y despierta a Claude en código de salida 2. El stderr del hook, o stdout si stderr está vacío, se muestra a Claude como un [recordatorio del sistema](/docs/es/glossary#system-reminder) para que pueda reaccionar a un fallo de fondo de larga duración |473| `asyncRewake` | no | Si es `true`, se ejecuta en segundo plano y despierta a Claude en código de salida 2. El stderr del hook, o stdout si stderr está vacío, se muestra a Claude como un [recordatorio del sistema](/docs/es/glossary#system-reminder) para que pueda reaccionar a un fallo de fondo de larga duración |


479 Forma exec y forma shell479 Forma exec y forma shell

480</h5>480</h5>

481 481 

482Un hook de comando se ejecuta como forma exec cuando `args` está establecido, y forma shell cuando `args` se omite. Establece `args` siempre que el hook haga referencia a un [marcador de posición de ruta](#reference-scripts-by-path), ya que cada elemento se pasa como un argumento. Omite `args` cuando necesites características de shell como pipes o `&&`, o cuando ninguna preocupación se aplique.482Un hook de comando se ejecuta como forma exec cuando `args` está establecido, y forma shell cuando `args` se omite. Establece `args` siempre que el hook haga referencia a un [marcador de posición de ruta](#reference-scripts-by-path), ya que cada elemento se pasa como un argumento sin comillas. Omite `args` cuando necesites características de shell como pipes o `&&`, o cuando ninguna preocupación se aplique.

483 483 

484**Forma exec** se ejecuta cuando `args` está presente. Claude Code resuelve `command` como un ejecutable en `PATH` y lo genera directamente con `args` como el vector de argumentos. No hay shell, por lo que cada elemento de `args` es exactamente un argumento tal como está escrito, y los marcadores de posición de ruta como `${CLAUDE_PLUGIN_ROOT}` se sustituyen en `command` y en cada elemento de `args` como cadenas simples. Los caracteres especiales como apóstrofes, `$` y backticks pasan sin cambios porque no hay shell para interpretarlos. No ocurre tokenización de shell en ninguna plataforma.484**Forma exec** se ejecuta cuando `args` está presente. Claude Code resuelve `command` como un ejecutable en `PATH` y lo genera directamente con `args` como el vector de argumentos. No hay shell, así que cada elemento de `args` es un argumento exactamente como está escrito, sin comillas, y los marcadores de posición de ruta como `${CLAUDE_PLUGIN_ROOT}` se sustituyen en `command` y en cada elemento de `args` como cadenas simples. Los caracteres especiales como apóstrofes, `$` y backticks pasan sin cambios porque no hay shell para interpretarlos. No ocurre tokenización de shell en ninguna plataforma.

485 485 

486**Forma shell** se ejecuta cuando `args` se omite. La cadena `command` se pasa a un shell: `sh -c` en macOS y Linux, Git Bash en Windows, o PowerShell cuando Git Bash no está instalado. Establece el campo `shell` para elegir explícitamente. El shell tokeniza la cadena, expande variables e interpreta pipes, `&&`, redirecciones y globs.486**Forma shell** se ejecuta cuando `args` está ausente. La cadena `command` se pasa a un shell: `sh -c` en macOS y Linux, Git Bash en Windows, o PowerShell cuando Git Bash no está instalado. Establece el campo `shell` para elegir explícitamente. El shell tokeniza la cadena, expande variables e interpreta pipes, `&&`, redirecciones y globs.

487 487 

488<Note>488<Note>

489 En Windows, la forma exec requiere que `command` se resuelva en un ejecutable real como `.exe`. Los shims `.cmd` y `.bat` que npm, npx, eslint y otras herramientas instalan en `node_modules/.bin` no son ejecutables y no se pueden generar sin un shell. Para ejecutarlos en forma exec, invoca el script subyacente con `node` directamente, por ejemplo `"command": "node", "args": ["${CLAUDE_PLUGIN_ROOT}/node_modules/eslint/bin/eslint.js"]`. El patrón `node` más ruta de script funciona en cada plataforma porque `node.exe` es un binario real. Para ejecutar un shim `.cmd` o `.bat` por nombre, usa forma shell.489 En Windows, la forma exec requiere que `command` se resuelva en un ejecutable real como `.exe`. Los shims `.cmd` y `.bat` que npm, npx, eslint y otras herramientas instalan en `node_modules/.bin` no son ejecutables y no se pueden generar sin un shell. Para ejecutarlos en forma exec, invoca el script subyacente con `node` directamente, por ejemplo `"command": "node", "args": ["${CLAUDE_PLUGIN_ROOT}/node_modules/eslint/bin/eslint.js"]`. El patrón `node` más ruta de script funciona en cada plataforma porque `node.exe` es un binario real. Para ejecutar un shim `.cmd` o `.bat` por nombre, usa forma shell.


508}508}

509```509```

510 510 

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

512 512 

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

514 514 

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

516 516 

517<Note>517<Note>

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

519</Note>519</Note>

520 520 

521<h4 id="http-hook-fields">521<h4 id="http-hook-fields">


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

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

532 532 

533Claude Code envía la [entrada JSON](#hook-input-and-output) del hook como el cuerpo de solicitud POST con `Content-Type: application/json`. El cuerpo de respuesta utiliza el mismo [formato de salida JSON](#json-output) que los hooks de comando.533Claude Code envía la [entrada JSON](#hook-input-and-output) del hook como el cuerpo de la solicitud POST con `Content-Type: application/json`. El cuerpo de respuesta utiliza el mismo [formato de salida JSON](#json-output) que los hooks de comando.

534 534 

535El manejo de errores difiere de los hooks de comando; consulta [Manejo de respuesta HTTP](#http-response-handling).535El manejo de errores difiere de los hooks de comando; consulta [Manejo de respuesta HTTP](#http-response-handling).

536 536 


603 Cuando el servidor aún se está conectando603 Cuando el servidor aún se está conectando

604</h5>604</h5>

605 605 

606En eventos donde un hook puede bloquear o cambiar el resultado, como `PreToolUse` o `Stop`, Claude Code espera a que se conecte un servidor antes de llamar a la herramienta, durante como máximo [`MCP_TIMEOUT`](/docs/es/env-vars) y dentro del propio [`timeout`](#common-fields) del hook. En eventos observacionales, como `Notification` o `SessionEnd`, no espera.606En eventos donde un hook puede bloquear o cambiar el resultado, como `PreToolUse` o `Stop`, Claude Code espera a que un servidor se conecte antes de llamar a la herramienta, durante como máximo [`MCP_TIMEOUT`](/docs/es/env-vars) y dentro del [`timeout`](#common-fields) del propio hook. En eventos observacionales, como `Notification` o `SessionEnd`, no espera.

607 607 

608Un servidor que muestra el estado [`cached`](/docs/es/mcp#server-status-detail) se conecta cuando el hook llama a su herramienta. Si el servidor no está conectado en ese punto, el hook produce un error sin bloqueo y la ejecución continúa. El hook nunca inicia un flujo OAuth, por lo que [autentica el servidor desde `/mcp`](/docs/es/mcp#authenticate-with-remote-mcp-servers) primero.608Un servidor que muestra el estado [`cached`](/docs/es/mcp#server-status-detail) se conecta cuando el hook llama a su herramienta. Si el servidor no está conectado en ese punto, el hook produce un error sin bloqueo y la ejecución continúa. El hook nunca inicia un flujo OAuth, así que [autentica el servidor desde `/mcp`](/docs/es/mcp#authenticate-with-remote-mcp-servers) primero.

609 609 

610<h5 id="events-that-fire-before-mcp-servers-are-available">610<h5 id="events-that-fire-before-mcp-servers-are-available">

611 Eventos que se activan antes de que los servidores MCP estén disponibles611 Eventos que se activan antes de que los servidores MCP estén disponibles

612</h5>612</h5>

613 613 

614`SessionStart` al lanzar, incluso con `--continue` o `--resume`, y cada evento `Setup` se activan antes de que los servidores MCP de la sesión estén disponibles para los hooks. Claude Code omite sus hooks `mcp_tool` sin llamar a la herramienta, y el [registro de depuración](#debug-hooks) registra `mcp_tool hooks are not available for the 'SessionStart' hook event (no MCP client context)`, o el mismo mensaje nombrando `Setup`. Cuando `SessionStart` se activa de nuevo más tarde en la sesión, después de `/clear` o una compactación, sus hooks `mcp_tool` se ejecutan. Para cualquier cosa que la sesión necesite al lanzar, usa un hook `type: "command"` en `SessionStart` en su lugar.614`SessionStart` al lanzar, incluyendo con `--continue` o `--resume`, y cada evento `Setup` se activan antes de que los servidores MCP de la sesión estén disponibles para hooks. Claude Code omite sus hooks `mcp_tool` sin llamar a la herramienta, y el [registro de depuración](#debug-hooks) registra `mcp_tool hooks are not available for the 'SessionStart' hook event (no MCP client context)`, o el mismo mensaje nombrando `Setup`. Cuando `SessionStart` se activa de nuevo más tarde en la sesión, después de `/clear` o una compactación, sus hooks `mcp_tool` se ejecutan. Para cualquier cosa que la sesión necesite al lanzar, usa un hook `type: "command"` en `SessionStart` en su lugar.

615 615 

616<h4 id="prompt-and-agent-hook-fields">616<h4 id="prompt-and-agent-hook-fields">

617 Campos de hook de prompt y agente617 Campos de hook de prompt y agente


625| `model` | no | Modelo a usar para evaluación. Por defecto es el modelo que Claude Code usa para [funcionalidad de fondo](/docs/es/costs#background-token-usage) |625| `model` | no | Modelo a usar para evaluación. Por defecto es el modelo que Claude Code usa para [funcionalidad de fondo](/docs/es/costs#background-token-usage) |

626 626 

627<h3 id="reference-scripts-by-path">627<h3 id="reference-scripts-by-path">

628 Referencia de scripts por ruta628 Hacer referencia a scripts por ruta

629</h3>629</h3>

630 630 

631Utiliza estos marcadores de posición para hacer referencia a scripts de hook relativos a la raíz del proyecto o plugin, independientemente del directorio de trabajo cuando se ejecuta el hook:631Utiliza estos marcadores de posición para hacer referencia a scripts de hook relativos a la raíz del proyecto o plugin, independientemente del directorio de trabajo cuando se ejecuta el hook:

632 632 

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

634* `${CLAUDE_PLUGIN_ROOT}`: el directorio de instalación del plugin, para scripts incluidos con un [plugin](/docs/es/plugins/overview). Consulta [variables de entorno de plugin](/docs/es/plugins/manifest-reference#environment-variables) para saber cómo se comporta la ruta entre actualizaciones.634* `${CLAUDE_PLUGIN_ROOT}`: el directorio de instalación del plugin, para scripts incluidos con un [plugin](/docs/es/plugins/overview). Consulta [variables de entorno de plugin](/docs/es/plugins/manifest-reference#environment-variables) para saber cómo se comporta la ruta entre actualizaciones.

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

636 636 

637<Note>637<Note>

638 **Los worktrees son diferentes.** Si Claude entra en un [worktree](/docs/es/worktrees) durante la sesión, Claude Code mantiene `${CLAUDE_PROJECT_DIR}` donde estaba y pasa la ruta del worktree a tus hooks de una manera diferente:638 **Los worktrees son diferentes.** Si Claude entra en un [worktree](/docs/es/worktrees) durante la sesión, Claude Code mantiene `${CLAUDE_PROJECT_DIR}` donde estaba y pasa la ruta del worktree a tus hooks de una manera diferente:

639 639 

640 * **`${CLAUDE_PROJECT_DIR}` se queda en su lugar**: aún apunta a la raíz del proyecto donde comenzó la sesión, por lo que un comando como `${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh` aún ejecuta el script en el checkout principal.640 * **`${CLAUDE_PROJECT_DIR}` se queda en su lugar**: aún apunta a la raíz del proyecto donde comenzó la sesión, así que un comando como `${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh` aún ejecuta el script en el checkout principal.

641 * **`cwd` sigue a Claude**: el campo `cwd` en la [entrada JSON](#common-input-fields) del hook es la raíz del worktree después de que Claude entra en un worktree, y el nuevo directorio después de que Claude ejecuta `cd`. Léelo cuando un hook necesite saber en qué directorio está trabajando Claude.641 * **`cwd` sigue a Claude**: el campo `cwd` en la [entrada JSON](#common-input-fields) del hook es la raíz del worktree después de que Claude entra en un worktree, y el nuevo directorio después de que Claude ejecuta `cd`. Léelo cuando un hook necesite saber en qué directorio está trabajando Claude.

642</Note>642</Note>

643 643 


704Además de archivos de configuración y plugins, los hooks pueden definirse directamente en [skills](/docs/es/skills) y [subagentes](/docs/es/sub-agents) usando frontmatter, en el mismo formato de configuración que los hooks basados en configuración. Cuánto tiempo Claude Code los mantiene registrados depende del componente:704Además de archivos de configuración y plugins, los hooks pueden definirse directamente en [skills](/docs/es/skills) y [subagentes](/docs/es/sub-agents) usando frontmatter, en el mismo formato de configuración que los hooks basados en configuración. Cuánto tiempo Claude Code los mantiene registrados depende del componente:

705 705 

706* **Hooks de subagente**: Claude Code los ejecuta solo mientras ese subagente se está ejecutando y los elimina cuando termina. Claude Code convierte un hook `Stop` aquí a `SubagentStop`, el evento que se activa cuando un subagente se completa.706* **Hooks de subagente**: Claude Code los ejecuta solo mientras ese subagente se está ejecutando y los elimina cuando termina. Claude Code convierte un hook `Stop` aquí a `SubagentStop`, el evento que se activa cuando un subagente se completa.

707* **Hooks de skill**: Claude Code los registra cuando tú o Claude invocas la skill y los mantiene ejecutándose durante el resto de la sesión, en turnos después del turno propio de la skill también. Para que Claude Code elimine un hook después de su primera ejecución exitosa en su lugar, establece [`once: true`](#common-fields) en él.707* **Hooks de skill**: Claude Code los registra cuando tú o Claude invocas la skill y los mantiene ejecutándose durante el resto de la sesión, en turnos después del turno de la propia skill también. Para que Claude Code elimine un hook después de su primera ejecución exitosa en su lugar, establece [`once: true`](#common-fields) en él.

708 708 

709Esta skill define un hook `PreToolUse` que ejecuta un script de validación de seguridad antes de cada comando `Bash`:709Esta skill define un hook `PreToolUse` que ejecuta un script de validación de seguridad antes de cada comando `Bash`:

710 710 


723 723 

724Los subagentes utilizan el mismo formato en su frontmatter YAML.724Los subagentes utilizan el mismo formato en su frontmatter YAML.

725 725 

726Los hooks de frontmatter en una skill de proyecto siguen la misma [regla de confianza de espacio de trabajo que los hooks en archivos de configuración](#workspace-trust). Claude Code los registra cuando tú o Claude invocas la skill, incluso en una ejecución `-p` en una carpeta que no has confiado.726Los hooks de frontmatter en una skill de proyecto siguen la misma [regla de confianza de espacio de trabajo que los hooks en archivos de configuración](#workspace-trust). Claude Code los registra cuando tú o Claude invocas la skill, incluyendo en una ejecución `-p` en una carpeta que no has confiado.

727 727 

728Los hooks de frontmatter en un subagente de proyecto se ejecutan solo después de que aceptes el [diálogo de confianza de espacio de trabajo](/docs/es/permissions#project-allow-rules-and-workspace-trust) para la carpeta de la que proviene el archivo del agente. Una sesión `-p` no cuenta como aceptarlo. [Lo que se ejecuta antes de confiar en una carpeta](/docs/es/permissions#what-runs-before-you-trust-a-folder) compara esto con la regla del archivo de configuración, y la página de subagentes lista [qué alcances están exentos](/docs/es/sub-agents#hooks-in-subagent-frontmatter). Antes de v2.1.218, estos hooks podían ejecutarse desde carpetas que no habías confiado.728Los hooks de frontmatter en un subagente de proyecto se ejecutan solo después de que aceptes el [diálogo de confianza de espacio de trabajo](/docs/es/permissions#project-allow-rules-and-workspace-trust) para la carpeta de la que vino el archivo del agente. Una sesión `-p` no cuenta como aceptarlo. [Qué se ejecuta antes de confiar en una carpeta](/docs/es/permissions#what-runs-before-you-trust-a-folder) compara esto con la regla del archivo de configuración, y la página de subagentes enumera [qué alcances están exentos](/docs/es/sub-agents#hooks-in-subagent-frontmatter). Antes de v2.1.218, estos hooks podían ejecutarse desde carpetas que no habías confiado.

729 729 

730<h3 id="the-/hooks-menu">730<h3 id="the-/hooks-menu">

731 El menú `/hooks`731 El menú `/hooks`

732</h3>732</h3>

733 733 

734Escribe `/hooks` en Claude Code para abrir un navegador de solo lectura para tus hooks configurados. El menú muestra cada evento de hook con un recuento de hooks configurados, te permite profundizar en matchers y muestra los detalles completos de cada manejador de hook. Úsalo para verificar la configuración, comprobar desde qué archivo de configuración proviene un hook o inspeccionar el comando, prompt o URL de un hook.734Escribe `/hooks` en Claude Code para abrir un navegador de solo lectura para tus hooks configurados. El menú muestra cada evento de hook con un recuento de hooks configurados, te permite profundizar en matchers y muestra los detalles completos de cada manejador de hook. Úsalo para verificar la configuración, comprobar desde qué archivo de configuración vino un hook o inspeccionar el comando, prompt o URL de un hook.

735 735 

736El menú muestra los cinco tipos de hook: `command`, `prompt`, `agent`, `http` y `mcp_tool`. Cada hook está etiquetado con un prefijo `[type]` y una fuente que indica dónde se definió:736El menú muestra los cinco tipos de hook: `command`, `prompt`, `agent`, `http` y `mcp_tool`. Cada hook está etiquetado con un prefijo `[type]` y una fuente que indica dónde fue definido:

737 737 

738* `User Settings`: de `~/.claude/settings.json`738* `User Settings`: de `~/.claude/settings.json`

739* `Project Settings`: de `.claude/settings.json`739* `Project Settings`: de `.claude/settings.json`


741* `Plugin Hooks`: de `hooks/hooks.json` de un plugin741* `Plugin Hooks`: de `hooks/hooks.json` de un plugin

742* `Session Hooks`: registrado en memoria para la sesión actual742* `Session Hooks`: registrado en memoria para la sesión actual

743 743 

744Seleccionar un hook abre una vista de detalle mostrando su evento, matcher, tipo, archivo de origen y el comando, prompt o URL completo. El menú es de solo lectura: para añadir, modificar o eliminar hooks, edita el JSON de configuración directamente o pide a Claude que haga el cambio.744Seleccionar un hook abre una vista de detalle que muestra su evento, matcher, tipo, archivo de fuente y el comando, prompt o URL completo. El menú es de solo lectura: para añadir, modificar o eliminar hooks, edita el JSON de configuración directamente o pide a Claude que haga el cambio.

745 745 

746<h3 id="disable-or-remove-hooks">746<h3 id="disable-or-remove-hooks">

747 Deshabilitar o eliminar hooks747 Deshabilitar o eliminar hooks

748</h3>748</h3>

749 749 

750Para eliminar un hook, elimina su entrada del archivo JSON de configuración.750Para eliminar un hook, borra su entrada del archivo de configuración JSON.

751 751 

752Para deshabilitar temporalmente todos los hooks sin eliminarlos, establece `"disableAllHooks": true` en tu archivo de configuración. Claude Code lee el valor que queda después de que se aplica la [precedencia de configuración](/docs/es/settings#settings-precedence), por lo que un `"disableAllHooks": false` en `.claude/settings.json` de un proyecto anula un `true` en tu configuración de usuario. Para desactivar los hooks para una ejecución sin importar lo que diga la configuración del proyecto, pasa `--settings '{"disableAllHooks": true}'`, que tiene precedencia sobre la configuración de proyecto y local. No hay forma de deshabilitar un hook individual mientras lo mantienes en la configuración.752Para deshabilitar temporalmente todos los hooks sin eliminarlos, establece `"disableAllHooks": true` en tu archivo de configuración. Claude Code lee el valor que queda después de que se aplica la [precedencia de configuración](/docs/es/settings#settings-precedence), así que un `"disableAllHooks": false` en `.claude/settings.json` de un proyecto anula un `true` en tu configuración de usuario. Para desactivar hooks para una ejecución sin importar lo que diga la configuración del proyecto, pasa `--settings '{"disableAllHooks": true}'`, que tiene precedencia sobre la configuración de proyecto y local. No hay forma de deshabilitar un hook individual mientras lo mantienes en la configuración.

753 753 

754La configuración `disableAllHooks` respeta la jerarquía de configuración administrada. Si un administrador ha configurado hooks a través de la configuración de política administrada, `disableAllHooks` establecido en la configuración de usuario, proyecto o local no puede deshabilitar esos hooks administrados. Solo `disableAllHooks` establecido en el nivel de configuración administrada puede deshabilitar hooks administrados. Para el alcance completo de cada nivel, consulta [`disableAllHooks`](/docs/es/settings-reference#disableallhooks).754La configuración `disableAllHooks` respeta la jerarquía de configuración administrada. Si un administrador ha configurado hooks a través de configuración de política administrada, `disableAllHooks` establecido en configuración de usuario, proyecto o local no puede deshabilitar esos hooks administrados. Solo `disableAllHooks` establecido en el nivel de configuración administrada puede deshabilitar hooks administrados. Para el alcance completo de cada nivel, consulta [`disableAllHooks`](/docs/es/settings-reference#disableallhooks).

755 755 

756Las ediciones directas a hooks en archivos de configuración normalmente se recogen automáticamente por el observador de archivos.756Las ediciones directas a hooks en archivos de configuración normalmente son recogidas automáticamente por el observador de archivos.

757 757 

758<h2 id="hook-input-and-output">758<h2 id="hook-input-and-output">

759 Entrada y salida de hooks759 Entrada y salida de hooks


1938| :- | :- |1938| :- | :- |

1939| `permissionDecision` | `"allow"` omite el prompt de permiso, excepto para las [acciones que ningún modo auto-aprueba](/docs/es/permission-modes#actions-no-mode-auto-approves) y para `AskUserQuestion` y `ExitPlanMode`, que necesitan [`updatedInput` emparejado con él](#allow-with-updatedinput). `"deny"` evita la llamada de herramienta. `"ask"` solicita al usuario que confirme. `"defer"` sale correctamente para que la herramienta pueda reanudarse más tarde. Las [reglas de denegación y pregunta](/docs/es/permissions#manage-permissions) aún se evalúan independientemente de lo que devuelva el hook |1939| `permissionDecision` | `"allow"` omite el prompt de permiso, excepto para las [acciones que ningún modo auto-aprueba](/docs/es/permission-modes#actions-no-mode-auto-approves) y para `AskUserQuestion` y `ExitPlanMode`, que necesitan [`updatedInput` emparejado con él](#allow-with-updatedinput). `"deny"` evita la llamada de herramienta. `"ask"` solicita al usuario que confirme. `"defer"` sale correctamente para que la herramienta pueda reanudarse más tarde. Las [reglas de denegación y pregunta](/docs/es/permissions#manage-permissions) aún se evalúan independientemente de lo que devuelva el hook |

1940| `permissionDecisionReason` | Para `"ask"`, se muestra al usuario pero no a Claude. Para `"deny"`, se muestra a Claude. Para `"allow"` y `"defer"`, se escribe en el [registro de depuración](#debug-hooks) solo |1940| `permissionDecisionReason` | Para `"ask"`, se muestra al usuario pero no a Claude. Para `"deny"`, se muestra a Claude. Para `"allow"` y `"defer"`, se escribe en el [registro de depuración](#debug-hooks) solo |

1941| `updatedInput` | Modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, así que incluya campos sin cambios junto con los modificados. Claude Code evalúa reglas de permiso y la [elegibilidad de ejecución en segundo plano](/docs/es/tools-reference#background-commands) de un comando Bash contra la entrada que devuelve su hook, no la entrada que envió Claude. Combine con `"allow"` para auto-aprobar, o `"ask"` para mostrar la entrada modificada al usuario. Para `"defer"`, se ignora |1941| `updatedInput` | Modifica los parámetros de entrada de la herramienta antes de la ejecución. Reemplaza el objeto de entrada completo, así que incluya campos sin cambios junto con los modificados. Claude Code evalúa reglas de permiso y la [elegibilidad de ejecución en segundo plano](/docs/es/tools-reference#foreground-commands-that-move-to-the-background) de un comando Bash contra la entrada que devuelve su hook, no la entrada que envió Claude. Combine con `"allow"` para auto-aprobar, o `"ask"` para mostrar la entrada modificada al usuario. Para `"defer"`, se ignora |

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

1943 1943 

1944Cuando múltiples hooks PreToolUse devuelven decisiones diferentes, la precedencia es `deny` > `defer` > `ask` > `allow`.1944Cuando múltiples hooks PreToolUse devuelven decisiones diferentes, la precedencia es `deny` > `defer` > `ask` > `allow`.

hooks-guide.md +3 −1

Details

1014 1014 

1015Los hooks `PreToolUse` se activan antes de cualquier verificación de modo de permiso, en cada [modo de permiso](/docs/es/permission-modes), incluyendo `dontAsk`. Un hook que devuelve `permissionDecision: "deny"` bloquea la herramienta incluso en modo `bypassPermissions` o con `--dangerously-skip-permissions`. Esto le permite aplicar política que los usuarios no pueden eludir cambiando su modo de permiso.1015Los hooks `PreToolUse` se activan antes de cualquier verificación de modo de permiso, en cada [modo de permiso](/docs/es/permission-modes), incluyendo `dontAsk`. Un hook que devuelve `permissionDecision: "deny"` bloquea la herramienta incluso en modo `bypassPermissions` o con `--dangerously-skip-permissions`. Esto le permite aplicar política que los usuarios no pueden eludir cambiando su modo de permiso.

1016 1016 

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

1018 

1019Un [mod](/docs/es/plugins/mods/overview) que instale y que enganche `tool.check` puede aprobar una llamada que su hook `PreToolUse` bloqueó, a menos que el hook esté en configuración administrada. [Extender permisos con hooks](/docs/es/permissions#extend-permissions-with-hooks) enumera qué reglas prevalecen sobre un mod.

1018 1020 

1019<h3 id="hook-not-firing">1021<h3 id="hook-not-firing">

1020 Hook no se activa1022 Hook no se activa

Details

346* Indicar a Claude Code que ejecute un comando en segundo plano346* Indicar a Claude Code que ejecute un comando en segundo plano

347* Presionar `Ctrl+B` para mover una invocación regular de la herramienta Bash al segundo plano. Los usuarios de Tmux deben presionar `Ctrl+B` dos veces debido a la tecla de prefijo de tmux.347* Presionar `Ctrl+B` para mover una invocación regular de la herramienta Bash al segundo plano. Los usuarios de Tmux deben presionar `Ctrl+B` dos veces debido a la tecla de prefijo de tmux.

348 348 

349Cuando un comando alcanza su tiempo de espera antes de terminar, Claude Code automáticamente [lo mueve al segundo plano](/docs/es/tools-reference#background-commands) en lugar de detenerlo, a menos que el comando comience con `sleep`. Para cambiar cuánto tiempo se ejecutan los comandos antes de que esto suceda, establezca las [variables de entorno de tiempo de espera de Bash](/docs/es/tools-reference#timeout-and-output-limits).349Cuando un comando alcanza su tiempo de espera antes de terminar, Claude Code automáticamente [lo mueve al segundo plano](/docs/es/tools-reference#foreground-commands-that-move-to-the-background) en lugar de detenerlo, a menos que el comando comience con `sleep`. Si ha desactivado las tareas en segundo plano con [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/es/env-vars#variables) o iniciando en [modo bare](/docs/es/headless#start-faster-with-bare-mode), el comando se detiene en su tiempo de espera. Para cambiar el tiempo de espera, establezca las [variables de entorno de tiempo de espera de Bash](/docs/es/tools-reference#timeout-and-output-limits).

350 350 

351**Características clave:**351**Características clave:**

352 352 


358* En macOS y Linux, Claude Code detiene sus tareas en segundo plano en ejecución cuando el sistema operativo señala presión de memoria crítica, siempre que la sesión haya estado inactiva durante al menos 30 minutos y no se esté ejecutando ningún turno o subagente. Requiere Claude Code v2.1.193 o posterior358* En macOS y Linux, Claude Code detiene sus tareas en segundo plano en ejecución cuando el sistema operativo señala presión de memoria crítica, siempre que la sesión haya estado inactiva durante al menos 30 minutos y no se esté ejecutando ningún turno o subagente. Requiere Claude Code v2.1.193 o posterior

359 * El [registro de depuración](/docs/es/debug-your-config) indica por qué se detuvieron las tareas, o por qué un evento de presión las dejó en ejecución359 * El [registro de depuración](/docs/es/debug-your-config) indica por qué se detuvieron las tareas, o por qué un evento de presión las dejó en ejecución

360 * Establezca [`CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP`](/docs/es/env-vars) en `1` para desactivar las detenciones por presión de memoria360 * Establezca [`CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP`](/docs/es/env-vars) en `1` para desactivar las detenciones por presión de memoria

361* Los comandos Bash y PowerShell en segundo plano tienen un límite de tiempo, contado desde el momento en que el comando entra en segundo plano: 30 minutos, o el `timeout` que Claude solicita cuando inicia un comando en segundo plano, hasta un máximo de 2 horas. Un comando que se mueve al segundo plano mientras se ejecuta, por ejemplo con `Ctrl+B`, obtiene 30 minutos desde el movimiento. Cuando un comando alcanza su límite, Claude Code lo detiene y le dice a Claude por qué, y Claude puede iniciarlo nuevamente con un `timeout` más largo si el trabajo aún lo necesita. Dos variables de entorno elevan los límites, en milisegundos, y ninguna puede acortarlos:361* Los comandos Bash y PowerShell en segundo plano tienen un límite de tiempo, contado desde el momento en que el comando entra en segundo plano: 30 minutos, o el `timeout` que Claude solicita cuando inicia un comando en segundo plano, hasta un máximo de 2 horas. Un comando que se mueve al segundo plano mientras se ejecuta, por ejemplo con `Ctrl+B`, obtiene 30 minutos desde el movimiento. Cuando un comando alcanza su límite, Claude Code lo detiene y le dice a Claude por qué, y Claude puede iniciarlo nuevamente con un `timeout` más largo si el trabajo aún lo necesita. Para prolongar los límites, consulte [Aumentar el límite de tiempo para comandos en segundo plano](/docs/es/tools-reference#raise-the-time-limit-for-background-commands) en la referencia de herramientas

362 * Establezca [`BASH_DEFAULT_TIMEOUT_MS`](/docs/es/env-vars) por encima de `1800000` para reemplazar el valor predeterminado de 30 minutos con ese valor, también para comandos movidos362* Un comando en segundo plano que un [subagente](/docs/es/sub-agents#run-subagents-in-foreground-or-background) en primer plano inició termina cuando ese subagente finaliza su ejecución, ya sea que se haya completado, fallado o fue interrumpido; consulte [Cuándo se detiene un comando en segundo plano](/docs/es/tools-reference#when-a-background-command-stops) en la referencia de herramientas

363 * Establezca [`BASH_MAX_TIMEOUT_MS`](/docs/es/env-vars) por encima de `7200000` para elevar el máximo de 2 horas. Establecer `BASH_DEFAULT_TIMEOUT_MS` por encima de `7200000` lo eleva de la misma manera

364* Un comando en segundo plano que un [subagente](/docs/es/sub-agents#run-subagents-in-foreground-or-background) en primer plano inició termina cuando ese subagente finaliza su ejecución, ya sea que se haya completado, fallado o fue interrumpido; consulte [Comandos en segundo plano](/docs/es/tools-reference#background-commands) en la referencia de herramientas

365 363 

366Para desactivar toda la funcionalidad de tareas en segundo plano, establezca la variable de entorno `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` en `1`. Consulte [Variables de entorno](/docs/es/env-vars) para obtener más detalles.364Para desactivar toda la funcionalidad de tareas en segundo plano, establezca la variable de entorno [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/es/env-vars#variables) en `1`. Iniciar en [modo bare](/docs/es/headless#start-faster-with-bare-mode) también la desactiva.

367 365 

368**Comandos comúnmente colocados en segundo plano:**366**Comandos comúnmente colocados en segundo plano:**

369 367 

keybindings.md +1 −3

Details

545* Bajo un diseño no latino como el cirílico, Claude Code coincide con los atajos de teclado Ctrl por la posición de la tecla en el diseño estadounidense cuando la terminal utiliza el protocolo de teclado Kitty e informa esa posición. En tal terminal, con un diseño ruso activo, presionar Ctrl y la tecla W física activa `ctrl+w`. En una terminal que no informa la posición, Claude Code coincide con lo que la terminal envía para la pulsación de tecla: un código de control ASCII activa el atajo latino, y una pulsación de tecla que llega como el carácter cirílico no coincide con ningún atajo de teclado545* Bajo un diseño no latino como el cirílico, Claude Code coincide con los atajos de teclado Ctrl por la posición de la tecla en el diseño estadounidense cuando la terminal utiliza el protocolo de teclado Kitty e informa esa posición. En tal terminal, con un diseño ruso activo, presionar Ctrl y la tecla W física activa `ctrl+w`. En una terminal que no informa la posición, Claude Code coincide con lo que la terminal envía para la pulsación de tecla: un código de control ASCII activa el atajo latino, y una pulsación de tecla que llega como el carácter cirílico no coincide con ningún atajo de teclado

546* Bajo diseños que reorganizan letras latinas, como AZERTY, Claude Code coincide con la letra que escribe la tecla, por lo que presionar Ctrl y la tecla etiquetada A activa `ctrl+a`546* Bajo diseños que reorganizan letras latinas, como AZERTY, Claude Code coincide con la letra que escribe la tecla, por lo que presionar Ctrl y la tecla etiquetada A activa `ctrl+a`

547 547 

548Antes de v2.1.247, presionar un atajo de teclado Ctrl bajo un diseño no latino no activaba su atajo de teclado en terminales que utilizan el protocolo de teclado Kitty, como Ghostty, Kitty, WezTerm e iTerm2.

549 

550<h3 id="chords">548<h3 id="chords">

551 Acordes549 Acordes

552</h3>550</h3>


697* Modificadores mal escritos, como `ctl+k`. Claude Code descarta la parte que no reconoce y aplica la vinculación a la pulsación de tecla que permanece, `k` en este ejemplo.695* Modificadores mal escritos, como `ctl+k`. Claude Code descarta la parte que no reconoce y aplica la vinculación a la pulsación de tecla que permanece, `k` en este ejemplo.

698* Nombres de contexto inválidos696* Nombres de contexto inválidos

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

700* Nombres de acción desconocidos, como un error tipográfico de una acción registrada. Claude Code omite la vinculación y mantiene cualquier vinculación predeterminada para esa tecla en vigor. Antes de v2.1.246, una vinculación con un nombre de acción desconocido deshabilitaba silenciosamente esa tecla698* Nombres de acción desconocidos, como un error tipográfico de una acción registrada. Claude Code omite la vinculación y mantiene cualquier vinculación predeterminada para esa tecla en vigor.

701* Conflictos de atajos reservados699* Conflictos de atajos reservados

702* Vinculaciones duplicadas en el mismo contexto700* Vinculaciones duplicadas en el mismo contexto

703 701 

llm-gateway.md +2 −0

Details

45 45 

46[Despliegue una puerta de enlace LLM para su organización](/docs/es/llm-gateway-rollout) camina cada paso y muestra los archivos de configuración a distribuir en cada uno. La puerta de enlace es una parte de la configuración de la organización; para aplicación de políticas, visibilidad de uso y decisiones de manejo de datos, consulte [Configure Claude Code para su organización](/docs/es/admin-setup).46[Despliegue una puerta de enlace LLM para su organización](/docs/es/llm-gateway-rollout) camina cada paso y muestra los archivos de configuración a distribuir en cada uno. La puerta de enlace es una parte de la configuración de la organización; para aplicación de políticas, visibilidad de uso y decisiones de manejo de datos, consulte [Configure Claude Code para su organización](/docs/es/admin-setup).

47 47 

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

49 

48<h2 id="subscriptions-and-gateways">50<h2 id="subscriptions-and-gateways">

49 Suscripciones y puertas de enlace51 Suscripciones y puertas de enlace

50</h2>52</h2>

Details

310 310 

311Claude Code envía la solicitud de descubrimiento con ambos encabezados de credencial a continuación y omite un encabezado cuyo valor no se resuelve. Enviar ambos encabezados requiere Claude Code v2.1.248 o posterior. Las versiones anteriores envían solo `Authorization` cuando `ANTHROPIC_AUTH_TOKEN` se establece y solo `x-api-key` de lo contrario.311Claude Code envía la solicitud de descubrimiento con ambos encabezados de credencial a continuación y omite un encabezado cuyo valor no se resuelve. Enviar ambos encabezados requiere Claude Code v2.1.248 o posterior. Las versiones anteriores envían solo `Authorization` cuando `ANTHROPIC_AUTH_TOKEN` se establece y solo `x-api-key` de lo contrario.

312 312 

313* `Authorization`: `ANTHROPIC_AUTH_TOKEN` como un token portador, de lo contrario el valor [`apiKeyHelper`](/docs/es/llm-gateway-connect#rotate-credentials-with-apikeyhelper) como un token portador. En ese caso, Claude Code espera a que el asistente regrese antes de enviar la solicitud.313* `Authorization`: `ANTHROPIC_AUTH_TOKEN` como un token portador, de lo contrario el valor [`apiKeyHelper`](/docs/es/llm-gateway-connect#rotate-credentials-with-apikeyhelper) como un token portador.

314* `x-api-key`: la clave API que Claude Code resolvió, como `ANTHROPIC_API_KEY`. Cuando un valor de asistente es la única credencial, este encabezado también la lleva, por lo que el valor llega en ambos encabezados.314* `x-api-key`: la clave API que Claude Code resolvió, como `ANTHROPIC_API_KEY`. Cuando un valor de asistente es la única credencial, este encabezado también la lleva, por lo que el valor llega en ambos encabezados.

315 315 

316Claude Code también envía cualquier encabezado de `ANTHROPIC_CUSTOM_HEADERS`. Cuando un encabezado personalizado tiene un valor no vacío, Claude Code lo envía en lugar de un encabezado integrado del mismo nombre, haciendo coincidir los nombres sin distinción de mayúsculas y minúsculas.316Claude Code también envía cualquier encabezado de `ANTHROPIC_CUSTOM_HEADERS`. Cuando un encabezado personalizado tiene un valor no vacío, Claude Code lo envía en lugar de un encabezado integrado del mismo nombre, haciendo coincidir los nombres sin distinción de mayúsculas y minúsculas.

Details

199 199 

200Las [claves de inicio de sesión de puerta de enlace](#choose-a-delivery-mechanism) siguen una regla separada. Claude Code nunca las lee de la configuración administrada por servidor, por lo que mientras la configuración administrada por servidor es la fuente seleccionada, la fuente de administrador con mayor rango en la máquina que lleva una clave de política aún las suministra. Un valor en una fuente de administrador clasificada por debajo de esa, o en el registro HKCU, se ignora.200Las [claves de inicio de sesión de puerta de enlace](#choose-a-delivery-mechanism) siguen una regla separada. Claude Code nunca las lee de la configuración administrada por servidor, por lo que mientras la configuración administrada por servidor es la fuente seleccionada, la fuente de administrador con mayor rango en la máquina que lleva una clave de política aún las suministra. Un valor en una fuente de administrador clasificada por debajo de esa, o en el registro HKCU, se ignora.

201 201 

202[`allowedProviders`](/docs/es/settings-reference#allowedproviders) tiene su propia regla: la nota Scope de su entrada dice cómo una lista establecida en la máquina se combina con una administrada por servidor. Requiere Claude Code v2.1.285 o posterior.

203 

202Cuando una fuente de administrador establece `allowManagedMcpServersOnly` o una lista `allowedMcpServers` y ese valor no es el que está en vigor, `/status` y `claude doctor` nombran esa fuente y clave.204Cuando una fuente de administrador establece `allowManagedMcpServersOnly` o una lista `allowedMcpServers` y ese valor no es el que está en vigor, `/status` y `claude doctor` nombran esa fuente y clave.

203 205 

204<h3 id="compose-every-managed-source">206<h3 id="compose-every-managed-source">


353* Un archivo de configuración administrada vacío cuenta como `{}`.355* Un archivo de configuración administrada vacío cuenta como `{}`.

354* Un valor malformado en la clave de registro HKCU que se puede escribir por el usuario nunca bloquea el lanzamiento. Claude Code lo reporta como un aviso en `/status` y `claude doctor` en su lugar.356* Un valor malformado en la clave de registro HKCU que se puede escribir por el usuario nunca bloquea el lanzamiento. Claude Code lo reporta como un aviso en `/status` y `claude doctor` en su lugar.

355 357 

356Si un archivo de configuración administrada, archivo de complemento o directorio `managed-settings.d/` no se puede leer y ninguna fuente de administrador proporciona una política, las sesiones que inician sesión con credenciales de claude.ai o Claude Console salen al inicio con un mensaje para contactar a un administrador.358Cuando un archivo de configuración administrada, archivo de complemento, directorio `managed-settings.d/`, perfil MDM o valor de registro HKLM existe pero no se puede leer, y ninguna fuente de administrador proporciona una política, lo que sucede depende de por qué falló la lectura:

359 

360* Si el sistema operativo denegó la lectura, por ejemplo en un archivo de solo raíz, cada sesión se inicia sin las políticas de esa fuente. `/status` y `claude doctor` registran el fallo, y una ejecución con `-p` también lo imprime a stderr.

361* Para cualquier otro fallo de lectura, como un error de E/S, cada sesión sale al inicio con [un mensaje para contactar a un administrador](/docs/es/errors#unable-to-read-managed-policy-settings).

357 362 

358Para encontrar una entrada descartada, busque en uno de tres lugares:363Para encontrar una entrada descartada, busque en uno de tres lugares:

359 364 


387| Campo | Comportamiento cuando está presente pero es inválido |392| Campo | Comportamiento cuando está presente pero es inválido |

388| :- | :- |393| :- | :- |

389| `allowedMcpServers` | Se aplica como una lista de permitidos vacía hasta que se corrija el valor, por lo que ningún servidor MCP que los usuarios agreguen se admite. Los servidores que su organización entrega a través de [`managedMcpServers`](/docs/es/settings-reference#managedmcpservers) aún se cargan, y los servidores `managed-mcp.json` se cargan según [Cómo se evalúa un servidor](/docs/es/managed-mcp#how-a-server-is-evaluated). Una entrada individual inválida se elimina y el subconjunto válido se aplica. |394| `allowedMcpServers` | Se aplica como una lista de permitidos vacía hasta que se corrija el valor, por lo que ningún servidor MCP que los usuarios agreguen se admite. Los servidores que su organización entrega a través de [`managedMcpServers`](/docs/es/settings-reference#managedmcpservers) aún se cargan, y los servidores `managed-mcp.json` se cargan según [Cómo se evalúa un servidor](/docs/es/managed-mcp#how-a-server-is-evaluated). Una entrada individual inválida se elimina y el subconjunto válido se aplica. |

395| [`allowedProviders`](/docs/es/settings-reference#allowedproviders) | Se aplica como una lista de permitidos vacía hasta que se corrija el valor, por lo que cada proveedor de API se rechaza y Claude Code no se inicia en la máquina. Si solo una entrada individual no es un nombre de proveedor conocido, Claude Code descarta y reporta esa entrada y aplica el resto. |

390| `allowedHttpHookUrls` | Claude Code aplica una [lista de permitidos](/docs/es/settings-reference#allowedhttphookurls) administrada vacía hasta que corrija el valor, por lo que un hook HTTP se ejecuta solo si otro archivo de configuración enumera su URL. Si solo una entrada individual es inválida, Claude Code elimina esa entrada y aplica el resto. |396| `allowedHttpHookUrls` | Claude Code aplica una [lista de permitidos](/docs/es/settings-reference#allowedhttphookurls) administrada vacía hasta que corrija el valor, por lo que un hook HTTP se ejecuta solo si otro archivo de configuración enumera su URL. Si solo una entrada individual es inválida, Claude Code elimina esa entrada y aplica el resto. |

391| `httpHookAllowedEnvVars` | Claude Code aplica una [lista de permitidos](/docs/es/settings-reference#httphookallowedenvvars) administrada vacía hasta que corrija el valor, por lo que una variable de encabezado se interpola solo si otro archivo de configuración la nombra. Si solo una entrada individual es inválida, Claude Code elimina esa entrada y aplica el resto. |397| `httpHookAllowedEnvVars` | Claude Code aplica una [lista de permitidos](/docs/es/settings-reference#httphookallowedenvvars) administrada vacía hasta que corrija el valor, por lo que una variable de encabezado se interpola solo si otro archivo de configuración la nombra. Si solo una entrada individual es inválida, Claude Code elimina esa entrada y aplica el resto. |

392| `allowedChannelPlugins` | Claude Code aplica una lista de permitidos vacía hasta que corrija el valor, por lo que ningún plugin de canal pasado a `--channels` se admite. Si solo una entrada individual es inválida, elimina esa entrada y aplica el resto. |398| `allowedChannelPlugins` | Claude Code aplica una lista de permitidos vacía hasta que corrija el valor, por lo que ningún plugin de canal pasado a `--channels` se admite. Si solo una entrada individual es inválida, elimina esa entrada y aplica el resto. |


437 443 

438La mayoría de ellas son bloqueos: el valor que un bloqueo rige, como reglas de permisos o `sandbox.network.allowedDomains`, es una clave ordinaria que cualquier nivel puede establecer, y el bloqueo le dice a Claude Code que honre solo el valor administrado.444La mayoría de ellas son bloqueos: el valor que un bloqueo rige, como reglas de permisos o `sandbox.network.allowedDomains`, es una clave ordinaria que cualquier nivel puede establecer, y el bloqueo le dice a Claude Code que honre solo el valor administrado.

439 445 

440La tabla cubre los controles de permisos, plugins y entrega. Para cualquier clave no enumerada aquí, la columna Scope de la [referencia de configuración](/docs/es/settings-reference#all-settings) dice si es solo administrada; las claves solo administradas restantes allí incluyen la URL de inicio de sesión de puerta de enlace, versión, navegador, simulador móvil, host SSH, sesión local de Desktop, ruta binaria de sandbox, precios de modelo, restricción de modelo y controles CLAUDE.md.446La tabla cubre los controles de permisos, plugins y entrega. Para cualquier clave no enumerada aquí, la columna Scope de la [referencia de configuración](/docs/es/settings-reference#all-settings) dice si es solo administrada.

441 447 

442| Configuración | Descripción |448| Configuración | Descripción |

443| :- | :- |449| :- | :- |

mcp.md +74 −72

Details

90 90 

91Al configurar servidores MCP a través de JSON en `.mcp.json`, `~/.claude.json`, o `claude mcp add-json`, el campo `type` acepta `streamable-http` como alias para `http`. La especificación MCP utiliza el nombre `streamable-http` para este transporte, por lo que las configuraciones copiadas de la documentación del servidor funcionan sin modificación.91Al configurar servidores MCP a través de JSON en `.mcp.json`, `~/.claude.json`, o `claude mcp add-json`, el campo `type` acepta `streamable-http` como alias para `http`. La especificación MCP utiliza el nombre `streamable-http` para este transporte, por lo que las configuraciones copiadas de la documentación del servidor funcionan sin modificación.

92 92 

93Una entrada JSON que tiene una `url` pero no tiene `type` es un error de configuración, porque Claude Code lee una entrada sin `type` como un servidor stdio. Claude Code omite ese servidor e informa `MCP server "<name>" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry`. Antes de v2.1.202, Claude Code informaba esta configuración incorrecta como `command: expected string, received undefined`.93Una entrada JSON que tiene una `url` pero sin `type` es un error de configuración, porque Claude Code lee una entrada sin `type` como un servidor stdio. Claude Code omite ese servidor e informa `MCP server "<name>" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry`. Antes de v2.1.202, Claude Code informaba esta configuración incorrecta como `command: expected string, received undefined`.

94 94 

95Solo una aplicación host del SDK, como una aplicación [Agent SDK](/docs/es/agent-sdk/mcp) o la [aplicación de escritorio](/docs/es/desktop), puede registrar un servidor `"type": "sdk"` en proceso. Claude Code omite una entrada `"type": "sdk"` en `.mcp.json`, `~/.claude.json`, o configuración e informa `Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register`.95Solo una aplicación host SDK, como una aplicación [Agent SDK](/docs/es/agent-sdk/mcp) o la [aplicación de escritorio](/docs/es/desktop), puede registrar un servidor `"type": "sdk"` en proceso. Claude Code omite una entrada `"type": "sdk"` en `.mcp.json`, `~/.claude.json`, o configuración e informa `Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register`.

96 96 

97En ejecuciones `--output-format stream-json`, Claude Code también informa una entrada `--mcp-config` omitida en el campo [`mcp_server_errors`](/docs/es/headless#stream-responses) del evento `system/init`, para que los scripts puedan detectar que el servidor nunca se cargó. Esto requiere Claude Code v2.1.219 o posterior.97En ejecuciones `--output-format stream-json`, Claude Code también informa una entrada `--mcp-config` omitida en el campo [`mcp_server_errors`](/docs/es/headless#stream-responses) del evento `system/init`, para que los scripts puedan detectar que el servidor nunca se cargó. Esto requiere Claude Code v2.1.219 o posterior.

98 98 


101</h3>101</h3>

102 102 

103<Warning>103<Warning>

104 El transporte SSE (Server-Sent Events) está deprecado. Utilice servidores HTTP en su lugar, cuando estén disponibles.104 El transporte SSE (Server-Sent Events) está deprecado. Use servidores HTTP en su lugar, cuando estén disponibles.

105</Warning>105</Warning>

106 106 

107Algunos servicios aún exponen solo un punto final SSE. Agréguelos con el mismo comando `claude mcp add --transport http <name> <url>` que [un servidor HTTP](#option-1-add-a-remote-http-server). Claude Code intenta el transporte HTTP primero y cambia a SSE cuando el servidor no lo acepta. El cambio automático requiere Claude Code v2.1.265 o posterior.107Algunos servicios aún exponen solo un punto final SSE. Agréguelos con el mismo comando `claude mcp add --transport http <name> <url>` que [un servidor HTTP](#option-1-add-a-remote-http-server). Claude Code intenta el transporte HTTP primero y cambia a SSE cuando el servidor no lo acepta. El cambio automático requiere Claude Code v2.1.265 o posterior.


128 128 

129Claude Code establece `CLAUDE_PROJECT_DIR` en el entorno del servidor generado a la raíz del proyecto, para que su servidor pueda resolver rutas relativas al proyecto sin depender del directorio de trabajo. Este es el mismo directorio que los hooks reciben en su variable `CLAUDE_PROJECT_DIR`. Léalo desde dentro de su proceso de servidor, por ejemplo `process.env.CLAUDE_PROJECT_DIR` en Node o `os.environ["CLAUDE_PROJECT_DIR"]` en Python.129Claude Code establece `CLAUDE_PROJECT_DIR` en el entorno del servidor generado a la raíz del proyecto, para que su servidor pueda resolver rutas relativas al proyecto sin depender del directorio de trabajo. Este es el mismo directorio que los hooks reciben en su variable `CLAUDE_PROJECT_DIR`. Léalo desde dentro de su proceso de servidor, por ejemplo `process.env.CLAUDE_PROJECT_DIR` en Node o `os.environ["CLAUDE_PROJECT_DIR"]` en Python.

130 130 

131`CLAUDE_PROJECT_DIR` es la raíz del proyecto estable y no cambia cuando agrega o elimina directorios de trabajo a mitad de sesión. Un servidor que limita su propio acceso al sistema de archivos a un conjunto de directorios permitidos debe implementar la solicitud MCP `roots/list` en su lugar. Claude Code responde `roots/list` con el directorio de lanzamiento de la sesión más cada [directorio de trabajo adicional](/docs/es/permissions#working-directories) que haya otorgado con `--add-dir`, `/add-dir`, o la configuración `additionalDirectories`. Claude Code envía `notifications/roots/list_changed` cuando ese conjunto cambia. Antes de v2.1.203, `roots/list` devolvía solo el directorio de lanzamiento y Claude Code no enviaba `notifications/roots/list_changed`.131`CLAUDE_PROJECT_DIR` es la raíz del proyecto estable y no cambia cuando agrega o elimina directorios de trabajo a mitad de sesión. Un servidor que limita su propio acceso al sistema de archivos a un conjunto de directorios permitidos debe implementar la solicitud MCP `roots/list` en su lugar. Claude Code responde `roots/list` con el directorio de lanzamiento de la sesión más cada [directorio de trabajo adicional](/docs/es/permissions#working-directories) que ha otorgado con `--add-dir`, `/add-dir`, o la configuración `additionalDirectories`. Claude Code envía `notifications/roots/list_changed` cuando ese conjunto cambia. Antes de v2.1.203, `roots/list` devolvía solo el directorio de lanzamiento y Claude Code no enviaba `notifications/roots/list_changed`.

132 132 

133Esta variable se establece en el entorno del servidor, no en el entorno propio de Claude Code, por lo que hacer referencia a ella a través de la expansión `${VAR}` en el `command` o `args` de una entrada `.mcp.json` con alcance de proyecto o una entrada de servidor local o de usuario en `~/.claude.json` requiere un valor predeterminado como `${CLAUDE_PROJECT_DIR:-.}`. Las configuraciones MCP proporcionadas por plugins sustituyen `${CLAUDE_PROJECT_DIR}` directamente y no necesitan el valor predeterminado.133Esta variable se establece en el entorno del servidor, no en el entorno propio de Claude Code, por lo que hacer referencia a ella a través de la expansión `${VAR}` en el `command` o `args` de una entrada `.mcp.json` con alcance de proyecto o una entrada de servidor local o usuario en `~/.claude.json` requiere un valor predeterminado como `${CLAUDE_PROJECT_DIR:-.}`. Las configuraciones MCP proporcionadas por plugins sustituyen `${CLAUDE_PROJECT_DIR}` directamente y no necesitan el valor predeterminado.

134 134 

135```bash theme={null}135```bash theme={null}

136# Sintaxis básica136# Sintaxis básica


142```142```

143 143 

144<Note>144<Note>

145 **Importante: Separar argumentos del servidor con `--`**145 **Importante: Separe los argumentos del servidor con `--`**

146 146 

147 Para servidores stdio, el `--` (doble guión) separa las opciones propias de Claude, como `--transport`, `--env`, y `--scope`, del comando y argumentos que ejecutan el servidor. Todo lo que viene después de `--` se pasa al servidor sin modificación.147 Para servidores stdio, el `--` (doble guión) separa las opciones propias de Claude, como `--transport`, `--env`, y `--scope`, del comando y argumentos que ejecutan el servidor. Todo lo que viene después de `--` se pasa al servidor sin cambios.

148 148 

149 Por ejemplo:149 Por ejemplo:

150 150 


153 153 

154 Sin `--`, Claude Code intentaría analizar las banderas del servidor, como `--port` arriba, como sus propias opciones.154 Sin `--`, Claude Code intentaría analizar las banderas del servidor, como `--port` arriba, como sus propias opciones.

155 155 

156 `--env` acepta múltiples pares `KEY=value`. Si el nombre del servidor viene directamente después de `--env`, la CLI lee el nombre como otro par y lo rechaza, por lo que debe colocar al menos otra opción, como `--transport stdio`, entre `--env` y el nombre del servidor.156 `--env` acepta múltiples pares `KEY=value`. Si el nombre del servidor viene directamente después de `--env`, la CLI lee el nombre como otro par y lo rechaza, así que coloque al menos otra opción, como `--transport stdio`, entre `--env` y el nombre del servidor.

157</Note>157</Note>

158 158 

159<h3 id="option-4-add-a-remote-websocket-server">159<h3 id="option-4-add-a-remote-websocket-server">

160 Opción 4: Agregar un servidor WebSocket remoto160 Opción 4: Agregar un servidor WebSocket remoto

161</h3>161</h3>

162 162 

163Los servidores WebSocket mantienen una conexión bidireccional persistente, que es adecuada para servidores MCP remotos que envían eventos a Claude sin ser solicitados. Utilice HTTP en su lugar cuando su servidor solo responda a solicitudes, ya que HTTP admite OAuth y la bandera `claude mcp add --transport`, mientras que WebSocket no admite ninguno de los dos.163Los servidores WebSocket mantienen una conexión bidireccional persistente, que es adecuada para servidores MCP remotos que envían eventos a Claude sin ser solicitados. Use HTTP en su lugar cuando su servidor solo responda a solicitudes, ya que HTTP admite OAuth y la bandera `claude mcp add --transport`, mientras que WebSocket no admite ninguno de los dos.

164 164 

165Configure servidores WebSocket en `.mcp.json` o con `claude mcp add-json`:165Configure servidores WebSocket en `.mcp.json` o con `claude mcp add-json`:

166 166 


169 '{"type":"ws","url":"wss://mcp.example.com/socket","headers":{"Authorization":"Bearer YOUR_TOKEN"}}'169 '{"type":"ws","url":"wss://mcp.example.com/socket","headers":{"Authorization":"Bearer YOUR_TOKEN"}}'

170```170```

171 171 

172La entrada `type: "ws"` acepta los mismos campos `url`, `headers`, `headersHelper`, `timeout`, y `alwaysLoad` que `http`. La autenticación es solo por encabezado, por lo que pase un token estático en `headers` o genere uno en el momento de la conexión con [`headersHelper`](#use-dynamic-headers-for-custom-authentication). La bandera `claude mcp add --transport` no acepta `ws`.172La entrada `type: "ws"` acepta los mismos campos `url`, `headers`, `headersHelper`, `timeout`, y `alwaysLoad` que `http`. La autenticación es solo por encabezado, así que pase un token estático en `headers` o genere uno en el momento de la conexión con [`headersHelper`](#use-dynamic-headers-for-custom-authentication). La bandera `claude mcp add --transport` no acepta `ws`.

173 173 

174<h3 id="add-a-server-from-setup-instructions-written-for-another-client">174<h3 id="add-a-server-from-setup-instructions-written-for-another-client">

175 Agregar un servidor desde instrucciones de configuración escritas para otro cliente175 Agregar un servidor desde instrucciones de configuración escritas para otro cliente

176</h3>176</h3>

177 177 

178Los servidores MCP no son específicos de Claude Code, por lo que las instrucciones de configuración de un servidor pueden estar escritas para Claude Desktop, Cursor, u otro cliente MCP y no proporcionar ningún comando `claude mcp add`. Para agregar el servidor de todas formas, busque en esas instrucciones una URL, un comando de lanzamiento, o un bloque JSON:178Los servidores MCP no son específicos de Claude Code, por lo que las instrucciones de configuración de un servidor pueden estar escritas para Claude Desktop, Cursor, u otro cliente MCP y no dar ningún comando `claude mcp add`. Para agregar el servidor de todas formas, busque en esas instrucciones una URL, un comando de lanzamiento, o un bloque JSON:

179 179 

180* **Una URL** como `https://mcp.example.com/mcp`: el servidor es remoto.180* **Una URL** como `https://mcp.example.com/mcp`: el servidor es remoto.

181* **Un comando de lanzamiento** como `npx -y @example/mcp-server`: el servidor se ejecuta en su máquina.181* **Un comando de lanzamiento** como `npx -y @example/mcp-server`: el servidor se ejecuta en su máquina.


187 Desde una URL187 Desde una URL

188</h4>188</h4>

189 189 

190Una URL significa que el servidor es remoto. Para un punto final `https://`, agréguelo con `--transport http`, o siga [Opción 2](#option-2-add-a-remote-sse-server) cuando las instrucciones digan que el punto final utiliza SSE. Para un punto final `wss://`, utilice [Opción 4](#option-4-add-a-remote-websocket-server) en su lugar, ya que `--transport` no acepta `ws`:190Una URL significa que el servidor es remoto. Para un punto final `https://`, agréguelo con `--transport http`, o siga [Opción 2](#option-2-add-a-remote-sse-server) cuando las instrucciones digan que el punto final usa SSE. Para un punto final `wss://`, use [Opción 4](#option-4-add-a-remote-websocket-server) en su lugar, ya que `--transport` no acepta `ws`:

191 191 

192```bash theme={null}192```bash theme={null}

193claude mcp add --transport http example https://mcp.example.com/mcp193claude mcp add --transport http example https://mcp.example.com/mcp

194```194```

195 195 

196Si las instrucciones también proporcionan una clave API o encabezado de token, páselo con `--header` como se muestra en [Opción 1](#option-1-add-a-remote-http-server).196Si las instrucciones también dan una clave API o encabezado de token, páselo con `--header` como se muestra en [Opción 1](#option-1-add-a-remote-http-server).

197 197 

198<h4 id="from-an-npx-uvx-or-binary-command">198<h4 id="from-an-npx-uvx-or-binary-command">

199 Desde un comando `npx`, `uvx`, o binario199 Desde un comando `npx`, `uvx`, o binario

200</h4>200</h4>

201 201 

202Un comando de lanzamiento significa que el servidor se ejecuta como un proceso stdio local. Coloque todo el comando después de `--`, para que Claude Code pase banderas como `-y` al comando que inicia el servidor en lugar de leerlas como sus propias opciones. Pase cualquier variable de entorno que las instrucciones soliciten con `--env`, después del nombre del servidor y antes de `--`:202Un comando de lanzamiento significa que el servidor se ejecuta como un proceso stdio local. Ponga todo el comando después de `--`, para que Claude Code pase banderas como `-y` al comando que inicia el servidor en lugar de leerlas como sus propias opciones. Pase cualquier variable de entorno que las instrucciones soliciten con `--env`, después del nombre del servidor y antes de `--`:

203 203 

204```bash theme={null}204```bash theme={null}

205claude mcp add example --env API_KEY=your-key -- npx -y @example/mcp-server205claude mcp add example --env API_KEY=your-key -- npx -y @example/mcp-server


214Un bloque `mcpServers` escrito para otro cliente MCP, como Claude Desktop, utiliza la clave contenedora y la forma de entrada que Claude Code lee. Pase a `claude mcp add-json` el objeto dentro de `mcpServers`, no el contenedor. Dos entradas necesitan una reparación primero:214Un bloque `mcpServers` escrito para otro cliente MCP, como Claude Desktop, utiliza la clave contenedora y la forma de entrada que Claude Code lee. Pase a `claude mcp add-json` el objeto dentro de `mcpServers`, no el contenedor. Dos entradas necesitan una reparación primero:

215 215 

216* **Una `url` sin `type`**: agregue `"type": "http"`, `"type": "sse"`, o `"type": "ws"` para coincidir con el punto final. Claude Code lee una entrada sin `type` como un servidor stdio, por lo que una entrada `url` sin `type` falla.216* **Una `url` sin `type`**: agregue `"type": "http"`, `"type": "sse"`, o `"type": "ws"` para coincidir con el punto final. Claude Code lee una entrada sin `type` como un servidor stdio, por lo que una entrada `url` sin `type` falla.

217* **Una clave con caracteres distintos de letras, números, guiones e guiones bajos**: elija un nombre de servidor que utilice solo esos caracteres. De lo contrario, la clave es el nombre del servidor.217* **Una clave con caracteres distintos de letras, números, guiones e guiones bajos**: elija un nombre de servidor que use solo esos caracteres. De lo contrario, la clave es el nombre del servidor.

218 218 

219Por ejemplo, este bloque:219Por ejemplo, este bloque:

220 220 


237 237 

238[Agregar servidores MCP desde configuración JSON](#add-mcp-servers-from-json-configuration) cubre el escape de shell y la bandera `--scope` para `add-json`. Para compartir el servidor con su equipo en su lugar, agregue `--scope project`, o agregue la entrada bajo `mcpServers` en `.mcp.json` en la raíz de su proyecto y confírmela. [Alcance de proyecto](#project-scope) cubre cómo Claude Code carga y aprueba ese archivo.238[Agregar servidores MCP desde configuración JSON](#add-mcp-servers-from-json-configuration) cubre el escape de shell y la bandera `--scope` para `add-json`. Para compartir el servidor con su equipo en su lugar, agregue `--scope project`, o agregue la entrada bajo `mcpServers` en `.mcp.json` en la raíz de su proyecto y confírmela. [Alcance de proyecto](#project-scope) cubre cómo Claude Code carga y aprueba ese archivo.

239 239 

240Cada comando `claude mcp add` y `claude mcp add-json` imprime una línea `Added ...`. Para verificar que Claude Code se conectó, ejecute `claude mcp get <name>`; [Estado del servidor](#server-status) cubre los estados que muestra y el paso de aprobación para servidores `.mcp.json`.240Cada comando `claude mcp add` y `claude mcp add-json` imprime una línea `Added ...` en caso de éxito. Para verificar que Claude Code se conectó, ejecute `claude mcp get <name>`; [Estado del servidor](#server-status) cubre los estados que muestra y el paso de aprobación para servidores `.mcp.json`.

241 241 

242<h3 id="managing-your-servers">242<h3 id="managing-your-servers">

243 Administración de sus servidores243 Administración de sus servidores


267 267 

268`claude mcp add` confirma una adición exitosa imprimiendo una línea `Added ...`, lo que significa que la configuración se escribió. Si el comando imprime un mensaje `was not saved` en su lugar, consulte [MCP server was not saved or removed](/docs/es/errors#mcp-server-was-not-saved-or-removed); para un mensaje `may not have been saved`, consulte [MCP server may not have been saved or removed](/docs/es/errors#mcp-server-may-not-have-been-saved-or-removed).268`claude mcp add` confirma una adición exitosa imprimiendo una línea `Added ...`, lo que significa que la configuración se escribió. Si el comando imprime un mensaje `was not saved` en su lugar, consulte [MCP server was not saved or removed](/docs/es/errors#mcp-server-was-not-saved-or-removed); para un mensaje `may not have been saved`, consulte [MCP server may not have been saved or removed](/docs/es/errors#mcp-server-may-not-have-been-saved-or-removed).

269 269 

270`claude mcp list` muestra un estado de salud junto a cada servidor que enumera, como `✔ Connected`, `! Needs authentication`, o `✘ Failed to connect`. Un estado de falla significa que Claude Code no pudo conectarse a ese servidor, no que el comando list haya fallado.270`claude mcp list` muestra un estado de salud junto a cada servidor que enumera, como `✔ Connected`, `! Needs authentication`, o `✘ Failed to connect`. Un estado de falla significa que Claude Code no pudo conectarse a ese servidor, no que el comando de lista haya fallado.

271 271 

272Los estados en esta lista informan una decisión de configuración en lugar de un intento de conexión, por lo que Claude Code los imprime sin conectarse al servidor:272Los estados en esta lista informan una decisión de configuración en lugar de un intento de conexión, por lo que Claude Code los imprime sin conectarse al servidor:

273 273 

274* ``⏸ Pending approval (run `claude` to approve)``: un servidor con alcance de proyecto de `.mcp.json` que aún no ha aprobado. Claude Code lo muestra tanto en `claude mcp list` como en `claude mcp get <name>`. Ejecute `claude` interactivamente para revisarlo y aprobarlo.274* ``⏸ Pending approval (run `claude` to approve)``: un servidor con alcance de proyecto de `.mcp.json` que aún no ha aprobado. Claude Code lo muestra tanto en `claude mcp list` como en `claude mcp get <name>`. Ejecute `claude` interactivamente para revisarlo y aprobarlo.

275* `✘ Rejected (see disabledMcpjsonServers in settings)`: un servidor `.mcp.json` que una entrada [`disabledMcpjsonServers`](/docs/es/settings-reference#disabledmcpjsonservers) rechaza. Claude Code lo muestra solo en `claude mcp get <name>`.275* `✘ Rejected (see disabledMcpjsonServers in settings)`: un servidor `.mcp.json` que una entrada [`disabledMcpjsonServers`](/docs/es/settings-reference#disabledmcpjsonservers) rechaza. Claude Code lo muestra solo en `claude mcp get <name>`.

276* `⊘ Disabled for this project (re-enable via /mcp)`: un servidor que la lista [`disabledMcpServers`](#disable-a-server-without-removing-it) del proyecto nombra. Claude Code lo muestra tanto en `claude mcp list` como en `claude mcp get <name>`. Active el servidor nuevamente desde el panel `/mcp`. Antes de v2.1.238, ambos comandos se conectaban a un servidor deshabilitado para verificar su salud e informaban el resultado de la conexión.276* `⊘ Disabled for this project (re-enable via /mcp)`: un servidor que la lista [`disabledMcpServers`](#disable-a-server-without-removing-it) del proyecto nombra. Claude Code lo muestra tanto en `claude mcp list` como en `claude mcp get <name>`. Active el servidor nuevamente desde el panel `/mcp`.

277 277 

278Los servidores WebSocket no aparecen en la salida de `claude mcp list`. Utilice `claude mcp get <name>` o el panel `/mcp` para verificarlos.278Los servidores WebSocket no aparecen en la salida de `claude mcp list`. Use `claude mcp get <name>` o el panel `/mcp` para verificarlos.

279 279 

280<h4 id="project-server-approvals-and-workspace-trust">280<h4 id="project-server-approvals-and-workspace-trust">

281 Aprobaciones de servidores de proyecto y confianza del espacio de trabajo281 Aprobaciones de servidores de proyecto y confianza del espacio de trabajo

282</h4>282</h4>

283 283 

284A partir de v2.1.196, `claude mcp list` y `claude mcp get` leen aprobaciones `.mcp.json` solo de archivos de configuración que no se registran en el repositorio hasta que confíe en el espacio de trabajo ejecutando `claude` en él y aceptando el diálogo de confianza del espacio de trabajo. Un repositorio clonado no puede aprobar sus propios servidores: [`enableAllProjectMcpServers`](/docs/es/settings-reference#enableallprojectmcpservers) o [`enabledMcpjsonServers`](/docs/es/settings-reference#enabledmcpjsonservers) confirmados en `.claude/settings.json` del proyecto se ignoran en una carpeta no confiable, y el servidor permanece en `⏸ Pending approval` en lugar de estar conectado y verificado de salud.284A partir de v2.1.196, `claude mcp list` y `claude mcp get` leen aprobaciones `.mcp.json` solo de archivos de configuración que no se confirman en el repositorio hasta que confíe en el espacio de trabajo ejecutando `claude` en él y aceptando el diálogo de confianza del espacio de trabajo. Un repositorio clonado no puede aprobar sus propios servidores: [`enableAllProjectMcpServers`](/docs/es/settings-reference#enableallprojectmcpservers) o [`enabledMcpjsonServers`](/docs/es/settings-reference#enabledmcpjsonservers) confirmados en `.claude/settings.json` del proyecto se ignoran en una carpeta no confiable, y el servidor permanece en `⏸ Pending approval` en lugar de estar conectado y verificado de salud.

285 285 

286Las aprobaciones de estas fuentes aún se aplican en una carpeta no confiable:286Las aprobaciones de estas fuentes aún se aplican en una carpeta no confiable:

287 287 


289* configuración administrada289* configuración administrada

290* configuración pasada con `--settings`290* configuración pasada con `--settings`

291 291 

292Claude Code también aplica aprobaciones de un `.claude/settings.local.json` sin seguimiento, pero ejecuta git para verificar si el archivo se rastrea, y ejecuta esa verificación solo en una [carpeta confiable](/docs/es/permissions#project-allow-rules-and-workspace-trust). En una carpeta que nunca ha confiado, Claude Code espera el diálogo de confianza antes de aplicar las aprobaciones del archivo, a menos que la carpeta sea su propio hogar de configuración: su directorio de inicio, o un directorio cuyo `.claude` haya establecido como [`CLAUDE_CONFIG_DIR`](/docs/es/env-vars). Antes de v2.1.207, Claude Code aplicaba aprobaciones de un `.claude/settings.local.json` sin seguimiento incluso en una carpeta que nunca había confiado.292Claude Code también aplica aprobaciones de un `.claude/settings.local.json` sin seguimiento, pero ejecuta git para verificar si el archivo se rastrea, y ejecuta esa verificación solo en una [carpeta confiable](/docs/es/permissions#project-allow-rules-and-workspace-trust). En una carpeta que nunca ha confiado, Claude Code espera el diálogo de confianza antes de aplicar las aprobaciones del archivo, a menos que la carpeta sea su propio hogar de configuración: su directorio de inicio, o un directorio cuyo `.claude` ha establecido como [`CLAUDE_CONFIG_DIR`](/docs/es/env-vars). Antes de v2.1.207, Claude Code aplicaba aprobaciones de un `.claude/settings.local.json` sin seguimiento incluso en una carpeta que nunca había confiado.

293 293 

294Una entrada `disabledMcpjsonServers` en cualquier archivo de configuración aún rechaza el servidor.294Una entrada `disabledMcpjsonServers` en cualquier archivo de configuración aún rechaza el servidor.

295 295 


297 Detalle del estado del servidor297 Detalle del estado del servidor

298</h4>298</h4>

299 299 

300En `/mcp`, incluido el menú de un servidor allí, y en el administrador [`/plugin`](/docs/es/plugins/install), un servidor HTTP o SSE remoto que ha utilizado antes puede mostrar un estado `cached` como `cached 2h ago · connects on first use · 5 tools`. Claude Code cargó la lista de herramientas del servidor desde su caché de descubrimiento, guardado en una sesión anterior, en lugar de conectarse al inicio, y Claude Code conecta el servidor la primera vez que Claude llama a una de las herramientas del servidor. Las herramientas están disponibles desde su primer mensaje, por lo que no necesita hacer nada. El caché de descubrimiento y su estado `cached` requieren Claude Code v2.1.221 o posterior.300En `/mcp`, incluido el menú de un servidor allí, y en el administrador [`/plugin`](/docs/es/plugins/install), un servidor HTTP o SSE remoto que ha usado antes puede mostrar un estado `cached` como `cached 2h ago · connects on first use · 5 tools`. Claude Code cargó la lista de herramientas del servidor desde su caché de descubrimiento, guardado en una sesión anterior, en lugar de conectarse al inicio, y Claude Code conecta el servidor la primera vez que Claude llama a una de las herramientas del servidor. Las herramientas están disponibles desde su primer mensaje, por lo que no necesita hacer nada. El caché de descubrimiento y su estado `cached` requieren Claude Code v2.1.221 o posterior.

301 301 

302El caché de descubrimiento está desactivado de forma predeterminada a menos que un lanzamiento gradual lo haya habilitado para su cuenta. Establezca [`MCP_DISCOVERY_CACHE=1`](/docs/es/env-vars) para activarlo, o `0` para mantenerlo desactivado incluso cuando el lanzamiento lo haya habilitado. Antes de v2.1.238, el caché estaba activado de forma predeterminada.302El caché de descubrimiento está desactivado de forma predeterminada a menos que un despliegue gradual lo haya habilitado para su cuenta. Establezca [`MCP_DISCOVERY_CACHE=1`](/docs/es/env-vars) para activarlo, o `0` para mantenerlo desactivado incluso cuando el despliegue lo haya habilitado. Antes de v2.1.238, el caché estaba activado de forma predeterminada.

303 303 

304Cuando selecciona **Disable** o **Clear authentication** desde el menú de un servidor en `/mcp`, Claude Code también descarta la entrada de caché de ese servidor. **Reconnect** también la descarta en un servidor conectado o fallido; en un servidor `cached`, **Reconnect** conecta el servidor ahora y mantiene la entrada. La próxima vez que Claude Code se conecte al servidor después de descartar la entrada, obtiene la lista de herramientas del servidor en lugar de del caché.304Cuando selecciona **Disable** o **Clear authentication** desde el menú de un servidor en `/mcp`, Claude Code también descarta la entrada de caché de ese servidor. **Reconnect** también la descarta en un servidor conectado o fallido; en un servidor `cached`, **Reconnect** conecta el servidor ahora y mantiene la entrada. La próxima vez que Claude Code se conecte al servidor después de descartar la entrada, obtiene la lista de herramientas del servidor en lugar del caché.

305 305 

306Cuando el estado de un servidor es `✘ Failed to connect`, `claude mcp list` agrega el detalle de falla a esa línea de estado, y `claude mcp get <name>` lo muestra en una línea `Issue:`: el estado HTTP o código de error, más cualquier texto de error que el servidor devolvió. La vista de detalle del servidor en `/mcp` incluye el mismo texto informado por el servidor en su fila `Issue:`. Claude Code redacta texto similar a credenciales de este detalle y nunca incluye la URL del servidor expandida, que puede llevar secretos. Claude Code no agrega detalle a un estado `✘ Connection error`, porque el texto de excepción que imprimiría allí puede incrustar esa URL. Antes de v2.1.219, ambos comandos mostraban solo el estado de falla desnudo, sin el código de estado o el texto de error del servidor.306Cuando el estado de un servidor es `✘ Failed to connect`, `claude mcp list` añade el detalle de falla a esa línea de estado, y `claude mcp get <name>` lo muestra en una línea `Issue:`: el código de estado HTTP o código de error, más cualquier texto de error que el servidor devolvió. La vista de detalle del servidor en `/mcp` incluye el mismo texto informado por el servidor en su fila `Issue:`. Claude Code redacta texto similar a credenciales de este detalle y nunca incluye la URL del servidor expandida, que puede llevar secretos. Claude Code no añade detalle a un estado `✘ Connection error`, porque el texto de excepción que imprimiría allí puede incrustar esa URL. Antes de v2.1.219, ambos comandos mostraban solo el estado de falla desnudo, sin el código de estado o el texto de error del servidor.

307 307 

308Cuando completa la autenticación desde `/mcp` y la conexión aún falla con un estado HTTP o un código de error de transporte, Claude Code agrega ese código y el origen de la URL del servidor al mensaje que imprime después del intento. El origen es el esquema y host, más el puerto cuando la URL nombra uno, como `https://mcp.example.com`.308Cuando completa la autenticación desde `/mcp` y la conexión aún falla con un código de estado HTTP o un código de error de transporte, Claude Code añade ese código y el origen de la URL del servidor al mensaje que imprime después del intento. El origen es el esquema y host, más el puerto cuando la URL nombra uno, como `https://mcp.example.com`.

309 309 

310* La ruta y consulta nunca aparecen en ese mensaje.310* La ruta y consulta nunca aparecen en ese mensaje.

311* Para un servidor en el [alcance](#mcp-installation-scopes) local, de proyecto o de usuario o en configuración MCP administrada, el origen muestra el host tal como está escrito en esa configuración, por lo que una referencia `${VAR}` en el host no se expande en el mensaje.311* Para un servidor en el [alcance](#mcp-installation-scopes) local, de proyecto, o de usuario o en configuración MCP administrada, el origen muestra el host tal como está escrito en esa configuración, por lo que una referencia `${VAR}` en el host no se expande en el mensaje.

312* Para una falla sin código de estado o de error, Claude Code muestra el texto de error sin el origen.312* Para una falla sin código de estado o código de error, Claude Code muestra el texto de error sin el origen.

313 313 

314Un servidor remoto cuya configuración tiene una `url` vacía se muestra como `not configured` en `/mcp`, en `claude mcp list`, y en el administrador [`/plugin`](/docs/es/plugins/install), y Claude Code no intenta conectarse a él. Un plugin puede incluir una entrada de marcador de posición como esta para un conector que configura más tarde, por lo que Claude Code no lo informa como un error o un problema de configuración. La vista de detalle del servidor en `/mcp` lee `No URL configured for this server`; establezca la `url` de la entrada para conectarla. Antes de v2.1.208, Claude Code informaba una `url` vacía como un problema de configuración con un aviso para reconectar.314Un servidor remoto cuya configuración tiene una `url` vacía se muestra como `not configured` en `/mcp`, en `claude mcp list`, y en el administrador [`/plugin`](/docs/es/plugins/install), y Claude Code no intenta conectarse a él. Un plugin puede incluir una entrada de marcador de posición como esta para un conector que configura más tarde, por lo que Claude Code no lo informa como un error o un problema de configuración. La vista de detalle del servidor en `/mcp` lee `No URL configured for this server`; establezca la `url` de la entrada para conectarla. Antes de v2.1.208, Claude Code informaba una `url` vacía como un problema de configuración con un aviso para reconectar.

315 315 


319 319 

320Claude Code advierte sobre los problemas de configuración a continuación. Cada entrada dice qué verifica Claude Code y cómo borrar la advertencia:320Claude Code advierte sobre los problemas de configuración a continuación. Cada entrada dice qué verifica Claude Code y cómo borrar la advertencia:

321 321 

322* **Espacios en blanco ocultos**: Claude Code advierte cuando un valor de configuración MCP lleva espacios en blanco ocultos al principio o al final, que a menudo provienen de pegar un token con una nueva línea al final. Claude Code verifica `command`, `url`, cada entrada `args`, y los valores y nombres de clave bajo `env` y `headers`. Claude Code muestra la advertencia en la salida de `claude mcp list` y en `/mcp`, nombrando los campos afectados sin repetir sus valores, por ejemplo `Leading or trailing whitespace in: headers.Authorization`. Claude Code no recorta el espacio en blanco y utiliza los valores exactamente como están escritos, por lo que edite la configuración para eliminarlo.322* **Espacios en blanco ocultos**: Claude Code advierte cuando un valor de configuración MCP lleva espacios en blanco ocultos al principio o al final, que a menudo provienen de pegar un token con una nueva línea al final. Claude Code verifica `command`, `url`, cada entrada `args`, y los valores y nombres de clave bajo `env` y `headers`. Claude Code muestra la advertencia en la salida de `claude mcp list` y en `/mcp`, nombrando los campos afectados sin repetir sus valores, por ejemplo `Leading or trailing whitespace in: headers.Authorization`. Claude Code no recorta el espacio en blanco y usa los valores exactamente como están escritos, así que edite la configuración para eliminarlo.

323* **Mismo nombre en más de un alcance**: si define el mismo nombre de servidor en más de un [alcance](#mcp-installation-scopes) con diferentes puntos finales, Claude Code advierte sobre el conflicto en la salida de `claude mcp list` y en `/mcp`. Claude Code almacena inicios de sesión OAuth por punto final, por lo que cuando autentica la definición que se carga en un proyecto, aún necesita iniciar sesión por separado en un proyecto donde se carga una definición diferente. Mantenga el punto final que desea y elimine los otros con `claude mcp remove <name> --scope <scope>`. En la advertencia, Claude Code cita el punto final de cada alcance tal como está escrito en su configuración, con referencias [`${VAR}`](#environment-variable-expansion-in-mcp-json) sin expandir, por lo que nunca muestra un valor resuelto como una clave API.323* **Mismo nombre en más de un alcance**: si define el mismo nombre de servidor en más de un [alcance](#mcp-installation-scopes) con diferentes puntos finales, Claude Code advierte sobre el conflicto en la salida de `claude mcp list` y en `/mcp`. Claude Code almacena inicios de sesión OAuth por punto final, por lo que cuando autentica la definición que se carga en un proyecto, aún necesita iniciar sesión por separado en un proyecto donde se carga una definición diferente. Mantenga el punto final que desea y elimine los otros con `claude mcp remove <name> --scope <scope>`. En la advertencia, Claude Code cita el punto final de cada alcance tal como está escrito en su configuración, con referencias [`${VAR}`](#environment-variable-expansion-in-mcp-json) sin expandir, por lo que nunca muestra un valor resuelto como una clave API.

324* **Nombres reservados**: Claude Code reserva los nombres de sus servidores integrados, incluidos `workspace`, `claude-in-chrome`, `computer-use`, `Claude Preview`, y `Claude Browser`. Si su configuración define un servidor con un nombre reservado, Claude Code lo omite en el tiempo de carga y muestra una advertencia pidiéndole que lo renombre. `claude mcp add` rechaza un nombre reservado con un error. `Claude Preview` y `Claude Browser` ambos nombran el servidor integrado que el [panel de vista previa de la aplicación de escritorio Claude Code](/docs/es/desktop#preview-your-app) utiliza. Antes de v2.1.205, `Claude Browser` no estaba reservado, por lo que un servidor configurado por el usuario podría registrarse bajo ese nombre.324* **Nombres reservados**: Claude Code reserva los nombres de sus servidores integrados, incluidos `workspace`, `claude-in-chrome`, `computer-use`, `Claude Preview`, y `Claude Browser`. Si su configuración define un servidor con un nombre reservado, Claude Code lo omite en el tiempo de carga y muestra una advertencia pidiéndole que lo renombre. `claude mcp add` rechaza un nombre reservado con un error. `Claude Preview` y `Claude Browser` ambos nombran el servidor integrado que el [panel de vista previa de la aplicación de escritorio de Claude Code](/docs/es/desktop#preview-your-app) utiliza.

325* **Variable de entorno faltante**: si una referencia [`${VAR}`](#environment-variable-expansion-in-mcp-json) en la configuración de un servidor nombra una variable que no está establecida y no tiene `:-default`, Claude Code advierte en la salida de `claude mcp list` y en `/mcp`, nombrando la variable, y aún carga el servidor con el texto `${VAR}` sin expandir. Establezca la variable o agregue un respaldo `${VAR:-default}`. En la `url` y `headers` de un servidor remoto, algunas variables de credencial [se leen como vacías](#credential-variables-that-read-as-empty) en su lugar, sin advertencia.325* **Variable de entorno faltante**: si una referencia [`${VAR}`](#environment-variable-expansion-in-mcp-json) en la configuración de un servidor nombra una variable que no está establecida y no tiene `:-default`, Claude Code advierte en la salida de `claude mcp list` y en `/mcp`, nombrando la variable, y aún carga el servidor con el texto `${VAR}` sin expandir. Establezca la variable o agregue un fallback `${VAR:-default}`. En la `url` y `headers` de un servidor remoto, algunas variables de credencial [se leen como vacías](#credential-variables-that-read-as-empty) en su lugar, sin advertencia.

326 326 

327<h4 id="tool-availability">327<h4 id="tool-availability">

328 Disponibilidad de herramientas328 Disponibilidad de herramientas


330 330 

331El panel `/mcp` muestra el recuento de herramientas junto a cada servidor conectado e indica servidores que anuncian la capacidad de herramientas pero no exponen herramientas.331El panel `/mcp` muestra el recuento de herramientas junto a cada servidor conectado e indica servidores que anuncian la capacidad de herramientas pero no exponen herramientas.

332 332 

333Si su solicitud necesita herramientas de un servidor que aún se está conectando en segundo plano, Claude espera a ese servidor antes de continuar. Cómo sucede la espera depende de su configuración:333Si su solicitud necesita herramientas de un servidor que aún se está conectando en segundo plano, Claude espera a que ese servidor continúe. Cómo sucede la espera depende de su configuración:

334 334 

335* **Con [búsqueda de herramientas](#scale-with-mcp-tool-search), el valor predeterminado**: la espera sucede dentro de la llamada `ToolSearch`.335* **Con [búsqueda de herramientas](#scale-with-mcp-tool-search), el valor predeterminado**: la espera sucede dentro de la llamada `ToolSearch`.

336* **Sin búsqueda de herramientas**: Claude utiliza la herramienta `WaitForMcpServers` en su lugar. Las configuraciones sin búsqueda de herramientas incluyen un `ANTHROPIC_BASE_URL` personalizado, `ENABLE_TOOL_SEARCH=false`, y un modelo anterior a la generación Claude 4.5 en la Plataforma de Agentes de Google Cloud.336* **Sin búsqueda de herramientas**: Claude usa la herramienta `WaitForMcpServers` en su lugar. Las configuraciones sin búsqueda de herramientas incluyen un `ANTHROPIC_BASE_URL` personalizado, `ENABLE_TOOL_SEARCH=false`, y un modelo anterior a la generación Claude 4.5 en la Plataforma de Agentes de Google Cloud.

337* **En un despliegue de Microsoft Foundry [alojado en Azure](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)**: Claude comienza en la ruta de búsqueda de herramientas en lugar de con `WaitForMcpServers`, ya que Claude Code descubre el rechazo del lado del servidor solo desde la API. Después de que Claude Code cambie ese despliegue a [carga anticipada](#scale-with-mcp-tool-search), las herramientas de un servidor que termina de conectarse están disponibles en la siguiente solicitud de Claude.337* **En un despliegue de Microsoft Foundry [alojado en Azure](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options)**: Claude comienza en la ruta de búsqueda de herramientas en lugar de con `WaitForMcpServers`, ya que Claude Code descubre el rechazo del lado del servidor solo desde la API. Después de que Claude Code cambie ese despliegue a [carga anticipada](#scale-with-mcp-tool-search), las herramientas de un servidor que termina de conectarse se vuelven disponibles en la siguiente solicitud de Claude.

338 338 

339Con la búsqueda de herramientas habilitada, cuando un servidor termina de conectarse mientras Claude está trabajando, Claude Code enumera los nombres de herramientas del servidor a Claude en su siguiente solicitud en el mismo turno. Claude puede entonces buscar y llamar a esas herramientas sin esperar su siguiente mensaje.339Con la búsqueda de herramientas habilitada, cuando un servidor termina de conectarse mientras Claude está trabajando, Claude Code enumera los nombres de herramientas del servidor a Claude en su siguiente solicitud en el mismo turno. Claude puede entonces buscar y llamar a esas herramientas sin esperar su siguiente mensaje.

340 340 


346 346 

347Cuando alterna un servidor, Claude Code registra su elección por proyecto en `~/.claude.json`, en una de dos listas que cubren conjuntos disjuntos de servidores:347Cuando alterna un servidor, Claude Code registra su elección por proyecto en `~/.claude.json`, en una de dos listas que cubren conjuntos disjuntos de servidores:

348 348 

349* `disabledMcpServers`: una lista de exclusión para servidores configurados por el usuario, servidores de plugins, servidores que su organización [proporciona a través de configuración administrada](/docs/es/managed-mcp#provide-servers-through-managed-settings), los conectores claude.ai que Claude Code [obtiene por sí mismo](#how-connectors-reach-claude-code), y servidores integrados que están habilitados de forma predeterminada. Claude Code no se conecta a un servidor que enumere aquí. Cuando deshabilita un conector claude.ai con el alternador `/mcp` por proyecto descrito en [Deshabilitar conectores claude.ai](#disable-claude-ai-connectors), Claude Code lo escribe en esta lista bajo su nombre de visualización, por ejemplo `claude.ai Slack`.349* `disabledMcpServers`: una lista de exclusión para servidores configurados por el usuario, servidores de plugins, servidores que su organización [proporciona a través de configuración administrada](/docs/es/managed-mcp#provide-servers-through-managed-settings), los conectores claude.ai que Claude Code [obtiene por sí mismo](#how-connectors-reach-claude-code), y servidores integrados que están activados de forma predeterminada. Claude Code no se conecta a un servidor que enumere aquí. Cuando deshabilita un conector claude.ai con el alternador `/mcp` por proyecto descrito en [Deshabilitar conectores claude.ai](#disable-claude-ai-connectors), Claude Code lo escribe en esta lista bajo su nombre de visualización, por ejemplo `claude.ai Slack`.

350* `enabledMcpServers`: una lista de inclusión para servidores integrados que están deshabilitados de forma predeterminada, como `computer-use`. Claude Code se conecta a un servidor deshabilitado de forma predeterminada solo cuando lo enumera aquí.350* `enabledMcpServers`: una lista de inclusión para servidores integrados que están desactivados de forma predeterminada, como `computer-use`. Claude Code se conecta a un servidor desactivado de forma predeterminada solo cuando lo enumera aquí.

351 351 

352Claude Code consulta exactamente una de las dos listas para cada servidor, por lo que ninguna lista anula la otra. Si agrega un servidor normal a `enabledMcpServers`, o un servidor integrado deshabilitado de forma predeterminada a `disabledMcpServers`, Claude Code ignora la entrada.352Claude Code consulta exactamente una de las dos listas para cada servidor, por lo que ninguna lista anula la otra. Si agrega un servidor regular a `enabledMcpServers`, o un servidor integrado desactivado de forma predeterminada a `disabledMcpServers`, Claude Code ignora la entrada.

353 353 

354`disabledMcpServers` y `enabledMcpServers` no están relacionados con [`enabledMcpjsonServers`](/docs/es/settings-reference#enabledmcpjsonservers) y [`disabledMcpjsonServers`](/docs/es/settings-reference#disabledmcpjsonservers), que controlan la aprobación de servidores definidos en el archivo `.mcp.json` de un proyecto.354`disabledMcpServers` y `enabledMcpServers` no están relacionados con [`enabledMcpjsonServers`](/docs/es/settings-reference#enabledmcpjsonservers) y [`disabledMcpjsonServers`](/docs/es/settings-reference#disabledmcpjsonservers), que controlan la aprobación de servidores definidos en el archivo `.mcp.json` de un proyecto.

355 355 


357 Tiempos de ejecución del cliente MCP357 Tiempos de ejecución del cliente MCP

358</h3>358</h3>

359 359 

360Claude Code se conecta a servidores MCP a través de uno de dos tiempos de ejecución del cliente. El tiempo de ejecución v1 se basa en MCP TypeScript SDK 1.x. El tiempo de ejecución v2 es el mismo código en [MCP TypeScript SDK 2.0](https://ts.sdk.modelcontextprotocol.io/v2/), que agrega la revisión del protocolo MCP 2026-07-28. El resto de esta página se aplica a ambos tiempos de ejecución, excepto donde una sección nombra el tiempo de ejecución v2.360Claude Code se conecta a servidores MCP a través de uno de dos tiempos de ejecución del cliente. El tiempo de ejecución v1 se basa en MCP TypeScript SDK 1.x. El tiempo de ejecución v2 es el mismo código en [MCP TypeScript SDK 2.0](https://ts.sdk.modelcontextprotocol.io/v2/), que añade la revisión del protocolo MCP 2026-07-28. El resto de esta página se aplica a ambos tiempos de ejecución, excepto donde una sección nombra el tiempo de ejecución v2.

361 361 

362Claude Code elige un tiempo de ejecución cada vez que lo inicia y lo mantiene hasta que sale. En sesiones donde [obtiene banderas de características](/docs/es/env-vars#features-that-need-feature-flag-fetching), utiliza el tiempo de ejecución v2 en Claude Code v2.1.232 o posterior.362Claude Code elige un tiempo de ejecución cada vez que lo inicia y lo mantiene hasta que sale. En sesiones donde [obtiene banderas de características](/docs/es/env-vars#features-that-need-feature-flag-fetching), utiliza el tiempo de ejecución v2 en Claude Code v2.1.232 o posterior.

363 363 

364En las sesiones donde no obtiene banderas de características, Claude Code utiliza el tiempo de ejecución v2 de forma predeterminada en Claude Code v2.1.274 o posterior:364En las sesiones donde no obtiene banderas de características, Claude Code utiliza el tiempo de ejecución v2 de forma predeterminada en Claude Code v2.1.274 o posterior:

365 365 

366* Sesiones en Amazon Bedrock, Claude Platform en AWS, Plataforma de Agentes de Google Cloud, o Microsoft Foundry, a menos que una plataforma anfitriona que integra Claude Code establezca [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/es/env-vars)366* Sesiones en Amazon Bedrock, Claude Platform en AWS, Plataforma de Agentes de Google Cloud, o Microsoft Foundry, a menos que una plataforma host que incrusta Claude Code establezca [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/es/env-vars)

367* Sesiones iniciadas sesión a través de una [puerta de enlace de aplicaciones Claude](/docs/es/claude-apps-gateway)367* Sesiones iniciadas a través de una [puerta de enlace de aplicaciones Claude](/docs/es/claude-apps-gateway)

368* Sesiones donde desactiva la telemetría o la obtención de banderas de características, por ejemplo con `DISABLE_TELEMETRY`368* Sesiones donde desactiva la telemetría o la obtención de banderas de características, por ejemplo con `DISABLE_TELEMETRY`

369 369 

370En v2, Claude Code también:370En v2, Claude Code también:

371 371 

372* Pregunta a servidores HTTP si admiten la revisión más nueva, y la utiliza con los que lo hacen. También pregunta a servidores conectores claude.ai en sesiones donde obtiene banderas de características. Para que pregunte a servidores stdio, o a servidores conectores en cada sesión, establezca [`MCP_PROTOCOL_NEGOTIATION`](/docs/es/env-vars) en `auto`. Se conecta a todos los demás servidores como v1 lo hace.372* Pregunta a los servidores HTTP si admiten la revisión más nueva, y la utiliza con los que lo hacen. También pregunta a los servidores conectores claude.ai en sesiones donde obtiene banderas de características. Para que pregunte a servidores stdio, o servidores conectores en cada sesión, establezca [`MCP_PROTOCOL_NEGOTIATION`](/docs/es/env-vars) en `auto`. Se conecta a todos los demás servidores como v1 lo hace.

373* Recibe notificaciones `list_changed` de servidores en la revisión más nueva sobre una [secuencia que mantiene abierta](#notification-streams-on-the-v2-runtime).373* Recibe notificaciones `list_changed` de servidores en la revisión más nueva sobre una [secuencia que mantiene abierta](#notification-streams-on-the-v2-runtime).

374* No registra un servidor de [canal](#push-messages-with-channels) que se conecta en la revisión más nueva, porque esa revisión no puede llevar mensajes de canal.374* No registra un servidor de [canal](#push-messages-with-channels) que se conecta en la revisión más nueva, porque esa revisión no puede llevar mensajes de canal.

375* Falla un [inicio de sesión OAuth de MCP](#authenticate-with-remote-mcp-servers) cuya respuesta de autorización nombra un emisor inesperado.375* Falla un [inicio de sesión OAuth de MCP](#authenticate-with-remote-mcp-servers) cuya respuesta de autorización nombra un emisor inesperado.

376* Envía [credenciales OAuth de MCP](#authenticate-with-remote-mcp-servers) solo a un punto final de token servido sobre HTTPS o en `localhost`, `127.0.0.1`, o `::1`. El inicio de sesión falla para un servidor cuyo punto final de token es `http://` simple en cualquier otro lugar, como un dispositivo en su red local. Consulte [Refusing to send credentials to non-https token endpoint](/docs/es/errors#refusing-to-send-credentials-to-non-https-token-endpoint).376* Envía credenciales [OAuth de MCP](#authenticate-with-remote-mcp-servers) solo a un punto final de token servido sobre HTTPS o en `localhost`, `127.0.0.1`, o `::1`. El inicio de sesión falla para un servidor cuyo punto final de token es `http://` simple en cualquier otro lugar, como un dispositivo en su red local. Consulte [Refusing to send credentials to non-https token endpoint](/docs/es/errors#refusing-to-send-credentials-to-non-https-token-endpoint).

377 377 

378Anthropic puede mantener un servidor específico en el protocolo anterior, u off esa secuencia, con una bandera de características que Claude Code obtiene.378Anthropic puede mantener un servidor específico en el protocolo anterior, o fuera de esa secuencia, con una bandera de característica que Claude Code obtiene.

379 379 

380Para elegir el tiempo de ejecución usted mismo, establezca [`MCP_SDK_GENERATION`](/docs/es/env-vars) en `v1` o `v2`. Para decidir si Claude Code pregunta, establezca [`MCP_PROTOCOL_NEGOTIATION`](/docs/es/env-vars) en `auto` o `legacy`.380Para elegir el tiempo de ejecución usted mismo, establezca [`MCP_SDK_GENERATION`](/docs/es/env-vars) en `v1` o `v2`. Para decidir si Claude Code pregunta, establezca [`MCP_PROTOCOL_NEGOTIATION`](/docs/es/env-vars) en `auto` o `legacy`.

381 381 


396* **La secuencia se cierra nuevamente dentro de 10 segundos**: Claude Code la reabre hasta tres veces, luego se detiene para esa conexión.396* **La secuencia se cierra nuevamente dentro de 10 segundos**: Claude Code la reabre hasta tres veces, luego se detiene para esa conexión.

397* **La secuencia permanece abierta más de 10 segundos, luego se cierra**, como las secuencias a hosts sin servidor comúnmente lo hacen: después de cinco reaperturas en una hora, Claude Code espera aproximadamente seis horas antes de la siguiente.397* **La secuencia permanece abierta más de 10 segundos, luego se cierra**, como las secuencias a hosts sin servidor comúnmente lo hacen: después de cinco reaperturas en una hora, Claude Code espera aproximadamente seis horas antes de la siguiente.

398 398 

399Hasta que la secuencia se reabre, mantiene las últimas herramientas, indicaciones y recursos obtenidos del servidor. Para recoger sus cambios más pronto, reconecte el servidor desde `/mcp`.399Hasta que la secuencia se reabre, mantiene las herramientas, indicaciones y recursos del servidor obtenidos por última vez. Para recoger sus cambios más pronto, reconecte el servidor desde `/mcp`.

400 400 

401<h3 id="automatic-reconnection">401<h3 id="automatic-reconnection">

402 Reconexión automática402 Reconexión automática


417 Conexiones iniciales fallidas417 Conexiones iniciales fallidas

418</h4>418</h4>

419 419 

420Cuando la primera conexión de un servidor HTTP o SSE falla con un error transitorio, como una respuesta 5xx, una conexión rechazada, o un tiempo de espera, Claude Code reintenta hasta tres veces. Si la conexión aún falla, Claude Code marca el servidor como fallido. Claude Code reintenta de esta manera al inicio y cuando se agrega un servidor a mitad de sesión. Eso incluye un servidor que Claude Code agrega a una [sesión en la nube](/docs/es/claude-code-on-the-web) desde su configuración y un servidor que agrega con el método [`setMcpServers()`](/docs/es/agent-sdk/typescript) del Agent SDK.420Cuando la primera conexión de un servidor HTTP o SSE falla con un error transitorio, como una respuesta 5xx, una conexión rechazada, o un tiempo de espera, Claude Code reintenta hasta tres veces. Si la conexión aún falla, Claude Code marca el servidor como fallido.

421 421 

422Claude Code no reintenta en estos casos:422Claude Code no reintenta en estos casos:

423 423 

424* La primera conexión de un servidor WebSocket424* La primera conexión de un servidor WebSocket

425* Un error de autenticación o no encontrado, porque requiere un cambio de configuración para resolverse. Cuando un [`headersHelper`](#use-dynamic-headers-for-custom-authentication) es la única fuente del servidor del encabezado `Authorization`, Claude Code reintenta un error de autenticación de todas formas, porque vuelve a ejecutar el ayudante en cada intento y puede recoger una credencial fresca425* Un error de autenticación o no encontrado, porque requiere un cambio de configuración para resolverse. Cuando un [`headersHelper`](#use-dynamic-headers-for-custom-authentication) es la única fuente del servidor del encabezado `Authorization`, Claude Code reintenta un error de autenticación de todas formas, porque vuelve a ejecutar el helper en cada intento y puede recoger una credencial fresca

426 426 

427<h4 id="failed-discovery-requests">427<h4 id="failed-discovery-requests">

428 Solicitudes de descubrimiento fallidas428 Solicitudes de descubrimiento fallidas


434 Cómo Claude aprende que un servidor falló434 Cómo Claude aprende que un servidor falló

435</h4>435</h4>

436 436 

437Si Claude Code le dice a Claude sobre un servidor configurado que no se conectó depende de [búsqueda de herramientas](#scale-with-mcp-tool-search), que está activada de forma predeterminada:437Si Claude Code le dice a Claude sobre un servidor configurado que falló al conectarse depende de [búsqueda de herramientas](#scale-with-mcp-tool-search), que está activada de forma predeterminada:

438 438 

439* Con búsqueda de herramientas, Claude Code le dice a Claude qué servidor falló y su error de conexión, por lo que Claude informa la falla de conexión en su respuesta. Claude Code incluye la misma información en resultados de `ToolSearch` que no encuentran herramientas coincidentes.439* Con búsqueda de herramientas, Claude Code le dice a Claude qué servidor falló y su error de conexión, por lo que Claude informa la falla de conexión en su respuesta. Claude Code incluye la misma información en resultados de `ToolSearch` que no encuentran herramientas coincidentes.

440* En cualquier [configuración sin búsqueda de herramientas](#configure-tool-search), Claude Code no informa fallas de conexión de servidor configurado a Claude.440* En cualquier [configuración sin búsqueda de herramientas](#configure-tool-search), Claude Code no informa fallos de conexión de servidores fallidos a Claude.

441 441 

442<h3 id="push-messages-with-channels">442<h3 id="push-messages-with-channels">

443 Mensajes de inserción con canales443 Enviar mensajes con canales

444</h3>444</h3>

445 445 

446Un servidor MCP también puede insertar mensajes directamente en su sesión para que Claude pueda reaccionar a eventos externos como resultados de CI, alertas de monitoreo, o mensajes de chat. Para habilitar esto, su servidor declara la capacidad `claude/channel` y usted lo activa con la bandera `--channels` al inicio. Consulte [Canales](/docs/es/channels) para utilizar un canal oficialmente compatible, o [Referencia de canales](/docs/es/channels-reference) para construir el suyo propio.446Un servidor MCP también puede enviar mensajes directamente a su sesión para que Claude pueda reaccionar a eventos externos como resultados de CI, alertas de monitoreo, o mensajes de chat. Para habilitar esto, su servidor declara la capacidad `claude/channel` y usted lo activa con la bandera `--channels` al inicio. Consulte [Channels](/docs/es/channels) para usar un canal oficialmente compatible, o [Channels reference](/docs/es/channels-reference) para construir el suyo propio.

447 447 

448En el [tiempo de ejecución v2](#mcp-client-runtimes), si establece [`MCP_PROTOCOL_NEGOTIATION`](/docs/es/env-vars) en `auto` y un servidor de canal negocia la revisión del protocolo MCP 2026-07-28, no puede entregar mensajes de canal, por lo que Claude Code no lo registra como un canal. Dejar la variable sin establecer, o establecerla en `legacy`, mantiene servidores stdio en el protocolo anterior.448En el [tiempo de ejecución v2](#mcp-client-runtimes), si establece [`MCP_PROTOCOL_NEGOTIATION`](/docs/es/env-vars) en `auto` y un servidor de canal negocia la revisión del protocolo MCP 2026-07-28, no puede entregar mensajes de canal, por lo que Claude Code no lo registra como un canal. Dejar la variable sin establecer, o establecerla en `legacy`, mantiene los servidores stdio en el protocolo anterior.

449 449 

450<Tip>450<Tip>

451 Consejos:451 Consejos:

452 452 

453 * Utilice la bandera `-s` o `--scope` para especificar dónde se almacena la configuración:453 * Use la bandera `-s` o `--scope` para especificar dónde se almacena la configuración:

454 * `local` (predeterminado): disponible solo para usted en el proyecto actual454 * `local` (predeterminado): disponible solo para usted en el proyecto actual

455 * `project`: compartido con todos en el proyecto a través del archivo `.mcp.json`455 * `project`: compartido con todos en el proyecto a través del archivo `.mcp.json`

456 * `user`: disponible para usted en todos los proyectos456 * `user`: disponible para usted en todos los proyectos

457 * Establezca variables de entorno con banderas `-e` o `--env` (por ejemplo, `-e KEY=value`)457 * Establezca variables de entorno con banderas `-e` o `--env` (por ejemplo, `-e KEY=value`)

458 * Las banderas `--transport` y `--header` también aceptan formas cortas `-t` y `-H`458 * Las banderas `--transport` y `--header` también aceptan formas cortas `-t` y `-H`

459 * Configure el tiempo de espera de inicio del servidor MCP utilizando la variable de entorno `MCP_TIMEOUT` (por ejemplo, `MCP_TIMEOUT=10000 claude` establece un tiempo de espera de 10 segundos)459 * Configure el tiempo de espera de inicio del servidor MCP usando la variable de entorno `MCP_TIMEOUT` (por ejemplo, `MCP_TIMEOUT=10000 claude` establece un tiempo de espera de 10 segundos)

460 * Establezca un tiempo de espera de ejecución de herramienta por servidor agregando un campo `timeout` en milisegundos a la entrada `.mcp.json` de ese servidor, por ejemplo `"timeout": 600000` para diez minutos. Esto anula la variable de entorno `MCP_TOOL_TIMEOUT` solo para ese servidor460 * Establezca un tiempo de espera de ejecución de herramientas por servidor agregando un campo `timeout` en milisegundos a la entrada `.mcp.json` de ese servidor, por ejemplo `"timeout": 600000` para diez minutos. Esto anula la variable de entorno `MCP_TOOL_TIMEOUT` solo para ese servidor

461 * Claude Code muestra una advertencia cuando la salida de herramientas MCP excede 10,000 tokens y limita la salida a 25,000 tokens de forma predeterminada. Para aumentar el límite, establezca la variable de entorno `MAX_MCP_OUTPUT_TOKENS` (por ejemplo, `MAX_MCP_OUTPUT_TOKENS=50000`); el umbral de advertencia es fijo. Consulte [Límites de salida de MCP y advertencias](#mcp-output-limits-and-warnings)461 * Claude Code muestra una advertencia cuando la salida de herramientas MCP excede 10,000 tokens y limita la salida a 25,000 tokens de forma predeterminada. Para aumentar el límite, establezca la variable de entorno `MAX_MCP_OUTPUT_TOKENS` (por ejemplo, `MAX_MCP_OUTPUT_TOKENS=50000`); el umbral de advertencia es fijo. Consulte [MCP output limits and warnings](#mcp-output-limits-and-warnings)

462 * Utilice `/mcp` para autenticarse con servidores remotos que requieren autenticación OAuth 2.0462 * Use `/mcp` para autenticarse con servidores remotos que requieren autenticación OAuth 2.0

463</Tip>463</Tip>

464 464 

465El `timeout` por servidor es un límite de reloj de pared duro por llamada de herramienta, y las notificaciones de progreso del servidor no lo extienden. Los valores por debajo de 1000 se ignoran y caen a `MCP_TOOL_TIMEOUT`, o a su valor predeterminado de aproximadamente 28 horas cuando esa variable no está establecida. Para un servidor HTTP, SSE, o [conector claude.ai](/docs/es/mcp#use-mcp-servers-from-claude-ai) también hay un segundo temporizador por solicitud que cubre cada solicitud hasta el primer byte de respuesta del servidor. Claude Code establece ese temporizador al mayor de tres valores: 60 segundos, el tiempo de espera de herramienta que se aplica al servidor, y `MCP_TIMEOUT`. El valor predeterminado de 28 horas de un `MCP_TOOL_TIMEOUT` sin establecer no entra en esa comparación, y un valor por debajo de 60 segundos no acorta el temporizador. Los servidores stdio y WebSocket no tienen temporizador por solicitud.465El `timeout` por servidor es un límite de reloj de pared duro por llamada de herramienta, y las notificaciones de progreso del servidor no lo extienden. Los valores por debajo de 1000 se ignoran y caen a `MCP_TOOL_TIMEOUT`, o a su valor predeterminado de aproximadamente 28 horas cuando esa variable no está establecida. Para un servidor HTTP, SSE, o [conector claude.ai](/docs/es/mcp#use-mcp-servers-from-claude-ai) también hay un segundo temporizador por solicitud que cubre cada solicitud hasta el primer byte de respuesta del servidor. Claude Code establece ese temporizador al mayor de tres valores: 60 segundos, el tiempo de espera de herramientas que se aplica al servidor, y `MCP_TIMEOUT`. El valor predeterminado de 28 horas de un `MCP_TOOL_TIMEOUT` sin establecer no entra en esa comparación, y un valor por debajo de 60 segundos no acorta el temporizador. Los servidores stdio y WebSocket no tienen temporizador por solicitud.

466 466 

467Un `timeout` por servidor de al menos 1000 también actúa como un piso en el tiempo de espera de inactividad descrito a continuación: Claude Code nunca aborta las llamadas de herramienta de ese servidor por inactividad más pronto que el `timeout` por servidor. Requiere Claude Code v2.1.203 o posterior.467Un `timeout` por servidor de al menos 1000 también actúa como un piso en el tiempo de espera de inactividad descrito a continuación: Claude Code nunca aborta las llamadas de herramientas de ese servidor por inactividad más pronto que el `timeout` por servidor. Requiere Claude Code v2.1.203 o posterior.

468 468 

469Una llamada de herramienta a un servidor MCP que no envía respuesta y ninguna notificación de progreso para la ventana de inactividad aborta con un error en lugar de esperar el límite de reloj de pared. Se aplica a todos los tipos de servidor excepto servidores IDE y servidores en proceso del SDK. La ventana de inactividad tiene un valor predeterminado de cinco minutos para servidores HTTP, SSE, WebSocket, y [conector claude.ai](#use-mcp-servers-from-claude-ai), y de 30 minutos para servidores stdio. Antes de v2.1.203, los servidores stdio estaban exentos del tiempo de espera de inactividad.469Una llamada de herramienta a un servidor MCP que no envía respuesta ni notificación de progreso durante la ventana de inactividad aborta con un error en lugar de esperar el límite de reloj de pared. El tiempo de espera de inactividad se aplica a todos los tipos de servidor excepto servidores IDE y servidores en proceso SDK. La ventana de inactividad tiene un valor predeterminado de cinco minutos para servidores HTTP, SSE, WebSocket, y [conector claude.ai](#use-mcp-servers-from-claude-ai), y de 30 minutos para servidores stdio. Antes de v2.1.203, los servidores stdio estaban exentos del tiempo de espera de inactividad.

470 470 

471Establezca la variable de entorno [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/es/env-vars) en milisegundos para cambiar la ventana de inactividad, o establézcala en `0` para deshabilitar la verificación.471Establezca la variable de entorno [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/es/env-vars) en milisegundos para cambiar la ventana de inactividad, o establézcala en `0` para deshabilitar la verificación.

472 472 

473Estos tiempos de espera limitan cuánto tiempo puede ejecutarse una llamada, no siempre cuánto tiempo bloquea la sesión: una llamada de conversación principal que se ejecuta más de dos minutos se mueve a una tarea de fondo primero. Consulte [Envío automático a segundo plano de llamadas de herramientas largas](#automatic-backgrounding-of-long-tool-calls).473Estos tiempos de espera limitan cuánto tiempo puede ejecutarse una llamada, no siempre cuánto bloquea la sesión: una llamada de conversación principal que se ejecuta más de dos minutos se mueve a una tarea de fondo primero. Consulte [Automatic backgrounding of long tool calls](#automatic-backgrounding-of-long-tool-calls).

474 474 

475<h3 id="automatic-backgrounding-of-long-tool-calls">475<h3 id="automatic-backgrounding-of-long-tool-calls">

476 Envío automático a segundo plano de llamadas de herramientas largas476 Ejecución automática en segundo plano de llamadas de herramientas largas

477</h3>477</h3>

478 478 

479Una llamada de herramienta MCP en la conversación principal que aún se está ejecutando después de dos minutos se mueve a una tarea de fondo en lugar de bloquear la sesión. Claude recibe el ID de tarea inmediatamente y continúa trabajando, y el resultado llega como una notificación de tarea cuando la llamada se resuelve. El envío automático a segundo plano requiere Claude Code v2.1.212 o posterior.479Una llamada de herramienta MCP en la conversación principal que aún se está ejecutando después de dos minutos se mueve a una tarea de fondo en lugar de bloquear la sesión. Claude recibe el ID de tarea inmediatamente y continúa trabajando, y el resultado llega como una notificación de tarea cuando la llamada se resuelve. La ejecución automática en segundo plano requiere Claude Code v2.1.212 o posterior.

480 480 

481La tarea aparece en [`/tasks`](/docs/es/commands#all-commands), donde también puede detenerla, y no sobrevive a la salida de la sesión. Los límites por llamada aún se aplican mientras la llamada se ejecuta en segundo plano: el límite de reloj de pared establecido por el `timeout` por servidor o [`MCP_TOOL_TIMEOUT`](/docs/es/env-vars), y el tiempo de espera de inactividad establecido por [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/es/env-vars).481La tarea aparece en [`/tasks`](/docs/es/commands#all-commands), donde también puede detenerla, y no sobrevive a la salida de la sesión. La entrada de la tarea muestra el progreso más reciente que el servidor ha informado.

482 482 

483Establezca la variable de entorno [`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](/docs/es/env-vars) en milisegundos para cambiar el umbral, o establézcala en `0` para desactivar el envío automático a segundo plano. Establecer `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` en `1` también lo desactiva, junto con todas las otras características de tareas de fondo.483Los límites por llamada aún se aplican mientras la llamada se ejecuta en segundo plano: el límite de reloj de pared establecido por el `timeout` por servidor o [`MCP_TOOL_TIMEOUT`](/docs/es/env-vars), y el tiempo de espera de inactividad establecido por [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/es/env-vars).

484 

485Establezca la variable de entorno [`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](/docs/es/env-vars) en milisegundos para cambiar el umbral, o establézcala en `0` para desactivar la ejecución automática en segundo plano. Establecer `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` en `1` también la desactiva, junto con todas las otras características de tareas de fondo.

484 486 

485Algunas llamadas nunca se mueven al fondo:487Algunas llamadas nunca se mueven al fondo:

486 488 

487* Llamadas de [subagentes](/docs/es/sub-agents); Claude Code solo envía a segundo plano llamadas de conversación principal489* Llamadas de [subagentes](/docs/es/sub-agents); Claude Code solo ejecuta en segundo plano llamadas de conversación principal

488* Llamadas a servidores IDE490* Llamadas a servidores IDE

489* Llamadas en [modo no interactivo](/docs/es/headless), a menos que `CLAUDE_AUTO_BACKGROUND_TASKS` esté establecido en `1`, ya que una ejecución única puede terminar antes de que llegue el resultado491* Llamadas en [modo no interactivo](/docs/es/headless), a menos que `CLAUDE_AUTO_BACKGROUND_TASKS` esté establecido en `1`, ya que una ejecución única puede terminar antes de que llegue el resultado

490 492 

491Una llamada esperando un [diálogo de elicitación](#respond-to-mcp-elicitation-requests) abierto no se envía a segundo plano mientras el diálogo está abierto; el servidor está bloqueado en su entrada, no es lento, por lo que Claude Code difiere el movimiento hasta que el diálogo se cierre.493Una llamada esperando un [diálogo de elicitación](#respond-to-mcp-elicitation-requests) abierto no se ejecuta en segundo plano mientras el diálogo está abierto; el servidor está bloqueado en su entrada, no es lento, por lo que Claude Code difiere el movimiento hasta que el diálogo se cierre.

492 494 

493<h3 id="plugin-provided-mcp-servers">495<h3 id="plugin-provided-mcp-servers">

494 Servidores MCP proporcionados por plugins496 Servidores MCP proporcionados por plugins


538**Características MCP de plugins**:540**Características MCP de plugins**:

539 541 

540* **Ciclo de vida automático**: los servidores se conectan y desconectan en estos puntos:542* **Ciclo de vida automático**: los servidores se conectan y desconectan en estos puntos:

541 * Al inicio de la sesión, Claude Code conecta automáticamente los servidores de plugins habilitados. En `/mcp`, un servidor de plugin remoto (HTTP o SSE) que ha utilizado antes puede mostrar el estado [`cached`](#server-status-detail) en su lugar; Claude Code lo conecta cuando Claude llama por primera vez a una de sus herramientas543 * Al inicio de la sesión, Claude Code conecta automáticamente los servidores de plugins habilitados. En `/mcp`, un servidor de plugin remoto (HTTP o SSE) que ha usado antes puede mostrar el estado [`cached`](#server-status-detail) en su lugar; Claude Code se conecta cuando Claude llama por primera vez a una de sus herramientas

542 * Si habilita o deshabilita un plugin durante una sesión, Claude Code conecta o desconecta sus servidores MCP cuando el cambio se aplica. [Aplicar cambios de plugins sin reiniciar](/docs/es/plugins/cli-reference#reload-plugins) describe cuándo es eso. En una sesión sin terminal interactiva, `/reload-plugins` no conecta o desconecta servidores MCP de plugins; esos cambios tienen efecto en su próxima sesión544 * Si habilita o deshabilita un plugin durante una sesión, Claude Code conecta o desconecta sus servidores MCP cuando el cambio se aplica. [Apply plugin changes without restarting](/docs/es/plugins/cli-reference#reload-plugins) describe cuándo es eso. En una sesión sin terminal interactiva, `/reload-plugins` no conecta ni desconecta servidores MCP de plugins; esos cambios tienen efecto en su próxima sesión

543 * Cuando recarga, Claude Code mantiene las conexiones activas de servidores de plugins cuya configuración no ha cambiado, y hace lo mismo cuando [reemplaza la lista de servidores MCP de la sesión](/docs/es/agent-sdk/typescript#mcpsetserversresult) desde el Agent SDK sin nombrarlos545 * Cuando recarga, Claude Code mantiene las conexiones activas de servidores de plugins cuya configuración no ha cambiado, y hace lo mismo cuando [reemplaza la lista de servidores MCP de la sesión](/docs/es/agent-sdk/typescript#mcpsetserversresult) desde el Agent SDK sin nombrarlos

544 * Cuando [mueve la sesión con `/cd`](/docs/es/permissions#move-the-session-to-another-directory) en v2.1.246 o posterior, Claude Code conecta los servidores de plugins que la configuración del nuevo directorio habilita y desconecta los servidores de plugins que ya no están habilitados, por lo que no necesita ejecutar `/reload-plugins` después del movimiento546 * Cuando [mueve la sesión con `/cd`](/docs/es/permissions#move-the-session-to-another-directory) en v2.1.246 o posterior, Claude Code conecta los servidores de plugins que la configuración del nuevo directorio habilita y desconecta los servidores de plugins que ya no están habilitados, por lo que no necesita ejecutar `/reload-plugins` después del movimiento

545 * En [sesiones en la nube](/docs/es/claude-code-on-the-web), una llamada MCP a un servidor de plugin que aún no está conectado, como justo después de que una sesión inactiva se despierte, inicia el servidor bajo demanda y espera a que se conecte547 * En [sesiones en la nube](/docs/es/claude-code-on-the-web), una llamada MCP a un servidor de plugin que aún no está conectado, como justo después de que una sesión inactiva se despierte, inicia el servidor bajo demanda y espera a que se conecte


551 553 

552Los servidores de plugins aparecen en `/mcp` con indicadores que muestran que provienen de plugins.554Los servidores de plugins aparecen en `/mcp` con indicadores que muestran que provienen de plugins.

553 555 

556Para un servidor stdio de un plugin, `claude mcp get` imprime `Command: stdio`, una línea `Args:` vacía, y cada variable de entorno como `NAME=[REDACTED]`. Los valores están ocultos porque pueden llevar credenciales.

557 

554**Nombres de herramientas MCP de plugins**:558**Nombres de herramientas MCP de plugins**:

555 559 

556Las herramientas de un servidor MCP agrupado en un plugin incluyen tanto el nombre del plugin como la clave del servidor en su nombre invocable. La forma completa es `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`, donde cualquier carácter fuera de `A-Z`, `a-z`, `0-9`, `_`, y `-` se reemplaza con `_`. Para el servidor `database-tools` agrupado en un plugin llamado `my-plugin`, una herramienta `query` es invocable como:560Las herramientas de un servidor MCP agrupado en un plugin incluyen tanto el nombre del plugin como la clave del servidor en su nombre invocable. La forma completa es `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`, donde cualquier carácter fuera de `A-Z`, `a-z`, `0-9`, `_`, y `-` se reemplaza con `_`. Para el servidor `database-tools` agrupado en un plugin llamado `my-plugin`, una herramienta `query` es invocable como:


559mcp__plugin_my-plugin_database-tools__query563mcp__plugin_my-plugin_database-tools__query

560```564```

561 565 

562Utilice este nombre completo cuando haga referencia a la herramienta en [reglas de permisos](/docs/es/permissions), la lista `allowed-tools` de una habilidad, el [campo `tools` de un subagente](/docs/es/sub-agents#available-tools), o un [coincidente de hook](/docs/es/hooks#match-mcp-tools). Un coincidente de hook escrito contra la clave del servidor desnuda, como `mcp__database-tools__.*`, nunca se dispara para un servidor agrupado en un plugin.566Use este nombre completo cuando haga referencia a la herramienta en [reglas de permisos](/docs/es/permissions), la lista `allowed-tools` de una skill, el [campo `tools` de un subagente](/docs/es/sub-agents#available-tools), o un [coincidente de hook](/docs/es/hooks#match-mcp-tools). Un coincidente de hook escrito contra la clave del servidor desnuda, como `mcp__database-tools__.*`, nunca se dispara para un servidor agrupado en un plugin.

563 567 

564El servidor mismo se registra bajo el nombre con alcance `plugin:<plugin-name>:<server-name>`, como `plugin:my-plugin:database-tools`. Utilice ese nombre donde se espera un nombre de servidor configurado, como el [campo `server` de un hook `mcp_tool`](/docs/es/hooks#mcp-tool-hook-fields).568El servidor mismo se registra bajo el nombre con alcance `plugin:<plugin-name>:<server-name>`, como `plugin:my-plugin:database-tools`. Use ese nombre donde se espera un nombre de servidor configurado, como el [campo `server` de un hook `mcp_tool`](/docs/es/hooks#mcp-tool-hook-fields).

565 569 

566Consulte la [referencia de componentes de plugins](/docs/es/plugins/components#mcp-servers) para obtener detalles sobre cómo agrupar servidores MCP con plugins.570Consulte la [referencia de componentes de plugins](/docs/es/plugins/components#mcp-servers) para obtener detalles sobre cómo agrupar servidores MCP con plugins.

567 571 


1456* Los nombres de propiedades de nivel superior deben tener entre 1 y 64 caracteres de largo y usar solo letras ASCII y dígitos, `_`, `.` y `-`1460* Los nombres de propiedades de nivel superior deben tener entre 1 y 64 caracteres de largo y usar solo letras ASCII y dígitos, `_`, `.` y `-`

1457* El esquema debe ser válido contra el meta-esquema de JSON Schema draft 2020-12. Claude Code aplica esta comprobación a esquemas que no declaran `$schema` y esquemas que declaran draft 2020-12. Un esquema que declara cualquier otro dialecto omite esta comprobación, aunque la comprobación de nombres de propiedades anterior sigue aplicándose1461* El esquema debe ser válido contra el meta-esquema de JSON Schema draft 2020-12. Claude Code aplica esta comprobación a esquemas que no declaran `$schema` y esquemas que declaran draft 2020-12. Un esquema que declara cualquier otro dialecto omite esta comprobación, aunque la comprobación de nombres de propiedades anterior sigue aplicándose

1458 1462 

1459Claude Code ejecuta las comprobaciones después de la [reescritura de combinador de nivel raíz](#tool-input-schemas-with-a-root-level-combinator), en el esquema que realmente enviaría.

1460 

1461Cuando Claude Code excluye una herramienta, registra el motivo en el registro del servidor e indica a Claude qué herramientas excluyó y por qué, para que pueda preguntarle a Claude por qué falta una herramienta. Si corrige el esquema en el servidor, la herramienta reaparece la próxima vez que Claude Code carga las herramientas del servidor.1463Cuando Claude Code excluye una herramienta, registra el motivo en el registro del servidor e indica a Claude qué herramientas excluyó y por qué, para que pueda preguntarle a Claude por qué falta una herramienta. Si corrige el esquema en el servidor, la herramienta reaparece la próxima vez que Claude Code carga las herramientas del servidor.

1462 1464 

1463Claude Code activa la exclusión a través de una bandera de características que obtiene de Anthropic. En una [implementación donde la obtención de banderas está desactivada](/docs/es/env-vars#features-that-need-feature-flag-fetching), o en una máquina cuyas banderas nunca han llegado, como una máquina aislada, Claude Code sigue ejecutando las comprobaciones y registra en el registro del servidor qué herramienta sería rechazada, pero envía el esquema de la herramienta a la API de todas formas. La API rechaza una solicitud que incluya ese esquema con [un error 400 que nombra la herramienta por su posición](/docs/es/errors#tool-input-schema-is-invalid). Antes de v2.1.216, ninguna implementación ejecutaba estas comprobaciones.1465Claude Code activa la exclusión a través de una bandera de características que obtiene de Anthropic. En una [implementación donde la obtención de banderas está desactivada](/docs/es/env-vars#features-that-need-feature-flag-fetching), o en una máquina cuyas banderas nunca han llegado, como una máquina aislada, Claude Code sigue ejecutando las comprobaciones y registra en el registro del servidor qué herramienta sería rechazada, pero envía el esquema de la herramienta a la API de todas formas. La API rechaza una solicitud que incluya ese esquema con [un error 400 que nombra la herramienta por su posición](/docs/es/errors#tool-input-schema-is-invalid). Antes de v2.1.216, ninguna implementación ejecutaba estas comprobaciones.

Details

360 360 

361 Lo que sucede a continuación le dice dónde está el problema:361 Lo que sucede a continuación le dice dónde está el problema:

362 362 

363 * El comando se inicia y espera entrada: el servidor en sí funciona. Ejecute `claude mcp get <name>` y confirme que el comando mostrado allí coincida con lo que acaba de ejecutar. Si el comando mostrado difiere de lo que escribió, probablemente omitió el separador `--` antes del comando del servidor. Elimine el servidor y vuelva a agregarlo con `--` en su lugar. Si escribió `.mcp.json` a mano, verifique su sintaxis y ubicación.363 * El comando se inicia y espera entrada: el servidor en sí funciona.

364 

365 Ejecute `claude mcp get <name>` y confirme que el comando mostrado allí coincida con lo que acaba de ejecutar. Si el comando mostrado difiere de lo que escribió, probablemente omitió el separador `--` antes del comando del servidor. Elimine el servidor y vuelva a agregarlo con `--` en su lugar. Si escribió `.mcp.json` a mano, verifique su sintaxis y ubicación. Antes de v2.1.285, `claude mcp get` no imprimía ninguna línea `Command` para una entrada stdio guardada sin un campo `type`, como una entrada `.mcp.json` escrita a mano. En esas versiones, ejecute `claude mcp list` en su lugar, que imprime la línea de comando de cualquier forma.

364 * El comando genera un error: el mensaje nombra lo que falta, como Node.js o un navegador.366 * El comando genera un error: el mensaje nombra lo que falta, como Node.js o un navegador.

365 </Accordion>367 </Accordion>

366 368 

model-config.md +11 −6

Details

39| **`sonnet`** | Utiliza el último modelo Sonnet para tareas de codificación diaria |39| **`sonnet`** | Utiliza el último modelo Sonnet para tareas de codificación diaria |

40| **`opus`** | Utiliza el último modelo Opus para tareas de razonamiento complejo |40| **`opus`** | Utiliza el último modelo Opus para tareas de razonamiento complejo |

41| **`haiku`** | Utiliza el modelo Haiku rápido y eficiente para tareas simples |41| **`haiku`** | Utiliza el modelo Haiku rápido y eficiente para tareas simples |

42| **`sonnet[1m]`** | Utiliza Sonnet con una [ventana de contexto de 1 millón de tokens](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model) para sesiones largas. Sin efecto cuando `sonnet` ya se resuelve a Sonnet 5.5 o Sonnet 5 con su ventana nativa de 1M; detrás de una [puerta de enlace LLM](/docs/es/llm-gateway), selecciona la ventana de 1M para ese modelo |42| **`sonnet[1m]`** | Utiliza Sonnet con una [ventana de contexto de 1 millón de tokens](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model) para sesiones largas. Sin efecto cuando `sonnet` ya se resuelve a Sonnet 5.5 o Sonnet 5 con su ventana nativa de 1M |

43| **`opus[1m]`** | Utiliza Opus con una [ventana de contexto de 1 millón de tokens](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model) para sesiones largas |43| **`opus[1m]`** | Utiliza Opus con una [ventana de contexto de 1 millón de tokens](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model) para sesiones largas |

44| **`opusplan`** | Modo especial que utiliza `opus` durante el Plan Mode, luego cambia a `sonnet` para la ejecución |44| **`opusplan`** | Modo especial que utiliza `opus` durante Plan Mode, luego cambia a `sonnet` para la ejecución |

45 45 

46La versión a la que se resuelven los alias `opus` y `sonnet` depende del proveedor:46La versión a la que se resuelven los alias `opus` y `sonnet` depende del proveedor:

47 47 


521 Cadenas de modelos de reserva521 Cadenas de modelos de reserva

522</h3>522</h3>

523 523 

524Cuando el modelo principal está sobrecargado, no disponible o devuelve otro error de servidor no reintentable, Claude Code puede cambiar a un modelo de reserva en lugar de fallar la solicitud. Los errores de autenticación, facturación, límite de velocidad, tamaño de solicitud y transporte, y una [denegación por la verificación de política de tu organización](/docs/es/errors#automatic-retries), nunca desencadenan un cambio; esos siguen su manejo normal de reintentos y errores.524Cuando el modelo principal está sobrecargado, no disponible o devuelve otro error de servidor no reintentable, Claude Code puede cambiar a un modelo de reserva en lugar de fallar la solicitud. Los errores de autenticación, facturación, límite de velocidad, tamaño de solicitud y transporte, y una [denegación por la verificación de política de tu organización](/docs/es/errors#automatic-retries), nunca desencadenan un cambio; esos siguen su manejo normal de reintentos y errores. Sí cambia cuando [Amazon Bedrock](/docs/es/amazon-bedrock#when-a-model-is-disabled-mid-session) o [Agent Platform de Google Cloud](/docs/es/google-vertex-ai#when-a-model-is-disabled-mid-session) rechaza un modelo que tu cuenta no puede invocar, que Claude Code trata como que el modelo no está disponible en lugar de como un error de autenticación.

525 525 

526Configura uno o más modelos de reserva y Claude Code los intenta en orden, mostrando un aviso cuando cambia. El cambio dura solo el turno actual, por lo que tu siguiente mensaje intenta el modelo principal primero de nuevo. Claude Code limita las cadenas a tres modelos después de la eliminación de duplicados e ignora entradas adicionales.526Configura uno o más modelos de reserva y Claude Code los intenta en orden, mostrando un aviso cuando cambia. El cambio dura solo el turno actual, por lo que tu siguiente mensaje intenta el modelo principal primero de nuevo. Claude Code limita las cadenas a tres modelos después de la eliminación de duplicados e ignora entradas adicionales.

527 527 


775 775 

776Claude Code verifica estos requisitos de plan solo cuando se conecta a la API de Anthropic directamente. Si apuntas `ANTHROPIC_BASE_URL` a una [puerta de enlace LLM](/docs/es/llm-gateway#subscriptions-and-gateways) y tu inicio de sesión guardado de claude.ai permanece como la credencial activa, Claude Code no verifica tus créditos de uso del plan. Las opciones `[1m]` permanecen disponibles en `/model`, y la puerta de enlace decide si la solicitud tiene éxito. Antes de v2.1.229, Claude Code rechazaba `/model sonnet[1m]` en esa configuración cuando no podía confirmar créditos de uso en la cuenta.776Claude Code verifica estos requisitos de plan solo cuando se conecta a la API de Anthropic directamente. Si apuntas `ANTHROPIC_BASE_URL` a una [puerta de enlace LLM](/docs/es/llm-gateway#subscriptions-and-gateways) y tu inicio de sesión guardado de claude.ai permanece como la credencial activa, Claude Code no verifica tus créditos de uso del plan. Las opciones `[1m]` permanecen disponibles en `/model`, y la puerta de enlace decide si la solicitud tiene éxito. Antes de v2.1.229, Claude Code rechazaba `/model sonnet[1m]` en esa configuración cuando no podía confirmar créditos de uso en la cuenta.

777 777 

778<span id="context-window-behind-a-gateway" />

779 

780Si estableces `ANTHROPIC_BASE_URL` a una [puerta de enlace LLM](/docs/es/llm-gateway) u otro proxy, Claude Code da a cada modelo que reconoce la misma ventana de contexto que el modelo tiene en la API de Anthropic. Fable 5.1, Fable 5, Sonnet 5 y posterior, y Opus 4.7 y posterior obtienen la ventana de 1M sin variante `[1m]` para seleccionar, y un modelo que alcanza 1M solo a través de su variante `[1m]`, como Opus 4.6, se ejecuta a 200K sin ella. Claude Code no puede detectar un límite inferior que la puerta de enlace o el servidor detrás de ella aplique. Si tu puerta de enlace rechaza solicitudes por encima de 200K tokens, ejecuta [`/autocompact 200k`](#set-the-auto-compact-window) para que las sesiones se compacten en ese límite.

781 

778Para desactivar el contexto de 1M, establece `CLAUDE_CODE_DISABLE_1M_CONTEXT=1`. Claude Code elimina variantes de modelo de 1M del selector de modelo. En modelos con una ventana de 1M nativa, como Sonnet 5 y los modelos Fable, también trata el modelo como si tuviera una ventana de contexto de 200K:782Para desactivar el contexto de 1M, establece `CLAUDE_CODE_DISABLE_1M_CONTEXT=1`. Claude Code elimina variantes de modelo de 1M del selector de modelo. En modelos con una ventana de 1M nativa, como Sonnet 5 y los modelos Fable, también trata el modelo como si tuviera una ventana de contexto de 200K:

779 783 

780* Con la compactación automática activada, las sesiones se compactan en el límite de 200K a través de [compactación automática](#set-the-auto-compact-window). Establecer la ventana de compactación automática por encima de 200K no levanta la retención, porque Claude Code limita esa ventana a la ventana de contexto del modelo.784* Con la compactación automática activada, las sesiones se compactan en el límite de 200K a través de [compactación automática](#set-the-auto-compact-window). Establecer la ventana de compactación automática por encima de 200K no levanta la retención, porque Claude Code limita esa ventana a la ventana de contexto del modelo.


803 807 

804En la API de Anthropic, Sonnet 5.5 y Sonnet 5 siempre se ejecutan con la ventana de contexto de 1M. No hay variante de 200K, sin sufijo `[1m]` para seleccionar, y sin créditos de uso requeridos en ningún plan. Las sesiones se compactan automáticamente antes de que la ventana se llene, en aproximadamente 967K tokens por defecto; establece [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/es/env-vars) para elegir un umbral diferente.808En la API de Anthropic, Sonnet 5.5 y Sonnet 5 siempre se ejecutan con la ventana de contexto de 1M. No hay variante de 200K, sin sufijo `[1m]` para seleccionar, y sin créditos de uso requeridos en ningún plan. Las sesiones se compactan automáticamente antes de que la ventana se llene, en aproximadamente 967K tokens por defecto; establece [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/es/env-vars) para elegir un umbral diferente.

805 809 

806Dos configuraciones presupuestan la ventana en 200K en su lugar:810Claude Code da a Sonnet 5.5 y Sonnet 5 la misma ventana de 1M detrás de una [puerta de enlace LLM](/docs/es/llm-gateway) u otro `ANTHROPIC_BASE_URL` personalizado. Si tu puerta de enlace aplica un límite inferior, consulta [la ventana de contexto detrás de una puerta de enlace](#context-window-behind-a-gateway).

811 

812Esta configuración presupuesta la ventana en 200K en su lugar:

807 813 

808* **Puerta de enlace LLM**: cuando `ANTHROPIC_BASE_URL` apunta a una [puerta de enlace](/docs/es/llm-gateway), Claude Code no puede verificar soporte de 1M. Para usar la ventana completa, selecciona Sonnet 5.5 (1M context) en el selector de modelo, que se asigna a `sonnet[1m]`, o ejecuta `/model claude-sonnet-5[1m]` para Sonnet 5.

809* **`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`**: mantiene sesiones en cada modelo con una ventana de 1M nativa a una ventana de 200K; consulta [Extended context](#extended-context) para cómo se aplica la retención. Útil para despliegues que necesitan limitar el contexto.814* **`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`**: mantiene sesiones en cada modelo con una ventana de 1M nativa a una ventana de 200K; consulta [Extended context](#extended-context) para cómo se aplica la retención. Útil para despliegues que necesitan limitar el contexto.

810 815 

811<h2 id="context-window-and-auto-compaction">816<h2 id="context-window-and-auto-compaction">


841* Las [sesiones en la nube](/docs/es/claude-code-on-the-web) se compactan cuando la conversación se acerca al límite del modelo846* Las [sesiones en la nube](/docs/es/claude-code-on-the-web) se compactan cuando la conversación se acerca al límite del modelo

842* Sonnet 4.6 y Opus 4.6 sin [contexto extendido](#extended-context) se compactan en el límite de 200K, y también lo hacen Opus 4.8 y posteriores cuando se ejecutan con una ventana de contexto de 200K, como en Amazon Bedrock, Google Cloud's Agent Platform y Microsoft Foundry847* Sonnet 4.6 y Opus 4.6 sin [contexto extendido](#extended-context) se compactan en el límite de 200K, y también lo hacen Opus 4.8 y posteriores cuando se ejecutan con una ventana de contexto de 200K, como en Amazon Bedrock, Google Cloud's Agent Platform y Microsoft Foundry

843* Cuando establece [`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`](/docs/es/env-vars), los modelos con una ventana nativa de 1M, como Sonnet 5 y los modelos Fable, se compactan en el límite de 200K848* Cuando establece [`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`](/docs/es/env-vars), los modelos con una ventana nativa de 1M, como Sonnet 5 y los modelos Fable, se compactan en el límite de 200K

844* Los modelos que se ejecutan con una ventana nativa de 1M, como Sonnet 5, los modelos Fable y Opus 4.7 y posteriores en la API de Anthropic, se compactan antes de que la ventana se llene, a aproximadamente 967K tokens de forma predeterminada. En Amazon Bedrock, Google Cloud's Agent Platform y Microsoft Foundry, [Fijar modelos para implementaciones de terceros](#pin-models-for-third-party-deployments) indica qué modelos se ejecutan con esa ventana; para las configuraciones que presupuestan Sonnet 5.5 y Sonnet 5 en 200K en su lugar, consulte [Ventana de contexto de Sonnet 5.5 y Sonnet 5](#sonnet-5-5-and-sonnet-5-context-window)849* Los modelos que se ejecutan con una ventana nativa de 1M se compactan antes de que la ventana se llene, a aproximadamente 967K tokens de forma predeterminada. En la API de Anthropic, estos incluyen Sonnet 5, los modelos Fable y Opus 4.7 y posteriores. En Amazon Bedrock, Google Cloud's Agent Platform y Microsoft Foundry, consulte [Fijar modelos para implementaciones de terceros](#pin-models-for-third-party-deployments) para ver qué modelos se ejecutan con esa ventana. Detrás de un `ANTHROPIC_BASE_URL` personalizado, consulte [la ventana de contexto detrás de una puerta de enlace](#context-window-behind-a-gateway)

845* Las sesiones en un ID de modelo que Claude Code no reconoce, como un alias de [puerta de enlace LLM](/docs/es/llm-gateway), se compactan en la ventana de contexto que Claude Code asume para el ID; consulte [Corregir la ventana para una puerta de enlace o ID de modelo personalizado](#correct-the-window-for-a-gateway-or-custom-model-id)850* Las sesiones en un ID de modelo que Claude Code no reconoce, como un alias de [puerta de enlace LLM](/docs/es/llm-gateway), se compactan en la ventana de contexto que Claude Code asume para el ID; consulte [Corregir la ventana para una puerta de enlace o ID de modelo personalizado](#correct-the-window-for-a-gateway-or-custom-model-id)

846 851 

847<h3 id="correct-the-window-for-a-gateway-or-custom-model-id">852<h3 id="correct-the-window-for-a-gateway-or-custom-model-id">

Details

1430* `error.type`: por qué Claude Code detuvo la sesión. Presente solo en eventos `refused`:1430* `error.type`: por qué Claude Code detuvo la sesión. Presente solo en eventos `refused`:

1431 * `"helper_failed"`: una [ejecución del asistente de política falló](/docs/es/settings-reference#helper-failures)1431 * `"helper_failed"`: una [ejecución del asistente de política falló](/docs/es/settings-reference#helper-failures)

1432 * `"policy_invalid"`: la configuración gestionada contiene un error que detiene a Claude Code de iniciar, o una fuente de administrador no se pudo cargar, por lo que Claude Code no puede verificar la aplicación de inicio de sesión de la organización1432 * `"policy_invalid"`: la configuración gestionada contiene un error que detiene a Claude Code de iniciar, o una fuente de administrador no se pudo cargar, por lo que Claude Code no puede verificar la aplicación de inicio de sesión de la organización

1433 * `"provider_not_allowed"`: la sesión usaría un proveedor de API, o enviaría el tráfico de un proveedor a un host, que la lista [`allowedProviders`](/docs/es/settings-reference#allowedproviders) gestionada no permite. Requiere Claude Code v2.1.285 o posterior

1433 * `"consent_rejected"`: el usuario rechazó el [diálogo de aprobación de seguridad](/docs/es/server-managed-settings#security-approval-dialogs) para configuración gestionada por servidor1434 * `"consent_rejected"`: el usuario rechazó el [diálogo de aprobación de seguridad](/docs/es/server-managed-settings#security-approval-dialogs) para configuración gestionada por servidor

1434 * `"force_refresh_failed"`: la búsqueda de configuración que [`forceRemoteSettingsRefresh`](/docs/es/settings-reference#forceremotesettingsrefresh) requiere falló1435 * `"force_refresh_failed"`: la búsqueda de configuración que [`forceRemoteSettingsRefresh`](/docs/es/settings-reference#forceremotesettingsrefresh) requiere falló

1435 * `"gateway_rejected"`: una [puerta de enlace de aplicaciones Claude](/docs/es/claude-apps-gateway) respondió a la carga de configuración gestionada con HTTP 4031436 * `"gateway_rejected"`: una [puerta de enlace de aplicaciones Claude](/docs/es/claude-apps-gateway) respondió a la carga de configuración gestionada con HTTP 403

Details

246| `storage.googleapis.com` | Instalador nativo y actualizador automático nativo en versiones anteriores a 2.1.116 |246| `storage.googleapis.com` | Instalador nativo y actualizador automático nativo en versiones anteriores a 2.1.116 |

247| `registry.npmjs.org` | Instalaciones de plugins (obtención de paquetes de plugins de origen npm e instalación de dependencias de paquetes Node.js de plugins), servidores MCP lanzados con `npx` y el registro de paquetes para instalaciones de npm y bun de Claude Code en sí |247| `registry.npmjs.org` | Instalaciones de plugins (obtención de paquetes de plugins de origen npm e instalación de dependencias de paquetes Node.js de plugins), servidores MCP lanzados con `npx` y el registro de paquetes para instalaciones de npm y bun de Claude Code en sí |

248| `bridge.claudeusercontent.com` | Puente WebSocket de extensión [Claude en Chrome](/docs/es/chrome) |248| `bridge.claudeusercontent.com` | Puente WebSocket de extensión [Claude en Chrome](/docs/es/chrome) |

249| `*.frame.claudeusercontent.com` | Lecturas de contenido de [Artifact](/docs/es/artifacts). La CLI obtiene los archivos de un artefacto de este host cuando Claude abre uno, y solo cuando la herramienta Artifact está [disponible](/docs/es/artifacts#availability) para su cuenta. Para desactivar la herramienta y eliminar este requisito, establezca [`"enableArtifact": false`](/docs/es/settings-reference#enableartifact) o [`CLAUDE_CODE_DISABLE_ARTIFACT=1`](/docs/es/env-vars); Claude Code también respeta la configuración [`disableArtifact`](/docs/es/settings-reference#disableartifact) obsoleta. Consulte [Deshabilitar artefactos](/docs/es/artifacts#disable-artifacts) para ver cómo interactúan estas configuraciones |249| `*.frame.claudeusercontent.com` | Lecturas de contenido de [Artifact](/docs/es/artifacts). La CLI obtiene los archivos de un artefacto de este host cuando Claude abre uno, y solo cuando la herramienta Artifact está [disponible](/docs/es/artifacts#availability) para su cuenta. Para desactivar la herramienta y eliminar este requisito, establezca [`"enableArtifact": false`](/docs/es/settings-reference#enableartifact) o [`CLAUDE_CODE_DISABLE_ARTIFACT=1`](/docs/es/env-vars) |

250| `github.com` | Clonación de [marketplaces de plugins](/docs/es/plugins/overview) y plugins alojados en GitHub, incluido el marketplace oficial de Anthropic, sobre HTTPS o SSH. Para clonar fuentes de GitHub `owner/repo` solo sobre HTTPS, establezca [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/es/env-vars) |250| `github.com` | Clonación de [marketplaces de plugins](/docs/es/plugins/overview) y plugins alojados en GitHub, incluido el marketplace oficial de Anthropic, sobre HTTPS o SSH. Para clonar fuentes de GitHub `owner/repo` solo sobre HTTPS, establezca [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/es/env-vars) |

251| `raw.githubusercontent.com` | Fuente de registro de cambios para [`/release-notes`](/docs/es/commands). En sesiones interactivas, Claude Code también la obtiene en segundo plano al inicio cuando su registro de cambios en caché aún no cubre la versión en ejecución, como el primer inicio después de una actualización; las sesiones no interactivas y en la nube nunca la obtienen |251| `raw.githubusercontent.com` | Fuente de registro de cambios para [`/release-notes`](/docs/es/commands). En sesiones interactivas, Claude Code también la obtiene en segundo plano al inicio cuando su registro de cambios en caché aún no cubre la versión en ejecución, como el primer inicio después de una actualización; las sesiones no interactivas y en la nube nunca la obtienen |

252| `*-review.googlesource.com` | Búsqueda de cambios de Gerrit en checkouts de `googlesource.com`. Cuando una sesión de pestaña de Claude Desktop Code se inicia o se reanuda en un checkout [confiable](/docs/es/permissions#project-allow-rules-and-workspace-trust) cuyo `origin` es un host `googlesource.com`, Claude Code pregunta anónimamente al servidor `-review` de ese host por el cambio abierto que coincida con el `Change-Id` de HEAD, una vez por inicio o reanudación. Otros tipos de sesión omiten la búsqueda, y no se contacta a ningún otro host de Gerrit. Opcional: deshabilitar con [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/es/env-vars) |252| `*-review.googlesource.com` | Búsqueda de cambios de Gerrit en checkouts de `googlesource.com`. Cuando una sesión de pestaña de Claude Desktop Code se inicia o se reanuda en un checkout [confiable](/docs/es/permissions#project-allow-rules-and-workspace-trust) cuyo `origin` es un host `googlesource.com`, Claude Code pregunta anónimamente al servidor `-review` de ese host por el cambio abierto que coincida con el `Change-Id` de HEAD, una vez por inicio o reanudación. Otros tipos de sesión omiten la búsqueda, y no se contacta a ningún otro host de Gerrit. Opcional: deshabilitar con [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/es/env-vars) |

Details

86| Cómo ejecuta Claude Code | Modo de permisos inicial integrado |86| Cómo ejecuta Claude Code | Modo de permisos inicial integrado |

87| :- | :- |87| :- | :- |

88| Cualquier archivo de configuración establece `disableAutoMode` en `"disable"` | `default` |88| Cualquier archivo de configuración establece `disableAutoMode` en `"disable"` | `default` |

89| `claude -p` o el [SDK de Agent](/docs/es/agent-sdk/permissions) | `default` |89| `claude -p` o el [Agent SDK](/docs/es/agent-sdk/permissions#permission-modes) | `default` en sesiones que [obtienen banderas de características](/docs/es/env-vars#features-that-need-feature-flag-fetching). En sesiones que no lo hacen, como en un proveedor de terceros o con telemetría desactivada, `auto` con Claude Code v2.1.285 o posterior y `default` en versiones anteriores. Una sesión en una organización cuya política retiene el valor predeterminado `auto` comienza en `default` en su lugar |

90| En una terminal o a través de la [extensión de VS Code](/docs/es/vs-code) | `auto` con Claude Code v2.1.283 o posterior; en versiones anteriores, `auto` en planes Pro, Max o Team en sesiones que [obtienen banderas de características](/docs/es/env-vars#features-that-need-feature-flag-fetching), y `default` en caso contrario |90| En una terminal o a través de la [extensión de VS Code](/docs/es/vs-code) | `auto` con Claude Code v2.1.283 o posterior; en versiones anteriores, `auto` en planes Pro, Max o Team en sesiones que [obtienen banderas de características](/docs/es/env-vars#features-that-need-feature-flag-fetching), y `default` en caso contrario |

91 91 

92En su [primera sesión después de una instalación o actualización](/docs/es/env-vars#first-session-after-an-install-or-upgrade), Claude Code puede elegir el modo de permisos inicial antes de que lleguen sus banderas de características. Esa sesión puede iniciarse en un modo de permisos diferente al que proporciona la tabla, y su siguiente sesión coincide con la tabla.92En su [primera sesión después de una instalación o actualización](/docs/es/env-vars#first-session-after-an-install-or-upgrade), Claude Code puede elegir el modo de permisos inicial antes de que lleguen sus banderas de características. Esa sesión puede iniciarse en un modo de permisos diferente al que proporciona la tabla, y su siguiente sesión coincide con la tabla.


98* En una terminal, una vez, en la parte superior de la sesión98* En una terminal, una vez, en la parte superior de la sesión

99* En la extensión de VS Code, como una tarjeta en la pantalla de nueva conversación que permanece hasta que la descarte99* En la extensión de VS Code, como una tarjeta en la pantalla de nueva conversación que permanece hasta que la descarte

100 100 

101En planes Pro, Max y Team, si su `~/.claude/settings.json` establece un `defaultMode` distinto de `auto` y ningún otro archivo de configuración establece uno, sus sesiones siguen iniciándose en ese modo. Claude Code pregunta una vez, en la terminal o en la extensión de VS Code, si desea cambiar la configuración a modo automático. Si rechaza, su configuración permanece como está.101Si su `~/.claude/settings.json` establece un `defaultMode` distinto de `auto` y ningún otro archivo de configuración establece uno, sus sesiones siguen iniciándose en ese modo. En planes Pro, Max y Team, y en sesiones que [no obtienen banderas de características](/docs/es/env-vars#features-that-need-feature-flag-fetching), Claude Code pregunta una vez, en la terminal o en la extensión de VS Code, si desea cambiar la configuración a modo automático. Si rechaza, su configuración permanece como está.

102 102 

103<h3 id="start-in-a-different-mode">103<h3 id="start-in-a-different-mode">

104 Comience en un modo de permisos diferente104 Comience en un modo de permisos diferente


322 Modo automático en Bedrock, Agent Platform o Foundry322 Modo automático en Bedrock, Agent Platform o Foundry

323</h3>323</h3>

324 324 

325En [Amazon Bedrock](/docs/es/amazon-bedrock), [Google Cloud's Agent Platform](/docs/es/google-vertex-ai), [Microsoft Foundry](/docs/es/microsoft-foundry) y sesiones de [puerta de enlace de aplicaciones Claude](/docs/es/claude-apps-gateway) con sesión iniciada, el modo automático está disponible de forma predeterminada. Con Claude Code v2.1.283 o posterior, también es el [modo de permiso de inicio integrado](#which-mode-a-session-starts-in) para sesiones de terminal interactivo y [VS Code](/docs/es/vs-code). Para elegir el modo de permiso de inicio usted mismo, establezca `permissions.defaultMode` como [Comenzar en un modo de permiso diferente](#start-in-a-different-mode) describe, o seleccione un modo de permiso del indicador de modo de la extensión VS Code.325En [Amazon Bedrock](/docs/es/amazon-bedrock), [Google Cloud's Agent Platform](/docs/es/google-vertex-ai), [Microsoft Foundry](/docs/es/microsoft-foundry) y sesiones de [puerta de enlace de aplicaciones Claude](/docs/es/claude-apps-gateway) con sesión iniciada, el modo automático está disponible de forma predeterminada. Cuando nada más establece un modo de permiso, también es el [modo de permiso de inicio integrado](#which-mode-a-session-starts-in), en las versiones que esa sección enumera en su tabla. Para elegir el modo de permiso de inicio usted mismo, establezca `permissions.defaultMode` como [Comenzar en un modo de permiso diferente](#start-in-a-different-mode) describe, o seleccione un modo de permiso del indicador de modo de la extensión VS Code.

326 326 

327Solo Claude Sonnet 5 o posterior, Opus 4.7 o posterior y los modelos Fable son compatibles en estos proveedores. En cualquier otro modelo, la sesión comienza en Manual en su lugar.327Solo Claude Sonnet 5 o posterior, Opus 4.7 o posterior y los modelos Fable son compatibles en estos proveedores. En cualquier otro modelo, la sesión comienza en Manual en su lugar.

328 328 


342 342 

343Donde el servidor revisa las acciones, sus veredictos las deciden. Otros dos resultados son posibles:343Donde el servidor revisa las acciones, sus veredictos las deciden. Otros dos resultados son posibles:

344 344 

345* **El servidor no revisa la sesión**: una respuesta se completa sin resultados de revisión, o el servidor responde que no revisa esta sesión. Las causas más comunes son una puerta de enlace LLM o proxy que descarta la solicitud de revisión o los resultados, y una plataforma, región o credencial que aún no tiene verificaciones del lado del servidor. Claude Code vuelve a sus propias solicitudes del clasificador. Una vez que esa alternativa se mantiene durante el resto de la sesión, muestra un [aviso sobre cargos de solicitud del clasificador](/docs/es/auto-mode-classifier-billing) en cuentas donde esas solicitudes se facturan.345* **El servidor no revisa la sesión**: una respuesta se completa sin resultados de revisión, o el servidor responde que no revisa esta sesión. Las causas más comunes son una puerta de enlace LLM o proxy que descarta la solicitud de revisión o los resultados, y una plataforma, región o credencial que aún no tiene verificaciones del lado del servidor. Claude Code vuelve a sus propias solicitudes del clasificador. Una vez que ese respaldo se mantiene durante el resto de la sesión, muestra un [aviso sobre cargos de solicitud del clasificador](/docs/es/auto-mode-classifier-billing) en cuentas donde esas solicitudes se facturan.

346* **El servidor no da veredicto para una acción**: Claude Code niega la acción en lugar de ejecutarla sin revisar. En cualquier conexión, esto sucede cuando la respuesta finaliza antes de que lleguen los resultados de revisión o los resultados llegan en una forma que Claude Code no puede leer. Una puerta de enlace LLM o proxy que acorta respuestas o reescribe los resultados puede causar cualquiera de los dos. En una conexión directa a la API de Anthropic, también sucede cuando la verificación del servidor falla para la acción, por ejemplo al agotarse el tiempo de espera. [El servidor no devolvió ningún veredicto de seguridad](/docs/es/errors#the-server-returned-no-safety-verdict) cubre el mensaje de negación, qué sucede cuando las negaciones se repiten y qué hacer.346* **El servidor no da veredicto para una acción**: Claude Code niega la acción en lugar de ejecutarla sin revisar. En cualquier conexión, esto sucede cuando la respuesta finaliza antes de que lleguen los resultados de la revisión o los resultados llegan en una forma que Claude Code no puede leer. Una puerta de enlace LLM o proxy que acorta respuestas o reescribe los resultados puede causar cualquiera de los dos. En una conexión directa a la API de Anthropic, también sucede cuando la verificación del servidor falla para la acción, por ejemplo al agotarse el tiempo de espera. [El servidor no devolvió ningún veredicto de seguridad](/docs/es/errors#the-server-returned-no-safety-verdict) cubre el mensaje de negación, qué sucede cuando las negaciones se repiten y qué hacer.

347 347 

348Para omitir preguntar al servidor y siempre usar las propias solicitudes del clasificador de Claude Code, establezca [`CLAUDE_CODE_AUTO_MODE_SERVER=0`](/docs/es/env-vars). En una conexión directa a la API de Anthropic, la variable requiere Claude Code v2.1.281 o posterior. Establecerlo en `1` allí activa la revisión del servidor en una sesión que no la tiene, como una sesión `-p` o Agent SDK, a menos que también haya establecido `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`. Si establece `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` y deja `CLAUDE_CODE_AUTO_MODE_SERVER` sin establecer, Claude Code también deja de preguntar al servidor, excepto como [Desactivar capacidades previas al lanzamiento](/docs/es/llm-gateway-protocol#disable-pre-release-capabilities) describe.348Para omitir preguntar al servidor y siempre usar las propias solicitudes del clasificador de Claude Code, establezca [`CLAUDE_CODE_AUTO_MODE_SERVER=0`](/docs/es/env-vars). En una conexión directa a la API de Anthropic, la variable requiere Claude Code v2.1.281 o posterior. Establecerlo en `1` allí activa la revisión del servidor en una sesión que no la tiene, como una sesión `-p` o Agent SDK, a menos que también haya establecido `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`. Si establece `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` y deja `CLAUDE_CODE_AUTO_MODE_SERVER` sin establecer, Claude Code también deja de preguntar al servidor, excepto como [Deshabilitar capacidades previas al lanzamiento](/docs/es/llm-gateway-protocol#disable-pre-release-capabilities) describe.

349 349 

350<h3 id="what-the-classifier-blocks-by-default">350<h3 id="what-the-classifier-blocks-by-default">

351 Lo que el clasificador bloquea de forma predeterminada351 Lo que el clasificador bloquea de forma predeterminada


363* Modificación de infraestructura compartida363* Modificación de infraestructura compartida

364* Destrucción irreversible de archivos que existían antes de la sesión364* Destrucción irreversible de archivos que existían antes de la sesión

365* Inserción forzada365* Inserción forzada

366* Confirmar o insertar un cambio que enviaría secretos o datos sensibles fuera del repositorio cuando se ejecuta, o ampliar lo que expone una implementación. Esto cubre un flujo de trabajo de CI o configuración de implementación que pasa un secreto a un destino que no lo recibe ya, un script o paso de configuración que lee un almacén de secretos y envía los datos, y un cambio de configuración que amplía lo que publica una implementación, como un registro, visibilidad, artefacto o configuración de mapa de origen. La verificación se aplica en cualquier rama, se aplica incluso cuando el repositorio es público y se activa cuando el cambio se confirma o se inserta, independientemente de si esa confirmación o inserción activa la canalización; borrarla requiere nombrar el efecto de ejecución, no solo la confirmación o inserción. Antes de v2.1.211, esta verificación se limitaba a la rama predeterminada en su lugar: una inserción allí se bloqueaba cuando llevaba contenido sensible, cambios ocultos o mal descritos en relación con lo que pidió, contenido portado desde fuera del repositorio o enrutado alrededor de una revisión que pidió366* Confirmar o insertar un cambio que enviaría secretos o datos sensibles fuera del repositorio cuando se ejecuta, o ampliar lo que expone una implementación. Esto cubre un flujo de trabajo de CI o configuración de implementación que pasa un secreto a un destino que no lo recibe ya, un script o paso de configuración que lee un almacén de secretos y envía los datos, y un cambio de configuración que amplía lo que publica una implementación, como un registro, visibilidad, artefacto o configuración de mapa de origen. La verificación se aplica en cualquier rama, se aplica incluso cuando el repositorio es público y se activa cuando el cambio se confirma o se inserta, independientemente de si esa confirmación o inserción desencadena la canalización; borrarla requiere nombrar el efecto de ejecución, no solo la confirmación o inserción. Antes de v2.1.211, esta verificación se limitaba a la rama predeterminada en su lugar: una inserción allí se bloqueaba cuando llevaba contenido sensible, cambios ocultos o mal descritos en relación con lo que pidió, contenido portado desde fuera del repositorio o enrutado alrededor de una revisión que pidió

367* `git reset --hard`, `git checkout -- .`, `git restore .`, `git clean -fd`, `git stash drop` o `git stash clear`, que el clasificador presume descartaría cambios no confirmados367* `git reset --hard`, `git checkout -- .`, `git restore .`, `git clean -fd`, `git stash drop` o `git stash clear`, que el clasificador presume descartaría cambios sin confirmar

368* `git commit --amend` cuando la confirmación en HEAD no fue creada en esta sesión368* `git commit --amend` cuando la confirmación en HEAD no fue creada en esta sesión

369* Desde v2.1.198, `git commit --amend` cuando la confirmación en HEAD ya ha sido insertada. Una reescritura de solo mensaje no se bloquea: `--amend -m` sin nada recién preparado, en una confirmación que Claude creó durante esta sesión369* Desde v2.1.198, `git commit --amend` cuando la confirmación en HEAD ya ha sido insertada. Una reescritura de solo mensaje no se bloquea: `--amend -m` sin nada recién preparado, en una confirmación que Claude creó durante esta sesión

370* `terraform destroy`, `pulumi destroy`, `cdk destroy` o `terragrunt destroy`, y aplicar un plan que destruye recursos370* `terraform destroy`, `pulumi destroy`, `cdk destroy` o `terragrunt destroy`, y aplicar un plan que destruye recursos

371* Escritura en un administrador de secretos, o cambio de registros DNS o certificados TLS371* Escritura en un administrador de secretos, o cambio de registros DNS o certificados TLS

372* Fusión de una solicitud de extracción que ningún humano ha aprobado, aprobación de la propia solicitud de extracción de Claude o desactivación de verificaciones de CI372* Fusión de una solicitud de extracción que ningún humano ha aprobado, aprobación de la propia solicitud de extracción de Claude o deshabilitación de verificaciones de CI

373* Publicación de un comentario que es en sí mismo un comando para automatización, como `atlantis apply` o `/deploy` o `/merge` de un bot373* Publicación de un comentario que es en sí mismo un comando para automatización, como `atlantis apply` o `/deploy` o `/merge` de un bot

374* Alternancia, ramificación o eliminación de una marca de característica de producción374* Alternancia, ramificación o eliminación de una bandera de característica de producción

375* Aplicación de cambios de infraestructura a un alcance de IaC protegido, o drenaje y eliminación de nodos de clúster375* Aplicación de cambios de infraestructura a un alcance de IaC protegido, o drenaje y eliminación de nodos de clúster

376* Escrituras en un clúster de cómputo compartido que van más allá del recurso que nombró, como un selector de etiqueta o `--all` que captura trabajos de otros usuarios376* Escrituras en un clúster de cómputo compartido que van más allá del recurso que nombró, como un selector de etiqueta o `--all` que captura trabajos de otros usuarios

377* Creación de recursos de Kubernetes que se ejecutan en cada nodo o interceptan tráfico de clúster, como DaemonSets y webhooks de admisión377* Creación de recursos de Kubernetes que se ejecutan en cada nodo o interceptan tráfico de clúster, como DaemonSets y webhooks de admisión


381* Acceso a una ubicación listada como ubicación de datos sensibles en su [entorno](/docs/es/auto-mode-config#define-trusted-infrastructure), o copia de datos de una. A partir de v2.1.198, esto también bloquea el envío de datos de uno a una audiencia que la entrada excluye381* Acceso a una ubicación listada como ubicación de datos sensibles en su [entorno](/docs/es/auto-mode-config#define-trusted-infrastructure), o copia de datos de una. A partir de v2.1.198, esto también bloquea el envío de datos de uno a una audiencia que la entrada excluye

382* Enrutamiento de una instalación de paquete alrededor de su registro de paquetes interno a un registro público. A partir de v2.1.198, esto también se aplica cuando le ha dicho a Claude que existe un registro interno o espejo en la conversación, no solo cuando uno está listado en su entorno382* Enrutamiento de una instalación de paquete alrededor de su registro de paquetes interno a un registro público. A partir de v2.1.198, esto también se aplica cuando le ha dicho a Claude que existe un registro interno o espejo en la conversación, no solo cuando uno está listado en su entorno

383* Ejecución de un comando con una bandera que desactiva una protección de seguridad, como `--insecure`383* Ejecución de un comando con una bandera que desactiva una protección de seguridad, como `--insecure`

384* Lanzamiento de un bucle de agente autónomo que se ejecuta sin aprobación humana o sandbox, como uno iniciado con `--dangerously-skip-permissions` o `--no-sandbox`. A partir de v2.1.198, esto también cubre la ejecución de un agente de terceros o evaluador con aislamiento y aprobación por acción desactivados, como un ejecutor iniciado con `--yes-always`384* Lanzamiento de un bucle de agente autónomo que se ejecuta sin aprobación humana o sandbox, como uno iniciado con `--dangerously-skip-permissions` o `--no-sandbox`. A partir de v2.1.198, esto también cubre la ejecución de un agente de terceros o arnés de evaluación con aislamiento y aprobación por acción deshabilitados, como un ejecutor iniciado con `--yes-always`

385* Acciones del navegador [Claude en Chrome](/docs/es/chrome) que podrían enviar contenido de página, cookies o credenciales fuera de origen385* Acciones del navegador [Claude en Chrome](/docs/es/chrome) que podrían enviar contenido de página, cookies o credenciales fuera del origen

386 386 

387Varias de estas categorías dependen de entradas de [entorno](/docs/es/auto-mode-config#define-trusted-infrastructure), como destinos remotos sensibles y alcances de IaC protegidos, que puede reducir a nombres concretos.387Varias de estas categorías dependen de entradas de [entorno](/docs/es/auto-mode-config#define-trusted-infrastructure), como destinos remotos sensibles y alcances de IaC protegidos, que puede reducir a nombres concretos.

388 388 

389Claude Code v2.1.198 y posterior también bloquean estos de forma predeterminada:389Claude Code v2.1.198 y posterior también bloquean estos de forma predeterminada:

390 390 

391* Eliminación de archivos en `/tmp`, `$TMPDIR` u otro directorio compartido de scratch o caché por comodín, glob o filtro de edad en lugar de por una ruta nombrada específica391* Eliminación de archivos en `/tmp`, `$TMPDIR` u otro directorio compartido de scratch o caché por comodín, glob o filtro de edad en lugar de por una ruta nombrada específica

392* Inclusión de detalles sensibles en contenido enviado, cargado, publicado o escrito a otras personas o sistemas compartidos, cuando su propio mensaje no autorizó esos detalles para ese destinatario. Los cuerpos de PR y problemas, mensajes de confirmación y comentarios cuentan como este tipo de contenido saliente cuando el repositorio está fuera del límite de confianza o es público, incluidos los repositorios públicos de su propia organización; las rutas de archivo internas, nombres de código, datos de respuesta de API en vivo como correos electrónicos o identificadores de cuenta e identificadores de infraestructura cuentan como detalles sensibles. El alcance de PR, problema y mensaje de confirmación requiere Claude Code v2.1.200 o posterior. Los datos personales en vivo de una respuesta de API en un cuerpo de PR o problema, como una dirección de correo electrónico, un identificador de cuenta u organización o una métrica de uso, requieren que nombre esos detalles y el destinatario independientemente de la visibilidad del repositorio o el límite de confianza. Esa verificación requiere Claude Code v2.1.203 o posterior392* Inclusión de detalles sensibles en contenido enviado, cargado, publicado o escrito a otras personas o sistemas compartidos, cuando su propio mensaje no autorizó esos detalles para ese destinatario. Los cuerpos de PR y problema, mensajes de confirmación y comentarios cuentan como este tipo de contenido saliente cuando el repositorio está fuera del límite de confianza o es público, incluidos los repositorios públicos de su propia organización; las rutas de archivo internas, nombres de código, datos de respuesta de API en vivo como correos electrónicos o identificadores de cuenta e identificadores de infraestructura cuentan como detalles sensibles. El alcance de PR, problema y mensaje de confirmación requiere Claude Code v2.1.200 o posterior. Los datos personales en vivo de una respuesta de API en un cuerpo de PR o problema, como una dirección de correo electrónico, un identificador de cuenta u organización o una métrica de uso, requieren que nombre esos detalles y el destinatario independientemente de la visibilidad del repositorio o límite de confianza. Esa verificación requiere Claude Code v2.1.203 o posterior

393* Envío de pulsaciones de teclas a su propio panel tmux de Claude Code para impulsar su propia interfaz, que el clasificador trata como Claude cambiando sus propios permisos o supervisión393* Envío de pulsaciones de teclas a su propio panel tmux de Claude Code para impulsar su propia interfaz, que el clasificador trata como Claude cambiando sus propios permisos o supervisión

394 394 

395Claude Code v2.1.200 y posterior también bloquean estos de forma predeterminada:395Claude Code v2.1.200 y posterior también bloquean estos de forma predeterminada:


403 403 

404Claude Code v2.1.203 y posterior también bloquean estos de forma predeterminada:404Claude Code v2.1.203 y posterior también bloquean estos de forma predeterminada:

405 405 

406* Contenido de un almacén local sensible, o de un archivo cuyo nombre, ruta o tipo lo marca como sensible, entrando en una confirmación, una inserción, texto de PR o problema, un gist o pegado, o una publicación de paquete, a menos que haya nombrado tanto la fuente como el destino. Las transcripciones de sesión y registros de conversación, carpetas de puntos de credencial y configuración como claves SSH, credenciales en la nube, perfiles de navegador e historial de shell, y exportaciones de datos de usuario cuentan, y el repositorio siendo privado no lo borra406* Contenido de un almacén local sensible, o de un archivo cuyo nombre, ruta o tipo lo marca como sensible, entrando en una confirmación, una inserción, texto de PR o problema, un gist o pegado, o una publicación de paquete, a menos que haya nombrado tanto la fuente como el destino. Las transcripciones de sesión y registros de conversación, carpetas de puntos de credencial y configuración como claves SSH, credenciales en la nube, perfiles de navegador e historial de shell, y exportaciones de datos de usuario cuentan, y el hecho de que el repositorio sea privado no lo borra

407 407 

408Claude Code v2.1.205 y posterior también bloquean estos de forma predeterminada:408Claude Code v2.1.205 y posterior también bloquean estos de forma predeterminada:

409 409 

410* Escritura en transcripciones de sesión de Claude Code, los archivos de historial `.jsonl` bajo `~/.claude/projects/` o su directorio de configuración configurado, ya sea directamente o a través de un comando de shell. La regla también cubre las líneas de metadatos que Claude Code agrega a cada entrada de transcripción para sus propias verificaciones. Leer una transcripción no se bloquea410* Escritura en transcripciones de sesión de Claude Code, los archivos de historial `.jsonl` bajo `~/.claude/projects/` o su directorio de configuración configurado, ya sea directamente o a través de un comando de shell. La regla también cubre las líneas de metadatos que Claude Code agrega a cada entrada de transcripción para sus propias verificaciones. Leer una transcripción no se bloquea

411* Una eliminación forzada recursiva como `rm -rf "$VAR"` o `Remove-Item -Recurse -Force $dir` cuyo destino es una variable de shell que no está asignada en ningún lugar de la conversación que el clasificador ve, o un glob enraizado en tal variable. El valor provino solo de la salida de comando anterior, que el clasificador nunca recibe, por lo que el clasificador no puede verificar el destino de eliminación contra las otras reglas de eliminación. El bloqueo se borra cuando nombra la ruta exacta que se está eliminando, o cuando Claude vuelve a ejecutar la eliminación con la ruta literal resuelta escrita en el comando. Las eliminaciones cuyo destino el clasificador puede resolver no se ven afectadas.411* Una eliminación forzada recursiva como `rm -rf "$VAR"` o `Remove-Item -Recurse -Force $dir` cuyo destino es una variable de shell que no se asigna en ningún lugar de la conversación que el clasificador ve, o un glob enraizado en tal variable. El valor provino solo de la salida del comando anterior, que el clasificador nunca recibe, por lo que el clasificador no puede verificar el destino de eliminación contra las otras reglas de eliminación. El bloqueo se borra cuando nombra la ruta exacta que se está eliminando, o cuando Claude vuelve a ejecutar la eliminación con la ruta literal resuelta escrita en el comando. Las eliminaciones cuyo destino el clasificador puede resolver no se ven afectadas.

412 412 

413 Un glob directamente bajo la variable, como en `rm -rf "$VAR"/*`, es una [ruta crítica](#critical-paths) en su lugar. Los destinos de `Remove-Item` que son un `*` desnudo o terminan en `/*` o `\*` nunca llegan al clasificador: Claude Code los [niega directamente](#remove-item-in-powershell).413 Un glob directamente bajo la variable, como en `rm -rf "$VAR"/*`, es una [ruta crítica](#critical-paths) en su lugar. Los destinos de `Remove-Item` que son un `*` desnudo o terminan en `/*` o `\*` nunca llegan al clasificador: Claude Code [los niega directamente](#remove-item-in-powershell).

414 414 

415Claude Code v2.1.257 y posterior también bloquean estos de forma predeterminada:415Claude Code v2.1.257 y posterior también bloquean estos de forma predeterminada:

416 416 


419* Lectura de credenciales que pertenecen al host en lugar de a su tarea, como certificados de nodo o la autenticación de registro de contenedor del nodo419* Lectura de credenciales que pertenecen al host en lugar de a su tarea, como certificados de nodo o la autenticación de registro de contenedor del nodo

420* Conexión o escaneo de contenedores, pods o máquinas virtuales hermanas que Claude no inició, o el nodo debajo del contenedor420* Conexión o escaneo de contenedores, pods o máquinas virtuales hermanas que Claude no inició, o el nodo debajo del contenedor

421 421 

422Si Claude Code se ejecuta en algún lugar que se supone que permite uno de estos, describa esa configuración en una entrada de [Host containment](/docs/es/auto-mode-config#define-trusted-infrastructure) en `autoMode.environment`.422Si Claude Code se ejecuta en algún lugar que se supone que permite uno de estos, describa esa configuración en una entrada de [Contención de host](/docs/es/auto-mode-config#define-trusted-infrastructure) en `autoMode.environment`.

423 423 

424Claude Code v2.1.261 y posterior también bloquean estos de forma predeterminada:424Claude Code v2.1.261 y posterior también bloquean estos de forma predeterminada:

425 425 


431* Instalación de dependencias declaradas en sus archivos de bloqueo o manifiestos431* Instalación de dependencias declaradas en sus archivos de bloqueo o manifiestos

432* Lectura de `.env` y envío de credenciales a su API coincidente432* Lectura de `.env` y envío de credenciales a su API coincidente

433* Solicitudes HTTP de solo lectura433* Solicitudes HTTP de solo lectura

434* Inserción a cualquier rama del repositorio en el que está trabajando, incluida la rama predeterminada. Una rama no predeterminada cuyo nombre la marca como destino de implementación o publicación, como `production` o `gh-pages`, no está cubierta: el clasificador juzga una inserción allí en sus propios términos. El contenido de la inserción aún se verifica contra las otras reglas, las reglas [`permissions.deny`](/docs/es/permissions#manage-permissions) aún pueden bloquear comandos de inserción [como se escriben](/docs/es/permissions#bash-rule-limits) en todos los modos, y la protección de rama propia del remoto aún se aplica. Antes de v2.1.211, solo las inserciones a la rama en la que comenzó, las ramas que Claude creó y las inserciones rutinarias a la rama predeterminada se permitían de forma predeterminada, y antes de v2.1.203 cualquier inserción directa a la rama predeterminada se bloqueaba434* Inserción a cualquier rama del repositorio en el que está trabajando, incluida la rama predeterminada. Una rama no predeterminada cuyo nombre la marca como destino de implementación o publicación, como `production` o `gh-pages`, no está cubierta: el clasificador juzga una inserción allí en sus propios términos. El contenido de la inserción aún se verifica contra las otras reglas, las reglas [`permissions.deny`](/docs/es/permissions#manage-permissions) aún pueden bloquear comandos de inserción [como se escriben](/docs/es/permissions#bash-rule-limits) en todos los modos, y la protección de rama propia del remoto aún se aplica. Antes de v2.1.211, solo las inserciones a la rama en la que comenzó, ramas que Claude creó e inserciones rutinarias a la rama predeterminada se permitían de forma predeterminada, y antes de v2.1.203 cualquier inserción directa a la rama predeterminada se bloqueaba

435* Eliminación de los trabajos exactos que Claude creó anteriormente en la misma sesión435* Eliminación de los trabajos exactos que Claude creó anteriormente en la misma sesión

436* Lectura, revisión o escritura de código, configuraciones y modelos de amenaza relacionados con la seguridad como parte de su tarea436* Lectura, revisión o escritura de código, configuraciones y modelos de amenaza relacionados con la seguridad como parte de su tarea

437* Mensajes entre agentes que trabajan juntos en la misma sesión multiagente437* Mensajes entre agentes que trabajan juntos en la misma sesión multiagente

438* Envío de datos a los dominios, depósitos y servicios de confianza que lista en [`environment`](/docs/es/auto-mode-config#define-trusted-infrastructure). Esto cubre solo el flujo de datos, no operaciones destructivas o de credencial en la misma infraestructura438* Envío de datos a los dominios, depósitos y servicios de confianza que enumera en [`environment`](/docs/es/auto-mode-config#define-trusted-infrastructure). Esto cubre solo el flujo de datos, no operaciones destructivas o de credencial en la misma infraestructura

439* [Claude en Chrome](/docs/es/chrome) navegación a un dominio interno de confianza, localhost o una URL que nombró439* [Claude en Chrome](/docs/es/chrome) navegación a un dominio interno de confianza, localhost o una URL que nombró

440 440 

441Los comandos en sandbox no obtienen acceso a la red de forma predeterminada. Claude nombra los hosts que un comando necesita en el comando mismo, el clasificador los revisa con el comando, y una lista aprobada abre esos hosts solo para ese comando. [Dominios permitidos por comando](/docs/es/sandboxing#per-command-allowed-domains-in-auto-mode) cubre lo que una lista puede y no puede abrir y qué sucede cuando un comando llega a un host no listado.441Los comandos en sandbox no obtienen acceso a la red de forma predeterminada. Claude nombra los hosts que necesita un comando en el comando mismo, el clasificador los revisa con el comando, y una lista aprobada abre esos hosts solo para ese comando. [Dominios permitidos por comando](/docs/es/sandboxing#per-command-allowed-domains-in-auto-mode) cubre lo que una lista puede y no puede abrir y qué sucede cuando un comando llega a un host no listado.

442 442 

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

444 444 

445La inserción a cualquier rama del repositorio en el que está trabajando y la creación de una solicitud de extracción que coincida con su solicitud se ejecutan sin una solicitud, a menos que la inserción o solicitud de extracción caiga bajo la [lista bloqueada](#what-the-classifier-blocks-by-default), como secretos o datos sensibles que salen del repositorio, o una solicitud de extracción que apunta a un repositorio u organización diferente. Para requerir un punto de control humano antes de estos comandos mientras permanece en modo automático, agregue reglas `permissions.ask`, que coincidan con el comando [como se escriben](/docs/es/permissions#bash-rule-limits): consulte [Límites comunes](/docs/es/auto-mode-config#common-boundaries).445La inserción a cualquier rama del repositorio en el que está trabajando y la creación de una solicitud de extracción que coincida con su solicitud se ejecutan sin solicitud, a menos que la inserción o solicitud de extracción caiga bajo la [lista bloqueada](#what-the-classifier-blocks-by-default), como secretos o datos sensibles que salen del repositorio, o una solicitud de extracción que apunta a un repositorio u organización diferente. Para requerir un punto de control humano antes de estos comandos mientras permanece en modo automático, agregue reglas `permissions.ask`, que coincidan con el comando [como se escriben](/docs/es/permissions#bash-rule-limits): consulte [Límites comunes](/docs/es/auto-mode-config#common-boundaries).

446 446 

447<h3 id="first-read-outside-the-working-directories">447<h3 id="first-read-outside-the-working-directories">

448 La primera lectura fuera de los directorios de trabajo448 La primera lectura fuera de los directorios de trabajo

449</h3>449</h3>

450 450 

451Mientras [`permissions.blockReadsOutsideWorkingDirectories`](/docs/es/settings-reference#permissions-blockreadsoutsideworkingdirectories) está desactivado, las lecturas de archivo se ejecutan sin una solicitud en modo automático, incluidas las lecturas fuera de los [directorios de trabajo](/docs/es/permissions#working-directories). La primera vez que Claude usa la herramienta Read, Grep o Glob en una ruta fuera de ellos, Claude Code le pregunta si desea seguir permitiendo esas lecturas.451Mientras [`permissions.blockReadsOutsideWorkingDirectories`](/docs/es/settings-reference#permissions-blockreadsoutsideworkingdirectories) está desactivado, las lecturas de archivo se ejecutan sin solicitud en modo automático, incluidas las lecturas fuera de los [directorios de trabajo](/docs/es/permissions#working-directories). La primera vez que Claude usa la herramienta Read, Grep o Glob en una ruta fuera de ellos, Claude Code pregunta si permitir esa lectura.

452 452 

453La solicitud no aparece en ejecuciones `-p` no interactivas o sesiones en segundo plano; las lecturas allí se ejecutan como antes.453La solicitud no aparece en ejecuciones `-p` no interactivas o sesiones en segundo plano; las lecturas allí se ejecutan como antes.

454 454 

455Sea cual sea su respuesta, Claude sigue trabajando:455Sea cual sea su respuesta, Claude sigue trabajando:

456 456 

457* **Sí, y seguir permitiendo**: la lectura se ejecuta, las lecturas posteriores fuera de los directorios de trabajo se ejecutan como antes, y Claude Code registra su respuesta para que la solicitud no aparezca de nuevo457* **Sí, y siga permitiendo cualquier lectura fuera de los directorios de trabajo**: la lectura se ejecuta, las lecturas posteriores fuera de los directorios de trabajo se ejecutan como antes, y Claude Code registra su respuesta para que la solicitud no aparezca de nuevo

458* **No, y bloquear de ahora en adelante**: la lectura se rechaza, y Claude Code establece [`permissions.blockReadsOutsideWorkingDirectories`](/docs/es/settings-reference#permissions-blockreadsoutsideworkingdirectories) en `true` en su configuración de usuario, lo que hace que las herramientas de archivo rechacen tales lecturas en cada sesión posterior y en cada modo de permiso. Para permitir que Claude lea tal ruta más tarde, agregue su directorio con `/add-dir` o elimine la configuración.458* **No, y bloquee las lecturas fuera de los directorios de trabajo de ahora en adelante**: la lectura se rechaza, y Claude Code establece [`permissions.blockReadsOutsideWorkingDirectories`](/docs/es/settings-reference#permissions-blockreadsoutsideworkingdirectories) en `true` en su configuración de usuario, lo que hace que las herramientas de archivo rechacen tales lecturas en cada sesión posterior y en cada modo de permiso. Para permitir que Claude lea tal ruta más tarde, agregue su directorio con `/add-dir` o elimine la configuración.

459* **No, y preguntar de nuevo la próxima vez**: la lectura se rechaza, y la próxima lectura fuera de los directorios de trabajo solicita de nuevo459* **No, y pregunta de nuevo la próxima vez**: la lectura se rechaza, y la próxima lectura fuera de los directorios de trabajo solicita de nuevo

460* **Sí, pero preguntar de nuevo la próxima vez**: la lectura se ejecuta, nada se guarda, y la próxima lectura fuera de los directorios de trabajo solicita de nuevo460* **Sí, pero pregunta de nuevo la próxima vez**: la lectura se ejecuta, nada se guarda, y la próxima lectura fuera de los directorios de trabajo solicita de nuevo

461 461 

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

463 Límites que establece en la conversación463 Límites que establece en la conversación

464</h3>464</h3>

465 465 

466El clasificador trata los límites que establece en la conversación como una señal de bloqueo. Si le dice a Claude "no insertes" o "espera hasta que revise antes de implementar", el clasificador bloquea acciones coincidentes incluso cuando las reglas predeterminadas las permitirían. Un límite permanece en vigor hasta que lo levante en un mensaje posterior. El propio juicio de Claude de que se cumplió una condición no lo levanta.466El clasificador trata los límites que establece en la conversación como una señal de bloqueo. Si le dice a Claude "no insertes" o "espera hasta que revise antes de implementar", el clasificador bloquea acciones coincidentes incluso cuando las reglas predeterminadas las permitirían. Un límite permanece en vigor hasta que lo levanta en un mensaje posterior. El propio juicio de Claude de que se cumplió una condición no lo levanta.

467 467 

468Los límites no se almacenan como reglas. El clasificador los relee de la transcripción en cada verificación, por lo que un límite puede perderse si [la compactación de contexto](/docs/es/costs#reduce-token-usage) elimina el mensaje que lo estableció. Para una garantía dura, agregue una [regla de negación](/docs/es/permissions#permission-rule-syntax) en su lugar.468Los límites no se almacenan como reglas. El clasificador los relee de la transcripción en cada verificación, por lo que un límite puede perderse si [la compactación de contexto](/docs/es/costs#reduce-token-usage) elimina el mensaje que lo estableció. Para una garantía dura, agregue una [regla de negación](/docs/es/permissions#permission-rule-syntax) en su lugar.

469 469 


473 473 

474Si le dice a Claude que una acción bloqueada está permitida, el clasificador lee eso como su aprobación y puede borrar el bloqueo. La forma en que lo expresó decide si la acción se ejecuta y qué tan lejos llega la aprobación:474Si le dice a Claude que una acción bloqueada está permitida, el clasificador lee eso como su aprobación y puede borrar el bloqueo. La forma en que lo expresó decide si la acción se ejecuta y qué tan lejos llega la aprobación:

475 475 

476* **Nombre la acción y sus especificidades**: su mensaje tiene que nombrar la acción y la cosa específica que la hace peligrosa, como la rama de una inserción forzada. Nombrar solo el verbo no borra nada, así que "puede hacer una inserción forzada" deja el bloqueo en su lugar.476* **Nombre la acción y sus especificidades**: su mensaje tiene que nombrar la acción y la cosa específica que la hace peligrosa, como la rama de una inserción forzada. Nombrar solo el verbo no borra nada, así que "puede insertar forzadamente" deja el bloqueo en su lugar.

477* **Espere que cubra una acción**: una aprobación cubre la acción destructiva que nombró, por lo que una acción posterior se bloquea de nuevo a menos que haya otorgado la aprobación como permanente. Para dejar de aprobar un patrón rutinario una acción a la vez, agréguelo a [`autoMode.allow`](/docs/es/auto-mode-config#override-the-block-and-allow-rules).477* **Espere que cubra una acción**: una aprobación cubre la acción destructiva que nombró, por lo que una acción posterior se bloquea de nuevo a menos que haya otorgado la aprobación como permanente. Para dejar de aprobar un patrón rutinario una acción a la vez, agréguelo a [`autoMode.allow`](/docs/es/auto-mode-config#override-the-block-and-allow-rules).

478* **Algunos bloqueos permanecen en su lugar**: [el orden de precedencia del clasificador](/docs/es/auto-mode-config#override-the-block-and-allow-rules) establece qué bloqueos puede alcanzar su aprobación. Para ejecutar un paso que no borrará, [abandone el modo automático](#switch-permission-modes) y responda a la solicitud de permiso.478* **Algunos bloqueos permanecen en su lugar**: [el orden de precedencia del clasificador](/docs/es/auto-mode-config#override-the-block-and-allow-rules) establece qué bloqueos puede alcanzar su aprobación. Para ejecutar un paso que no borrará, [abandone el modo automático](#switch-permission-modes) y responda la solicitud de permiso.

479 479 

480<h3 id="when-auto-mode-falls-back">480<h3 id="when-auto-mode-falls-back">

481 Cuando el modo automático se retira481 Cuando el modo automático retrocede

482</h3>482</h3>

483 483 

484Cuando el modo automático no puede aprobar las acciones de su sesión, lo que sucede depende del caso:484Cuando el modo automático no puede aprobar las acciones de su sesión, lo que sucede depende del caso:

485 485 

486* **Una acción bloqueada**: Claude Code muestra una notificación y enumera la acción en `/permissions` bajo la pestaña **Denegadas recientemente**, donde puede presionar `r` para reintentar con una aprobación manual.486* **Una acción bloqueada**: Claude Code muestra una notificación y enumera la acción en `/permissions` bajo la pestaña **Denegadas recientemente**, donde puede presionar `r` para reintentar con una aprobación manual.

487* **Bloqueos repetidos**: si el clasificador bloquea una acción 3 veces seguidas o 20 veces en total, el modo automático se pausa y Claude Code reanuda las solicitudes. Aprobar la acción solicitada reanuda el modo automático. Consulte [Umbrales de bloqueo repetido](#repeated-block-thresholds) para saber cómo se cuentan los bloqueos.487* **Bloqueos repetidos**: si el clasificador bloquea una acción 3 veces seguidas o 20 veces en total, el modo automático se pausa y Claude Code reanuda las solicitudes. Aprobar la acción solicitada reanuda el modo automático. Consulte [Umbrales de bloqueo repetido](#repeated-block-thresholds) para saber cómo se cuentan los bloqueos.

488* **Sin veredicto del clasificador**: cuando una verificación de seguridad separada del modo automático rechaza la solicitud del clasificador, o la respuesta del clasificador no se analiza, Claude Code niega la acción sin la notificación o la entrada **Denegadas recientemente**. Consulte [El modo automático no puede determinar la seguridad de una acción](/docs/es/errors#auto-mode-cannot-determine-the-safety-of-an-action) para el mensaje que muestra cada caso y qué hacer.488* **Sin veredicto del clasificador**: cuando una verificación de seguridad separada del modo automático rechaza la propia solicitud del clasificador, o la respuesta del clasificador no se analiza, Claude Code niega la acción sin la notificación o la entrada **Denegadas recientemente**. Consulte [El modo automático no puede determinar la seguridad de una acción](/docs/es/errors#auto-mode-cannot-determine-the-safety-of-an-action) para el mensaje que muestra cada caso y qué hacer.

489* **Sin veredicto del servidor**: bajo [revisión del clasificador del lado del servidor](#server-side-classifier-review), Claude Code niega una acción para la que el servidor no da veredicto, y detiene el turno después de diez respuestas seguidas sin veredicto. Consulte [El servidor no devolvió ningún veredicto de seguridad](/docs/es/errors#the-server-returned-no-safety-verdict).489* **Sin veredicto del servidor**: bajo [revisión del clasificador del lado del servidor](#server-side-classifier-review), Claude Code niega una acción para la que el servidor no da veredicto, y detiene el turno después de diez respuestas seguidas sin veredicto. Consulte [El servidor no devolvió ningún veredicto de seguridad](/docs/es/errors#the-server-returned-no-safety-verdict).

490* **Un cambio de modo durante una verificación**: si cambia modos de permiso mientras una verificación del clasificador está pendiente, Claude Code descarta un veredicto que el nuevo modo no habría solicitado. Se le solicita aprobación en su lugar, o la acción se niega automáticamente en [modo `dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode).490* **Un cambio de modo durante una verificación**: si cambia modos de permiso mientras una verificación del clasificador está pendiente, Claude Code descarta un veredicto que el nuevo modo no habría solicitado. Se le solicita aprobación en su lugar, o la acción se niega automáticamente en [modo `dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode).

491 491 


493 Umbrales de bloqueo repetido493 Umbrales de bloqueo repetido

494</h4>494</h4>

495 495 

496Los umbrales de 3 bloqueos seguidos y 20 bloqueos totales no son configurables. El contador total persiste para la sesión y se reinicia solo cuando su propio límite activa una retirada. Claude Code no cuenta una negación hacia ninguno de los umbrales cuando una verificación de seguridad separada del modo automático rechaza la solicitud del clasificador.496Los umbrales de 3 bloqueos seguidos y 20 bloqueos totales no son configurables. El contador total persiste para la sesión y se reinicia solo cuando su propio límite desencadena un respaldo. Claude Code no cuenta una negación hacia ninguno de los umbrales cuando una verificación de seguridad separada del modo automático rechaza la propia solicitud del clasificador.

497 497 

498Una ejecución `-p` [no interactiva](/docs/es/headless) sin un [`--permission-prompt-tool`](/docs/es/cli-reference#cli-flags) no tiene solicitud a la que retirarse. Cuando los bloqueos repetidos alcanzan un umbral, la acción no se ejecuta y Claude sigue trabajando. Claude Code no detiene la ejecución.498Una ejecución `-p` [no interactiva](/docs/es/headless) sin un [`--permission-prompt-tool`](/docs/es/cli-reference#cli-flags) no tiene solicitud a la que retroceder. Cuando los bloqueos repetidos alcanzan un umbral, la acción no se ejecuta y Claude sigue trabajando. Claude Code no detiene la ejecución.

499 499 

500Los bloqueos repetidos generalmente significan que el clasificador carece de contexto sobre su infraestructura. Use `/feedback` para informar falsos positivos, o haga que un administrador [configure infraestructura de confianza](/docs/es/auto-mode-config).500Los bloqueos repetidos generalmente significan que el clasificador carece de contexto sobre su infraestructura. Use `/feedback` para informar falsos positivos, o haga que un administrador [configure infraestructura de confianza](/docs/es/auto-mode-config).

501 501 

502<h3 id="how-auto-mode-evaluates-actions">502<h3 id="how-auto-mode-evaluates-actions">

503 Cómo el clasificador evalúa acciones503 Cómo el modo automático evalúa acciones

504</h3>504</h3>

505 505 

506Las siguientes secciones cubren el orden en que Claude Code evalúa una acción, cómo el clasificador revisa el trabajo de subagentes, y qué llamadas del clasificador agregan en costo y latencia.506Las siguientes secciones cubren el orden en que Claude Code evalúa una acción, cómo el clasificador revisa el trabajo de subagentes y qué llamadas del clasificador agregan en costo y latencia.

507 507 

508<span id="how-the-classifier-evaluates-actions" />508<span id="how-the-classifier-evaluates-actions" />

509 509 


516 * Ninguna regla de permitir aprueba eliminaciones de `rm` y `rmdir` dirigidas a una [ruta crítica](#critical-paths)516 * Ninguna regla de permitir aprueba eliminaciones de `rm` y `rmdir` dirigidas a una [ruta crítica](#critical-paths)

517 * Las herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) le solicitan directamente incluso cuando una regla de permitir coincide, y también lo hacen las herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde esa configuración llega a Claude Code517 * Las herramientas MCP marcadas [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) le solicitan directamente incluso cuando una regla de permitir coincide, y también lo hacen las herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde esa configuración llega a Claude Code

518 * Un comando de shell que lleva [dominios permitidos por comando](/docs/es/sandboxing#per-command-allowed-domains-in-auto-mode) también se enruta al clasificador incluso cuando una regla de permitir coincide, porque una regla aprueba el comando, no sus hosts518 * Un comando de shell que lleva [dominios permitidos por comando](/docs/es/sandboxing#per-command-allowed-domains-in-auto-mode) también se enruta al clasificador incluso cuando una regla de permitir coincide, porque una regla aprueba el comando, no sus hosts

519 * Las reglas de solicitud que coinciden en el contenido de un comando, como `Bash(git push *)`, se retiran a una solicitud de permiso519 * Las reglas de solicitud que coinciden en el contenido de un comando, como `Bash(git push *)`, retroceden a una solicitud de permiso

520 * Una escritura que la [verificación de enlace simbólico](/docs/es/permissions#symlinks) resuelve a una ruta protegida le solicita cuando la ruta que Claude solicitó no es en sí misma protegida520 * Una escritura que la [verificación de enlace simbólico](/docs/es/permissions#symlinks) resuelve a una ruta protegida le solicita cuando la ruta que Claude solicitó no es en sí misma protegida

521 2. Las acciones de solo lectura y ediciones de archivo en su directorio de trabajo se aprueban automáticamente, excepto escrituras en [rutas protegidas](#protected-paths) y [la primera lectura fuera de los directorios de trabajo](#first-read-outside-the-working-directories), que le solicita521 2. Las acciones de solo lectura y ediciones de archivo en su directorio de trabajo se aprueban automáticamente, excepto escrituras en [rutas protegidas](#protected-paths) y [la primera lectura fuera de los directorios de trabajo](#first-read-outside-the-working-directories), que le solicita

522 * En una sesión con [revisión del clasificador del lado del servidor](#server-side-classifier-review), las acciones de solo lectura y comandos de shell [en sandbox](/docs/es/sandboxing#sandbox-modes) esperan esa revisión y se bloquean si la marca522 * En una sesión con [revisión del clasificador del lado del servidor](#server-side-classifier-review), las acciones de solo lectura y comandos de shell [en sandbox](/docs/es/sandboxing#sandbox-modes) esperan esa revisión y se bloquean si la marca


524 3. Todo lo demás va al clasificador, aparte de [eliminaciones de ruta crítica](#critical-paths) bajo su manejo predeterminado. Las herramientas de conector y herramientas MCP de `requiresUserInteraction` que le solicitan directamente en el paso 1 nunca llegan al clasificador tampoco, por lo que ni una aprobación requerida por la organización ni un paso de consentimiento se aprueban automáticamente524 3. Todo lo demás va al clasificador, aparte de [eliminaciones de ruta crítica](#critical-paths) bajo su manejo predeterminado. Las herramientas de conector y herramientas MCP de `requiresUserInteraction` que le solicitan directamente en el paso 1 nunca llegan al clasificador tampoco, por lo que ni una aprobación requerida por la organización ni un paso de consentimiento se aprueban automáticamente

525 4. Si el clasificador bloquea, Claude recibe la razón. En la mayoría de sesiones la razón nombra la regla que el clasificador coincidió, como `[Data Exfiltration]`, en lugar de dar una explicación escrita; consulte [Revisar negaciones](/docs/es/auto-mode-config#review-denials)525 4. Si el clasificador bloquea, Claude recibe la razón. En la mayoría de sesiones la razón nombra la regla que el clasificador coincidió, como `[Data Exfiltration]`, en lugar de dar una explicación escrita; consulte [Revisar negaciones](/docs/es/auto-mode-config#review-denials)

526 526 

527 Un [mod](/docs/es/plugins/mods/overview) que instale que enganche `tool.check` puede aprobar una acción antes del paso 3, y el clasificador no verifica una acción que el mod aprueba. Consulte [Extender permisos con hooks](/docs/es/permissions#extend-permissions-with-hooks).

528 

527 Al entrar en modo automático, se descartan las reglas de permitir amplias que otorgan ejecución de código arbitrario:529 Al entrar en modo automático, se descartan las reglas de permitir amplias que otorgan ejecución de código arbitrario:

528 530 

529 * `Bash(*)` o `PowerShell(*)` sin restricciones531 * `Bash(*)` o `PowerShell(*)` sin restricciones


532 * Reglas de permitir `Agent`534 * Reglas de permitir `Agent`

533 * Reglas de permitir [`Monitor`](/docs/es/tools-reference#monitor-tool), porque Claude Code ejecuta comandos Monitor a través del shell535 * Reglas de permitir [`Monitor`](/docs/es/tools-reference#monitor-tool), porque Claude Code ejecuta comandos Monitor a través del shell

534 536 

535 Las reglas estrechas como `Bash(npm test)` permanecen en vigor. Claude Code restaura las reglas descartadas cuando abandona el modo automático. Antes de v2.1.236, Claude Code dejaba las reglas de permitir `Monitor` en vigor en modo automático, por lo que una regla que coincidía con toda la herramienta aprobaba comandos Monitor sin revisión del clasificador.537 Las reglas estrechas como `Bash(npm test)` permanecen en vigor. Claude Code restaura las reglas descartadas cuando abandona el modo automático. Antes de v2.1.236, Claude Code dejaba las reglas de permitir `Monitor` en vigor en modo automático, por lo que una regla que coincidía con la herramienta completa aprobaba comandos Monitor sin revisión del clasificador.

536 538 

537 Claude Code también ejecuta `git status` a sí mismo antes de un comando que descartaría trabajo no confirmado, como `git reset --hard` o `rm -rf`, y muestra al clasificador si hay trabajo preparado, modificado o sin seguimiento presente. Claude Code informa archivos sin seguimiento en esa verificación incluso cuando la configuración de git del repositorio establece `status.showUntrackedFiles=no`.539 Claude Code también ejecuta `git status` a sí mismo antes de un comando que descartaría trabajo sin confirmar, como `git reset --hard` o `rm -rf`, y muestra al clasificador si hay trabajo preparado, modificado o sin seguimiento presente. Claude Code informa archivos sin seguimiento en esa verificación incluso cuando la configuración de git del repositorio establece `status.showUntrackedFiles=no`.

538 540 

539 En las solicitudes del clasificador enviadas por Claude Code mismo, el clasificador ve mensajes de usuario, llamadas de herramienta que no sean búsquedas de solo lectura como lecturas de archivo y búsquedas, y su contenido de CLAUDE.md. Los resultados de herramientas se eliminan de esas solicitudes, por lo que el contenido hostil en un archivo o página web no puede manipular el clasificador directamente.541 En las solicitudes del clasificador enviadas por Claude Code mismo, el clasificador ve mensajes de usuario, llamadas de herramienta que no sean búsquedas de solo lectura como lecturas de archivo y búsquedas, y su contenido de CLAUDE.md. Los resultados de herramientas se eliminan de esas solicitudes, por lo que el contenido hostil en un archivo o página web no puede manipular el clasificador directamente.

540 542 

541 Puede anotar el resultado de una llamada con el campo `classifierContext` de un [gancho PostToolUse](/docs/es/hooks#annotate-a-result-for-the-auto-mode-classifier), que el clasificador lee como contexto proporcionado por la aplicación. El campo requiere Claude Code v2.1.236 o posterior.543 Puede anotar el resultado de una llamada con un campo [`classifierContext` del hook PostToolUse](/docs/es/hooks#annotate-a-result-for-the-auto-mode-classifier), que el clasificador lee como contexto proporcionado por la aplicación. El campo requiere Claude Code v2.1.236 o posterior.

542 544 

543 Una sonda separada del lado del servidor escanea los resultados de herramientas entrantes y marca contenido sospechoso antes de que Claude lo lea. Para obtener más información sobre cómo funcionan estas capas juntas, consulte el [anuncio del modo automático](https://claude.com/blog/auto-mode) y la [inmersión profunda de ingeniería](https://www.anthropic.com/engineering/claude-code-auto-mode).545 Una sonda separada del lado del servidor escanea los resultados de herramientas entrantes y marca contenido sospechoso antes de que Claude lo lea. Para obtener más información sobre cómo funcionan estas capas juntas, consulte el [anuncio del modo automático](https://claude.com/blog/auto-mode) y la [inmersión profunda de ingeniería](https://www.anthropic.com/engineering/claude-code-auto-mode).

544 </Accordion>546 </Accordion>

545 547 

546 <Accordion title="Cómo el modo automático maneja subagentes">548 <Accordion title="Cómo el modo automático maneja subagentes">

547 El clasificador verifica el trabajo de [subagente](/docs/es/sub-agents) en tres puntos:549 El clasificador verifica el trabajo de [subagentes](/docs/es/sub-agents) en tres puntos:

548 550 

549 1. Antes de que comience un subagente, se evalúa la descripción de la tarea delegada, por lo que una tarea que parece peligrosa se bloquea en el momento del desove.551 1. Antes de que comience un subagente, se evalúa la descripción de la tarea delegada, por lo que una tarea de aspecto peligroso se bloquea en el momento del desove.

550 2. Mientras el subagente se ejecuta, cada una de sus acciones pasa por el mismo [orden de decisión](#how-the-classifier-evaluates-actions) que en la sesión principal, con las mismas reglas de bloqueo y permitir. Cualquier `permissionMode` en el frontmatter del subagente se ignora.552 2. Mientras el subagente se ejecuta, cada una de sus acciones pasa por el mismo [orden de decisión](#how-the-classifier-evaluates-actions) que en la sesión principal, con las mismas reglas de bloqueo y permitir. Cualquier `permissionMode` en el frontmatter del subagente se ignora.

551 3. Cuando el subagente termina, el clasificador revisa su trabajo y su informe final antes de que el principal lea el informe. Cuando el clasificador marca el trabajo o informe del subagente, o una verificación de seguridad de API separada rechaza la revisión, el informe se entrega de todas formas, precedido de una advertencia de seguridad. Cuando el clasificador no está disponible para la revisión, el informe llega con una nota para verificar el trabajo del subagente antes de actuar en consecuencia.553 3. Cuando el subagente termina, el clasificador revisa su trabajo y su informe final antes de que el principal lea el informe. Cuando el clasificador marca el trabajo o informe del subagente, o una verificación de seguridad de API separada rechaza la revisión, el informe aún se entrega, precedido de una advertencia de seguridad. Cuando el clasificador no está disponible para la revisión, el informe llega con una nota para verificar el trabajo del subagente antes de actuar en consecuencia.

552 </Accordion>554 </Accordion>

553 555 

554 <Accordion title="Costo y latencia">556 <Accordion title="Costo y latencia">

555 El clasificador se ejecuta en Claude Sonnet 5 de forma predeterminada en lugar de en su selección `/model`. Un modelo clasificador que Anthropic configura del lado del servidor tiene precedencia sobre ese predeterminado. Cuando el modelo de su sesión es Claude Sonnet 4.6, o cuando [`availableModels`](/docs/es/model-config#restrict-model-selection) excluye Sonnet 5, el clasificador se ejecuta en el modelo de su sesión en su lugar, u en un modelo Opus cuando la sesión se ejecuta en un [modelo Fable](/docs/es/model-config#work-with-fable); en proveedores que no sean la API de Anthropic, ese respaldo de Opus es el modelo Opus predeterminado del proveedor.557 El clasificador se ejecuta en Claude Sonnet 5 de forma predeterminada en lugar de en su selección `/model`. Un modelo clasificador que Anthropic configura del lado del servidor tiene precedencia sobre ese predeterminado. Cuando el modelo de su sesión es Claude Sonnet 4.6, o cuando [`availableModels`](/docs/es/model-config#restrict-model-selection) excluye Sonnet 5, el clasificador se ejecuta en el modelo de su sesión en su lugar, u en un modelo Opus cuando la sesión se ejecuta en un [modelo Fable](/docs/es/model-config#work-with-fable); en proveedores que no sean la API de Anthropic, ese respaldo de Opus es el modelo Opus predeterminado del proveedor.

556 558 

557 La primera solicitud de modo automático de la sesión valida el predeterminado de Sonnet 5: si la solicitud tiene éxito, Sonnet 5 permanece como el modelo clasificador de la sesión, y si falla porque el modelo no está disponible, la sesión usa el respaldo en su lugar. Después de que esa validación se resuelve, el modelo del clasificador no cambia para la sesión.559 La primera solicitud de modo automático de la sesión valida el predeterminado de Sonnet 5: si la solicitud tiene éxito, Sonnet 5 permanece como el modelo clasificador de la sesión, y si falla porque el modelo no está disponible, la sesión usa el respaldo en su lugar.

558 560 

559 En planes Enterprise y en cuentas que usan la API de Claude, [Claude Platform en AWS](/docs/es/claude-platform-on-aws), Amazon Bedrock, Google Cloud's Agent Platform o Microsoft Foundry, las llamadas del clasificador cuentan hacia su uso de tokens. Cada verificación envía una porción de la transcripción más la acción pendiente, agregando un viaje de ida y vuelta antes de la ejecución. Las lecturas y ediciones de directorio de trabajo fuera de rutas protegidas omiten el clasificador, por lo que la sobrecarga proviene principalmente de comandos de shell y operaciones de red. Donde el servidor revisa las acciones como parte de las solicitudes del modelo de la sesión, no hay llamadas del clasificador separadas para contar; consulte [Revisión del clasificador del lado del servidor](#server-side-classifier-review).561 En planes Enterprise y en cuentas que usan la API de Claude, [Claude Platform en AWS](/docs/es/claude-platform-on-aws), Amazon Bedrock, Google Cloud's Agent Platform o Microsoft Foundry, las llamadas del clasificador cuentan hacia su uso de tokens. Cada verificación envía una porción de la transcripción más la acción pendiente, agregando un viaje de ida y vuelta antes de la ejecución. Las lecturas y ediciones de directorio de trabajo fuera de rutas protegidas omiten el clasificador, por lo que la sobrecarga proviene principalmente de comandos de shell y operaciones de red. Donde el servidor revisa las acciones como parte de las solicitudes del modelo de la sesión, no hay llamadas del clasificador separadas para contar; consulte [Revisión del clasificador del lado del servidor](#server-side-classifier-review).

560 562 

561 El acceso a la red en sandbox no agrega solicitudes del clasificador por conexión. El clasificador juzga [los hosts que un comando nombra](/docs/es/sandboxing#per-command-allowed-domains-in-auto-mode) junto con el comando en una revisión, y Claude Code verifica cada conexión contra la lista aprobada sin llamar al clasificador de nuevo.563 El acceso a la red en sandbox no agrega solicitudes del clasificador por conexión. El clasificador juzga [los hosts que nombra un comando](/docs/es/sandboxing#per-command-allowed-domains-in-auto-mode) junto con el comando en una revisión, y Claude Code verifica cada conexión contra la lista aprobada sin llamar al clasificador de nuevo.

562 </Accordion>564 </Accordion>

563</AccordionGroup>565</AccordionGroup>

564 566 


667* `.yarn`669* `.yarn`

668* `.mvn`670* `.mvn`

669* `.claude`, excepto por `.claude/worktrees` donde Claude almacena sus propios git worktrees671* `.claude`, excepto por `.claude/worktrees` donde Claude almacena sus propios git worktrees

672* Un directorio que cargó con [`--plugin-dir`](/docs/es/plugins/mods/create#change-a-mod-with-claude), porque Claude Code recarga y ejecuta el código de un mod desde él cuando un archivo cambia

670 673 

671Archivos protegidos:674Archivos protegidos:

672 675 

permissions.md +14 −3

Details

599 599 

600Los [hooks de Claude Code](/docs/es/hooks-guide) le permiten registrar comandos de shell personalizados que evalúan permisos en tiempo de ejecución. Cuando Claude Code realiza una llamada de herramienta, los hooks PreToolUse se ejecutan antes del aviso de permisos, para cada herramienta excepto [`EndConversation`](/docs/es/tools-reference#endconversation-tool-behavior). La salida del hook puede denegar la llamada de herramienta, forzar un aviso u omitir el aviso para permitir que la llamada continúe.600Los [hooks de Claude Code](/docs/es/hooks-guide) le permiten registrar comandos de shell personalizados que evalúan permisos en tiempo de ejecución. Cuando Claude Code realiza una llamada de herramienta, los hooks PreToolUse se ejecutan antes del aviso de permisos, para cada herramienta excepto [`EndConversation`](/docs/es/tools-reference#endconversation-tool-behavior). La salida del hook puede denegar la llamada de herramienta, forzar un aviso u omitir el aviso para permitir que la llamada continúe.

601 601 

602Las decisiones del hook no omiten las reglas de permisos. Claude Code evalúa las reglas de negación y solicitud independientemente de lo que devuelva un hook PreToolUse: una regla de negación coincidente bloquea la llamada, y una regla de solicitud coincidente aún solicita incluso cuando el hook devolvió `"allow"` u `"ask"`. Esto preserva la precedencia de negación primero descrita en [Administrar permisos](#manage-permissions), incluyendo reglas de negación establecidas en configuración administrada.602Las decisiones del hook PreToolUse no omiten las reglas de permisos. Claude Code evalúa las reglas de negación y solicitud independientemente de lo que devuelva un hook PreToolUse: una regla de negación coincidente bloquea la llamada, y una regla de solicitud coincidente aún solicita incluso cuando el hook devolvió `"allow"` u `"ask"`. Esto preserva la precedencia de negación primero descrita en [Administrar permisos](#manage-permissions), incluyendo reglas de negación establecidas en configuración administrada.

603 

604Esa precedencia cubre hooks en archivos de configuración y en el archivo `hooks/hooks.json` de un plugin. Un [mod](/docs/es/plugins/mods/overview) que instale y que enganche `tool.check` responde después de que las reglas y los hooks PreToolUse hayan decidido, y su respuesta puede reemplazar la de ellos:

605 

606* **Reglas de solicitud**: el mod puede aprobar una llamada que una regla de solicitud solicitaría

607* **Un bloqueo de un hook `PreToolUse`**: el mod puede aprobar la llamada, a menos que el hook esté en configuración administrada

608* **El clasificador de modo automático**: en [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode), una llamada que el mod aprueba se ejecuta sin una verificación de clasificador

609* **Reglas de negación**: en una máquina con configuración administrada, o cuando ha iniciado sesión con un plan de Team o Enterprise, las reglas de negación prevalecen sobre el mod de forma predeterminada, y su organización puede cambiar eso. En cualquier otro lugar, el mod puede aprobar una llamada que una regla de negación rechaza.

610 

611Consulte [Decidir si confiar en un mod](/docs/es/plugins/mods/overview#decide-whether-to-trust-a-mod), o [Administrar mods para su organización](/docs/es/plugins/mods/admin#know-what-happens-by-default) si implementa configuración administrada.

603 612 

604Las herramientas MCP marcadas como [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) también aún solicitan cuando un hook devuelve `"allow"`, al igual que las herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde esa configuración llega a Claude Code.613Las herramientas MCP marcadas como [`requiresUserInteraction`](/docs/es/mcp#require-approval-for-a-specific-tool) también aún solicitan cuando un hook devuelve `"allow"`, al igual que las herramientas de conector [que su organización estableció en `ask`](/docs/es/mcp#organization-controls-on-connector-tools) en sesiones donde esa configuración llega a Claude Code.

605 614 


717 726 

718Lo mismo se aplica en todos los ámbitos de configuración: si la configuración de usuario permite un permiso y la configuración de proyecto lo deniega, la regla de negación lo bloquea. Lo contrario también es cierto: una negación a nivel de usuario bloquea un permiso a nivel de proyecto, porque las reglas de negación de cualquier ámbito se evalúan antes que las reglas de permiso.727Lo mismo se aplica en todos los ámbitos de configuración: si la configuración de usuario permite un permiso y la configuración de proyecto lo deniega, la regla de negación lo bloquea. Lo contrario también es cierto: una negación a nivel de usuario bloquea un permiso a nivel de proyecto, porque las reglas de negación de cualquier ámbito se evalúan antes que las reglas de permiso.

719 728 

729Esta precedencia es entre archivos de configuración y argumentos de línea de comandos. Para saber si una regla de negación se mantiene sobre un [mod](/docs/es/plugins/mods/overview) que instale, consulte [Extender permisos con hooks](#extend-permissions-with-hooks).

730 

720Los hosts de inserción pueden proporcionar política administrada adicional a través de la opción `managedSettings` del SDK, incluyendo reglas de permiso de permitir a menos que el administrador establezca los bloqueos `allowManaged*Only`; [Entregar política a sesiones de Claude Desktop](/docs/es/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) cubre cuándo se aplica la política del integrador en absoluto.731Los hosts de inserción pueden proporcionar política administrada adicional a través de la opción `managedSettings` del SDK, incluyendo reglas de permiso de permitir a menos que el administrador establezca los bloqueos `allowManaged*Only`; [Entregar política a sesiones de Claude Desktop](/docs/es/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) cubre cuándo se aplica la política del integrador en absoluto.

721 732 

722<h2 id="project-allow-rules-and-workspace-trust">733<h2 id="project-allow-rules-and-workspace-trust">


763| [Hooks](/docs/es/hooks) en archivos de configuración, el bloque [`env`](/docs/es/settings-reference#env) y comandos auxiliares como [`apiKeyHelper`](/docs/es/settings-reference#apikeyhelper), y los [hooks](/docs/es/hooks#hooks-in-skills-and-agents) de una skill del proyecto y [`allowed-tools`](/docs/es/skills#pre-approve-tools-for-a-skill) | Utilizado | Utilizado. La confianza del espacio de trabajo nunca bloquea `allowed-tools` de una skill en ninguna sesión |774| [Hooks](/docs/es/hooks) en archivos de configuración, el bloque [`env`](/docs/es/settings-reference#env) y comandos auxiliares como [`apiKeyHelper`](/docs/es/settings-reference#apikeyhelper), y los [hooks](/docs/es/hooks#hooks-in-skills-and-agents) de una skill del proyecto y [`allowed-tools`](/docs/es/skills#pre-approve-tools-for-a-skill) | Utilizado | Utilizado. La confianza del espacio de trabajo nunca bloquea `allowed-tools` de una skill en ninguna sesión |

764| Reglas `permissions.allow` y `additionalDirectories` en `.claude/settings.json` | No se utiliza hasta que acepte el diálogo de confianza, que aparece nuevamente enumerándolas | No se utiliza. Claude Code imprime una advertencia [`this workspace has not been trusted`](/docs/es/errors#workspace-has-not-been-trusted) a stderr |775| Reglas `permissions.allow` y `additionalDirectories` en `.claude/settings.json` | No se utiliza hasta que acepte el diálogo de confianza, que aparece nuevamente enumerándolas | No se utiliza. Claude Code imprime una advertencia [`this workspace has not been trusted`](/docs/es/errors#workspace-has-not-been-trusted) a stderr |

765| Hooks de frontmatter en un [subagente](/docs/es/sub-agents#hooks-in-subagent-frontmatter) del proyecto, un plugin [`@skills-dir`](/docs/es/plugins/loading#plugins-shared-through-a-repository) del proyecto, y entradas [`extraKnownMarketplaces`](/docs/es/settings-reference#extraknownmarketplaces) del repositorio o un directorio `--add-dir` | No se utiliza, y no se ofrece diálogo | No se utiliza |776| Hooks de frontmatter en un [subagente](/docs/es/sub-agents#hooks-in-subagent-frontmatter) del proyecto, un plugin [`@skills-dir`](/docs/es/plugins/loading#plugins-shared-through-a-repository) del proyecto, y entradas [`extraKnownMarketplaces`](/docs/es/settings-reference#extraknownmarketplaces) del repositorio o un directorio `--add-dir` | No se utiliza, y no se ofrece diálogo | No se utiliza |

766| [`mcpServers`](/docs/es/sub-agents#scope-mcp-servers-to-a-subagent) en línea en el frontmatter de un subagente del repositorio o un directorio `--add-dir`. Antes de v2.1.238, Claude Code cargaba estos servidores en ambas situaciones | No se utiliza, y no se ofrece diálogo | No se utiliza |777| [`mcpServers`](/docs/es/sub-agents#scope-mcp-servers-to-a-subagent) en línea en el frontmatter de un subagente del repositorio o un directorio `--add-dir` | No se utiliza, y no se ofrece diálogo | No se utiliza |

767| Servidores en `.mcp.json`, incluidos los que el repositorio [aprueba en su propia configuración](/docs/es/mcp#project-server-approvals-and-workspace-trust) | Claude Code le pregunta antes de conectarlos. Las aprobaciones propias del repositorio no cuentan | Conectado sin preguntar, aprobado o no. El SDK los carga solo cuando `settingSources` incluye configuración del proyecto. `claude mcp list` en la misma carpeta aún reporta tal servidor como pendiente |778| Servidores en `.mcp.json`, incluidos los que el repositorio [aprueba en su propia configuración](/docs/es/mcp#project-server-approvals-and-workspace-trust) | Claude Code le pregunta antes de conectarlos. Las aprobaciones propias del repositorio no cuentan | Conectado sin preguntar, aprobado o no. El SDK los carga solo cuando `settingSources` incluye configuración del proyecto. `claude mcp list` en la misma carpeta aún reporta tal servidor como pendiente |

768| Un [`headersHelper`](/docs/es/mcp#trust-a-folder-before-its-headershelper-runs) en un servidor en `.mcp.json`. Antes de v2.1.238, Claude Code ejecutaba el auxiliar en ambas situaciones | No se ejecuta hasta que acepte el diálogo de confianza, que aparece nuevamente nombrando dónde se declara el auxiliar. Claude Code conecta el servidor solo con sus `headers` estáticos hasta entonces | No se ejecuta. Claude Code conecta el servidor con sus `headers` estáticos y imprime una línea [`headersHelper not run`](/docs/es/errors#headershelper-not-run) por servidor a stderr |779| Un [`headersHelper`](/docs/es/mcp#trust-a-folder-before-its-headershelper-runs) en un servidor en `.mcp.json` | No se ejecuta hasta que acepte el diálogo de confianza, que aparece nuevamente nombrando dónde se declara el auxiliar. Claude Code conecta el servidor solo con sus `headers` estáticos hasta entonces | No se ejecuta. Claude Code conecta el servidor con sus `headers` estáticos y imprime una línea [`headersHelper not run`](/docs/es/errors#headershelper-not-run) por servidor a stderr |

769 780 

770Para las filas que necesitan que esta carpeta exacta sea confiada, confíe en ella manualmente: establezca `projects["<path>"].hasTrustDialogAccepted` en `true` en `~/.claude.json`, donde `<path>` es la raíz del repositorio, o la carpeta misma fuera de un repositorio. Claude Code imprime la clave exacta en la línea de registro de depuración para un hook de subagente omitido o servidor MCP en línea, en la advertencia de stderr para reglas de permiso omitidas, y en la línea `headersHelper not run` para un auxiliar omitido.781Para las filas que necesitan que esta carpeta exacta sea confiada, confíe en ella manualmente: establezca `projects["<path>"].hasTrustDialogAccepted` en `true` en `~/.claude.json`, donde `<path>` es la raíz del repositorio, o la carpeta misma fuera de un repositorio. Claude Code imprime la clave exacta en la línea de registro de depuración para un hook de subagente omitido o servidor MCP en línea, en la advertencia de stderr para reglas de permiso omitidas, y en la línea `headersHelper not run` para un auxiliar omitido.

771 782 

Details

29Cada subcomando comparte estos códigos de salida, argumentos de plugins y valores de ámbito:29Cada subcomando comparte estos códigos de salida, argumentos de plugins y valores de ámbito:

30 30 

31* **Códigos de salida**: `0` en caso de éxito y `1` en caso de fallo. `validate` añade salida `2` para un error inesperado, y `eval` añade los códigos listados en [su sección](#plugin-eval).31* **Códigos de salida**: `0` en caso de éxito y `1` en caso de fallo. `validate` añade salida `2` para un error inesperado, y `eval` añade los códigos listados en [su sección](#plugin-eval).

32* **Argumentos de plugins**: un argumento `<plugin>` es un `name` de plugin o `name@marketplace`. Cuando dos marketplaces ofrecen el mismo nombre, usa la forma calificada.32* **Argumentos de plugins**: un argumento `<plugin>` es un `name` de plugin o `name@marketplace`. Cuando dos marketplaces ofrecen el mismo nombre, usa la forma calificada. `configure` toma solo la forma calificada.

33* **Ámbitos**: `--scope` toma `user`, `project` o `local`, y nombra el archivo de configuración al que escribe el comando. `update` también toma `managed`.33* **Ámbitos**: `--scope` toma `user`, `project` o `local`, y nombra el archivo de configuración al que escribe el comando. `update` también toma `managed`.

34 34 

35<h3 id="plugin-init">35<h3 id="plugin-init">


87| Bandera | Descripción |87| Bandera | Descripción |

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

89| `-s, --scope <scope>` | Ámbito de instalación: `user`, `project` o `local`. Por defecto es `user` |89| `-s, --scope <scope>` | Ámbito de instalación: `user`, `project` o `local`. Por defecto es `user` |

90| `--config <key=value>` | Establece una opción [`userConfig`](/docs/es/plugins/manifest-reference) que declara el manifiesto del plugin. Repite la bandera para cada opción. Requiere Claude Code v2.1.147 o posterior |90| `--config <key=value>` | Establece una opción [`userConfig`](/docs/es/plugins/manifest-reference) que declara el manifiesto del plugin. Repite la bandera para cada opción. Requiere Claude Code v2.1.147 o posterior. Una clave escrita como `<server>.<key>` establece una configuración que un [servidor MCP empaquetado](/docs/es/plugins/components#include-a-packaged-mcpb-server) declara en su propio `user_config` en su lugar, para un archivo de paquete enviado dentro del plugin. La forma `<server>.<key>` requiere Claude Code v2.1.285 o posterior |

91| `-y, --yes` | Acepta el comando de instalación mostrado sin el aviso `Run this command now?`. Se ignora cuando el comando se ejecuta dentro de una sesión de Claude Code, como desde la herramienta Bash o un hook. Requiere Claude Code v2.1.229 o posterior |91| `-y, --yes` | Acepta el comando de instalación mostrado sin el aviso `Run this command now?`. Se ignora cuando el comando se ejecuta dentro de una sesión de Claude Code, como desde la herramienta Bash o un hook. Requiere Claude Code v2.1.229 o posterior |

92| `--accept-command <sha256>` | Acepta el comando de instalación mostrado cuyo `sha256` una ejecución anterior de [`--json`](#plugin-json-result) reportó en `shownCommand`, en lugar de `-y`. No se puede combinar con `-y`. Consulta [Aceptar un comando de instalación mostrado](#accept-a-displayed-install-command). Requiere Claude Code v2.1.271 o posterior |92| `--accept-command <sha256>` | Acepta el comando de instalación mostrado cuyo `sha256` una ejecución anterior de [`--json`](#plugin-json-result) reportó en `shownCommand`, en lugar de `-y`. No se puede combinar con `-y`. Consulta [Aceptar un comando de instalación mostrado](#accept-a-displayed-install-command). Requiere Claude Code v2.1.271 o posterior |

93| `--json` | Imprime el resultado como un objeto JSON en la última línea de stdout en lugar del mensaje legible por humanos, para usar en scripts. Consulta [Formato de resultado JSON](#plugin-json-result). Requiere Claude Code v2.1.268 o posterior |93| `--json` | Imprime el resultado como un objeto JSON en la última línea de stdout en lugar del mensaje legible por humanos, para usar en scripts. Consulta [Formato de resultado JSON](#plugin-json-result). Requiere Claude Code v2.1.268 o posterior |


297| :- | :- |297| :- | :- |

298| `--json` | Imprime la lista como JSON |298| `--json` | Imprime la lista como JSON |

299| `--available` | También lista plugins que tus marketplaces ofrecen que no has instalado. No tiene efecto sin `--json` |299| `--available` | También lista plugins que tus marketplaces ofrecen que no has instalado. No tiene efecto sin `--json` |

300| `--data-size [plugin]` | Mide el directorio de [datos guardados](#what-an-uninstall-deletes-and-keeps) de cada plugin instalado, o solo el del plugin nombrado, dado como `name@marketplace`. No tiene efecto sin `--json`. Si el nombre no tiene registro de instalación, el comando imprime `--data-size names a plugin that is not installed` y sale con `1` en lugar de imprimir la lista. Requiere Claude Code v2.1.285 o posterior |

300 301 

301Claude Code agrupa la salida legible por humanos por cómo se carga cada plugin:302Claude Code agrupa la salida legible por humanos por cómo se carga cada plugin:

302 303 


328| `notes` | array of strings | Advertencias de autoría para un plugin que cargó y funciona |329| `notes` | array of strings | Advertencias de autoría para un plugin que cargó y funciona |

329| `errorDetails` | array of objects | Un objeto por entrada de `errors`, dando su `type` de diagnóstico y los nombres a los que se refiere, como el plugin, marketplace, servidor o archivo. Requiere Claude Code v2.1.268 o posterior |330| `errorDetails` | array of objects | Un objeto por entrada de `errors`, dando su `type` de diagnóstico y los nombres a los que se refiere, como el plugin, marketplace, servidor o archivo. Requiere Claude Code v2.1.268 o posterior |

330| `noteDetails` | array of objects | Los mismos objetos de detalle para cada entrada de `notes`. Requiere Claude Code v2.1.268 o posterior |331| `noteDetails` | array of objects | Los mismos objetos de detalle para cada entrada de `notes`. Requiere Claude Code v2.1.268 o posterior |

332| `hasUserConfig` | boolean | Presente y `true` cuando el plugin cargó y su manifiesto declara opciones [`userConfig`](/docs/es/plugins/manifest-reference#user-configuration). Ausente para un plugin que falló al cargar, sin importar lo que su manifiesto declare. Los valores guardados nunca se incluyen. Requiere Claude Code v2.1.285 o posterior |

333| `projectEnabled` | boolean | Si el `.claude/settings.json` compartido del proyecto activa el plugin. Solo installs de marketplace. Requiere Claude Code v2.1.285 o posterior |

334| `dataDirSize` | object | Con `--data-size`, el tamaño del directorio de [datos guardados](#what-an-uninstall-deletes-and-keeps) del plugin como `bytes` y `human`; ausente cuando el directorio falta o está vacío. Solo installs de marketplace. Requiere Claude Code v2.1.285 o posterior |

335| `dataDirUnreadable` | boolean | Con `--data-size`, `true` cuando el directorio de datos guardados existe pero no pudo ser medido. Solo installs de marketplace. Requiere Claude Code v2.1.285 o posterior |

331 336 

332Con `--json --available`, Claude Code imprime un objeto en lugar de un array. Su campo `installed` contiene el array de objetos de plugin instalado, y su campo `available` contiene un objeto por plugin de marketplace no instalado con los campos a continuación.337Con `--json --available`, Claude Code imprime un objeto en lugar de un array. Su campo `installed` contiene el array de objetos de plugin instalado, y su campo `available` contiene un objeto por plugin de marketplace no instalado con los campos a continuación.

333 338 


371 376 

372Para un plugin que no está cargado, Claude Code imprime ``Plugin "formatter" not found. Run `claude plugin list` to see installed plugins, or pass --plugin-dir <path> to load one from disk.`` y sale con `1`.377Para un plugin que no está cargado, Claude Code imprime ``Plugin "formatter" not found. Run `claude plugin list` to see installed plugins, or pass --plugin-dir <path> to load one from disk.`` y sale con `1`.

373 378 

379<h3 id="plugin-configure">

380 plugin configure

381</h3>

382 

383Muestra las opciones [`userConfig`](/docs/es/plugins/manifest-reference#user-configuration) de un plugin instalado y cuáles están establecidas, o guarda valores canalizados en stdin. Requiere Claude Code v2.1.285 o posterior.

384 

385```bash theme={null}

386claude plugin configure <plugin>

387```

388 

389| Bandera | Descripción |

390| :- | :- |

391| `--values-stdin` | Lee valores de opciones de stdin como un objeto JSON de strings de una sola línea y los guarda. Las opciones que dejas fuera mantienen sus valores guardados |

392| `--json` | Imprime el resultado como un objeto JSON en stdout. Sin `--values-stdin`, el objeto lleva el `schema` y `choices` de las opciones, sus `inputs` iniciales, y los nombres de opciones `configured` y `unconfigured`. Con `--values-stdin`, lleva los nombres de opciones `saved` y, cuando pueden ser leídos de vuelta, los `unconfigured` |

393 

394Sin banderas, el comando lista cada opción con hasta tres etiquetas: `required` u `optional`, luego `sensitive` para una opción que el manifiesto declara sensible, luego `set` o `not set`. No imprime valores guardados. Con `--json`, la salida incluye los valores guardados de opciones que no son sensibles, y nunca el texto de una sensible.

395 

396Para guardar valores, escríbelos en un archivo como un objeto JSON que mapea claves de opciones a valores de string, luego pasa el archivo en stdin. Reemplaza `formatter@my-marketplace` con el id de tu propio plugin como `claude plugin list` lo muestra. Este ejemplo establece una opción nombrada `api_url` desde un archivo `values.json` que contiene `{"api_url": "https://example.com"}`:

397 

398```bash theme={null}

399claude plugin configure formatter@my-marketplace --values-stdin < values.json

400```

401 

402Claude Code valida cada valor contra el tipo declarado de la opción e imprime `Configuration saved. Restart Claude Code to apply it.` Si pasas una clave que el manifiesto no declara, o un valor que falla la validación, el comando no guarda nada, imprime `Failed to save configuration:` con la razón, y sale con `1`. Con `--json`, un valor rechazado también imprime un objeto en stdout cuyo campo `refused` lleva el `message` y, cuando una opción es culpable, su clave `option`.

403 

404Pasa el id completo `name@marketplace` del plugin, como `claude plugin list` lo muestra. `configure` no acepta un `name` simple. Cuando ningún plugin cargado tiene ese id, el comando imprime `No installed plugin has the id "<plugin>".` y sale con `1`.

405 

406Para la configuración de un servidor MCP empaquetado, consulta [`plugin install --config`](#plugin-install) o el elemento **Configure** en `/plugin`.

407 

374<h3 id="plugin-prune">408<h3 id="plugin-prune">

375 plugin prune409 plugin prune

376</h3>410</h3>

Details

791 791 

792Los hooks en `hooks/hooks.json` y en la clave de manifiesto `hooks` se cargan ambos. Para cada evento y su carga útil, consulte [Eventos de hook](/docs/es/hooks#hook-events).792Los hooks en `hooks/hooks.json` y en la clave de manifiesto `hooks` se cargan ambos. Para cada evento y su carga útil, consulte [Eventos de hook](/docs/es/hooks#hook-events).

793 793 

794Para escribir hooks como funciones JavaScript que se ejecutan dentro de Claude Code y pueden dibujar en su interfaz, enumere un archivo de módulo bajo una clave `modules` en el mismo `hooks/hooks.json`. Un plugin con uno es un mod. Consulte [Crear un mod](/docs/es/plugins/mods/create).

795 

794<h4 id="when-plugin-hooks-fire">796<h4 id="when-plugin-hooks-fire">

795 Cuándo se activan los hooks del plugin797 Cuándo se activan los hooks del plugin

796</h4>798</h4>


868 870 

869El servidor toma su nombre del `name` en el manifiesto del paquete.871El servidor toma su nombre del `name` en el manifiesto del paquete.

870 872 

873Un manifiesto propio del paquete puede declarar configuraciones que el servidor necesita del usuario en un bloque `user_config`. Un servidor empaquetado con una configuración requerida que no tiene un valor guardado no se inicia. La pestaña **Errors** de `/plugin` muestra `Bundled MCP server "<name>" was not started: it needs configuration`.

874 

875Los usuarios proporcionan los valores de una de dos maneras:

876 

877* **En `/plugin`**: seleccione el plugin en la pestaña **Installed** y elija **Configure**

878* **En la instalación, desde el shell**: pase [`--config <server>.<key>=<value>`](/docs/es/plugins/cli-reference#plugin-install) a `claude plugin install`. Requiere Claude Code v2.1.285 o posterior, y funciona solo para un paquete empaquetado dentro del plugin.

879 

871Para transportes y autenticación, consulte [MCP](/docs/es/mcp#plugin-provided-mcp-servers).880Para transportes y autenticación, consulte [MCP](/docs/es/mcp#plugin-provided-mcp-servers).

872 881 

873<h3 id="lsp-servers">882<h3 id="lsp-servers">


1071 Cuándo aparece el diálogo de configuración1080 Cuándo aparece el diálogo de configuración

1072</h3>1081</h3>

1073 1082 

1074El diálogo aparece solo en la interfaz interactiva `/plugin`. Se abre para cualquier opción que aún no esté establecida cuando el usuario hace cualquiera de lo siguiente:1083El diálogo es parte de la interfaz interactiva `/plugin`. Se abre para cualquier opción que aún no esté establecida cuando el usuario hace cualquiera de lo siguiente:

1075 1084 

1076* Instala el plugin en `/plugin`1085* Instala el plugin en `/plugin`

1077* Ejecuta `/plugin install <plugin>@<marketplace>` dentro de una sesión1086* Ejecuta `/plugin install <plugin>@<marketplace>` dentro de una sesión


1079 1088 

1080Para abrir el mismo diálogo en cualquier momento, el usuario ejecuta `/plugin configure <plugin>@<marketplace>`.1089Para abrir el mismo diálogo en cualquier momento, el usuario ejecuta `/plugin configure <plugin>@<marketplace>`.

1081 1090 

1082El comando de shell `claude plugin install` nunca solicita valores de `userConfig`. Para establecer valores desde el shell, pase cada uno como `--config KEY=VALUE`. Cuando las opciones permanecen sin establecer, el comando imprime una línea `userConfig options not yet set` que nombra ambas formas de establecerlas. [El diálogo `userConfig` nunca aparece](/docs/es/plugins/troubleshooting#the-userconfig-dialog-never-appears) cita la línea.1091El diálogo Manage plugins de la extensión de VS Code [Manage plugins dialog](/docs/es/vs-code#install-plugins) solicita opciones sin establecer como un formulario después de una instalación, y un icono de engranaje en la fila del plugin abre el formulario nuevamente con cada opción.

1092 

1093El comando de shell `claude plugin install` nunca solicita valores de `userConfig`. Para establecer valores desde el shell, pase cada uno como `--config KEY=VALUE` cuando instale, o canalice un objeto JSON a [`claude plugin configure --values-stdin`](/docs/es/plugins/cli-reference#plugin-configure) después.

1094 

1095Cuando las opciones permanecen sin establecer, `claude plugin install` imprime una línea `userConfig options not yet set`. Para el texto exacto de la línea, consulte [The `userConfig` dialog never appears](/docs/es/plugins/troubleshooting#the-userconfig-dialog-never-appears).

1083 1096 

1084Para los campos de opción, dónde se almacena cada valor, cómo un componente hace referencia a un valor guardado, y qué campos rechazan `${user_config.*}`, consulte [Configuración del usuario](/docs/es/plugins/manifest-reference#user-configuration).1097Para los campos de opción, dónde se almacena cada valor, cómo un componente hace referencia a un valor guardado, y qué campos rechazan `${user_config.*}`, consulte [Configuración del usuario](/docs/es/plugins/manifest-reference#user-configuration).

1085 1098 

Details

72 La última oración del resumen le dice si el plugin es utilizable en esta sesión aún:72 La última oración del resumen le dice si el plugin es utilizable en esta sesión aún:

73 73 

74 * **Active now**: `Plugin is now active.` No se necesita recarga.74 * **Active now**: `Plugin is now active.` No se necesita recarga.

75 * **Active, but a server needs setup**: `Plugin is now active.` va seguido de `Its bundled MCP server needs configuration before it can start`. El [servidor MCP empaquetado](/docs/es/plugins/components#include-a-packaged-mcpb-server) del plugin no puede iniciarse hasta que establezca sus opciones. Seleccione el plugin en la pestaña **Installed** en `/plugin` y elija **Configure** para establecer las opciones del servidor.

75 * **Reload needed**: `Run /reload-plugins to activate.` El panel se cierra y Claude Code ejecuta esa recarga por usted. Si la recarga [invalidaría el prompt cache](/docs/es/prompt-caching#enabling-or-disabling-a-plugin), advierte y deja el plugin pendiente en su lugar. Ejecute `/reload-plugins --force` para activarlo de todas formas, lo que cuesta una solicitud sin caché.76 * **Reload needed**: `Run /reload-plugins to activate.` El panel se cierra y Claude Code ejecuta esa recarga por usted. Si la recarga [invalidaría el prompt cache](/docs/es/prompt-caching#enabling-or-disabling-a-plugin), advierte y deja el plugin pendiente en su lugar. Ejecute `/reload-plugins --force` para activarlo de todas formas, lo que cuesta una solicitud sin caché.

76 * **Load failed**: `The plugin couldn't be loaded`. Abra la pestaña **Errors** en `/plugin` para la razón, luego consulte [After install: plugin not working](/docs/es/plugins/troubleshooting#plugin-installed-but-not-working).77 * **Load failed**: `The plugin couldn't be loaded`. Abra la pestaña **Errors** en `/plugin` para la razón, luego consulte [After install: plugin not working](/docs/es/plugins/troubleshooting#plugin-installed-but-not-working).

77 </Step>78 </Step>


248Un marketplace privado es uno en un repositorio al que necesita credenciales para clonar, en GitHub o cualquier otro host git. Lo agrega con el mismo comando `/plugin marketplace add` o `claude plugin marketplace add` que uno público. Claude Code lo clona con las credenciales git ya en su máquina y nunca solicita, así que cada forma de conectarse tiene un requisito:249Un marketplace privado es uno en un repositorio al que necesita credenciales para clonar, en GitHub o cualquier otro host git. Lo agrega con el mismo comando `/plugin marketplace add` o `claude plugin marketplace add` que uno público. Claude Code lo clona con las credenciales git ya en su máquina y nunca solicita, así que cada forma de conectarse tiene un requisito:

249 250 

250* **HTTPS**: sus ayudantes de credenciales git se aplican, así que el acceso que configuró con `gh auth login`, el Keychain de macOS, o `git-credential-store` funciona. Los prompts interactivos se suprimen, así que un host al que nunca se ha autenticado falla en lugar de pedir una contraseña.251* **HTTPS**: sus ayudantes de credenciales git se aplican, así que el acceso que configuró con `gh auth login`, el Keychain de macOS, o `git-credential-store` funciona. Los prompts interactivos se suprimen, así que un host al que nunca se ha autenticado falla en lugar de pedir una contraseña.

251* **SSH**: el host ya debe estar en su archivo `known_hosts` y la clave debe funcionar sin un prompt de frase de contraseña, porque los prompts de huella digital del host y frase de contraseña también se suprimen.252* **SSH**: el host ya debe estar en su archivo `known_hosts` y la clave debe funcionar sin un prompt de frase de contraseña. Si su configuración de git nombra un programa SSH en `GIT_SSH_COMMAND`, `GIT_SSH`, o el `core.sshCommand` de su configuración de git, Claude Code ejecuta ese programa.

252* **Abreviatura de GitHub `owner/repo`**: Claude Code verifica si su clave SSH se autentica en `github.com`, luego clona sobre SSH si lo hace y sobre HTTPS si no. Establezca [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/es/env-vars#variables) para omitir esa verificación y siempre clonar sobre HTTPS.253* **Abreviatura de GitHub `owner/repo`**: Claude Code verifica si su clave SSH se autentica en `github.com`, luego clona sobre SSH si lo hace y sobre HTTPS si no. Establezca [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/es/env-vars#variables) para omitir esa verificación y siempre clonar sobre HTTPS.

253 254 

254Las mismas credenciales se aplican cuando ejecuta `/plugin install`, `/plugin marketplace update` y `claude plugin update`.255Las mismas credenciales se aplican cuando ejecuta `/plugin install`, `/plugin marketplace update` y `claude plugin update`.


288 289 

289* Escriba para filtrar por nombre o descripción.290* Escriba para filtrar por nombre o descripción.

290* Presione **Space** para habilitar o deshabilitar el plugin seleccionado, y **f** para marcarlo como favorito.291* Presione **Space** para habilitar o deshabilitar el plugin seleccionado, y **f** para marcarlo como favorito.

291* Presione **Enter** para abrir los detalles de un plugin. El menú allí ofrece **Disable plugin** o **Enable plugin**, **Update now** y **Uninstall**. Los plugins que toman configuración también ofrecen **Configure options**.292* Presione **Enter** para abrir los detalles de un plugin.

293 

294El menú de detalles de un plugin ofrece **Disable plugin** o **Enable plugin**, **Update now** y **Uninstall**. Dos elementos más aparecen para plugins que toman configuración, y un plugin puede mostrar ambos:

295 

296* **Configure options**: se muestra cuando el manifiesto del plugin declara opciones [`userConfig`](/docs/es/plugins/manifest-reference#user-configuration). Abre el diálogo para esas opciones

297* **Configure**: se muestra cuando el plugin incluye un [servidor MCP empaquetado](/docs/es/plugins/components#include-a-packaged-mcpb-server). Establece la configuración `user_config` propia de ese servidor

292 298 

293La pestaña también puede mostrar plugins en alcance **Managed**. Su organización instaló esos a través de [configuración administrada](/docs/es/settings#settings-files), y no puede habilitarlos, deshabilitarlos o desinstalarlos aquí.299La pestaña también puede mostrar plugins en alcance **Managed**. Su organización instaló esos a través de [configuración administrada](/docs/es/settings#settings-files), y no puede habilitarlos, deshabilitarlos o desinstalarlos aquí.

294 300 

Details

146| [`dependencies`](#dependencies) | Array of strings or objects | Plugins que deben estar habilitados para que este funcione |146| [`dependencies`](#dependencies) | Array of strings or objects | Plugins que deben estar habilitados para que este funcione |

147| [`settings`](#settings) | Object | Configuración que Claude Code aplica mientras el plugin está habilitado. Solo `agent` y `subagentStatusLine` tienen efecto |147| [`settings`](#settings) | Object | Configuración que Claude Code aplica mientras el plugin está habilitado. Solo `agent` y `subagentStatusLine` tienen efecto |

148| [`userConfig`](#user-configuration) | Object | Valores que Claude Code solicita al usuario cuando el plugin está habilitado |148| [`userConfig`](#user-configuration) | Object | Valores que Claude Code solicita al usuario cuando el plugin está habilitado |

149| `types` | Path | Un archivo `.d.ts` que declara los valores `$.state` y los sustantivos `$` de un [mod](/docs/es/plugins/mods/reference#files) |

149| [`channels`](#channels) | Array of objects | Canales de mensajes que proporciona el plugin, cada uno vinculado a uno de sus servidores MCP |150| [`channels`](#channels) | Array of objects | Canales de mensajes que proporciona el plugin, cada uno vinculado a uno de sus servidores MCP |

150| `skills` | Path, or array of paths | Directorios para escanear en busca de skills, cada uno un directorio de carpetas `<name>/SKILL.md` o una carpeta que contenga `SKILL.md` directamente. `"."` nombra la raíz del plugin. Se suma al escaneo predeterminado `skills/` |151| `skills` | Path, or array of paths | Directorios para escanear en busca de skills, cada uno un directorio de carpetas `<name>/SKILL.md` o una carpeta que contenga `SKILL.md` directamente. `"."` nombra la raíz del plugin. Se suma al escaneo predeterminado `skills/` |

151| [`commands`](#commands) | Path, array of paths, or object | Archivos de comando `.md` planos, directorios de ellos, u un objeto mapa de nombre de comando a `source` o `content`. Reemplaza el escaneo predeterminado `commands/` |152| [`commands`](#commands) | Path, array of paths, or object | Archivos de comando `.md` planos, directorios de ellos, u un objeto mapa de nombre de comando a `source` o `content`. Reemplaza el escaneo predeterminado `commands/` |


170 171 

171Claude Code espacía cada componente bajo él, por lo que un agente `reviewer` en el plugin `deploy-tools` aparece como `deploy-tools:reviewer`.172Claude Code espacía cada componente bajo él, por lo que un agente `reviewer` en el plugin `deploy-tools` aparece como `deploy-tools:reviewer`.

172 173 

174`claude plugin validate` también verifica que el nombre no se pase como uno de los propios plugins de Anthropic. La verificación ignora mayúsculas y trata cualquier serie de separadores como uno:

175 

176| Nombre | Resultado |

177| :- | :- |

178| Comienza con `claude-`, `anthropic-`, `anthropics-`, o `cc-plugin-` | Error |

179| Es `claude`, `anthropic`, `anthropics`, `claude-code`, o `claude-mods` | Error |

180| Pone `official` junto a `claude` o `anthropic`, como `official-claude-tools` | Error |

181| Tiene `claude`, `anthropic`, o `anthropics` como palabra completa en cualquier otro lugar, como `mcp-for-claude` | Advertencia |

182 

183El error dice `Plugin name "<name>" is reserved: it passes as one of Anthropic's own`, y la advertencia dice `Plugin name "<name>" reads as one of Anthropic's own`. `claude plugin init` y `claude plugin tag` rechazan un nombre que genera el error. Solo estos comandos verifican el nombre. Claude Code aún instala y carga un plugin cuyo nombre rechazan.

184 

173<h3 id="displayname">185<h3 id="displayname">

174 `displayName`186 `displayName`

175</h3>187</h3>

Details

484| `Author name cannot be empty` | Error | `owner.name` |484| `Author name cannot be empty` | Error | `owner.name` |

485| `Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin")` | Error | `plugins[i].name` |485| `Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin")` | Error | `plugins[i].name` |

486| `Plugin name cannot contain control or bidirectional-formatting characters` | Error | `plugins[i].name` |486| `Plugin name cannot contain control or bidirectional-formatting characters` | Error | `plugins[i].name` |

487| `Plugin name "x" is reserved: it passes as one of Anthropic's own` | Error | `plugins[i].name`. Consulte el [`name`](/docs/es/plugins/manifest-reference#name) del manifiesto para los nombres reservados |

488| `Plugin name "x" reads as one of Anthropic's own` | Advertencia | `plugins[i].name` |

487| `Claude Code cannot install plugins from marketplace "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change the marketplace's "name".` | Error | `name` |489| `Claude Code cannot install plugins from marketplace "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change the marketplace's "name".` | Error | `name` |

488| `Claude Code cannot install plugin "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change this entry's "name".` | Error | `plugins[i].name` |490| `Claude Code cannot install plugin "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change this entry's "name".` | Error | `plugins[i].name` |

489| `Duplicate plugin name "x" found in marketplace` | Error | Dos entradas comparten un `name` |491| `Duplicate plugin name "x" found in marketplace` | Error | Dos entradas comparten un `name` |

plugins/mods/admin.md +375 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Administrar mods para su organización

6 

7> Controle los mods de Claude Code con configuración administrada: detenga los mods instalados por usuarios, permita solo los suyos, revise qué puede hacer un mod e implemente políticas con su propio mod.

8 

9Un [mod](/docs/es/plugins/mods/overview) es un plugin que ejecuta código dentro de Claude Code con los permisos del usuario que lo instaló. Los mods no están sandboxed. A través de [configuración administrada](/docs/es/managed-settings), usted decide si los mods se ejecutan en las máquinas de sus usuarios, cuáles y en qué orden. También puede instalar un mod propio que supervise o rechace lo que hacen otros mods.

10 

11Esta página es para la persona que implementa la configuración administrada para Claude Code, ya sea como archivo, a través de MDM o desde la consola de administrador de claude.ai. Los mods están activados de forma predeterminada en Claude Code v2.1.287 y posteriores. Comience con la sección que coincida con lo que vino a hacer:

12 

13* **Mantenga los mods propios de los usuarios fuera, con o sin mods propios**: [Detenga la carga de mods instalados por usuarios](#stop-user-installed-mods-from-loading)

14* **Vea qué obtienen sus usuarios cuando no cambia nada**: [Sepa qué sucede de forma predeterminada](#know-what-happens-by-default)

15* **Deje los mods activados con otras limitaciones**: [Elija cuánto permitir](#choose-how-much-to-allow)

16 

17<Note>

18 Estos casos se tratan en otras páginas:

19 

20 * **No ha implementado la configuración administrada antes**: comience con [Implementar configuración administrada](/docs/es/managed-settings)

21 * **Desea controlar qué plugins pueden instalar los usuarios**: consulte [Administrar plugins para su organización](/docs/es/plugins/org)

22</Note>

23 

24<h2 id="stop-user-installed-mods-from-loading">

25 Detenga la carga de mods instalados por usuarios

26</h2>

27 

28Para evitar que se cargue cada mod que traen sus usuarios, establezca la opción `allowManagedModsOnly` en el [guard integrado](#know-what-happens-by-default), un mod de política que Claude Code carga antes de cada mod que instala un usuario. La opción va en la configuración administrada bajo `pluginConfigs`, con clave `cc-plugin-sec-default@builtin`:

29 

30```json managed-settings.json theme={null}

31{

32 "pluginConfigs": {

33 "cc-plugin-sec-default@builtin": {

34 "options": {

35 "allowManagedModsOnly": true

36 }

37 }

38 }

39}

40```

41 

42Con la opción establecida en la configuración administrada:

43 

44* **Ningún mod que traiga un usuario se carga**: eso cubre un mod en un plugin que el usuario instaló, un mod cargado con `--plugin-dir`, y un mod [que Claude escribió durante una sesión](/docs/es/plugins/mods/create#ask-claude-for-a-mod)

45* **Los mods de su organización aún se cargan**: un mod que [cuenta como de su organización](#install-your-organizations-mods) no se verifica. Todos los demás mods cuentan como de un usuario y no se cargan. Eso incluye un mod en un plugin que habilita desde un marketplace remoto de GitHub u otro, y uno que su organización activa para sus miembros en claude.ai. Si ninguno cuenta como suyo, no se carga ningún mod instalado.

46* **Los usuarios no pueden deshacerlo**: el guard lee la opción solo de la configuración administrada, por lo que la misma entrada en un archivo de configuración de usuario, proyecto o local, o en un archivo pasado con `--settings`, no cambia nada

47* **Un archivo o política MDM cubre cada proveedor**: cuando entrega la opción como archivo o a través de MDM, funciona de la misma manera en Amazon Bedrock, Agent Platform de Google Cloud y Microsoft Foundry. Para la entrega desde la consola de administrador de claude.ai, consulte [Disponibilidad de plataforma](/docs/es/server-managed-settings#platform-availability)

48* **Las personalizaciones de otros usuarios siguen funcionando**: sus [hooks en archivos de configuración](/docs/es/hooks), líneas de estado y `/goal` no se ven afectados

49* **Los mods integrados siguen ejecutándose**: los mods integrados en Claude Code, como el soporte de `AGENTS.md`, cada uno tiene [su propio interruptor](/docs/es/plugins/mods/overview#mods-built-into-claude-code)

50 

51Para confirmar la opción en la máquina de un usuario, inicie Claude Code allí con `--plugin-dir` y la ruta de un directorio que contenga un mod, como `claude --plugin-dir ./first-mod`. Los hooks del mod no se ejecutan, y la transcripción y el registro de depuración tienen el [mensaje del guard](/docs/es/plugins/mods/troubleshoot#messages-from-the-built-in-guard), que nombra el mod y `allowManagedModsOnly`. Si el mod se carga, consulte [Verifique que una política esté en vigor](/docs/es/managed-settings#check-that-a-policy-is-in-force) y las [reglas que deciden si una opción tiene efecto](#set-options-on-the-built-in-guard).

52 

53Si estableció `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` en `0` durante el acceso temprano, reemplácelo con esta opción. Claude Code v2.1.287 y posteriores ignora la variable en cualquier valor, por lo que un `0` allí deja los mods activados.

54 

55<h2 id="know-what-happens-by-default">

56 Sepa qué sucede de forma predeterminada

57</h2>

58 

59Sin configuración de mods propia, esto es lo que obtienen sus usuarios:

60 

61* **Los mods están activados.** Un usuario puede instalar un plugin que contenga un mod desde cualquier marketplace que su configuración de plugins permita, o cargar uno desde un directorio con `--plugin-dir`.

62* **Un guard integrado se ejecuta primero.** Claude Code carga un mod integrado llamado `sec-default@builtin` antes de cada mod que instala un usuario. Los usuarios no pueden desactivarlo. `/plugin` y el registro de depuración lo enumeran como `cc-plugin-sec-default`. El guard se carga cuando cualquiera de estos es verdadero:

63 

64 * La máquina tiene configuración administrada

65 * El usuario ha iniciado sesión en Claude Code con un plan de Team o Enterprise

66 

67 Un usuario que se autentica con una clave API, o a través de Amazon Bedrock, Agent Platform de Google Cloud o Microsoft Foundry, obtiene el guard solo en una máquina que tiene configuración administrada.

68* **El guard protege lo que usted administra.** El mod de un usuario no puede cambiar lo que sus hooks administrados reciben o deciden, el prompt del sistema, su `CLAUDE.md` administrado y otras instrucciones administradas, lo que cualquier mod lee como configuración, o las herramientas y descripciones de sus servidores MCP administrados.

69* **Todo lo demás está permitido.** El guard no agrega otras restricciones. El mod de un usuario aún puede leer y escribir archivos, iniciar procesos, hacer solicitudes de red, reescribir llamadas de herramientas y prompts, negar una llamada de herramienta, aprobar una que de otro modo solicitaría, y dibujar en la interfaz, todo con los permisos de ese usuario.

70* **Las reglas de negación y sus hooks administrados tienen prioridad.** Donde se carga el guard, el mod de un usuario no puede aprobar una llamada que una regla `deny` rechaza, cualquiera que sea el archivo de configuración que contenga la regla. Un bloqueo de un hook `PreToolUse` en la configuración administrada también es final. Ambos se aplican a las llamadas de herramientas de Claude. Ninguno se aplica a las llamadas propias de [`$.fs` y `$.process` de un mod](/docs/es/plugins/mods/api#reach-files-processes-and-the-network): con `Read(.env)` denegado, un mod aún puede leer ese archivo con `$.fs.read` o iniciar un programa que lo haga. Para limitar esas llamadas, evite que el mod se cargue o enganche la llamada en un [mod de política](#enforce-a-policy-with-a-mod-of-your-own).

71* **Otras comprobaciones de permisos pueden ser anuladas.** El mod de un usuario que aprueba llamadas de herramientas puede aprobar una llamada que una regla `ask` solicitaría, o que un hook `PreToolUse` fuera de la configuración administrada bloqueó. En modo automático, una llamada que el mod aprueba se ejecuta sin una comprobación de clasificador.

72 

73El código fuente del guard es público en el [directorio `mods/sec-default` del repositorio de Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).

74 

75<h3 id="know-which-controls-still-apply">

76 Sepa qué controles aún se aplican

77</h3>

78 

79Los mods no reemplazan los controles que ya tiene:

80 

81* **Los hooks de configuración siguen funcionando.** Los hooks de comando, HTTP, prompt y agente en archivos de configuración y en `hooks/hooks.json` de plugins se ejecutan como antes, junto con mods. Nada sobre ellos está deprecado.

82* **Las reglas de negación tienen prioridad donde se carga el guard.** El mod de un usuario no puede aprobar una llamada que una regla `deny` rechaza, a menos que establezca [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard).

83* **Los hooks administrados se ejecutan primero.** Un hook `PreToolUse` en la configuración administrada se ejecuta antes de que cualquier mod vea la llamada de herramienta, y su bloqueo es final. Si un mod luego reescribe la llamada, sus hooks administrados se ejecutan nuevamente en la llamada reescrita, por lo que un bloqueo aún se aplica. Los hooks `PreToolUse` de otros archivos de configuración y de plugins se ejecutan después del último mod, por lo que un mod que devuelve su propio resultado en lugar de ejecutar la herramienta evita que se ejecuten. Consulte [El orden en que se ejecutan los mods](/docs/es/plugins/mods/events#the-order-mods-run-in).

84* **La política de red cubre `$.http.fetch`.** Si su organización desactiva la obtención web, o el tráfico de red no esencial se desactiva para la sesión, Claude Code rechaza una solicitud de red que un mod hace con `$.http.fetch`. La política no cubre un programa que el mod inicia con `$.process.run`. Ese programa alcanza la red con el acceso propio del usuario.

85* **Los controles de plugins cubren mods.** Un mod es un plugin, por lo que la [configuración que restringe lo que los usuarios pueden instalar](/docs/es/plugins/org#restrict-what-users-can-install), como `strictKnownMarketplaces`, decide si puede instalarse en absoluto.

86* **Los mods no pueden cambiar el prompt de permiso.** Un mod puede cambiar el estilo de gran parte de la interfaz de Claude Code, pero no el prompt de permiso, por lo que no puede cambiar lo que muestra un prompt. Un mod aún puede aprobar o negar una llamada de herramienta antes de que aparezca el prompt, como describe [Sepa qué sucede de forma predeterminada](#know-what-happens-by-default).

87* **Los prompts de confianza vienen primero.** En una sesión interactiva en un directorio que el usuario aún no ha confiado, ningún mod se carga hasta que responda el prompt de confianza.

88* **`--safe-mode` desactiva los mods instalados, incluidos los suyos.** Inicie una sesión con `claude --safe-mode` para verificar si un mod causó un problema.

89 

90Ninguno de estos controles sandboxea un mod. Un mod que permite se ejecuta como el usuario, con el acceso del usuario a archivos, procesos y la red.

91 

92<h2 id="decide-whether-to-leave-mods-on">

93 Decida si dejar los mods activados

94</h2>

95 

96Un mod puede hacer más que las otras partes de un plugin porque se ejecuta dentro de Claude Code. Ve cada prompt y llamada de herramienta, puede cambiarlos, y puede permitir o negar una llamada de herramienta antes de que aparezca un prompt de permiso.

97 

98Lo que un usuario puede cargar como mod depende de los controles de plugins que ya tiene:

99 

100| Sus controles de plugins hoy | Lo que un usuario puede cargar como mod |

101| :- | :- |

102| Ninguno | Un mod de cualquier marketplace, de cualquier directorio con `--plugin-dir`, o que Claude escriba durante una sesión |

103| Una lista de permitidos de marketplace | Un mod de los marketplaces que permite, o de cualquier directorio con `--plugin-dir`. Un mod que Claude escribe durante una sesión se carga solo cuando la lista de permitidos [incluye `skills-dir`](/docs/es/plugins/org#keep-skills-directory-plugins-loading). |

104| Una lista de permitidos de marketplace y `disableSideloadFlags` | Un mod de los marketplaces que permite |

105 

106[Administrar plugins para su organización](/docs/es/plugins/org) enumera cada forma en que se carga un plugin y la configuración que controla cada una.

107 

108Para verificar los mods en un marketplace antes de que sus usuarios los instalen, consulte [Revise qué puede hacer un mod](#review-what-a-mod-can-do). Para mantener los mods de los usuarios fuera hasta que lo haya hecho, consulte [Detenga la carga de mods instalados por usuarios](#stop-user-installed-mods-from-loading).

109 

110<h3 id="review-what-a-mod-can-do">

111 Revise qué puede hacer un mod

112</h3>

113 

114Puede ver qué puede hacer un mod sin ejecutarlo. En su shell, ejecute `claude plugin validate` en el directorio del plugin:

115 

116```bash theme={null}

117claude plugin validate ./some-mod

118```

119 

120Dos líneas en la salida describen el código del mod:

121 

122```text theme={null}

123 ❯ ./register.js hooks: session.start, tool.call, ui.render{component=Pane}

124 ❯ ./register.js calls: $.fs.read, $.http.fetch, $.store.set, $.ui.open

125```

126 

127La línea `hooks:` enumera los eventos que recibe el mod. La línea `calls:` enumera los métodos de la API de mods que llama su código. La [API de mods](/docs/es/plugins/mods/api), escrita como `$` en el código de un mod, es cómo un mod alcanza archivos, procesos y la red. Claude Code se niega a cargar un mod que usa la API de mods de una manera que este comando no puede leer.

128 

129Mire la línea `calls:` para estos:

130 

131| Llamada | Lo que significa |

132| :- | :- |

133| `$.fs.read`, `$.fs.write` | Lee o escribe archivos en cualquier lugar donde el usuario pueda |

134| `$.process.run`, `$.process.spawn` | Inicia programas como el usuario |

135| `$.http.fetch` | Realiza solicitudes de red |

136| `$.env.get`, `$.settings.read` | Lee variables de entorno y configuración, que pueden contener claves API. Una línea `env reads:` en la salida nombra cada variable. |

137| `$.env.set` | Establece una variable de entorno para Claude Code y para cada comando y servidor MCP que inicia después, lo que puede cambiar lo que esos programas ejecutan. Una línea `env writes:` nombra cada variable. |

138| `$.mcp.call` | Llama a una herramienta en un servidor MCP conectado, bajo las reglas de permiso de la sesión |

139| `$.model.complete` | Usa el plan o clave API del usuario para llamadas de modelo |

140| `$.prompt.submit` | Envía un prompt, y puede enviarlo como las propias palabras del usuario |

141| `$.session.send` | Envía un mensaje que otro Claude de sesión o subagente lee |

142 

143En la línea `hooks:`, [`tool.call`](/docs/es/plugins/mods/reference#tools) y [`prompt.submit`](/docs/es/plugins/mods/reference#prompts-and-what-claude-reads) significan que el mod ve cada llamada de herramienta y cada prompt, y puede cambiarlos. [`session.append`](/docs/es/plugins/mods/reference#session) significa que el mod puede reescribir cada fila de la conversación antes de que se almacene. [`ui.render{component=AskUserQuestion}`](/docs/es/plugins/mods/interface#change-what-claude-code-already-draws) significa que el mod puede redibujar el diálogo que Claude usa para hacer una pregunta al usuario. `tool.check` significa que el mod puede aprobar o negar una llamada de herramienta antes de que aparezca un prompt de permiso. [Sepa qué sucede de forma predeterminada](#know-what-happens-by-default) enumera cuál de sus reglas y hooks tiene prioridad sobre su respuesta.

144 

145<h2 id="choose-how-much-to-allow">

146 Elija cuánto permitir

147</h2>

148 

149Las políticas de mods van desde ningún mod instalado en absoluto hasta cualquier mod que un usuario elija, con su propio mod verificando los otros, y cada una es una pocas configuraciones administradas. Encuentre la política que desea en la primera columna y establezca lo que la segunda columna nombra. [Implementar configuración administrada](/docs/es/managed-settings) cubre dónde vive la configuración administrada.

150 

151| Lo que desea | Configuración |

152| :- | :- |

153| Sin mods instalados, con hooks sin tocar | Establezca [`allowManagedModsOnly`](#set-options-on-the-built-in-guard) y no implemente mods propios |

154| Sin mods instalados y sin hooks en absoluto, incluidos sus hooks administrados | Establezca `disableAllHooks` en `true` |

155| Solo los mods de su organización | Establezca la opción [`allowManagedModsOnly`](#stop-user-installed-mods-from-loading) del guard, e [instale sus mods](#install-your-organizations-mods) para que cuenten como suyos |

156| Cualquier mod de marketplaces que apruebe | Mantenga sus [restricciones de marketplace](/docs/es/plugins/org#restrict-what-users-can-install), y establezca `disableSideloadFlags` en `true` |

157| Cualquier mod, con su propio mod verificando los otros | [Instale su mod](#install-your-organizations-mods), y enumérelo con `sec-default@builtin` en `prependPlugins` |

158 

159Lo que hace cada configuración:

160 

161* **`allowManagedModsOnly`**: una opción en el guard integrado. Los mods propios de los usuarios no se cargan, y sus hooks de configuración, líneas de estado y `/goal` siguen funcionando. [Detenga la carga de mods instalados por usuarios](#stop-user-installed-mods-from-loading) enumera lo que cubre.

162* **`allowManagedHooksOnly`**: una configuración más amplia. Solo [los mods de su organización](#install-your-organizations-mods) y los mods integrados en Claude Code se cargan. Un mod que un usuario instaló por sí mismo no. La configuración también bloquea los hooks en los archivos de configuración propios de los usuarios. Lea [Lo que se ejecuta bajo `allowManagedHooksOnly`](/docs/es/settings-reference#what-runs-under-allowmanagedhooksonly) antes de establecerlo.

163* **`disableAllHooks`**: la configuración más amplia. En la configuración administrada, detiene los mods en cada plugin instalado, incluidos los suyos, y desactiva cada hook en archivos de configuración, por lo que un hook `PreToolUse` en su configuración administrada ya no bloquea nada. Las líneas de estado personalizadas y `/goal` también dejan de funcionar. Lea [`disableAllHooks`](/docs/es/settings-reference#disableallhooks) antes de establecerlo.

164* **`disableSideloadFlags`**: rechaza `--plugin-dir` y `--plugin-url` al inicio, por lo que nadie carga un mod desde un directorio, y evita que se carguen los mods que Claude escribe durante una sesión. La configuración también rechaza `--agents` y `--mcp-config`. Lea [`disableSideloadFlags`](/docs/es/settings-reference#disablesideloadflags) antes de establecerlo.

165 

166Los mods integrados en Claude Code, como el soporte de `AGENTS.md`, no se ven afectados por estas configuraciones. Cada uno tiene [su propio interruptor](/docs/es/plugins/mods/overview#mods-built-into-claude-code).

167 

168Un usuario cuyo mod no se cargó encuentra la razón en su registro de depuración. [Mensajes de rechazo](/docs/es/plugins/mods/troubleshoot#refusal-messages) enumera las líneas para `allowManagedHooksOnly` y `disableAllHooks`, y [Mensajes del guard integrado](/docs/es/plugins/mods/troubleshoot#messages-from-the-built-in-guard) tiene la línea para `allowManagedModsOnly`.

169 

170<h3 id="set-options-on-the-built-in-guard">

171 Establezca opciones en el guard integrado

172</h3>

173 

174El guard integrado toma dos opciones. Establézcalas en la configuración administrada bajo `pluginConfigs`, con clave `cc-plugin-sec-default@builtin`, como hace el ejemplo en [Detenga la carga de mods instalados por usuarios](#stop-user-installed-mods-from-loading).

175 

176La tabla da lo que obtienen sus usuarios con cada opción sin establecer y con ella establecida en `true`:

177 

178| Opción | Sin establecer | `true` |

179| :- | :- | :- |

180| `allowManagedModsOnly` | Los mods propios de los usuarios se cargan | Solo [los mods de su organización](#install-your-organizations-mods), y los mods integrados en Claude Code, se cargan. Claude Code rechaza todos los demás mods, incluido uno que un usuario instaló o nombró con `--plugin-dir`. |

181| `allowModsToOverrideDenyRules` | Las reglas de negación tienen prioridad sobre los mods de los usuarios | El mod de un usuario que aprueba llamadas de herramientas puede aprobar una llamada que una regla `deny` rechaza |

182 

183Estas reglas deciden si una opción tiene efecto:

184 

185* **El id tiene una ortografía aquí**: Claude Code lee las opciones solo bajo `cc-plugin-sec-default@builtin`. `prependPlugins` acepta `sec-default@builtin` también, y `pluginConfigs` no.

186* **Solo la configuración administrada cuenta**: la misma entrada en un archivo de configuración de usuario, proyecto o local, o en un archivo pasado con `--settings`, ni establece una opción ni afloja una

187* **El guard tiene que cargarse**: si establece `prependPlugins`, [nombre el guard en la lista](#install-your-organizations-mods). Donde el guard no se carga, ninguna opción se aplica.

188* **El guard falla cerrado**: si el guard no puede leer la configuración administrada, rechaza cada mod de usuario al cargar. Si no puede verificar las reglas de negación para una llamada que un mod de usuario aprobó, rechaza la llamada.

189 

190Los [mensajes del guard integrado](/docs/es/plugins/mods/troubleshoot#messages-from-the-built-in-guard) son lo que ven sus usuarios cuando cualquiera de las opciones se aplica.

191 

192<h2 id="run-your-organization’s-own-mods">

193 Ejecute los mods propios de su organización

194</h2>

195 

196Puede implementar mods propios para cada usuario, elegir dónde se ejecutan en relación con los mods de los usuarios, y usar uno para hacer cumplir una política.

197 

198<h3 id="install-your-organizations-mods">

199 Instale los mods de su organización y establezca el orden

200</h3>

201 

202Los mods de su organización se cargan donde los mods de los usuarios no y pueden ejecutarse antes que ellos, por lo que Claude Code tiene que poder decir que un mod vino de usted. Lo trata como de su organización solo cuando todos estos son verdaderos:

203 

204* `enabledPlugins` administrado establece el plugin del mod en `true`

205* La configuración administrada nombra el [marketplace](/docs/es/plugins/create-marketplace) del plugin como un directorio en la máquina del usuario, por ruta absoluta. Una entrada `extraKnownMarketplaces` hace eso y también registra el marketplace para el usuario.

206* El marketplace enumera el plugin por una ruta relativa, por lo que Claude Code [lo carga en su lugar](/docs/es/plugins/loading#in-place-and-copied-plugins) desde ese directorio

207 

208Para cumplirlos, haga que su administración de dispositivos copie el directorio del marketplace a la misma ruta en cada máquina. Haga que el directorio y cada directorio por encima de él sean escribibles solo por un administrador, como lo es el archivo de configuración administrada. Cualquiera que pueda escribir allí puede reescribir su mod. La configuración administrada que entrega desde la consola de administrador de claude.ai puede llevar las claves, pero no puede poner el directorio en una máquina.

209 

210El directorio contiene el manifiesto del marketplace y el plugin:

211 

212```text theme={null}

213/opt/acme/claude-plugins/

214├── .claude-plugin/

215│ └── marketplace.json

216└── plugins/

217 └── acme-guard/

218 ├── .claude-plugin/

219 │ └── plugin.json

220 └── hooks/

221 ├── hooks.json

222 └── register.js

223```

224 

225El manifiesto enumera el plugin por su ruta relativa a ese directorio:

226 

227```json /opt/acme/claude-plugins/.claude-plugin/marketplace.json theme={null}

228{

229 "name": "acme-tools",

230 "owner": { "name": "Acme" },

231 "plugins": [

232 { "name": "acme-guard", "source": "./plugins/acme-guard", "description": "Acme policy mod" }

233 ]

234}

235```

236 

237Un plugin que Claude Code copia en su caché cuenta como de un usuario, incluso cuando `enabledPlugins` administrado lo habilita. Eso cubre cada plugin de una fuente de GitHub, git, URL o npm. Su mod se ejecuta entre los mods de los usuarios, `prependPlugins` y `appendPlugins` lo omiten, y no se carga bajo `allowManagedModsOnly` o `allowManagedHooksOnly`. El registro de depuración del usuario tiene una línea que comienza con el id del plugin y `is enabled by managed settings, but`.

238 

239Claude Code genera un evento cada vez que está a punto de actuar, como ejecutar una herramienta, y lo pasa a cada mod a su vez. Un mod que cuenta como suyo [se ejecuta antes que los mods de los usuarios](/docs/es/plugins/mods/events#the-order-mods-run-in) incluso cuando no lo enumera en ningún lugar. Para establecer su lugar, enumere su id en una de dos configuraciones. El id es el nombre del plugin, `@`, y el nombre del marketplace, como `acme-guard@acme-tools`.

240 

241* **`prependPlugins`**: su mod ve cada evento antes que cualquier mod de usuario y cada resultado después. Puede cambiar el evento, rechazarlo u omitir los mods de los usuarios.

242* **`appendPlugins`**: su mod se ejecuta después de cada mod de usuario, por lo que solo ve los eventos que esos mods pasan, en la forma en que los pasan

243 

244Este ejemplo declara el marketplace `acme-tools` en `/opt/acme/claude-plugins`, habilita `acme-guard` desde él, y ejecuta ese mod primero, con el guard integrado después:

245 

246```json managed-settings.json theme={null}

247{

248 "extraKnownMarketplaces": {

249 "acme-tools": {

250 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }

251 }

252 },

253 "enabledPlugins": { "acme-guard@acme-tools": true },

254 "prependPlugins": ["acme-guard@acme-tools", "sec-default@builtin"]

255}

256```

257 

258Cada clave hace un trabajo:

259 

260* **`extraKnownMarketplaces`**: nombra el directorio que contiene el marketplace `acme-tools`. `path` es la ruta absoluta del directorio que contiene `.claude-plugin/marketplace.json`.

261* **`enabledPlugins`**: activa `acme-guard` para cada usuario que recibe esta configuración administrada

262* **`prependPlugins`**: pone `acme-guard` primero y el guard integrado segundo, ambos antes de cualquier mod que instale un usuario. Claude Code sigue el orden que enumera.

263 

264Para confirmar que la máquina de un usuario recibió la configuración, consulte [Verifique que una política esté en vigor](/docs/es/managed-settings#check-that-a-policy-is-in-force).

265 

266Para confirmar dónde se ejecuta el mod, inicie una sesión en esa máquina con `claude --debug` y busque en el [registro de depuración](/docs/es/plugins/mods/troubleshoot#read-the-debug-log) el id del mod:

267 

268* **`hooks module acme-guard@acme-tools loaded`, con `tier prepend`**: el mod cuenta como de su organización y se ejecuta primero

269* **La misma línea con `tier user`**: Claude Code lo trata como un mod de usuario. Una segunda línea, `prependPlugins names acme-guard@acme-tools, which is not an enabled managed plugin with a hooks module; skipped`, dice que la lista lo omitió.

270 

271Estas reglas deciden qué ids en las dos listas tienen efecto:

272 

273* **La lista reemplaza el predeterminado**: cuando establece `prependPlugins` en la configuración administrada, nombre `sec-default@builtin` en ella para mantener el guard integrado. El guard está integrado y no necesita una entrada `enabledPlugins`.

274* **Sus propios ids deben contar como suyos**: en la configuración administrada, Claude Code omite un id cuyo plugin no cumple las tres condiciones para un mod de una organización

275* **Los repositorios no pueden establecerlos**: Claude Code lee ambas configuraciones de la configuración administrada y nunca de un archivo de configuración de un repositorio. Un usuario puede establecerlos en `~/.claude/settings.json` para ordenar solo sus propios mods en una máquina sin configuración administrada, y solo cuando no han iniciado sesión con un plan de Team o Enterprise. En cualquier otro lugar, Claude Code ignora ambas claves en la configuración del usuario. Una lista allí ni agrega ni elimina el guard integrado.

276 

277<h3 id="enforce-a-policy-with-a-mod-of-your-own">

278 Haga cumplir una política con un mod propio

279</h3>

280 

281Para mantener cada mod de usuario fuera, no necesita un mod propio. Establezca [`allowManagedModsOnly`](#stop-user-installed-mods-from-loading). Escriba un mod de política cuando desee admitir algunos mods de usuarios y rechazar otros, o para registrar lo que hacen los mods.

282 

283Cada vez que otro mod está a punto de cargarse, su mod recibe la lista que `claude plugin validate` imprime, en un evento llamado [`plugin.register`](/docs/es/plugins/mods/reference#other-mods). Un mod en `prependPlugins` puede leer esa lista y rechazar el mod. También puede [enganchar cualquier llamada de API de mods por nombre](/docs/es/plugins/mods/api#reach-files-processes-and-the-network) para registrar o rechazar esa llamada para cada otro mod. El nombre es el método sin el `$.`, por lo que un gancho en `fs.write` ve cada llamada `$.fs.write`.

284 

285Este mod de política rechaza cualquier mod de usuario cuyo propio código llama a `$.process.run` o `$.process.spawn`. También mantiene un registro de auditoría, escribiendo cada llamada de herramienta y cada archivo que un mod escribe en el registro de depuración. Porque se ejecuta primero, el registro registra lo que se solicitó, antes de que cualquier mod de usuario lo cambie. Guárdelo como `acme-guard/hooks/register.js`:

286 

287```javascript acme-guard/hooks/register.js theme={null}

288// Los métodos que ningún mod de usuario puede llamar, cada uno deletreado namespace.method

289const BLOCKED_CALLS = ['process.run', 'process.spawn']

290 

291export function register(on) {

292 // Se ejecuta cada vez que otro mod está a punto de cargarse

293 on('plugin.register', async ($, e, next) => {

294 // Mantenga las llamadas en el código de ese mod que están en la lista bloqueada

295 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))

296 if (e.tier === 'user' && blocked.length > 0) {

297 // Devolver refuse evita que el mod se cargue, y el texto es la razón

298 return { refuse: 'Acme policy: mods may not call ' + blocked.join(', ') }

299 }

300 // Deje que cada otro mod se cargue

301 return next(e)

302 })

303 

304 // Registre cada llamada de herramienta, luego déjela avanzar sin cambios

305 on('tool.call', async ($, e, next) => {

306 $.ui.log('audit tool.call ' + e.tool, { to: 'debug' })

307 return next(e)

308 })

309 

310 // Registre qué mod escribió un archivo, luego la ruta, entrecomillada porque el mod la eligió

311 on('fs.write', async ($, e, next) => {

312 $.ui.log('audit fs.write by ' + next.origin.plugin + ' ' + JSON.stringify(e.path), { to: 'debug' })

313 return next(e)

314 })

315}

316```

317 

318El archivo registra tres hooks:

319 

320* **`plugin.register`**: decide si otro mod se carga. Rechaza un mod de usuario que llama a un método bloqueado y pasa cada otro mod.

321* **`tool.call`**: escribe una línea como `audit tool.call Bash` en el registro de depuración para cada llamada de herramienta, y no cambia nada

322* **`fs.write`**: escribe una línea como `audit fs.write by reader "/tmp/notes.md"` para cada llamada `$.fs.write` que hace otro mod, y no cambia nada. El nombre del mod viene primero y la ruta está entrecomillada, por lo que una ruta que un mod elige no puede pasar por otro campo de la línea.

323 

324El hook `plugin.register` lee dos campos del evento:

325 

326* **`e.tier`**: dónde se ejecutaría el mod, uno de `prepend`, `user`, `append`, o `builtin`. Cada mod que una persona instala es `user`.

327* **`e.uses.calls`**: los métodos de la API de mods que llama el mod, cada uno deletreado `namespace.method` como `process.run`, sin el `$.` que `claude plugin validate` imprime

328 

329Cuando un usuario instala un mod que llama a `$.process.run`, el mod no se carga, y su registro de depuración tiene una línea que termina con `refused by acme-guard:` y su razón. El rechazo también llega a la transcripción en una [sesión que recarga en caliente un directorio de plugins](/docs/es/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing). Para bloquear una llamada sin rechazar el mod completo, devuelva `{ deny: 'your reason' }` de un gancho en el nombre de esa llamada.

330 

331Para enviar las líneas de auditoría a algún lugar que no sea el registro de depuración, llame a `$.http.fetch` desde los mismos hooks.

332 

333Una sesión puede ejecutarse sin su mod. Si el hilo de trabajo que ejecuta mods instalados [falla tres veces](/docs/es/plugins/mods/troubleshoot#mods-that-run-in-the-hooks-worker-are-off-for-this-session), Claude Code descarga cada mod que no está integrado, incluido el suyo, hasta que el usuario ejecute `/reload-plugins` o inicie una nueva sesión. Y un usuario que inicia Claude Code con `--safe-mode` se ejecuta sin mods instalados, incluidos los suyos.

334 

335[Crear un mod](/docs/es/plugins/mods/create) cubre los archivos que necesita un mod. [Pruebe un mod que juzga otros mods](/docs/es/plugins/mods/test#test-a-mod-that-judges-other-mods) tiene un archivo de prueba para este mod de política.

336 

337<h4 id="refuse-mods-when-your-check-fails">

338 Rechace mods cuando su verificación falla

339</h4>

340 

341Si su hook `plugin.register` lanza o se ejecuta más allá de su límite de tiempo, Claude Code omite el gancho, por lo que la verificación falla abierta y el mod que estaba verificando se carga. Para fallar cerrado y rechazar los mods de los usuarios, mueva la verificación a una función nombrada y agregue un controlador `.catch` que devuelva el rechazo. Esta versión del archivo muestra solo el hook `plugin.register`, así que mantenga los dos hooks de auditoría de la primera versión en `register`:

342 

343```javascript acme-guard/hooks/register.js theme={null}

344const BLOCKED_CALLS = ['process.run', 'process.spawn']

345 

346// La misma verificación que antes, movida a una función propia

347async function checkMod($, e, next) {

348 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))

349 if (e.tier === 'user' && blocked.length > 0) {

350 return { refuse: 'Acme policy: mods may not call ' + blocked.join(', ') }

351 }

352 return next(e)

353}

354 

355export function register(on) {

356 // El controlador se ejecuta solo cuando checkMod lanza o se ejecuta más allá de su límite de tiempo

357 on('plugin.register', checkMod).catch(async ($, e, next) => {

358 // Deje que los mods de su organización y los mods integrados se carguen

359 if (e.tier !== 'user') return next(e)

360 // Rechace el mod de usuario que no pudo ser verificado

361 return { refuse: 'Acme policy check failed, so this mod was not loaded' }

362 })

363}

364```

365 

366Con el controlador en su lugar, un mod que estaba siendo verificado cuando la verificación lanzó o se agotó el tiempo no se carga, y la línea de rechazo lleva la segunda razón, como en `refused by acme-guard: Acme policy check failed, so this mod was not loaded`. El controlador pasa cada mod fuera del tier `user` a `next(e)`, por lo que una verificación fallida no detiene los mods que su organización enumera. [Maneje un gancho que falla](/docs/es/plugins/mods/events#handle-a-hook-that-fails) cubre `.catch` para otros eventos.

367 

368<h2 id="next-steps">

369 Próximos pasos

370</h2>

371 

372* [Seguridad de plugins](/docs/es/plugins/security): qué puede hacer cualquier plugin en la máquina de un usuario, y cómo revisar uno antes de que se instale

373* [Descripción general de mods](/docs/es/plugins/mods/overview): qué es un mod y cómo se compara con hooks, skills y servidores MCP

374* [El orden en que se ejecutan los mods](/docs/es/plugins/mods/events#the-order-mods-run-in): cómo `prependPlugins` y `appendPlugins` se ajustan con los mods de los usuarios

375* [Configuración y variables de entorno](/docs/es/plugins/mods/reference#settings-and-environment-variables): cada configuración nombrada en esta página en una tabla

plugins/mods/api.md +218 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Usar la API de mods

6 

7> Llamar a la API de mods desde un mod de Claude Code para agregar comandos y herramientas, llamar a un modelo, ejecutar trabajo en un temporizador, enviar mensajes a otras sesiones y acceder a archivos y la red.

8 

9La API de mods es el conjunto de métodos que un mod llama para actuar: agregar comandos y herramientas, llamar a un modelo, ejecutar trabajo entre eventos y acceder al sistema de archivos, procesos y la red. Cada hook la recibe como su primer argumento, `$`, con los métodos agrupados en espacios de nombres como `$.ui` y `$.fs`. [Los eventos](/docs/es/plugins/mods/events) deciden cuándo se ejecuta un hook, y la API de mods es lo que el hook llama una vez que lo hace.

10 

11Construya su [primer mod](/docs/es/plugins/mods/create) antes de comenzar aquí. Para cada método, consulte [métodos de la API de mods](/docs/es/plugins/mods/reference#mods-api-methods) o lea [los tipos para su compilación](/docs/es/plugins/mods/create#get-the-types-for-your-build).

12 

13<h2 id="add-a-command-or-a-tool">

14 Agregar un comando o una herramienta

15</h2>

16 

17Un mod puede agregar un comando para que el usuario ejecute y una herramienta para que Claude llame. Registre ambos en un hook [`session.start`](/docs/es/plugins/mods/reference#session). Claude Code espera ese hook antes del primer prompt, por lo que lo que registre está disponible desde el primer turno.

18 

19<h3 id="add-a-command">

20 Agregar un comando

21</h3>

22 

23Un comando es para el usuario. Regístrelo y luego maneje [`command.run`](/docs/es/plugins/mods/reference#commands-and-configuration) para su nombre. Este ejemplo agrega un comando `/standup` que toma un número opcional de días:

24 

25```javascript theme={null}

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

27 // Add /standup to the command list, with the description the user sees there

28 await $.command.register({ name: 'standup', description: 'Summarize what changed today', argumentHint: '[days]' })

29 return next(e)

30})

31 

32// The matcher limits the hook to /standup, so other commands don't reach it

33on('command.run', { command: 'standup' }, async ($, e) => {

34 // e.args is the text typed after the command name, or an empty string

35 return { text: 'Summary for the last ' + (e.args || '1') + ' day(s): ...' }

36})

37```

38 

39Después de que la sesión comienza, `/standup` aparece con su descripción en la lista que ve cuando escribe `/`. El `argumentHint` se muestra en el prompt después de que escribe el comando y un espacio, como en `/standup [days]`. Cuando ejecuta `/standup 3`, el segundo hook devuelve `Summary for the last 3 day(s): ...`, y la transcripción muestra ese texto después del nombre del plugin. El hook nunca llama a `next`, porque el comando no tiene comportamiento que no sea el suyo.

40 

41El `text` que devuelve se imprime en la transcripción y Claude lo lee. Para no imprimir nada, como un comando que solo abre un [pane](/docs/es/plugins/mods/interface#pick-where-to-draw), devuelva `{}`. Para permitir que el comando se ejecute mientras Claude está trabajando, agregue `immediate: true` al registro.

42 

43Elija un nombre que ningún comando integrado use. Escriba `/` en una sesión para verlos. `$.command.register` lanza una excepción para un nombre tomado, con un mensaje como `"/focus" refused: it is the built-in /focus"`. Un hook que lanza una excepción se omite, por lo que el resto de su hook `session.start` tampoco se ejecuta. Registre comandos al final en ese hook, o envuelva la llamada en `try` y `catch`.

44 

45<h3 id="add-a-tool">

46 Agregar una herramienta

47</h3>

48 

49Una herramienta es para Claude. Regístrela con un nombre, una descripción que Claude lee y un JSON Schema para su entrada. Claude la ve bajo un nombre más largo hecho de `mcp__`, el nombre de su plugin, dos guiones bajos y el nombre que registró. Maneja sus llamadas en un hook [`tool.call`](/docs/es/plugins/mods/events#guard-or-change-a-tool-call) filtrado a ese nombre completo. Este ejemplo, de un plugin llamado `my-mod`, registra `ticket`, por lo que el nombre completo es `mcp__my-mod__ticket`. Le da a Claude una herramienta que busca un ticket en un rastreador de problemas:

50 

51```javascript theme={null}

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

53 await $.tool.register({

54 name: 'ticket',

55 // Claude decides when to call the tool from this description

56 description: 'Look up a ticket by its id and return its title and status',

57 // The arguments Claude has to send: one required string named id

58 inputSchema: { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] },

59 })

60 return next(e)

61})

62 

63// The full tool name is mcp__, the plugin's name, and the registered name

64on('tool.call', { tool: 'mcp__my-mod__ticket' }, async ($, e) => {

65 // The tool's arguments are fields of e, so the id is e.id

66 const response = await $.http.fetch('https://tickets.example.com/api/' + encodeURIComponent(e.id))

67 // Return a result either way, so Claude learns when the lookup failed

68 return { result: response.ok ? response.text : 'Lookup failed with status ' + response.status }

69})

70```

71 

72Cuando pregunta sobre un ticket, Claude puede llamar a `mcp__my-mod__ticket` con su id. El segundo hook obtiene el ticket y devuelve el cuerpo de la respuesta, que Claude lee como el resultado de la herramienta. Cuando el servidor responde con un estado de error, Claude lee `Lookup failed with status` y el número.

73 

74<h2 id="call-a-model">

75 Llamar a un modelo

76</h2>

77 

78Un mod puede hacer una pregunta a un modelo por su cuenta, fuera de la conversación, para un trabajo pequeño como ordenar o resumir un fragmento de texto. `$.model.complete` envía un prompt a un modelo con las credenciales de su sesión y se resuelve en la respuesta. No tiene historial de conversación.

79 

80Este hook responde a un comando `/triage`, [registrado como un comando](#add-a-command), pidiendo a un modelo pequeño que etiquete el texto escrito después de él:

81 

82```javascript theme={null}

83on('command.run', { command: 'triage' }, async ($, e) => {

84 const r = await $.model.complete({

85 model: 'haiku',

86 // The system prompt sets the job, and the prompt carries the text to label

87 system: 'Reply with one word: bug, feature, or question.',

88 prompt: e.args,

89 // One word needs few tokens, and the call gives up after 15 seconds

90 maxTokens: 20,

91 timeoutMs: 15000,

92 })

93 // r.text exists only when the model answered, so check r.isAnswered first

94 const label = r.isAnswered ? r.text.trim() : 'unknown'

95 return { text: 'Label: ' + label }

96})

97```

98 

99Cuando ejecuta `/triage the export button does nothing`, el mod envía ese texto al modelo e imprime su respuesta, como `Label: bug`. La conversación de Claude no es parte de la solicitud. Cuando el modelo no responde, la etiqueta es `unknown`.

100 

101Una falla de la API de Claude no rechaza la llamada, por lo que verifique `r.isAnswered` y lea `r.reason` cuando es `false`. La llamada solo rechaza una solicitud que Claude Code no enviará, como un modelo que su organización bloquea. [Los tipos para su compilación](/docs/es/plugins/mods/create#get-the-types-for-your-build) enumeran las otras opciones, como `effort`, y los [límites](/docs/es/plugins/mods/reference#limits) dan el valor predeterminado de `maxTokens`.

102 

103`$.model.fork({ prompt })` hace una pregunta sobre la conversación actual en su lugar, con el mismo modelo y prompt del sistema, por lo que la API de Claude sirve la mayoría de ella desde el caché de prompts.

104 

105Estas llamadas usan el plan o la clave API del usuario.

106 

107<h2 id="run-work-in-the-background">

108 Ejecutar trabajo en segundo plano

109</h2>

110 

111El trabajo que sobrevive a un evento, como verificar algo una vez por minuto, se ejecuta en un temporizador que inicia desde `session.start`. Un hook en sí se ejecuta para un evento y tiene un límite de tiempo de 10 segundos de su propio tiempo de ejecución. El tiempo dedicado a esperar en `next` o en una llamada de la API de mods no cuenta, excepto un `$.clock.sleep`. `$.clock.every` y `$.clock.after` toman el lugar de `setInterval` y `setTimeout`, con el retraso en milisegundos primero: `$.clock.after(5000, fn)` llama a `fn` una vez, cinco segundos a partir de ahora. Cada uno devuelve un temporizador con un método `cancel()`, y `await $.clock.now()` da la hora en milisegundos.

112 

113Este hook busca las comprobaciones de una solicitud de extracción una vez por minuto y muestra el resultado bajo el prompt. `summarize` es una función propia que convierte la salida JSON del comando en pocas palabras:

114 

115```javascript theme={null}

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

117 // Call the function every 60,000 milliseconds, starting one minute from now

118 $.clock.every(60_000, async () => {

119 const status = await $.process.run(['gh', 'pr', 'checks', '--json', 'state'])

120 // Replace the line under the prompt with the latest summary

121 $.ui.status('checks: ' + summarize(status.stdout))

122 })

123 // Return without waiting for the timer, so the session starts right away

124 return next(e)

125})

126```

127 

128La sesión comienza como de costumbre. Un minuto después, aparece una línea bajo el prompt con un `⚠`, el nombre del mod y luego `checks:` y su resumen. Se reemplaza una vez por minuto después de eso. La devolución de llamada del temporizador se ejecuta fuera de cualquier evento, por lo que sigue ejecutándose entre turnos y no inicia uno. Si la devolución de llamada lanza una excepción, el error va al [registro de depuración](/docs/es/plugins/mods/troubleshoot#read-the-debug-log) y el temporizador se ejecuta nuevamente en el siguiente intervalo.

129 

130<h3 id="show-something-without-starting-a-turn">

131 Mostrar algo sin iniciar un turno

132</h3>

133 

134Un trabajo en segundo plano puede mostrar al usuario algo sin iniciar un turno. Cada una de estas llamadas pone texto en un lugar diferente:

135 

136| Llamada | Lo que el usuario ve |

137| :- | :- |

138| `$.ui.status(text)` | Una línea bajo el prompt que permanece hasta que la cambie. Comienza con `⚠` y el nombre del mod, como en `⚠ my-mod: checks: 3 passing`. |

139| `$.ui.toast(text)` | Una pequeña caja en la esquina superior derecha, con el nombre del mod encima del texto, que desaparece después de unos segundos |

140| `$.ui.log(text)` | Una línea tenue en la transcripción que Claude no lee. Comienza con `●` y el nombre del mod, como en `● my-mod: build finished`. |

141 

142<h3 id="start-a-turn-from-a-background-job">

143 Iniciar un turno desde un trabajo en segundo plano

144</h3>

145 

146Cuando un trabajo en segundo plano encuentra algo que necesita la atención de Claude, puede iniciar un turno enviando un prompt con `$.prompt.submit({ text })`. Claude lee el texto después de una oración que nombra su mod como el remitente. Para enviarlo como las propias palabras del usuario, sin esa oración, agregue `asUser: true`. La llamada espera hasta que la sesión esté inactiva y luego inicia un nuevo turno. Se resuelve cuando ese turno comienza, por lo que no lo `await` en un controlador que se ejecuta mientras Claude está trabajando.

147 

148<h3 id="stop-background-work">

149 Detener el trabajo en segundo plano

150</h3>

151 

152El trabajo en segundo plano se detiene de dos formas. Los temporizadores se detienen cuando el módulo se recarga. Para trabajo de larga duración dentro de un hook, [`next.signal`](/docs/es/plugins/mods/reference#the-hook-function) es un `AbortSignal` que se cancela cuando se abandona el evento que maneja su hook, por ejemplo cuando el usuario interrumpe, por lo que páselo a cualquier cosa de larga duración.

153 

154<h2 id="send-and-receive-messages-between-sessions">

155 Enviar y recibir mensajes entre sesiones

156</h2>

157 

158Un mod puede enviar un mensaje de texto sin formato a otra de sus sesiones o a uno de los subagentes de esta sesión, y observar los mensajes que llegan y se van. `$.session.send({ to, text })` envía uno, la misma entrega que hace la herramienta SendMessage. `to` es `{ sessionId }` para una sesión, `{ agentId }` para un subagente de `$.agent.list()`, o la dirección de cadena de la que provino un mensaje recibido. La llamada se resuelve una vez que el mensaje se pone en cola, con `{ isDelivered: true }`. Cuando nada fue entregado se resuelve con `{ isDelivered: false, reason }`, y `reason` dice por qué.

159 

160Este hook responde a un comando `/ping`, [registrado como un comando](#add-a-command), pidiendo a la sesión cuyo id escribe después de él un estado:

161 

162```javascript theme={null}

163on('command.run', { command: 'ping' }, async ($, e) => {

164 // e.args is the session id typed after /ping

165 const sent = await $.session.send({ to: { sessionId: e.args }, text: 'Status? One line.' })

166 // The call resolves either way, so check isDelivered to learn what happened

167 if (!sent.isDelivered) $.ui.toast('Not delivered: ' + sent.reason)

168 // An empty result prints nothing in this session's transcript

169 return {}

170})

171```

172 

173Cuando el mensaje se pone en cola, nada aparece en su sesión, y Claude de la otra sesión lee `Status? One line.` Cuando nada fue entregado, una pequeña caja en la esquina superior derecha da la razón y desaparece después de unos segundos.

174 

175Dos eventos permiten que un mod observe los mensajes. Devuelva `next(e)` de ambos para pasar cada mensaje sin cambios:

176 

177| Evento | Se dispara cuando | Campos útiles |

178| :- | :- | :- |

179| `session.receive` | Un mensaje llega para esta sesión, antes de que Claude lo lea | `e.text`, y `e.origin.kind`, como `peer` o `peer-send-message` para otra sesión o agente, `task-notification`, o `scheduled-trigger`. Devuelva `{ consumed: reason }` para evitar que llegue a Claude. |

180| `session.send` | Un mensaje está a punto de salir, desde la herramienta SendMessage o un mod | `e.to`, `e.text`, y `e.origin.kind`, que es `model` o `plugin` |

181 

182Una sesión configurada para [rechazar mensajes entrantes](/docs/es/cross-session-messaging#control-inbound-messages) rechaza un mensaje antes de que se dispare `session.receive`, por lo que un hook nunca lo ve. Un mensaje que se retiene para su aprobación llega al hook primero, por lo que un mod puede leer un mensaje que aún no ha aprobado. El `next(e)` del hook rechaza cuando el mensaje no se entrega.

183 

184El nombre del remitente en un mensaje recibido es lo que escribió el remitente, por lo que no base una decisión en él.

185 

186<h2 id="reach-files-processes-and-the-network">

187 Acceder a archivos, procesos y la red

188</h2>

189 

190Un mod accede al sistema de archivos, procesos y la red a través de la API de mods, con los mismos permisos que el usuario que ejecuta Claude Code. El módulo de hooks en sí no tiene APIs de Node.js, sin globales de temporizador como `setTimeout`, y sin acceso a la red o archivos propios. Las APIs estándar de JavaScript y web como `URL`, `TextEncoder`, `AbortController` y `crypto.subtle` están disponibles. Cada espacio de nombres a continuación cubre un tipo de acceso:

191 

192| Espacio de nombres | Lo que hace |

193| :- | :- |

194| `$.fs` | `read(path)`, `write(path, text)`, `exists(path)`, `stat(path)` y `list(path)` funcionan en archivos y directorios |

195| `$.process` | `run(['git', 'status'])` inicia un comando y se resuelve cuando sale. `spawn` transmite la salida de un comando de larga duración. |

196| `$.http` | `fetch(url, init)` sobre `http` o `https`. Se resuelve a `{ status, ok, headers, text }` una vez que se lee el cuerpo. |

197| `$.store` | Un almacén de clave-valor JSON propio de su plugin, mantenido entre sesiones |

198| `$.env` | `get` y `set` variables de entorno. Escriba el nombre como una cadena literal. |

199| `$.settings` | `read` lo que los archivos de configuración y la política administrada contienen |

200| `$.session` | `messages()` devuelve la transcripción como una lista de `{ role, text, toolUses }`. También el directorio de trabajo, modelo y más. [`usage()`](/docs/es/plugins/mods/reference#mods-api-methods) devuelve el uso de la ventana de contexto y los límites del plan. |

201| `$.mcp` | `call` una herramienta en un servidor MCP conectado |

202 

203Los archivos y procesos tienen algunas reglas propias:

204 

205* **Rutas**: una ruta relativa está bajo el directorio de trabajo de la sesión

206* **`$.fs.list`**: devuelve las entradas de un directorio como `{ name, kind, size, isLink }` y no desciende a subdirectorios

207* **`$.process.run`**: toma una lista de argumentos y no usa shell. Se resuelve a `{ exitCode, stdout, stderr }` sea cual sea el código de salida. Rechaza si el programa no puede iniciarse o sigue ejecutándose en el tiempo de espera, que es de 30 segundos por defecto, por lo que envuélvalo en `try` y `catch`.

208 

209Cada una de estas llamadas es en sí misma un evento, nombrado para su espacio de nombres y método sin el `$.`, como `fs.read` para `$.fs.read`. Un mod [anterior en la cadena](/docs/es/plugins/mods/events#the-order-mods-run-in) puede observar, reescribir o rechazar su llamada, que es cómo una organización restringe lo que los mods alcanzan.

210 

211<h2 id="next-steps">

212 Próximos pasos

213</h2>

214 

215* [Reaccionar a eventos](/docs/es/plugins/mods/events): hook de llamadas de herramientas, prompts y turnos

216* [Dibujar en la interfaz](/docs/es/plugins/mods/interface): mostrar lo que su mod recopila en un pane o encima del prompt

217* [Probar un mod](/docs/es/plugins/mods/test): stub cualquiera de estas llamadas en una prueba

218* [Referencia de mods](/docs/es/plugins/mods/reference): cada evento, cada método de la API de mods y los límites

plugins/mods/create.md +395 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Crear un mod

6 

7> Haga que Claude escriba un mod de Claude Code a partir de una descripción, o escriba uno usted mismo que cuente llamadas de herramientas y agregue un comando. Aprenda el ciclo de recarga y validación.

8 

9Un mod es un [plugin](/docs/es/plugins/overview) de Claude Code con un archivo de entrada, llamado el módulo de hooks: un archivo JavaScript o TypeScript cuyas funciones Claude Code llama cuando ocurren eventos. Hay dos formas de hacer uno:

10 

11* **Pida a Claude que lo escriba**: [describa lo que desea](#ask-claude-for-a-mod) en una sesión de Claude Code

12* **Escríbalo usted mismo**: [siga el tutorial](#write-a-mod-yourself) para aprender cómo funciona el código de un mod. No necesita Node.js, un empaquetador o un paso de compilación, porque Claude Code carga archivos `.js` y `.ts` directamente.

13 

14Si aún no ha decidido si un mod es la herramienta adecuada, lea primero la [comparación en la descripción general](/docs/es/plugins/mods/overview#compare-mods-settings-hooks-skills-and-mcp-servers).

15 

16<Note>

17 Los mods requieren Claude Code v2.1.287 o posterior. En su shell, ejecute `claude --version` para verificar. Para ver si los mods pueden cargarse para usted, consulte [Verificar si los mods pueden cargarse](/docs/es/plugins/mods/troubleshoot#check-whether-mods-can-load).

18</Note>

19 

20<h2 id="ask-claude-for-a-mod">

21 Pida a Claude un mod

22</h2>

23 

24Describa el mod que desea en una sesión interactiva de Claude Code, y Claude lo escribe. Claude trabaja a partir de una [skill](/docs/es/skills) integrada llamada `plugin-authoring`, que le dice dónde escribir el mod, qué eventos y métodos tiene su versión, y cómo se carga el mod. Claude puede cargar la skill cuando le pide un mod, o puede cargarla usted mismo ejecutando `/plugin-authoring` en el símbolo del sistema de Claude Code.

25 

26El mod se ejecuta una vez que lo aprueba, excepto en [sesiones donde un mod que Claude escribe no puede cargarse](#sessions-that-skip-the-approval).

27 

28<Steps>

29 <Step title="Describa el mod">

30 Pida el mod con sus propias palabras, por ejemplo `make a mod that shows the current git branch above the prompt`. Claude escribe el mod en un directorio propio en la carpeta de mods de la sesión, que es `~/.claude/dev-mods/` seguido del ID de la sesión. La ruta completa de un mod se ve como `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.

31 

32 <Note>

33 En los [modos de permiso](/docs/es/permission-modes#protected-paths) `default` y `acceptEdits`, Claude Code pregunta antes de que Claude cree cada uno de los archivos del mod, porque `~/.claude` es una ruta protegida. Apruebe cada archivo cuando aparezca.

34 </Note>

35 </Step>

36 

37 <Step title="Apruebe el mod">

38 Cuando Claude guarda el primer archivo, Claude Code pregunta si desea habilitar la recarga en caliente para la sesión. La recarga en caliente ejecuta los mods que Claude escribe en esta sesión y recoge cada cambio posterior.

39 

40 Elija una de estas respuestas:

41 

42 * **Habilitar para esta sesión**: los mods en la carpeta de mods de la sesión se cargan cuando termina el turno, y se recargan al final de cada turno que los cambia. Su respuesta dura para la sesión, incluso después de reanudarla.

43 * **Ahora no**: nada se carga por ahora. Los archivos permanecen donde Claude los escribió, y los mods se cargan la próxima vez que esa sesión comienza. Para evitar que un mod se cargue nunca, elimine su directorio.

44 </Step>

45 

46 <Step title="Verifique que el mod se cargó">

47 Ejecute `/plugin` en el símbolo del sistema de Claude Code y presione Tab hasta que se seleccione la pestaña **Installed**. Enumera el mod, y puede desactivarlo allí.

48 </Step>

49 

50 <Step title="Pruebe el mod">

51 Use lo que pidió. Para el ejemplo de símbolo del sistema, el nombre de la rama actual aparece encima del cuadro de símbolo del sistema. Si el mod no hace lo que deseaba, dígale a Claude qué cambiar. El mod se recarga al final de cada turno que cambia sus archivos, por lo que puede probar el cambio tan pronto como Claude termine.

52 </Step>

53</Steps>

54 

55<h3 id="use-the-mod-in-other-sessions">

56 Use el mod en otras sesiones

57</h3>

58 

59Un mod que Claude escribió se carga solo en la sesión que lo creó, y Claude Code elimina la carpeta de mods de esa sesión una vez que es más antigua que [`cleanupPeriodDays`](/docs/es/settings-reference#cleanupperioddays). Para mantener el mod, copie su directorio fuera de la carpeta de mods a un lugar de su elección, como `~/mods/git-branch`. Luego elija cómo cargarlo:

60 

61* **En una sesión que inicia**: en su shell, ejecute `claude --plugin-dir ~/mods/git-branch`

62* **Para otras personas**: [agréguelo a un marketplace](#share-your-mod) para que puedan instalarlo

63 

64<h3 id="sessions-that-skip-the-approval">

65 Sesiones donde un mod que Claude escribe no puede cargarse

66</h3>

67 

68Un mod que Claude escribe se carga solo después de que lo aprueba, en un espacio de trabajo de confianza donde se permite que los mods se ejecuten. En estas sesiones no se carga:

69 

70* **Nadie está allí para aprobar**: la sesión no puede mostrarle un símbolo del sistema, como en una ejecución `claude -p` o [modo `dontAsk`](/docs/es/permission-modes)

71* **El espacio de trabajo no es de confianza**: no ha aceptado el símbolo del sistema de confianza para el directorio

72* **Los mods están detenidos**: comenzó con `--safe-mode` o `--bare`, estableció `disableAllHooks`, o la [configuración administrada](/docs/es/plugins/mods/admin#choose-how-much-to-allow) de su organización lo bloquea

73 

74<h2 id="write-a-mod-yourself">

75 Escriba un mod usted mismo

76</h2>

77 

78En este tutorial construye un mod llamado `first-mod` que cuenta las llamadas de herramientas que Claude hace, muestra el recuento junto al spinner mientras Claude trabaja, y agrega un comando `/tally` que lo imprime. Luego lee las declaraciones de tipo que Claude Code escribe junto a su mod y ejecuta `claude plugin validate`. Juntos muestran los eventos y métodos que su versión ofrece y qué Claude Code lee de su código.

79 

80Esta grabación muestra el mod terminado. El spinner cuenta llamadas de herramientas, `/tally` imprime el recuento, y una edición del código toma efecto mientras la sesión se ejecuta:

81 

82<Frame>

83 <video autoPlay muted loop playsInline controls className="w-full dark:hidden" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-first-mod-light.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=eb561134afa90375777408453ba51c77" aria-label="En una sesión de Claude Code, se escribe y envía el símbolo del sistema 'list the files here and read the README'. El spinner lee 'Thinking · tool calls: 1' y el recuento sube mientras Claude trabaja. El comando /tally imprime 'first-mod: Claude has made 3 tool calls since this mod loaded'. Una línea dice que first-mod se recargó y enumera sus cuatro hooks. En el siguiente símbolo del sistema, el spinner lee 'Thinking · tools used: 1'." data-path="images/mods-first-mod-light.mp4" />

84 

85 <video autoPlay muted loop playsInline controls className="w-full hidden dark:block" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-first-mod-dark.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=09779dadc7ef66c2b1e2da0c2e31ac72" aria-label="En una sesión de Claude Code, se escribe y envía el símbolo del sistema 'list the files here and read the README'. El spinner lee 'Thinking · tool calls: 1' y el recuento sube mientras Claude trabaja. El comando /tally imprime 'first-mod: Claude has made 3 tool calls since this mod loaded'. Una línea dice que first-mod se recargó y enumera sus cuatro hooks. En el siguiente símbolo del sistema, el spinner lee 'Thinking · tools used: 1'." data-path="images/mods-first-mod-dark.mp4" />

86</Frame>

87 

88Escribe tres archivos:

89 

90```text theme={null}

91first-mod/

92├── .claude-plugin/

93│ └── plugin.json

94└── hooks/

95 ├── hooks.json

96 └── register.js

97```

98 

99* **`plugin.json`**: el [manifiesto](/docs/es/plugins/manifest-reference) del plugin

100* **`hooks.json`**: [apunta a su archivo de código](/docs/es/plugins/mods/reference#files)

101* **`register.js`**: su código, llamado el módulo de hooks

102 

103<Steps>

104 <Step title="Cree el directorio del plugin">

105 Cree los dos directorios que contienen los archivos:

106 

107 <Tabs>

108 <Tab title="Bash o Zsh">

109 ```bash theme={null}

110 mkdir -p first-mod/.claude-plugin first-mod/hooks

111 ```

112 </Tab>

113 

114 <Tab title="PowerShell">

115 ```powershell theme={null}

116 New-Item -ItemType Directory -Force first-mod\.claude-plugin, first-mod\hooks

117 ```

118 </Tab>

119 </Tabs>

120 </Step>

121 

122 <Step title="Escriba el manifiesto">

123 Un mod es un plugin, y un mod necesita un [manifiesto](/docs/es/plugins/manifest-reference). El manifiesto de este mod no tiene campos especiales. Guarde esto como `first-mod/.claude-plugin/plugin.json`:

124 

125 ```json first-mod/.claude-plugin/plugin.json theme={null}

126 {

127 "name": "first-mod",

128 "version": "0.1.0",

129 "description": "Counts Claude's tool calls, shows the count beside the spinner, and adds a /tally command",

130 "author": { "name": "Your Name" }

131 }

132 ```

133 </Step>

134 

135 <Step title="Dígale a Claude Code dónde está su código">

136 Cuando Claude Code carga un plugin, lee el `hooks/hooks.json` del plugin. La clave `modules` en ese archivo da la ruta a su código, y tenerla es lo que hace que el plugin sea un mod. Enumere una ruta, relativa a `hooks.json`. Aquí apunta a `register.js`, que escribe en el siguiente paso.

137 

138 Guarde esto como `first-mod/hooks/hooks.json`:

139 

140 ```json first-mod/hooks/hooks.json theme={null}

141 {

142 "description": "The first-mod hooks module",

143 "modules": ["./register.js"]

144 }

145 ```

146 </Step>

147 

148 <Step title="Escriba el código">

149 Este archivo es el código del mod, llamado el módulo de hooks. Cuando el mod se carga, Claude Code llama a la función `register` que el archivo exporta y le pasa una función llamada [`on`](/docs/es/plugins/mods/reference#the-hook-function). Cada llamada a `on` registra un controlador de eventos, llamado un hook, para el evento que nombra.

150 

151 Guarde esto como `first-mod/hooks/register.js`:

152 

153 ```javascript first-mod/hooks/register.js theme={null}

154 // The count, shared by the hooks below

155 let calls = 0

156 

157 // Claude Code calls this once when the mod loads

158 export function register(on) {

159 // Runs when the session starts, before your first prompt

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

161 // Add the /tally command

162 await $.command.register({

163 name: 'tally',

164 description: 'Show how many tool calls Claude has made',

165 })

166 // Let the session start as usual

167 return next(e)

168 })

169 

170 // Runs each time Claude is about to use a tool

171 on('tool.call', async ($, e, next) => {

172 calls += 1

173 // Ask Claude Code to draw the interface again, so the new count shows

174 $.ui.invalidate('ui.render')

175 // Let the tool run as usual

176 return next(e)

177 })

178 

179 // Runs when you type /tally, and only then, because of the matcher

180 on('command.run', { command: 'tally' }, async () => {

181 // The text to print in the transcript

182 return { text: 'Claude has made ' + calls + ' tool calls since this mod loaded' }

183 })

184 

185 // Runs each time Claude Code draws the spinner

186 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

187 // Keep Claude Code's spinner, with the count added after its word

188 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

189 })

190 }

191 ```

192 

193 El archivo mantiene un recuento en `calls` y registra cuatro hooks:

194 

195 * **[`session.start`](/docs/es/plugins/mods/reference#session)** se ejecuta cuando la sesión comienza, antes de su primer símbolo del sistema, y nuevamente cada vez que el mod se recarga. Agrega el comando `/tally` a Claude Code.

196 * **[`tool.call`](/docs/es/plugins/mods/reference#tools)** se ejecuta cada vez que Claude está a punto de usar una herramienta. Suma uno a `calls` y pide a Claude Code que dibuje la interfaz nuevamente.

197 * **[`command.run`](/docs/es/plugins/mods/reference#commands-and-configuration)** se ejecuta cuando escribe `/tally`. Devuelve el texto a imprimir.

198 * **[`ui.render`](/docs/es/plugins/mods/reference#interface)** se ejecuta cada vez que Claude Code dibuja el spinner. Agrega el recuento después de la palabra del spinner.

199 

200 [Cómo funciona el mod de ejemplo](#how-the-example-mod-works) explica los tres argumentos que cada hook toma y qué devuelve cada uno.

201 </Step>

202 

203 <Step title="Cargue el mod">

204 Inicie Claude Code con la bandera `--plugin-dir`, que carga un directorio de plugin para una sesión sin instalarlo:

205 

206 ```bash theme={null}

207 claude --plugin-dir ./first-mod

208 ```

209 </Step>

210 

211 <Step title="Pruebe el mod">

212 Pida a Claude que haga algo que requiera algunas llamadas de herramientas, como `list the files here and read the README`. Mientras Claude trabaja, la palabra del spinner va seguida de un recuento que sube, como en `Thinking · tool calls: 2…`. Cuando Claude termina, escriba `/tally` y presione Enter. La transcripción muestra `first-mod: Claude has made 2 tool calls since this mod loaded`, con su propio recuento. Claude Code pone el nombre del plugin delante del texto del comando.

213 

214 Para verificar el comando sin una sesión interactiva, ejecútelo en modo no interactivo:

215 

216 ```bash theme={null}

217 claude -p "/tally" --plugin-dir ./first-mod

218 ```

219 

220 ```text theme={null}

221 first-mod: Claude has made 0 tool calls since this mod loaded

222 ```

223 

224 Si `/tally` no está en la lista de comandos, el módulo no se cargó. Consulte [Descubra por qué un mod no hace nada](/docs/es/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing).

225 </Step>

226 

227 <Step title="Cambie el código mientras la sesión se ejecuta">

228 Deje la sesión abierta. En `register.js`, cambie `' · tool calls: '` a `' · tools used: '` en el hook `ui.render` y guarde. La línea resaltada es la que cambia:

229 

230 ```javascript first-mod/hooks/register.js {4} theme={null}

231 // Runs each time Claude Code draws the spinner

232 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

233 // Keep Claude Code's spinner, with the count added after its word

234 return next({ ...e, props: { ...e.props, suffix: ' · tools used: ' + calls + '…' } })

235 })

236 ```

237 

238 Una línea en la transcripción dice que `first-mod` se recargó y enumera sus hooks, y el siguiente spinner usa el nuevo texto, como en `Thinking · tools used: 1…`.

239 </Step>

240</Steps>

241 

242<h3 id="how-the-example-mod-works">

243 Cómo funciona el mod de ejemplo

244</h3>

245 

246Cada función que pasa a `on` es un hook, que es un controlador de eventos. Claude Code pasa a cada hook los mismos tres argumentos:

247 

248* **La API de mods**, llamada `$`: cada método que un mod puede llamar para llegar fuera de sí mismo, en [espacios de nombres](/docs/es/plugins/mods/reference#mods-api-methods) como `$.ui` y `$.command`

249* **El evento**, llamado `e`: la [entrada del evento](/docs/es/plugins/mods/reference#events) como datos simples, como el nombre y los argumentos de una llamada de herramienta

250* **El siguiente controlador**, llamado [`next`](/docs/es/plugins/mods/events#how-a-hook-handles-an-event): una función que pasa el evento a los otros mods y luego al comportamiento propio de Claude Code, y devuelve el resultado

251 

252Los hooks en `first-mod` manejan sus eventos de las tres formas en que un hook puede:

253 

254* **Observar**: el hook `session.start` registra el comando, y el hook `tool.call` cuenta la llamada y pide un redibujado. Ambos devuelven `next(e)`, por lo que la sesión comienza y la herramienta se ejecuta como de costumbre.

255* **Responder**: el hook `command.run` devuelve su propio resultado y nunca llama a `next`. El segundo argumento a `on`, `{ command: 'tally' }`, es un filtro, llamado un [matcher](/docs/es/plugins/mods/events#filter-which-events-a-hook-handles), por lo que el hook se ejecuta solo para `/tally`.

256* **Reescribir**: el hook `ui.render` llama a `next` con una copia de `e` cuyo `suffix` contiene el recuento, por lo que Claude Code dibuja su spinner habitual con su texto después de la palabra

257 

258Claude Code observa un directorio cargado con `--plugin-dir` y recarga en caliente el módulo de hooks cuando un archivo en él cambia. Cada recarga ejecuta `register` nuevamente, por lo que `calls` vuelve a `0` y `/tally` comienza a contar nuevamente. Para mantener un valor entre recargas, consulte [Mantener estado](/docs/es/plugins/mods/interface#keep-state).

259 

260<h2 id="keep-working-on-a-mod">

261 Continúe trabajando en un mod

262</h2>

263 

264Una vez que un mod se carga, puede hacer que Claude lo cambie, verificar su código contra las definiciones de tipo para su versión, enumerar los eventos y llamadas que Claude Code encuentra en él, y probarlo.

265 

266<h3 id="change-a-mod-with-claude">

267 Cambie un mod con Claude

268</h3>

269 

270Para cambiar un mod que ya tiene, inicie la sesión con `--plugin-dir` apuntando al directorio del mod, para que lo que Claude escribe se cargue en la misma sesión:

271 

272```bash theme={null}

273claude --plugin-dir ./first-mod

274```

275 

276Luego pida el cambio, por ejemplo `add a /tally-reset command to this mod that sets the tally back to zero`. Claude edita el módulo de hooks, ejecuta `claude plugin validate`, y corrige lo que reporta. Un directorio que carga con `--plugin-dir` es una [ruta protegida](/docs/es/permission-modes#protected-paths), por lo que en los modos `default` y `acceptEdits` se le pide que apruebe cada edición de Claude al mod. La tabla de rutas protegidas da el resultado para los otros modos de permiso.

277 

278Los archivos que Claude guarda durante su turno se recargan cuando termina el turno, por lo que puede probar `/tally-reset` tan pronto como Claude termine.

279 

280<h3 id="get-the-types-for-your-build">

281 Obtenga definiciones de tipo para su versión

282</h3>

283 

284Cada vez que Claude Code carga o recarga un mod desde un directorio que pasa a `--plugin-dir`, o un mod [que Claude escribió para usted](#ask-claude-for-a-mod), escribe archivos de declaración de TypeScript, terminando en `.d.ts`, en `.claude-plugin/types/` dentro del directorio del mod. Describen los eventos exactos, métodos de la API de mods, y elementos en la versión de Claude Code que está ejecutando, por lo que su editor puede autocompletar y verificar el tipo de sus hooks. Para examinar las declaraciones en línea, lea [`mods/types/claude-code.d.ts`](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts) en el repositorio de Claude Code, cuya primera línea nombra la versión que la escribió. El directorio contiene estos archivos:

285 

286| Ruta | Lo que declara |

287| :- | :- |

288| `claude-code/index.d.ts` | Cada evento y su entrada y resultado, cada espacio de nombres y método de la API de mods, y los elementos que cada superficie puede dibujar |

289| `claude-code-tools/index.d.ts` | Las entradas y resultados de las herramientas integradas, para que verificar `e.tool === 'Bash'` reduzca `e` |

290| `claude-code-mcp/index.d.ts` | Las entradas de las herramientas MCP que se conectaron la última vez que guardó un archivo en el mod |

291| `index.d.ts` en un directorio nombrado para un plugin | Lo que ese plugin agrega a la API de mods. Hay un directorio para cada plugin que su `plugin.json` enumera bajo `dependencies`. |

292| `tsconfig.json` | Opciones del compilador que se ajustan a un módulo de hooks |

293 

294Si su mod no tiene su propio `tsconfig.json`, Claude Code agrega uno en la raíz del mod que extiende el generado, por lo que su editor y `tsc -p ./first-mod` verifican el tipo del mod sin más configuración.

295 

296Los eventos y métodos pueden cambiar entre versiones, por lo que confíe en estos archivos sobre cualquier página, incluso esta, cuando no estén de acuerdo.

297 

298`claude-code/index.d.ts` es la referencia más completa para su compilación, con un comentario y un ejemplo para cada método de la API de mods. Para buscar algo, busque en el archivo su nombre, como `'tool.call'`.

299 

300<h3 id="check-what-claude-code-reads-from-your-mod">

301 Verifique qué Claude Code lee de su mod

302</h3>

303 

304Para ver su mod de la forma en que Claude Code lo ve, sin ejecutar su código o iniciar una sesión, use `claude plugin validate`. Verifica el manifiesto y ejecuta el mismo análisis estático en la fuente del módulo de hooks que Claude Code ejecuta cuando carga un mod. En su shell, ejecútelo en el directorio del mod:

305 

306```bash theme={null}

307claude plugin validate ./first-mod

308```

309 

310Para `first-mod`, la salida incluye estas líneas.

311 

312```text theme={null}

313 ❯ ./register.js hooks: session.start, tool.call, command.run{command=tally}, ui.render{component=Spinner}

314 ❯ ./register.js calls: $.command.register, $.ui.invalidate

315 

316✔ Validation passed

317```

318 

319La línea `hooks:` enumera los eventos que su módulo engancha, cada uno con su filtro entre llaves. La línea `calls:` enumera cada método de la API de mods que llama. Un módulo que lee o establece variables de entorno también obtiene líneas `env reads:` y `env writes:`, y uno que usa [`$.state`](/docs/es/plugins/mods/interface#keep-state) obtiene `state reads:` y `state writes:`.

320 

321Si un evento que pretendía enganchar falta en la primera línea, Claude Code tampoco llamará a ese hook. La causa habitual es un nombre de evento mal escrito, que el comando reporta como un error como `"tool.calls" is not an event`.

322 

323Siga estas reglas para que el análisis estático pueda encontrar cada hook y llamada:

324 

325* Deletree cada llamada de la API de mods en su totalidad: `$`, el espacio de nombres, luego el método, como en `$.store.get('notes')`. Puede pasar `$` a una función declarada en el nivel superior del mismo archivo, y para una función suya llamada `loadNotes`, la línea `calls:` entonces lee `$.store.get (via loadNotes)`. Pasar `$` a un método, una función definida dentro del hook, o una función que importa de otro de sus archivos falla la validación. Las funciones `read` y `update` que [`$.state`](/docs/es/plugins/mods/interface#keep-state) usa son las importaciones que pueden tomarlo. No asigne `$` o uno de sus espacios de nombres a una variable, desestructúrelo, o indexarlo con un nombre calculado. `const ui = $.ui` falla con `$.ui is used as a value`.

326* Escriba el nombre del evento en cada llamada a `on` como un literal de cadena, como `'tool.call'`. Una variable, o un bucle sobre una lista de nombres, falla con `the event name passed to on() is not a string literal`.

327* Dentro de `register`, no declare una segunda variable o parámetro llamado `on`. La validación falla con `"on" is declared again (shadowed)`.

328* Importe solo desde archivos dentro del directorio del plugin, por ruta relativa. La única importación desnuda permitida es `claude-code`, para tipos y algunos ayudantes.

329* Use declaraciones `import` en la parte superior del archivo, como en `import { name } from './file.js'`. Un `import()` dinámico falla con `a dynamic import(); a hooks module imports its own files with an import declaration`.

330* Escriba cada archivo como un módulo ES, con `import` y no `require`. La [referencia](/docs/es/plugins/mods/reference#files) enumera las extensiones de archivo que Claude Code carga.

331 

332<h3 id="test-the-mod">

333 Pruebe el mod

334</h3>

335 

336Puede escribir pruebas automatizadas para un mod y ejecutarlas desde su shell con `claude plugin test`, sin sesión, inicio de sesión o red. Una prueba genera los eventos que sus hooks manejan y verifica qué hicieron los hooks.

337 

338Esta prueba genera dos llamadas de herramientas, ejecuta `/tally`, y verifica que la respuesta cuente ambas. Guárdela como `first-mod/tests/first-mod.test.ts`:

339 

340```typescript first-mod/tests/first-mod.test.ts theme={null}

341import { expect, test } from 'claude-code/testing'

342 

343test('/tally reports the tool calls the mod has seen', async ($, on) => {

344 // Answer each tool call in Claude Code's place, so no tool runs

345 on('tool.call', () => ({ result: 'ok' }))

346 

347 // Raise two tool calls, which the mod's tool.call hook counts

348 await $.tool.call({ tool: 'Bash', command: 'ls' })

349 await $.tool.call({ tool: 'Read', file_path: 'README.md' })

350 

351 // Run /tally and check the text its hook returns

352 const answer = await $.command.run({ command: 'tally', args: '' })

353 expect(answer.text).toBe('Claude has made 2 tool calls since this mod loaded')

354})

355```

356 

357En su shell, ejecute las pruebas desde el directorio `first-mod`:

358 

359```bash theme={null}

360claude plugin test

361```

362 

363La salida nombra cada prueba y si pasó, con tiempos que varían de una ejecución a otra:

364 

365```text theme={null}

366tests/first-mod.test.ts:

367(pass) /tally reports the tool calls the mod has seen [22.87ms]

368 

369 1 pass

370 0 fail

371Ran 1 test across 1 file. [0.19s]

372```

373 

374[Pruebe un mod](/docs/es/plugins/mods/test) cubre el stubbing de una llamada de modelo o la tienda, y pruebas de temporizadores y dibujos.

375 

376<h2 id="share-your-mod">

377 Comparta su mod

378</h2>

379 

380Un mod es un plugin, por lo que lo versiona en el manifiesto y las personas lo instalan y actualizan con los comandos `/plugin`. Para dárselo a otras personas, [agréguelo a un marketplace](/docs/es/plugins/publish).

381 

382Antes de hacerlo, verifique el `name` del plugin: `claude plugin validate` falla un nombre que [parece uno de los propios de Anthropic](/docs/es/plugins/manifest-reference#name), como uno que comienza con `claude-`. Los eventos y métodos pueden cambiar entre versiones, por lo que su README es el lugar para decir qué versión de Claude Code probó.

383 

384Continúe desarrollando contra el directorio con `--plugin-dir`, no contra una copia instalada. Claude Code almacena en caché un plugin instalado por versión, por lo que sus ediciones no llegan a la copia instalada hasta que sube la versión e instala nuevamente.

385 

386<h2 id="next-steps">

387 Próximos pasos

388</h2>

389 

390* [Dibuje en la interfaz](/docs/es/plugins/mods/interface): abra un panel, dibuje encima del símbolo del sistema, y agregue botones y campos de texto

391* [Reaccione a eventos](/docs/es/plugins/mods/events): enganche llamadas de herramientas, símboles del sistema, y turnos

392* [Use la API de mods](/docs/es/plugins/mods/api): agregue comandos y herramientas, llame a un modelo, y ejecute trabajo en un temporizador

393* [Pruebe un mod](/docs/es/plugins/mods/test): stub lo que Claude Code respondería, y pruebe temporizadores y dibujos

394* [Solucione problemas de un mod](/docs/es/plugins/mods/troubleshoot): las razones por las que un mod no hace nada, y el registro de depuración

395* [Lea la fuente de mods integrados](/docs/es/plugins/mods/overview#read-the-source-of-built-in-mods): plugins completos, cada uno con su módulo de hooks y pruebas

plugins/mods/events.md +336 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Reaccionar a eventos con un mod

6 

7> Maneja eventos de Claude Code desde un mod: observa, reescribe o responde llamadas de herramientas, indicaciones y turnos, filtra qué eventos maneja un hook y planifica para otros mods.

8 

9Un hook es un manejador de eventos: una función que Claude Code ejecuta cuando ocurre un evento nombrado. Claude Code dispara un evento en cada punto donde está a punto de actuar, como cuando ejecuta una herramienta, envía una indicación, envía una solicitud al modelo, o inicia o termina una sesión. Tu hook se ejecuta antes de que Claude Code actúe, por lo que puede observar el evento, reescribirlo o responderlo en lugar de Claude Code. Registras un hook con [`on(eventName, handler)`](/docs/es/plugins/mods/reference#the-hook-function).

10 

11Construye tu [primer mod](/docs/es/plugins/mods/create) antes de empezar aquí. Para cada evento y sus campos exactos, consulta la [referencia](/docs/es/plugins/mods/reference#events) o lee [los tipos para tu compilación](/docs/es/plugins/mods/create#get-the-types-for-your-build).

12 

13<h2 id="how-a-hook-handles-an-event">

14 Cómo un hook maneja un evento

15</h2>

16 

17Un hook se sitúa entre un evento y lo que Claude Code haría al respecto, por lo que puede observar el evento, reescribirlo o responderlo él mismo. Recibe tres argumentos: la [API de mods](/docs/es/plugins/mods/api) como `$`, el evento como `e`, y el siguiente manejador como `next`. Los manejadores de un evento forman una cadena de middleware. `next(e)` llama al siguiente manejador, que es el hook de otro mod o, al final de la cadena, el comportamiento propio de Claude Code, y se resuelve al resultado. Lo que tu hook hace con `next` decide cuál de los tres hace.

18 

19<h3 id="observe-an-event">

20 Observar un evento

21</h3>

22 

23Para observar un evento sin cambiarlo, haz tu trabajo y devuelve `next(e)`. Este hook registra cada herramienta que Claude está a punto de usar:

24 

25```javascript theme={null}

26on('tool.call', async ($, e, next) => {

27 // Se ejecuta antes de que la herramienta se ejecute

28 $.ui.log('Claude is about to use ' + e.tool)

29 // Pasa el evento sin cambios

30 return next(e)

31})

32```

33 

34Antes de que cada herramienta se ejecute, aparece una línea atenuada como `● my-mod: Claude is about to use Bash` en la transcripción, donde `my-mod` es el nombre de tu plugin. La herramienta se ejecuta como lo haría sin el mod.

35 

36Para actuar después del evento, `await next(e)`, haz tu trabajo y devuelve el resultado. Este hook registra cada herramienta después de que se ha ejecutado:

37 

38```javascript theme={null}

39on('tool.call', async ($, e, next) => {

40 // Deja que la herramienta se ejecute y espera su resultado

41 const result = await next(e)

42 // Se ejecuta después de que la herramienta se ejecuta

43 $.ui.log(e.tool + ' finished')

44 // Devuelve el resultado sin cambios

45 return result

46})

47```

48 

49La línea ahora aparece después de que cada herramienta termina. Claude lee el mismo resultado de cualquier manera, porque el hook devuelve lo que `next(e)` se resolvió.

50 

51<h3 id="rewrite-an-event">

52 Reescribir un evento

53</h3>

54 

55Para cambiar lo que Claude Code actúa, como el texto de una indicación, llama a `next` con una copia modificada del evento. El evento en sí es inmutable: está congelado en cada profundidad, y asignar a un campo lanza una excepción. Este hook recorta cada indicación antes de que se envíe:

56 

57```javascript theme={null}

58on('prompt.submit', async ($, e, next) => {

59 // Pasa una copia del evento con su texto cambiado

60 return next({ ...e, text: e.text.trim() })

61})

62```

63 

64Los manejadores posteriores y Claude Code reciben la indicación recortada y nunca ven la original. También puedes cambiar el resultado: `await next(e)`, luego devuelve una copia del resultado con un campo reemplazado.

65 

66<h3 id="answer-an-event">

67 Responder un evento

68</h3>

69 

70Para manejar un evento tú mismo, devuelve un resultado sin llamar a `next`. Eso cortocircuita la cadena, por lo que los mods posteriores y el comportamiento propio de Claude Code no se ejecutan. Este hook rechaza cada comando Bash:

71 

72```javascript theme={null}

73on('tool.call', { tool: 'Bash' }, async () => {

74 // Sin llamada a next, por lo que el comando nunca se ejecuta

75 return { deny: 'Bash is turned off in this project. Use the file tools.' }

76})

77```

78 

79Cuando Claude intenta un comando Bash, el comando no se ejecuta y Claude lee el texto `deny` como el resultado de la herramienta. Cada evento tiene su propia forma de resultado, que la [referencia de eventos](/docs/es/plugins/mods/reference#events) enumera.

80 

81<h3 id="filter-which-events-a-hook-handles">

82 Filtrar qué eventos maneja un hook

83</h3>

84 

85Para ejecutar un hook solo para algunos eventos, pasa un filtro como segundo argumento a `on`. Claude Code llama al filtro un matcher. Es un objeto cuyos campos se comparan con los del evento, y el hook se ejecuta solo cuando cada campo coincide. Un campo puede ser un valor, una matriz de valores permitidos o una expresión regular.

86 

87Cada línea en este ejemplo registra la misma función, `hook`, para un conjunto más estrecho de llamadas de herramientas:

88 

89```javascript theme={null}

90// Una cadena coincide con un valor: solo llamadas Bash

91on('tool.call', { tool: 'Bash' }, hook)

92// Una matriz coincide con cualquier valor en ella: llamadas Edit y Write

93on('tool.call', { tool: ['Edit', 'Write'] }, hook)

94// Una expresión regular coincide por patrón: cada herramienta de un servidor MCP

95on('tool.call', { tool: /^mcp__github__/ }, hook)

96```

97 

98`hook` se ejecuta una vez para una llamada Bash, Edit o Write, y una vez para una llamada a una herramienta cuyo nombre comienza con `mcp__github__`. Una llamada a cualquier otra herramienta, como Read, no coincide con ninguna de las tres, por lo que `hook` no se ejecuta para ella.

99 

100El nombre del evento puede ser un comodín. `'classic.*'` coincide con cada [evento de hook de configuración](#hook-the-settings-hook-events). `'*'` coincide con cada evento excepto los [eventos de telemetría](/docs/es/plugins/mods/reference#telemetry), que enganchas por nombre o como `'telemetry.*'`.

101 

102Registra cada evento una vez por matcher. Si llamas a `on` dos veces para `session.start` sin un matcher, el módulo falla al cargar con `on("session.start") is registered twice without a matcher`. Pon todo lo que tu mod hace al inicio de la sesión en un hook.

103 

104<h2 id="hook-what-claude-is-doing">

105 Enganchar lo que Claude está haciendo

106</h2>

107 

108Engancha estos eventos para ver o cambiar una llamada de herramienta, una indicación o un turno mientras sucede. Para cada evento y lo que un hook puede devolver, consulta la [referencia de eventos](/docs/es/plugins/mods/reference#events).

109 

110<h3 id="guard-or-change-a-tool-call">

111 Guardar o cambiar una llamada de herramienta

112</h3>

113 

114Un hook `tool.call` ve cada herramienta que Claude está a punto de usar, por lo que puede rechazar la llamada, cambiar sus argumentos o dejarla pasar. `tool.call` se dispara cuando Claude Code está a punto de ejecutar una herramienta, incluidas las llamadas que hacen los subagentes y las llamadas a herramientas MCP. `e.tool` es el nombre de la herramienta y los argumentos de la herramienta son campos de `e`, como `e.command` para Bash. Cuando llamas a `next(e)`, Claude Code ejecuta la verificación de permisos y luego la herramienta.

115 

116Este hook rechaza un comando Bash que hace un push forzado y le dice a Claude por qué:

117 

118```javascript theme={null}

119// El matcher limita el hook a llamadas Bash, por lo que e.command es el comando del shell

120on('tool.call', { tool: 'Bash' }, async ($, e, next) => {

121 if (/git push .*--force/.test(e.command)) {

122 // Devolver sin llamar a next responde el evento, por lo que el comando nunca se ejecuta

123 return { deny: 'Force pushes are not allowed in this repository. Push to a new branch instead.' }

124 }

125 // Cada otro comando va a la verificación de permisos y luego a Bash

126 return next(e)

127})

128```

129 

130Cuando Claude intenta `git push --force`, el comando no se ejecuta y no aparece ningún aviso de permiso, porque el hook nunca llama a `next`. Claude lee el texto `deny` como el resultado de la herramienta, así que escríbelo como una instrucción en la que Claude pueda actuar. Cada otro comando Bash se ejecuta como lo haría sin el mod.

131 

132Para actuar después de que una herramienta se ha ejecutado, `await next(e)`, haz tu trabajo y devuelve lo que `next` te dio. Este hook registra cada archivo `.mdx` que Claude cambia, con [`$.ui.log`](/docs/es/plugins/mods/api#show-something-without-starting-a-turn), que añade una línea atenuada a la transcripción que Claude no lee:

133 

134```javascript theme={null}

135on('tool.call', { tool: ['Edit', 'Write'] }, async ($, e, next) => {

136 // Espera la verificación de permisos y la herramienta, y mantén lo que produjeron

137 const result = await next(e)

138 // Una llamada rechazada vuelve como { deny }, y una fallida tiene isError establecido

139 const changed = !result.deny && !result.isError

140 if (changed && e.file_path.endsWith('.mdx')) $.ui.log('Claude changed ' + e.file_path)

141 // Devuelve el resultado tal como vino, para que Claude lea lo que la herramienta devolvió

142 return result

143})

144```

145 

146Después de que Claude edita o escribe un archivo `.mdx`, una línea atenuada en la transcripción nombra el archivo. Nada se registra para otro tipo de archivo, o para una llamada que fue rechazada o falló. La vista de Claude de la llamada no cambia, porque el hook devuelve el resultado que recibió.

147 

148Para cambiar una llamada, pasa argumentos cambiados a `next`. Para reintentar una llamada, llama a `next(e)` de nuevo: un hook que ve `isError` en el primer resultado puede ejecutar la herramienta una segunda vez y devolver ese resultado. Para responder una llamada tú mismo, devuelve un objeto con un campo `result`, como `{ result: 'Skipped by my-mod' }`, sin llamar a `next`. Cuando haces eso, no aparece ningún aviso de permiso y la herramienta no se ejecuta, por lo que el resultado que devuelves es todo lo que Claude aprende sobre lo que sucedió.

149 

150Los hooks en la [configuración administrada](/docs/es/server-managed-settings) de tu organización se ejecutan antes que el hook `tool.call` de cualquier mod, y un bloqueo de uno de ellos es final.

151 

152<h4 id="hold-a-tool-call-until-the-user-decides">

153 Mantener una llamada de herramienta hasta que el usuario decida

154</h4>

155 

156Un hook puede pausar una llamada de herramienta y preguntarle al usuario qué hacer antes de que continúe. Un hook `tool.call` puede `await` antes de llamar a `next` o devolver, y la llamada de herramienta permanece pendiente hasta entonces. Para hacer la pregunta al usuario, llama a `$.ui.ask`. Muestra tu pregunta encima de una lista numerada de tus opciones, en el diálogo que Claude usa para preguntarte algo, y se resuelve a la etiqueta que el usuario elige. Después de tus opciones, el diálogo añade una fila para escribir una respuesta diferente y una fila **Chat about this**.

157 

158El patrón `RISKY` en este ejemplo coincide con `rm -r`, `rm -rf`, `git reset --hard` y `git push` con `--force`, y se pierde otras ortografías como `git push -f`. Este módulo pregunta antes de ejecutar un comando Bash que coincida con el patrón:

159 

160```javascript theme={null}

161const RISKY = /\brm\s+-rf?\b|\bgit\s+reset\s+--hard\b|\bgit\s+push\b.*--force/

162 

163export function register(on) {

164 on('tool.call', { tool: 'Bash' }, async ($, e, next) => {

165 // Deja pasar cada otro comando sin una pregunta

166 if (!RISKY.test(e.command)) return next(e)

167 // Comienza desde la respuesta segura, por lo que una pregunta que nadie responde rechaza el comando

168 let answer = 'Refuse'

169 try {

170 // La llamada de herramienta espera aquí hasta que el usuario elige una de las dos etiquetas

171 answer = await $.ui.ask('Run this command? ' + e.command, ['Run it', 'Refuse'])

172 } catch {

173 // El usuario descartó la pregunta, o esto es una ejecución de claude -p sin nadie a quien preguntar

174 }

175 if (answer !== 'Run it') {

176 // Responde sin llamar a next, por lo que el comando no se ejecuta

177 return { deny: 'The user declined this command. Ask before trying a different approach.' }

178 }

179 return next(e)

180 })

181}

182```

183 

184Cuando Claude intenta un comando como `rm -rf build`, la pregunta aparece con el comando en ella, y el comando espera la respuesta:

185 

186* **El usuario elige Run it**: el hook llama a `next(e)`, y la verificación de permisos habitual aún se ejecuta después

187* **El usuario elige Refuse**: el comando no se ejecuta y Claude lee el texto `deny`

188* **El usuario escribe una respuesta**: `$.ui.ask` se resuelve al texto escrito. El hook lo compara con `Run it`, por lo que cualquier otro texto rechaza el comando.

189* **Nadie responde**: `$.ui.ask` rechaza cuando el usuario descarta la pregunta o elige **Chat about this**, y en una ejecución de `claude -p`, por lo que el bloque `catch` deja la respuesta en `Refuse`

190 

191Mantén la espera dentro de una llamada de API de mods como `$.ui.ask`, porque ese tiempo no cuenta contra el [límite de tiempo de 10 segundos](/docs/es/plugins/mods/reference#limits) del hook. El tiempo dedicado a esperar una promesa propia sí cuenta. Claude Code omite un hook que agota el tiempo, por lo que el comando retenido se ejecutaría.

192 

193<h3 id="rewrite-or-add-to-a-prompt">

194 Reescribir o añadir a una indicación

195</h3>

196 

197Un hook `prompt.submit` ve cada indicación antes de que comience el turno, por lo que puede reescribir el texto o añadirle. `e.text` es lo que se escribió.

198 

199| Para hacer esto | Devuelve esto |

200| :- | :- |

201| Reescribe la indicación. El mensaje en la transcripción muestra el nuevo texto. | `next({ ...e, text: newText })` |

202| Añade texto que solo Claude lee, después de la indicación | `next({ ...e, context: [...(e.context ?? []), extraText] })` |

203| Detén el envío de la indicación | `{ drop: 'the reason' }` |

204 

205Este hook añade el nombre de la rama actual para Claude siempre que una indicación menciona una solicitud de extracción:

206 

207```javascript theme={null}

208on('prompt.submit', async ($, e, next) => {

209 // Pasa una indicación que no menciona una solicitud de extracción tal como está

210 if (!/\bPR\b|pull request/i.test(e.text)) return next(e)

211 const git = await $.process.run(['git', 'branch', '--show-current'])

212 // Fuera de un repositorio git el comando falla, por lo que no hay rama para añadir

213 if (git.exitCode !== 0) return next(e)

214 // Mantén cualquier contexto que un hook anterior añadió, y añade una línea más para Claude

215 return next({ ...e, context: [...(e.context ?? []), 'Current branch: ' + git.stdout.trim()] })

216})

217```

218 

219Cuando envías una indicación como `open a PR for this change`, tu mensaje se ve igual en la transcripción, y Claude también lee una línea como `Current branch: feature/auth` después de ella. Una indicación que no menciona una solicitud de extracción pasa sin cambios, y `git` no se ejecuta.

220 

221[Otros eventos](/docs/es/plugins/mods/reference#prompts-and-what-claude-reads) cubren el resto de lo que Claude lee: `prompt.section` para cada sección de la indicación del sistema, `prompt.context` para el contexto enviado con el primer mensaje, y `skill.prompt` para el texto de una skill. El texto de estos hooks que cambia entre solicitudes [invalida el caché de indicaciones](/docs/es/prompt-caching).

222 

223<h3 id="follow-a-turn">

224 Seguir un turno

225</h3>

226 

227Un turno es todo lo que Claude hace en respuesta a una indicación. Engancha `turn.start`, `turn.step` y `turn.complete` para seguir uno:

228 

229| Evento | Cuándo se dispara | Qué puede hacer un hook |

230| :- | :- | :- |

231| `turn.start` | Comienza un turno | Observa. `e.turnId` identifica el turno en los otros dos eventos. |

232| `turn.step` | Claude Code está a punto de enviar una solicitud al modelo. Un turno con llamadas de herramientas tiene varias. `e.agentId` se establece para la solicitud de un subagente. | Lee el uso de tokens de cada solicitud, envíalo a un modelo diferente con `next({ ...e, model })`, o responde sin llamar al modelo |

233| `turn.complete` | El turno terminó, incluido un turno que el usuario interrumpió, donde `e.isAborted` es `true`. `e.answer` es el texto final de Claude, `e.durationMs` cuánto tiempo tomó, y `e.usage` los totales de tokens del turno. Un turno de subagente lo dispara con `e.agentId` establecido. | Observa, o devuelve un objeto con un campo `text`, como `{ text: 'Done in 12 seconds' }`, para mostrar una línea bajo la respuesta |

234 

235Escribe un hook `turn.step` como un generador asincrónico, porque el evento transmite. `yield* next(e)` reenvía la respuesta mientras se transmite y se evalúa al resultado terminado. Este hook registra cuánto de cada solicitud sirvió la API de Claude desde el [caché de indicaciones](/docs/es/prompt-caching):

236 

237```javascript theme={null}

238// function* hace que el hook sea un generador, que puede pasar la respuesta pieza por pieza

239on('turn.step', async function* ($, e, next) {

240 // Envía la solicitud, reenvía cada pieza mientras llega, y mantén el resultado terminado

241 const result = yield* next(e)

242 // Omite un resultado que no reporta conteos de tokens

243 if (result.usage) {

244 $.ui.log('cache read ' + result.usage.cache_read_input_tokens + ' · wrote ' + result.usage.cache_creation_input_tokens)

245 }

246 // Devuelve el resultado sin cambios, para que el turno continúe como de costumbre

247 return result

248})

249```

250 

251La respuesta de Claude se transmite a la pantalla como lo haría sin el mod. Después de que cada solicitud termina, una línea atenuada en la transcripción da el número de tokens leídos del caché y el número escrito en él. Un turno con llamadas de herramientas tiene varias solicitudes, por lo que añade varias líneas.

252 

253`result.usage` contiene los cuatro conteos de tokens que la API de Claude reporta para una solicitud, más el `model` que respondió: `input_tokens`, `output_tokens`, `cache_read_input_tokens` y `cache_creation_input_tokens`. El hook se ejecuta para las solicitudes de subagentes también, por lo que verifica `e.agentId` cuando quieres solo la conversación principal.

254 

255<h3 id="hook-the-settings-hook-events">

256 Enganchar los eventos de hook de configuración

257</h3>

258 

259Los hooks de configuración son los hooks de comando, HTTP, indicación y agente que configuras en archivos de configuración. Cada [evento de hook de configuración](/docs/es/hooks#hook-events), como `Stop`, `SessionEnd` o `PostToolUse`, es también un evento nombrado `classic.` seguido del nombre del evento de hook de configuración, como `classic.Stop`. `e` es el JSON que un hook de configuración recibe en stdin, incluido `transcript_path`.

260 

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

262 

263```javascript theme={null}

264on('classic.Stop', async ($, e, next) => {

265 // e tiene los mismos campos que un hook Stop en un archivo de configuración lee de stdin

266 $.ui.log('Transcript saved at ' + e.transcript_path)

267 // Pasa el evento, para que los hooks Stop en tus archivos de configuración aún se ejecuten

268 return next(e)

269})

270```

271 

272Cada vez que Claude termina de responder, una línea atenuada en la transcripción da la ruta del archivo de transcripción. El hook devuelve `next(e)`, por lo que observa el evento y no cambia nada sobre cómo termina el turno.

273 

274<h2 id="run-alongside-other-mods">

275 Ejecutar junto a otros mods

276</h2>

277 

278Varios mods pueden enganchar el mismo evento, y cualquiera de ellos puede fallar. Si tu mod bloquea llamadas de herramientas, verifica su posición en la cadena y qué sucede cuando su hook falla.

279 

280<h3 id="the-order-mods-run-in">

281 El orden en que se ejecutan los mods

282</h3>

283 

284Los hooks en el mismo evento forman una cadena de middleware. Cada `next` de un mod llama al hook del siguiente mod, y el último `next` llega al comportamiento propio de Claude Code. El primer mod es el más externo: ve el evento antes que los otros y el resultado después de ellos, y decide si los otros se ejecutan en absoluto. Un mod posterior no puede detener a uno anterior de ver un evento.

285 

286Claude Code ordena la cadena por dónde viene cada mod:

287 

2881. El guardia incorporado `sec-default@builtin`, un mod incorporado en Claude Code que `/plugin` enumera como `cc-plugin-sec-default`, donde [se carga](/docs/es/plugins/mods/admin#know-what-happens-by-default), mods que tu organización enumera en [`prependPlugins`](/docs/es/plugins/mods/admin#install-your-organizations-mods), y luego cualquier otro mod que cuente como de tu organización y no esté en `appendPlugins`

2892. Mods que instalas

2903. Mods que tu organización enumera en `appendPlugins`

2914. Otros mods incorporados en Claude Code

292 

293Entre los mods que instalas, un mod se ejecuta antes que los mods que enumera bajo `dependencies` en su manifiesto. Dentro de un módulo, los hooks se ejecutan en el orden en que `register` llamó a `on`.

294 

295<h4 id="where-settings-hooks-run-in-the-order">

296 Dónde se ejecutan los hooks de configuración en el orden

297</h4>

298 

299Los hooks `PreToolUse` configurados en archivos de configuración también se ejecutan durante una llamada de herramienta, en puntos fijos en la cadena de mods:

300 

301* **Hooks `PreToolUse` de configuración administrada**: se ejecutan antes que el hook `tool.call` del primer mod, y un bloqueo de uno de ellos es final, por lo que ningún mod ve la llamada.

302* **Hooks `PreToolUse` de cada otro archivo de configuración y de `hooks/hooks.json` de plugins**: se ejecutan después de que el último mod llama a `next`, como parte del comportamiento propio de Claude Code. Un mod que responde `tool.call` sin llamar a `next` los mantiene de ejecutarse, y un mod que llama a `next` ve su decisión en el resultado que devuelve.

303 

304[`tool.check`](/docs/es/plugins/mods/reference#tools) es el evento donde Claude Code decide si una llamada de herramienta puede ejecutarse. Se dispara después de esos hooks y las reglas de permisos han decidido, y `next(e)` se resuelve a su decisión. Un hook en `tool.check` puede devolver una decisión diferente, como `{ decision: 'allow' }`, por lo que puede aprobar una llamada que un hook en el segundo grupo bloqueó. [Extender permisos con hooks](/docs/es/permissions#extend-permissions-with-hooks) enumera qué decisiones se mantienen sobre un mod.

305 

306<h3 id="handle-a-hook-that-fails">

307 Manejar un hook que falla

308</h3>

309 

310Un hook que falla no rompe la sesión, y puedes decidir qué sucede en su lugar. Cuando un hook sin un manejador `.catch` lanza una excepción, agota el tiempo o devuelve un resultado de forma incorrecta, lo que sucede después depende de si había llamado a `next`:

311 

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

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

314 

315Una línea nombra el mod, el evento y la razón, como `my-mod: tool.call hook skipped: threw Error: boom`. Dónde lo lees depende de la sesión, como [Averigua por qué un mod no hace nada](/docs/es/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing) enumera. Un hook `ui.render` cuyo dibujo no valida se reporta de manera diferente, como [Construir un árbol a partir de elementos](/docs/es/plugins/mods/interface#build-a-tree-from-elements) describe.

316 

317Para hacer que un hook que bloquea llamadas falle cerrado, añade un manejador de error `.catch` que responda en su lugar. Aquí, `guard` es tu función de hook:

318 

319```javascript theme={null}

320// on devuelve un registro, y .catch adjunta un manejador a ese hook

321on('tool.call', { tool: 'Bash' }, guard).catch(async ($, e, next) => {

322 // next.error.kind es 'throw' o 'timeout', que dice cómo falló guard

323 return { deny: 'The command guard failed, so this command was not run: ' + next.error.kind }

324})

325```

326 

327Mientras `guard` funciona, el manejador nunca se ejecuta. Cuando `guard` lanza una excepción o agota el tiempo en una llamada Bash, Claude Code llama al manejador con el mismo evento. El manejador devuelve `{ deny }`, por lo que el comando no se ejecuta, y Claude lee el texto con `throw` o `timeout` al final. Sin el manejador, Claude Code omitería `guard` y ejecutaría el comando. El manejador tiene [un segundo](/docs/es/plugins/mods/reference#limits) para responder.

328 

329<h2 id="next-steps">

330 Próximos pasos

331</h2>

332 

333* [Usa la API de mods](/docs/es/plugins/mods/api): añade comandos y herramientas, llama a un modelo y ejecuta trabajo en un temporizador

334* [Dibuja en la interfaz](/docs/es/plugins/mods/interface): muestra lo que tus hooks recopilan en un panel o encima de la indicación

335* [Prueba un mod](/docs/es/plugins/mods/test): dispara cualquiera de estos eventos desde una prueba

336* [Referencia de mods](/docs/es/plugins/mods/reference): cada evento, cada método de API de mods y los límites

plugins/mods/interface.md +867 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Dibujar en la interfaz con un mod

6 

7> Dibuje paneles, una banda sobre el símbolo del sistema, botones y campos de texto desde un mod de Claude Code, maneje pulsaciones e entrada, y mantenga el estado entre redibujos y sesiones.

8 

9Un mod puede dibujar su propia interfaz en Claude Code y cambiar partes de la interfaz que Claude Code ya dibuja. Cada lugar donde un mod puede dibujar se llama [sitio de renderizado](/docs/es/plugins/mods/reference#render-sites), como un panel, la banda sobre el símbolo del sistema o el spinner. Claude Code genera el evento [`ui.render`](/docs/es/plugins/mods/reference#interface) cada vez que está a punto de dibujar un sitio de renderizado, y su hook para ese evento devuelve lo que se debe dibujar allí.

10 

11Este mapa muestra dónde un mod puede dibujar en una sesión de terminal:

12 

13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="Mapa de una sesión de terminal de Claude Code. Un mod puede agregar un panel como barra lateral a la derecha, una notificación en la esquina superior derecha de la transcripción, una línea de registro en la transcripción, una banda sobre el símbolo del sistema y una línea de estado bajo el símbolo del sistema. Un mod puede redibujar mensajes, filas de llamadas de herramientas y el spinner. El símbolo del sistema es propio de Claude Code." width="600" height="336" data-path="images/mods-screen-map.svg" />

14 

15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="Mapa de una sesión de terminal de Claude Code. Un mod puede agregar un panel como barra lateral a la derecha, una notificación en la esquina superior derecha de la transcripción, una línea de registro en la transcripción, una banda sobre el símbolo del sistema y una línea de estado bajo el símbolo del sistema. Un mod puede redibujar mensajes, filas de llamadas de herramientas y el spinner. El símbolo del sistema es propio de Claude Code." width="600" height="336" data-path="images/mods-screen-map-dark.svg" />

16 

17En una terminal más estrecha, el panel se sitúa sobre el símbolo del sistema en lugar de junto a la transcripción.

18 

19Construya su [primer mod](/docs/es/plugins/mods/create) antes de comenzar aquí. Comience con el ejemplo trabajado, que construye un panel con dos pestañas y un contador, luego lea la sección para cada parte que desee cambiar.

20 

21<Note>

22 Para buscar una propiedad o límite, consulte la [referencia](/docs/es/plugins/mods/reference#render-sites).

23</Note>

24 

25<h2 id="build-a-pane-with-tabs">

26 Construir un panel con pestañas

27</h2>

28 

29En esta sección construye un mod que agrega un comando `/hello-tabs` y el comando abre un panel. Un panel es una barra lateral junto a la transcripción en una terminal de pantalla completa ancha, o una región enmarcada sobre el símbolo del sistema de otra manera. Este panel muestra dos pestañas, y la segunda pestaña tiene un botón que suma uno a un contador. El recuento sigue ahí después de reiniciar Claude Code.

30 

31El mod terminado se ve así. La grabación abre el panel, cambia a la segunda pestaña, presiona el botón varias veces y vuelve a la primera pestaña:

32 

33<Frame>

34 <video autoPlay muted loop playsInline controls className="w-full dark:hidden" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-hello-tabs-light.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=49d520094d87b5b44bfe50fa49677f06" aria-label="El comando /hello-tabs se escribe en el símbolo del sistema de Claude Code y se abre un panel enmarcado sobre él, con '1: One' y '2: Two' en la parte superior y el texto 'This is the first tab.' La segunda pestaña muestra un botón 'Add one' junto a 'Count: 1', y el recuento sube a 3. El panel luego vuelve a la primera pestaña." data-path="images/mods-hello-tabs-light.mp4" />

35 

36 <video autoPlay muted loop playsInline controls className="w-full hidden dark:block" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-hello-tabs-dark.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=ff7a14d713d6e5d3b0000efa8522ea4b" aria-label="El comando /hello-tabs se escribe en el símbolo del sistema de Claude Code y se abre un panel enmarcado sobre él, con '1: One' y '2: Two' en la parte superior y el texto 'This is the first tab.' La segunda pestaña muestra un botón 'Add one' junto a 'Count: 1', y el recuento sube a 3. El panel luego vuelve a la primera pestaña." data-path="images/mods-hello-tabs-dark.mp4" />

37</Frame>

38 

39Claude Code no tiene un elemento de pestañas integrado, por lo que las pestañas son dos botones en una fila. El mod realiza un seguimiento de cuál está activo y dibuja el contenido de esa pestaña bajo la fila.

40 

41<Steps>

42 <Step title="Crear el plugin">

43 Un mod es un plugin con un manifiesto, un `hooks.json` que apunta a su código y el archivo de código. [Crear un mod](/docs/es/plugins/mods/create#write-a-mod-yourself) explica cada uno. Cree un directorio llamado `hello-tabs` con directorios `.claude-plugin` y `hooks` dentro, luego guarde los dos primeros archivos.

44 

45 Guarde el manifiesto como `hello-tabs/.claude-plugin/plugin.json`:

46 

47 ```json hello-tabs/.claude-plugin/plugin.json theme={null}

48 {

49 "name": "hello-tabs",

50 "version": "0.1.0",

51 "description": "Opens a pane with two tabs and a counter",

52 "author": { "name": "Your Name" }

53 }

54 ```

55 

56 Nombre su punto de entrada en `hello-tabs/hooks/hooks.json`:

57 

58 ```json hello-tabs/hooks/hooks.json theme={null}

59 {

60 "modules": ["./register.js"]

61 }

62 ```

63 </Step>

64 

65 <Step title="Escribir el código">

66 El código realiza tres trabajos, uno en cada hook:

67 

68 * Agrega el comando `/hello-tabs`

69 * Abre el panel cuando ejecuta ese comando

70 * Dibuja el contenido del panel: la fila de pestañas y el cuerpo de la pestaña abierta

71 

72 Dos variables a nivel de módulo, `tab` y `count`, mantienen el estado del panel.

73 

74 Guarde esto como `hello-tabs/hooks/register.js`:

75 

76 ```javascript hello-tabs/hooks/register.js theme={null}

77 // The pane's id, used to open the pane and to recognize it when drawing

78 const PANE = 'hello-tabs'

79 

80 // What the pane shows: which tab is open, and the counter's value

81 let tab = 'one'

82 let count = 0

83 

84 export function register(on) {

85 // Runs before your first prompt, and again after a reload

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

87 await $.command.register({ name: 'hello-tabs', description: 'Open the hello-tabs pane' })

88 // Load the count an earlier session saved, if there is one

89 const saved = await $.store.get('count')

90 if (typeof saved === 'number') count = saved

91 return next(e)

92 })

93 

94 // Runs when you type /hello-tabs

95 on('command.run', { command: 'hello-tabs' }, async ($) => {

96 // Open the pane, give it the keyboard, and let Esc close it

97 await $.ui.open({ id: PANE, title: 'Hello tabs', focus: true, closeOnEscape: true })

98 // Print nothing in the transcript

99 return {}

100 })

101 

102 // Runs each time Claude Code draws a pane

103 on('ui.render', { component: 'Pane' }, async ($, e, next) => {

104 // Leave other mods' panes alone

105 if (e.requestId !== PANE) return next(e)

106 // Get the elements this app can draw

107 const { Box, Text, Button } = $.ui.resolve(e)

108 // Ask Claude Code to run this hook again

109 const redraw = () => $.ui.invalidate('ui.render')

110 

111 // One tab: a button that switches to its tab when pressed

112 const tabButton = (name, label, hotkey) =>

113 Button({

114 key: 'tab-' + name,

115 label,

116 hotkey,

117 plain: true,

118 // Dim the tab that isn't open

119 dimColor: tab !== name,

120 onPress: () => {

121 tab = name

122 redraw()

123 },

124 })

125 

126 // What goes under the tabs, depending on which one is open

127 const body =

128 tab === 'one'

129 ? [Text({ children: ['This is the first tab.'] })]

130 : [

131 Box({

132 flexDirection: 'row',

133 columnGap: 2,

134 children: [

135 Button({

136 key: 'more',

137 label: 'Add one',

138 hotkey: 'a',

139 onPress: async () => {

140 count += 1

141 redraw()

142 // Save the count so it's there after a restart

143 await $.store.set('count', count)

144 },

145 }),

146 Text({ children: ['Count: ' + count] }),

147 ],

148 }),

149 ]

150 

151 // The whole pane: the row of tabs, a blank line, then the body

152 return Box({

153 flexDirection: 'column',

154 children: [

155 Box({

156 flexDirection: 'row',

157 columnGap: 3,

158 children: [tabButton('one', 'One', '1'), tabButton('two', 'Two', '2')],

159 }),

160 Text({ children: [' '] }),

161 ...body,

162 ],

163 })

164 })

165 }

166 ```

167 

168 Cada hook también hace algo que el código no deja claro:

169 

170 * **[`session.start`](/docs/es/plugins/mods/reference#session)** también lee el recuento guardado de [`$.store`](#keep-state), un almacén de clave-valor que persiste entre sesiones.

171 * **[`command.run`](/docs/es/plugins/mods/api#add-a-command)** solo le dice a Claude Code que el panel existe. Abrir un panel no dibuja nada por sí solo: Claude Code luego genera `ui.render` para preguntar qué va en él.

172 * **`ui.render`** devuelve el árbol de elementos, un `Box` que contiene otros cuadros, texto y botones, y lo construye nuevamente desde `tab` y `count` cada vez que se ejecuta.

173 

174 Presionar un botón ejecuta su callback `onPress`, que cambia una variable y llama a `redraw`. Claude Code luego ejecuta el hook `ui.render` nuevamente, y el hook construye un nuevo árbol a partir de los nuevos valores. Cada dibujo interactivo utiliza ese ciclo de renderizado: un callback cambia el estado y el hook se renderiza nuevamente desde el nuevo estado.

175 </Step>

176 

177 <Step title="Abrir el panel">

178 En su shell, inicie Claude Code con `claude --plugin-dir ./hello-tabs`. En el símbolo del sistema de Claude Code, ejecute `/hello-tabs`. Se abre un panel con `1: One` y `2: Two` en la parte superior. Presione `2`, luego presione `a`, el atajo de teclado para **Add one**, varias veces. El recuento sube.

179 </Step>

180 

181 <Step title="Verificar que el recuento fue guardado">

182 Presione Esc para cerrar el panel, luego salga de la sesión. En su shell, inicie Claude Code nuevamente con el mismo comando `claude --plugin-dir ./hello-tabs` y en el símbolo del sistema de Claude Code ejecute `/hello-tabs`. El recuento está donde lo dejó.

183 

184 Para borrar el recuento, haga que el mod llame a `$.store.delete('count')`. [Mantener estado](#keep-state) cubre cuánto tiempo dura cada tipo de valor.

185 </Step>

186</Steps>

187 

188<h2 id="pick-where-to-draw">

189 Elegir dónde dibujar

190</h2>

191 

192Un hook `ui.render` se ejecuta para cada sitio de renderizado a menos que lo reduzca al que desea dibujar. Para elegir el sitio de renderizado, pase un filtro, llamado [matcher](/docs/es/plugins/mods/events#filter-which-events-a-hook-handles), como segundo argumento a `on`. `{ component: 'Pane' }` ejecuta el hook solo para paneles. En el hook, `e.component` nombra el sitio, `e.surface` dice qué aplicación está dibujando, y `e.props` contiene los datos propios del sitio. Para un panel, `e.requestId` es el `id` con el que lo abrió.

193 

194Dos sitios están vacíos hasta que un mod los llena, el panel y la banda. Seleccione una pestaña para ver qué es cada uno y cómo dibujar en él:

195 

196<Tabs>

197 <Tab title="Panel">

198 Un panel es una barra lateral junto a la transcripción en una terminal de pantalla completa ancha, o una región enmarcada sobre el símbolo del sistema de otra manera. Con varios paneles abiertos, cada uno obtiene una pestaña que muestra su título.

199 

200 Un panel aparece cuando su mod llama a `$.ui.open` con un `id` que elige, como en `$.ui.open({ id: 'hello-tabs' })`. [Abrir un panel en el momento adecuado](#open-a-pane-at-the-right-time) cubre los otros campos y cuándo un panel espera una terminal más ancha.

201 

202 Para dibujar en su panel, filtre en `{ component: 'Pane' }` y verifique que `e.requestId` sea su `id`.

203 </Tab>

204 

205 <Tab title="Banda sobre el símbolo del sistema">

206 La banda es una franja directamente sobre la entrada del símbolo del sistema. Siempre está ahí, y cada mod la comparte.

207 

208 Su hook devuelve un árbol para mostrar algo en la banda, o `next(e)` para no mostrar nada. Un árbol reemplaza lo que los mods [después del suyo](/docs/es/plugins/mods/events#the-order-mods-run-in) dibujan allí. Para mantener el suyo, ponga el resultado de `await next(e)` entre los hijos de un [`Box`](#build-a-tree-from-elements) en su árbol.

209 

210 Para dibujar en la banda, filtre en `{ component: 'AbovePrompt' }`.

211 </Tab>

212</Tabs>

213 

214<h3 id="change-what-claude-code-already-draws">

215 Cambiar lo que Claude Code ya dibuja

216</h3>

217 

218Claude Code dibuja la mayoría de su interfaz a sí mismo: mensajes, filas de llamadas de herramientas, el spinner y más. Cada una de esas partes es un sitio de renderizado también, por lo que un mod puede cambiar el estilo o reemplazarlo. Para cambiar uno, filtre su hook `ui.render` en su nombre de esta tabla:

219 

220| Sitio | Qué es |

221| :- | :- |

222| `UserMessage`, `AssistantMessage` | Un mensaje en la transcripción |

223| `ToolUse`, `ToolResult`, `ToolGroup` | La fila de una llamada de herramienta, su resultado y una ejecución plegada de llamadas |

224| `CommandOutput` | La fila que un comando imprimió |

225| `AskUserQuestion` | El diálogo que Claude abre para hacerle una pregunta |

226| `Spinner`, `ToolProgress`, `TurnDuration` | Líneas de estado para un turno: la línea que se anima mientras Claude trabaja, la línea de progreso en vivo de una herramienta en ejecución y la línea que cierra un turno |

227| `InfoNotice`, `SessionMode`, `PromptHint` | Líneas de estado bajo el logo, las etiquetas de modo en el pie de página y la línea de sugerencia bajo el símbolo del sistema |

228 

229En un sitio que Claude Code ya dibuja, su hook tiene tres opciones: cambiar un detalle, reemplazar el dibujo o dejarlo solo. Seleccione una pestaña para ver cada una aplicada al spinner. Los ejemplos leen una variable `calls` que otro hook cuenta, como en el [mod de tutorial](/docs/es/plugins/mods/create#write-a-mod-yourself).

230 

231<Tabs>

232 <Tab title="Cambiar un detalle">

233 Para mantener el dibujo de Claude Code y cambiar una parte de él, pase a `next` una copia del evento con `props` cambiados. Este hook cambia el texto después de la palabra del spinner:

234 

235 ```javascript theme={null}

236 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

237 // Keep Claude Code's spinner, and change the text after its word

238 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

239 })

240 ```

241 

242 El spinner mantiene su animación y su palabra, y su texto sigue a la palabra:

243 

244 ```text theme={null}

245 Thinking · tool calls: 2…

246 ```

247 </Tab>

248 

249 <Tab title="Reemplazar el dibujo">

250 Para dibujar algo propio en el lugar del sitio, devuelva un árbol y no llame a `next`. Este hook dibuja una línea de texto donde estaría el spinner:

251 

252 ```javascript theme={null}

253 on('ui.render', { component: 'Spinner' }, async ($, e) => {

254 const { Text } = $.ui.resolve(e)

255 // No call to next, so this line is drawn in the spinner's place

256 return Text({ children: ['Claude has made ' + calls + ' tool calls'] })

257 })

258 ```

259 

260 Mientras Claude trabaja, su línea se muestra y el spinner de Claude Code no:

261 

262 ```text theme={null}

263 Claude has made 2 tool calls

264 ```

265 </Tab>

266 

267 <Tab title="Dejarlo solo">

268 Para dejar el sitio como Claude Code lo dibuja, devuelva `next(e)`. Un hook a menudo hace eso para algunos eventos y no para otros. Este hook deja el spinner solo hasta que hay una llamada para contar:

269 

270 ```javascript theme={null}

271 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

272 // Nothing to show yet, so pass the event on unchanged

273 if (calls === 0) return next(e)

274 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

275 })

276 ```

277 

278 Antes de la primera llamada de herramienta, el spinner se ve de la manera que lo hace sin el mod:

279 

280 ```text theme={null}

281 Thinking…

282 ```

283 </Tab>

284</Tabs>

285 

286El símbolo del sistema de permiso no es un sitio de renderizado, por lo que un mod no puede cambiar lo que muestra. El diálogo de pregunta, `AskUserQuestion`, es uno, por lo que un mod puede cambiar eso.

287 

288La terminal y la aplicación de escritorio no generan todos los mismos sitios. `Pane`, `AbovePrompt`, `Spinner` y los sitios de transcripción funcionan en ambos. Algunas otras líneas de estado se generan solo en la terminal. La [tabla de sitios de renderizado](/docs/es/plugins/mods/reference#render-sites) enumera dónde se genera cada uno.

289 

290<h3 id="open-a-pane-at-the-right-time">

291 Abrir un panel en el momento adecuado

292</h3>

293 

294Un panel aparece solo cuando su mod lo abre. Cómo y cuándo lo abre decide si toma el enfoque del teclado, cuánto espacio solicita y si aparece en absoluto en una terminal estrecha.

295 

296Para abrir un panel, llame a [`$.ui.open`](/docs/es/plugins/mods/reference#mods-api-methods) con un `id` que elija. El `id` es el nombre del panel: su hook `ui.render` lo verifica y lo pasa nuevamente para cerrar el panel.

297 

298```javascript theme={null}

299await $.ui.open({ id: 'hello-tabs', title: 'Hello tabs', focus: true })

300```

301 

302Para cerrar el panel, llame a `$.ui.close` con el `id` con el que lo abrió:

303 

304```javascript theme={null}

305await $.ui.close({ id: 'hello-tabs' })

306```

307 

308Además de `id`, `$.ui.open` toma estos campos opcionales:

309 

310| Campo | Qué hace |

311| :- | :- |

312| `title` | La etiqueta de pestaña del panel cuando hay más de un panel abierto |

313| `focus` | Solicita [enfoque del teclado](#know-which-keys-your-mod-can-receive) |

314| `closeOnEscape` | Hace que Esc cierre el panel. Pase `true` o deje el campo fuera, porque Claude Code rechaza `false`. |

315| `holdToasts` | Mantiene las notificaciones, los pequeños avisos de [`$.ui.toast`](/docs/es/plugins/mods/api#show-something-without-starting-a-turn), hasta que se cierre el panel |

316| `rows` | La altura a solicitar cuando el panel se sitúa sobre el símbolo del sistema. El valor predeterminado es un tercio del espacio. |

317| `columns` | El ancho a solicitar cuando el panel se sitúa junto a la transcripción |

318 

319Para permitir que un comando abra el panel mientras Claude está trabajando, agregue `immediate: true` cuando [registre el comando](/docs/es/plugins/mods/api#add-a-command). Sin él, un comando escrito durante un turno espera a que el turno termine.

320 

321<h4 id="when-a-pane-waits-for-a-wider-terminal">

322 Cuando un panel espera una terminal más ancha

323</h4>

324 

325Un panel que su mod abre sin ser solicitado no aparece en una terminal estrecha, por lo que no puede ocupar una pantalla pequeña. Si aparece depende de lo que lo abrió:

326 

327* **Abierto por algo que hizo el usuario**, como un comando que ejecutó o un botón que presionó, el panel aparece en cualquier ancho

328* **Abierto por su mod actuando por sí solo**, como desde un temporizador o un hook [`turn.start`](/docs/es/plugins/mods/events#follow-a-turn), el panel aparece solo en una terminal de al menos 144 columnas de ancho. Después de que el usuario haya abierto ese panel una vez por sí mismo, 110 columnas es suficiente.

329 

330Cuando aparece el panel, `$.ui.open` se resuelve en `{ isPlaced: true }`. Cuando el panel está esperando, `isPlaced` es `false` y `reason` es una cadena que dice por qué. Un panel en espera aparece cuando el usuario lo abre o amplía la terminal. Para decir que algo está disponible sin abrir un panel, llame a `$.ui.toast('Your message')`, que muestra un pequeño aviso que desaparece después de unos segundos.

331 

332<h2 id="build-a-tree-from-elements">

333 Construir un árbol a partir de elementos

334</h2>

335 

336Lo que devuelve un hook `ui.render` es un árbol de elementos: una descripción de qué dibujar, hecha de cuadros, texto y controles anidados entre sí. Describe el dibujo y Claude Code lo renderiza en la terminal o en la aplicación de escritorio.

337 

338Para obtener los elementos, llame a `$.ui.resolve(e)` en su hook, como en `const { Box, Text, Button } = $.ui.resolve(e)`. Cada elemento es una función. Pasa sus propiedades y pone los elementos y cadenas que van dentro en `children`.

339 

340La mayoría de los dibujos utilizan cuatro elementos. Seleccione una pestaña para ver cada uno y cómo la terminal lo dibuja:

341 

342<Tabs>

343 <Tab title="Texto">

344 `Text` dibuja una cadena, con estilo opcional como `bold` y `color`:

345 

346 ```javascript theme={null}

347 Text({ children: ['This is the first tab.'] })

348 ```

349 

350 ```text theme={null}

351 This is the first tab.

352 ```

353 </Tab>

354 

355 <Tab title="Cuadro">

356 `Box` organiza lo que hay dentro, en una fila o una columna. Este pone un botón y una línea de texto uno al lado del otro, dos columnas separadas:

357 

358 ```javascript theme={null}

359 Box({

360 flexDirection: 'row',

361 columnGap: 2,

362 children: [

363 Button({ key: 'more', label: 'Add one', onPress: addOne }),

364 Text({ children: ['Count: 0'] }),

365 ],

366 })

367 ```

368 

369 ```text theme={null}

370 [ Add one ] Count: 0

371 ```

372 </Tab>

373 

374 <Tab title="Botón">

375 `Button` es un control que el usuario puede presionar. Ejecuta su callback `onPress`. Con `plain: true` no tiene corchetes y muestra su atajo de teclado:

376 

377 ```javascript theme={null}

378 Button({ key: 'more', label: 'Add one', onPress: addOne })

379 Button({ key: 'tab-one', label: 'One', hotkey: '1', plain: true, onPress: showTabOne })

380 ```

381 

382 ```text theme={null}

383 [ Add one ]

384 1: One

385 ```

386 </Tab>

387 

388 <Tab title="Entrada">

389 `Input` es un campo de texto. Ejecuta su callback `onSubmit` con el texto cuando el usuario presiona Enter:

390 

391 ```javascript theme={null}

392 Input({

393 key: 'new-note',

394 label: 'Note',

395 placeholder: 'Type a note and press Enter',

396 value: '',

397 submitLabel: 'add',

398 onSubmit: addNote,

399 })

400 ```

401 

402 ```text theme={null}

403 Note: Type a note and press Enter ⏎ add

404 ```

405 </Tab>

406</Tabs>

407 

408Esta tabla enumera cada elemento:

409 

410| Elemento | Qué dibuja | Dónde |

411| :- | :- | :- |

412| `Box` | Un contenedor flex. Toma propiedades de diseño como `flexDirection`, `columnGap`, `padding`, `borderStyle` y `width`. | En todas partes |

413| `Text` | Texto con estilo. Toma `color`, `bold`, `dimColor`, `italic` y `wrap`. Un `color` es una clave de tema o un color como `'red'`. Un `wrap` es `'wrap'`, `'truncate'`, `'truncate-start'`, `'truncate-middle'` o `'truncate-end'`. | En todas partes |

414| `Button` | Un control que llama a `onPress` | En todas partes |

415| `Link`, `Code`, `Markdown` | Un enlace con `href` y una `label` opcional, un bloque de código y texto formateado de la manera que lo son las respuestas de Claude. `Markdown` toma su contenido en una propiedad `text`, no en `children`, y necesita una `key` cuando pasa `onLinkPress`. | En todas partes |

416| `Input`, `Select` | Un campo de texto y un selector | Terminal, Escritorio |

417| `Svg` | Un documento SVG | Escritorio |

418| `Client` | Una región dibujada por un segundo archivo suyo, para animación e entrada de puntero. Ese archivo no obtiene API de mods. Solo llega a sus hooks publicando datos, que llegan como un evento `ui.message`. | Terminal, Escritorio |

419| `Raster`, `Image` | Una [cuadrícula de celdas coloreadas](#draw-a-grid-of-colored-cells) y una imagen | Terminal |

420 

421Si su módulo es un archivo `.tsx` o `.jsx`, puede escribir el árbol como JSX. Desestructure los elementos de `$.ui.resolve(e)` primero, porque un módulo de hooks no tiene globales de elementos.

422 

423Si un árbol utiliza un elemento que la aplicación no tiene, una propiedad que un elemento no toma o un hijo donde no va ninguno, Claude Code dibuja su propia versión del sitio.

424 

425En una sesión iniciada con `--plugin-dir`, una línea de transcripción lo dice, como `ui.render (Pane) refused: Text prop "bogusProp" is not allowed; the engine drew its own`. El [registro de depuración](/docs/es/plugins/mods/troubleshoot#read-the-debug-log) lo registra como `ui.render (Pane): a hook returned a tree that does not validate` con la misma razón. Nada más aparece en la sesión, por lo que cuando un dibujo no aparece, verifique esa línea o el registro.

426 

427<h3 id="draw-a-grid-of-colored-cells">

428 Dibujar una cuadrícula de celdas coloreadas

429</h3>

430 

431Para un mapa de calor, un gráfico de chispa o un tablero de juego en la terminal, dibuje un `Raster` y no un `Box` para cada celda. Un `Raster` toma una `key`, su tamaño en `columns` y `rows`, y `cells`, que empaqueta cada celda en una cadena. Cada celda son tres números: el punto de código del carácter, su color y su color de fondo. Un color es un número hexadecimal con dos dígitos cada uno para rojo, verde y azul, como `0xc62828` para un rojo, o `0x01000000` para el predeterminado de la terminal.

432 

433La aplicación de escritorio no tiene `Raster`, por lo que verifique `e.surface` y dibuje texto allí. Este cuerpo de panel dibuja un mapa de calor de tres por dos:

434 

435```javascript theme={null}

436// The value that means "use the terminal's default color"

437const DEFAULT_COLOR = 0x01000000

438 

439// Pack rows of [character, color] pairs into the one string a Raster takes

440// One cell is three numbers: the character's code point, its color, and its background

441function cellsOf(rows) {

442 const numbers = rows.flat().flatMap(([char, color]) => [char.codePointAt(0), color, DEFAULT_COLOR])

443 return new Uint8Array(Uint32Array.from(numbers).buffer).toBase64()

444}

445 

446on('ui.render', { component: 'Pane' }, async ($, e, next) => {

447 // Draw only in the pane opened with the id 'heat'

448 if (e.requestId !== 'heat') return next(e)

449 const { Box, Text, Raster } = $.ui.resolve(e)

450 // Two rows of three cells, each a block character and its color

451 const rows = [

452 [['█', 0x2e7d32], ['█', 0xf9a825], ['█', 0xc62828]],

453 [['█', 0x2e7d32], ['█', 0x2e7d32], ['█', 0xf9a825]],

454 ]

455 if (e.surface !== 'terminal') {

456 return Text({ children: ['The heat map needs the terminal.'] })

457 }

458 return Box({

459 flexDirection: 'column',

460 children: [Raster({ key: 'grid', columns: 3, rows: 2, cells: cellsOf(rows) })],

461 })

462})

463```

464 

465En la terminal, el panel muestra la cuadrícula:

466 

467<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-heat-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=b91bcce3bad74bc851149133d4acc5d5" alt="Un panel en la terminal que contiene una pequeña cuadrícula de bloques coloreados, dos filas de tres. La fila superior es verde, ámbar y roja. La fila inferior es verde, verde y ámbar." width="360" height="132" data-path="images/mods-heat-map.svg" />

468 

469La matriz `rows` es la parte que cambiaría, y `cellsOf` la convierte en la cadena empaquetada. El hook dibuja solo en un panel cuyo `id` es `heat`, por lo que abra uno con `$.ui.open({ id: 'heat' })` desde un comando, como el ejemplo [`hello-tabs`](#build-a-pane-with-tabs) abre su panel.

470 

471Cada carácter tiene que tener un ancho de una celda. Para animar un `Raster` que ya está en pantalla, llame a `$.ui.blit` con el `id` del panel como `requestId`, la `key` del `Raster`, el mismo tamaño y celdas nuevas. Para este ejemplo, eso es `$.ui.blit({ requestId: 'heat', key: 'grid', columns: 3, rows: 2, cells: cellsOf(newRows) })`. Repinta ese elemento sin ejecutar su hook `ui.render` nuevamente.

472 

473<h2 id="respond-to-presses-and-typing">

474 Responder a pulsaciones y escritura

475</h2>

476 

477Cuando el usuario presiona un botón, escribe en un campo o elige de una lista que su mod dibujó, Claude Code llama a la función que le dio a ese control, y se ejecuta en su módulo. Cada control toma sus propios callbacks:

478 

479* **`Button`**: toma `onPress(e)`, donde `e.surface` es la aplicación de la que proviene la pulsación

480* **`Input`**: toma `onSubmit(value)` y `onInput(value)`

481* **`Select`**: toma `onSelect(value)` con sus opciones en `options`, una lista de al menos una opción con valores únicos, como `[{ value: 'sm', label: 'Small' }, { value: 'lg', label: 'Large' }]`

482 

483Una prueba presiona o escribe en un control por su `key`, así que dé a cada control uno. Cada uso de un control también genera [`ui.press`, `ui.input` o `ui.select`](/docs/es/plugins/mods/reference#interface) con la `key` en `e.element`, y otro mod puede enganchar esos eventos. Su hook se ejecuta antes de su callback, por lo que ve lo que el usuario escribe en su `Input` y puede cambiarlo o responder en lugar de su callback. La API de mods no tiene método que presione el botón de otro mod.

484 

485<h3 id="know-which-keys-your-mod-can-receive">

486 Enfoque del teclado y atajos de teclado

487</h3>

488 

489Su mod nunca lee el teclado a sí mismo. El usuario presiona una tecla, Claude Code decide cuál de sus controles es para, y se ejecuta el callback de ese control. Aparte de un [atajo de teclado de dígito en la banda](/docs/es/plugins/mods/reference#elements), eso sucede solo mientras su panel o banda tiene enfoque del teclado. El resto del tiempo, las teclas van al símbolo del sistema.

490 

491<h4 id="how-a-pane-gets-keyboard-focus">

492 Cómo un panel obtiene enfoque del teclado

493</h4>

494 

495Un panel obtiene enfoque del teclado de una de tres maneras:

496 

497* Su mod lo abre con `focus: true` desde un comando o una pulsación

498* El usuario presiona Ctrl+X y luego Tab

499* El usuario hace clic en él

500 

501Claude Code otorga `focus: true` solo mientras el símbolo del sistema está vacío y nada más tiene enfoque del teclado. Un panel que se abre mientras el usuario está escribiendo no toma sus pulsaciones de teclas.

502 

503<h4 id="what-each-key-does">

504 Qué hace cada tecla

505</h4>

506 

507Esta tabla enumera qué hace una tecla mientras su panel o banda tiene enfoque del teclado:

508 

509| Tecla | Qué hace |

510| :- | :- |

511| Tab | Se mueve al siguiente control |

512| Arriba y Abajo | Se mueven entre controles mientras su dibujo cabe. Cuando el panel o banda tiene más filas de las que puede mostrar, los desplazan. |

513| Enter | Presiona el `Button` enfocado, envía el `Input` enfocado o elige en un `Select` |

514| Atajo de teclado de un botón | Presiona ese botón. Mientras un `Input` tiene el enfoque, cada tecla imprimible va al campo. |

515| Esc | Devuelve el enfoque del teclado al símbolo del sistema. Con `closeOnEscape: true`, también cierra el panel. |

516 

517Un mod no puede vincular Tab o las teclas de flecha a nada más, por lo que un juego se dirige con `w`, `a`, `s` y `d`.

518 

519<h4 id="set-a-hotkey-and-the-first-focus">

520 Establecer un atajo de teclado y el primer enfoque

521</h4>

522 

523Dos propiedades en un control deciden cómo el teclado lo alcanza:

524 

525* **`hotkey`**: para permitir que el usuario presione un `Button` con una tecla, dé un `hotkey` de un dígito o una letra minúscula, como en `hotkey: 'a'`

526* **`autoFocus`**: para elegir qué control tiene el enfoque cuando se abre el panel, agregue `autoFocus: true` a él. Deje la propiedad fuera de los otros, porque Claude Code rechaza `autoFocus: false`.

527 

528Cómo se muestra un atajo de teclado depende del botón y la aplicación:

529 

530| Botón | En la terminal | En la aplicación de escritorio |

531| :- | :- | :- |

532| Con corchetes, el predeterminado | `[ Add one ]`, sin atajo de teclado mostrado | La etiqueta con una pequeña tecla al lado |

533| Con `plain: true` | `1: One` | La etiqueta con una pequeña tecla al lado |

534 

535En la terminal, nombre la tecla en la etiqueta de un botón entre corchetes, o use `plain: true`, para que el usuario pueda ver qué presionar. La [referencia de elementos](/docs/es/plugins/mods/reference#elements) tiene las otras reglas de `Button`: `action`, atajos de teclado de dígitos en la banda y dos botones en un atajo de teclado.

536 

537<h3 id="take-typed-input-and-draw-a-row-for-each-item">

538 Tomar entrada escrita y dibujar una fila para cada elemento

539</h3>

540 

541Muchos paneles son un campo de texto con una lista debajo. El ejemplo en esta sección es un panel de notas: escribe una nota y presiona Enter para agregarla, y cada nota tiene un botón `x` que la elimina. Con dos notas agregadas, la terminal dibuja el panel de esta manera:

542 

543```text theme={null}

544╭──────────────────────────────────────────────────────────╮

545│ Note: Type a note and press Enter ⏎ add ✕ │

546│ x buy milk │

547│ x call bob │

548╰──────────────────────────────────────────────────────────╯

549```

550 

551El ejemplo utiliza dos técnicas:

552 

553* **Tomar entrada escrita**: un `Input` llama a `onSubmit(value)` con el texto del campo cuando el usuario presiona Enter, y `onInput(value)` en cada cambio

554* **Dibujar una lista**: asigne sus datos a una fila cada uno, y dé a cada botón de fila su propia `key`

555 

556Este hook dibuja el contenido del panel:

557 

558```javascript theme={null}

559// The list the pane draws

560let notes = []

561 

562on('ui.render', { component: 'Pane' }, async ($, e, next) => {

563 // Draw only in the pane opened with the id 'notes'

564 if (e.requestId !== 'notes') return next(e)

565 const { Box, Text, Button, Input } = $.ui.resolve(e)

566 const redraw = () => $.ui.invalidate('ui.render')

567 

568 return Box({

569 flexDirection: 'column',

570 children: [

571 Input({

572 key: 'new-note',

573 label: 'Note',

574 placeholder: 'Type a note and press Enter',

575 // Draw the field empty each time, which clears it after a submit

576 value: '',

577 submitLabel: 'add',

578 autoFocus: true,

579 // Runs when you press Enter in the field

580 onSubmit: async (value) => {

581 // Ignore an empty line

582 if (!value.trim()) return

583 notes = [...notes, value.trim()]

584 redraw()

585 await $.store.set('notes', notes)

586 },

587 }),

588 // One row for each note: a delete button, then the note's text

589 ...notes.map((note, i) =>

590 Box({

591 flexDirection: 'row',

592 columnGap: 1,

593 children: [

594 Button({

595 // A key of its own, so each row's button can be told apart

596 key: 'delete-' + i,

597 label: 'x',

598 plain: true,

599 onPress: async () => {

600 notes = notes.filter((_, j) => j !== i)

601 redraw()

602 await $.store.set('notes', notes)

603 },

604 }),

605 Text({ children: [note] }),

606 ],

607 }),

608 ),

609 ],

610 })

611})

612```

613 

614Para probar el panel:

615 

616* **Agregar una nota**: escriba una línea y presione Enter. La línea aparece como una nueva fila y el campo se vacía.

617* **Eliminar una nota**: presione Tab hasta que el botón `x` de la nota tenga el enfoque, luego presione Enter. La `x` es la etiqueta del botón y no un atajo de teclado, por lo que escribir la letra no lo presiona.

618 

619Cada cambio sigue el mismo ciclo de renderizado que `hello-tabs`: el callback cambia `notes`, llama a `redraw` y guarda la lista en `$.store`.

620 

621El campo se vacía después de cada envío debido a su propiedad `value`. `value` es el texto que el campo contiene cuando se dibuja, y la escritura del usuario lo reemplaza hasta que su hook dibuja el campo nuevamente. El ejemplo siempre dibuja el campo con `''`.

622 

623El ejemplo guarda las notas y no las carga. Para traerlas de vuelta en la siguiente sesión, léalas en un hook `session.start`, de la manera que `hello-tabs` lee `count`.

624 

625Tres propiedades componen la línea del campo, `Note: Type a note and press Enter ⏎ add`:

626 

627| Propiedad | En el ejemplo | Qué es |

628| :- | :- | :- |

629| `label` | `Note` | El texto antes del campo. La terminal dibuja `: ` después. |

630| `placeholder` | `Type a note and press Enter` | Texto atenuado que se muestra mientras el campo está vacío |

631| `submitLabel` | `add` | La palabra después de `⏎` que dice qué hace Enter |

632 

633Enviar un `Input` no inicia un turno a menos que su callback llame a [`$.prompt.submit`](/docs/es/plugins/mods/api#start-a-turn-from-a-background-job).

634 

635<h2 id="redraw-when-something-changes">

636 Redibujar un sitio

637</h2>

638 

639Un dibujo es una instantánea: muestra lo que devolvió su hook `ui.render` la última vez que se ejecutó. Para mostrar algo nuevo, el hook tiene que ejecutarse de nuevo. Claude Code lo ejecuta de nuevo para algunos cambios, y su mod solicita el resto.

640 

641<h3 id="when-claude-code-redraws-without-being-asked">

642 Cuándo Claude Code redibuja sin ser solicitado

643</h3>

644 

645Claude Code ejecuta su hook `ui.render` de nuevo cuando cambian los props del sitio o cambia el ancho de la terminal. No ejecuta el hook en un temporizador y no puede saber cuándo cambia una variable en su módulo.

646 

647<h3 id="redraw-when-your-data-changes">

648 Redibujar cuando sus datos cambian

649</h3>

650 

651Para que sus sitios se redibjen después de que sus propios datos cambien, llame a `$.ui.invalidate('ui.render')`. Este panel cuenta pulsaciones. La devolución de llamada del botón cambia `count` y luego solicita un redibujado:

652 

653```javascript theme={null}

654let count = 0

655 

656on('ui.render', { component: 'Pane' }, async ($, e, next) => {

657 if (e.requestId !== 'counter') return next(e)

658 const { Box, Text, Button } = $.ui.resolve(e)

659 return Box({

660 flexDirection: 'row',

661 columnGap: 2,

662 children: [

663 Button({

664 key: 'more',

665 label: 'Add one',

666 onPress: () => {

667 count += 1

668 // The data changed, so ask Claude Code to draw the pane again

669 $.ui.invalidate('ui.render')

670 },

671 }),

672 Text({ children: ['Count: ' + count] }),

673 ],

674 })

675})

676```

677 

678Cada pulsación aumenta el número en el panel. El ejemplo [`hello-tabs`](#build-a-pane-with-tabs) envuelve la misma llamada en su función `redraw`.

679 

680Un valor que mantiene en [`$.state`](#keep-a-value-in-\$-state) no necesita la llamada, porque escribir el valor redibuja los sitios que lo leen.

681 

682<h3 id="redraw-on-a-timer">

683 Redibujar en un temporizador

684</h3>

685 

686Para mantener un reloj, una cuenta atrás o un valor de fuera de la sesión actual, redibuje según un cronograma. Inicie un temporizador en el hook `session.start` del módulo. Si el módulo ya tiene uno, como lo hace `hello-tabs`, agregue la línea [`$.clock.every`](/docs/es/plugins/mods/api#run-work-in-the-background) a él:

687 

688```javascript theme={null}

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

690 // Every 1000 milliseconds, ask Claude Code to draw your sites again

691 $.clock.every(1000, () => $.ui.invalidate('ui.render'))

692 return next(e)

693})

694```

695 

696Claude Code ahora ejecuta su hook `ui.render` una vez por segundo. El temporizador se detiene cuando el módulo se recarga, y la nueva copia del módulo inicia el suyo propio.

697 

698<h3 id="how-often-a-site-can-redraw">

699 Con qué frecuencia se puede redibujar un sitio

700</h3>

701 

702Claude Code limita la frecuencia con la que redibuja un sitio, por lo que su mod puede llamar a `$.ui.invalidate` con la frecuencia que cambien sus datos. El panel visible y la banda tienen un límite más alto que otros sitios, y la [tabla de límites](/docs/es/plugins/mods/reference#limits) tiene los números.

703 

704Las llamadas que llegan más rápido que el límite se combinan en un redibujado. Ese redibujado ejecuta su hook una vez, y el hook lee sus datos tal como están en ese momento, por lo que se muestra el valor más reciente y los valores intermedios no se muestran. Una animación no puede ejecutarse más rápido que el límite.

705 

706<h2 id="keep-state">

707 Mantener estado

708</h2>

709 

710Un mod tiene tres lugares para mantener un valor, y difieren en cuánto tiempo dura el valor: hasta que el módulo se recarga, hasta que termina la sesión o de una sesión a la siguiente. Elija según cuánto tiempo tenga que durar el valor:

711 

712| Mantenerlo en | Dura hasta | Úselo para |

713| :- | :- | :- |

714| Una variable a nivel de módulo | El módulo se recarga, lo que sucede cada vez que guarda un archivo durante el desarrollo | Valores que puede perder, como `tab` en `hello-tabs` |

715| `$.state` | La sesión termina, o el usuario ejecuta `/clear`, `/resume` o `/branch` | Valores de los que depende un dibujo que deben sobrevivir a una recarga |

716| `$.store` | Su mod lo elimina, o ninguna sesión lee o escribe el almacén durante [`cleanupPeriodDays`](/docs/es/settings-reference#cleanupperioddays). El almacén es un almacén de clave-valor, guardado como un archivo JSON de su propio plugin bajo `~/.claude/plugins/store/`. | Configuración, historial, cualquier cosa que el usuario espera encontrar la próxima vez |

717 

718`$.store.get(key)` se resuelve en el valor o `undefined`, y `$.store.set(key, value)` toma cualquier valor JSON.

719 

720<h3 id="keep-a-value-in-state">

721 Mantener un valor en `$.state`

722</h3>

723 

724`$.state` mantiene valores durante la duración de una sesión, y se redibuja por usted. Es estado reactivo: un hook `ui.render` que lee un valor se suscribe a él, por lo que Claude Code redibuja ese sitio cada vez que escribe el valor, y no llama a `$.ui.invalidate`. Un valor en `$.state` también sobrevive a una recarga del módulo, lo que una variable no.

725 

726Para configurarlo, declare sus valores, apunte su manifiesto a la declaración, luego defina y use cada valor. Los ejemplos mueven el `count` de `hello-tabs` a `$.state`.

727 

728<h4 id="declare-the-values">

729 Declarar los valores

730</h4>

731 

732Declare los valores en un archivo de tipos. La clave externa es el nombre de su plugin, y cada entrada bajo ella es un valor y su tipo. Guarde esto como `hello-tabs/types/index.d.ts`:

733 

734```typescript hello-tabs/types/index.d.ts theme={null}

735declare module 'claude-code' {

736 interface PluginState {

737 'hello-tabs': {

738 tab: 'one' | 'two'

739 count: number

740 }

741 }

742}

743```

744 

745<h4 id="point-the-manifest-at-the-declaration">

746 Apuntar el manifiesto a la declaración

747</h4>

748 

749Para permitir que `claude plugin validate` verifique su código contra ese archivo, agregue un campo `types` al manifiesto con su ruta:

750 

751```json hello-tabs/.claude-plugin/plugin.json theme={null}

752{

753 "name": "hello-tabs",

754 "version": "0.1.0",

755 "description": "Opens a pane with two tabs and a counter",

756 "author": { "name": "Your Name" },

757 "types": "./types/index.d.ts"

758}

759```

760 

761<h4 id="define-read-and-write-a-value">

762 Definir, leer y escribir un valor

763</h4>

764 

765En su módulo, defina cada valor con un predeterminado, léalo mientras dibuja y escríbalo desde un callback. `atom` nombra un valor y su predeterminado, `read` lo devuelve y `update` lo escribe. Los tres ayudantes llaman a `$.state.get` y `$.state.set` por usted:

766 

767```javascript theme={null}

768import { atom, read, update } from 'claude-code'

769 

770// At the top of the module: name the value and give its default

771const count = atom({ plugin: 'hello-tabs', key: 'count' }, 0)

772 

773// In the ui.render hook: read the value to draw it

774const n = await read($, count)

775 

776// In a Button: write a new value from the old one

777onPress: () => update($, count, (value) => value + 1)

778```

779 

780Porque el hook `ui.render` leyó `count`, Claude Code ejecuta el hook nuevamente cada vez que el botón lo escribe.

781 

782Tres reglas se aplican al código:

783 

784* **Escriba `plugin` y `key` como cadenas literales**: `claude plugin validate` las lee de su fuente

785* **Declare cada valor en el archivo de tipos**: de lo contrario, la validación falla con `hello-tabs.count is not declared`

786* **Escriba desde un callback u otro hook de evento**: un hook `ui.render` puede leer estado y no puede escribirlo, así que escriba desde `onPress`, `onSubmit` u otro hook de evento

787 

788<h4 id="change-hello-tabs-to-use-state">

789 Cambiar `hello-tabs` para usar `$.state`

790</h4>

791 

792Para mover `count` en `hello-tabs` a `$.state`, cambie cada línea que lo use:

793 

794* **En la parte superior del módulo**: agregue la línea `import` y reemplace `let count = 0` con la línea `atom`

795* **En el hook `ui.render`**: agregue la línea `read` antes de `tabButton` y dibuje `'Count: ' + n` en el `Text`

796* **En el botón Add one**: reemplace `onPress` con el de [Guardar desde más de una sesión](#save-from-more-than-one-session), que guarda el recuento además de escribirlo

797* **En el hook `session.start`**: reemplace las dos líneas que leen `saved` con la llamada `loadCount` de [Cargar un valor guardado nuevamente después de `/clear`](#load-a-saved-value-again-after-clear)

798 

799Mantenga `redraw` para los botones de pestaña, porque `tab` sigue siendo una variable.

800 

801<h3 id="load-a-saved-value-again-after-clear">

802 Cargar un valor guardado nuevamente después de `/clear`

803</h3>

804 

805Si su mod copia un valor guardado de `$.store` a `$.state` en `session.start`, tiene que copiarlo nuevamente después de `/clear`, `/resume` o `/branch`. Esos comandos devuelven cada valor de `$.state` a su predeterminado, y `session.start` no se dispara nuevamente. [`classic.SessionStart`](/docs/es/plugins/mods/events#hook-the-settings-hook-events) se dispara después de cada uno de ellos, con `e.source` establecido en `clear`, `resume` o `fork`, así que copie el valor nuevamente en un hook en él. De lo contrario, su dibujo muestra el predeterminado, y un callback que guarda el valor de `$.state` escribe el predeterminado sobre lo que almacenó.

806 

807Este código carga `count` de ambos hooks. Se basa en la versión de `$.state` de `hello-tabs`, donde `count` es un átomo y `update` se importa. Ponga `loadCount` arriba de `register` y agregue la llamada `loadCount` al hook `session.start` que ya tiene. `classic.SessionStart` también se dispara al inicio y después de la compactación, que no reinicia `$.state`, por lo que el filtro en `source` mantiene el hook a los tres reiniciados:

808 

809```javascript theme={null}

810// Copy the saved count from $.store into $.state, or 0 if nothing is saved

811async function loadCount($) {

812 const saved = Number((await $.store.get('count')) ?? 0)

813 await update($, count, () => saved)

814}

815 

816// Runs before your first prompt, and again after a reload

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

818 await loadCount($)

819 return next(e)

820})

821 

822// Runs again after /clear, /resume, and /branch, which reports fork

823on('classic.SessionStart', { source: ['clear', 'resume', 'fork'] }, async ($, e, next) => {

824 await loadCount($)

825 return next(e)

826})

827```

828 

829Con ambos hooks en su lugar, el panel muestra el recuento guardado después de `/clear` y no `0`, y la siguiente pulsación de **Add one** suma al recuento guardado.

830 

831`loadCount` escribe el valor almacenado sobre el que está en `$.state`, y `session.start` se dispara nuevamente cada vez que el módulo se recarga. Para mantener el almacén actualizado, guarde en cada cambio, como lo hace el botón **Add one**.

832 

833Para verificar la recarga sin una sesión, [pruebe el dibujo después de `/clear`](/docs/es/plugins/mods/test#test-a-drawing-after-clear).

834 

835<h3 id="save-from-more-than-one-session">

836 Guardar desde más de una sesión

837</h3>

838 

839Cada sesión en su máquina que ejecuta su mod comparte un `$.store`. Un `get` seguido de un `set` no es atómico. Cuando dos sesiones leen un valor, lo cambian y lo escriben de vuelta, compiten, y la segunda escritura reemplaza la primera.

840 

841Dos opciones hacen que sea menos probable:

842 

843* **Dé a cada elemento su propia clave**: un `set` cambia solo su propia clave, por lo que las sesiones que escriben claves diferentes no se sobrescriben entre sí

844* **Lea nuevamente justo antes de escribir**: para un valor que varias sesiones cambian, `get` la clave en el callback y construya el nuevo valor a partir de eso, no de una copia que cargó en `session.start`. La escritura de otra sesión se pierde si llega entre su `get` y su `set`.

845 

846Este botón suma uno a lo que el almacén contiene ahora, luego actualiza el dibujo:

847 

848```javascript theme={null}

849onPress: async () => {

850 // Read what the store holds now, which another session may have changed

851 const saved = Number((await $.store.get('count')) ?? 0)

852 // Save the new count, then show it

853 await $.store.set('count', saved + 1)

854 await update($, count, () => saved + 1)

855}

856```

857 

858Si una segunda sesión ha presionado su propio botón tres veces desde que esta sesión comenzó, esta pulsación muestra y guarda un recuento que incluye esos tres.

859 

860<h2 id="next-steps">

861 Próximos pasos

862</h2>

863 

864* [Reaccionar a eventos](/docs/es/plugins/mods/events): alimente su dibujo desde llamadas de herramientas y turnos

865* [Usar la API de mods](/docs/es/plugins/mods/api): alimente su dibujo desde temporizadores y llamadas de modelo

866* [Probar un dibujo](/docs/es/plugins/mods/test#test-a-drawing): presione sus botones desde una prueba, en más de una superficie

867* [Sitios de renderizado](/docs/es/plugins/mods/reference#render-sites) y [elementos](/docs/es/plugins/mods/reference#elements): propiedades de cada sitio y propiedades de cada elemento

plugins/mods/overview.md +269 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Descripción general de mods

6 

7> Agregue paneles, comandos y reglas de llamadas de herramientas a Claude Code con un mod. Vea qué puede hacer un mod, cómo crear o instalar uno, y dónde se ejecutan los mods.

8 

9Un mod es un [plugin](/docs/es/plugins/overview) que cambia cómo se ve y se comporta Claude Code. Está hecho de controladores de eventos JavaScript o TypeScript: Claude Code llama a uno cuando ocurre un evento, como una llamada de herramienta, un mensaje enviado, o una parte de la interfaz siendo dibujada, y el controlador puede observar el evento, cambiarlo, o hacerse cargo de él. Use un mod para agregar una característica propia a Claude Code, como un panel que muestre qué tan lleno está su contexto después de cada solicitud. Para los archivos en un mod y un ejemplo completo, vea [Cómo funciona un mod](#how-a-mod-works).

10 

11<Note>

12 Los [hooks](/docs/es/hooks) existentes de Claude Code también se ejecutan en eventos, como un comando de shell, una solicitud HTTP, o un mensaje que usted configura en un archivo de configuración. Los controladores de un mod son funciones que se ejecutan dentro de Claude Code en su lugar. Claude Code llama a ambos tipos de hooks: en estas páginas, "hook" significa un controlador de un mod, y el tipo de archivo de configuración es un "settings hook".

13</Note>

14 

15<h2 id="what-a-mod-can-do">

16 Qué puede hacer un mod

17</h2>

18 

19Los settings hooks, skills, líneas de estado, y servidores MCP funcionan desde fuera de Claude Code: cada uno ejecuta un script, o le da a Claude texto o herramientas. Un mod se ejecuta dentro de Claude Code, por lo que puede hacer cosas que ellos no pueden:

20 

21* **Dibujar una interfaz que pueda usar**: un panel junto a la transcripción o una banda encima del mensaje, con pestañas, botones, y campos de texto. Vea [Dibujar en la interfaz](/docs/es/plugins/mods/interface).

22* **Redibujar la propia interfaz de Claude Code**: reemplazar o cambiar el estilo de partes que Claude Code dibuja a sí mismo, como la fila de una llamada de herramienta, el spinner, o el diálogo en el que Claude hace preguntas. Vea [Cambiar lo que Claude Code ya dibuja](/docs/es/plugins/mods/interface#change-what-claude-code-already-draws).

23* **Intervenir en una llamada de herramienta o una solicitud**: por ejemplo, mantener una llamada de herramienta mientras hace una pregunta al usuario, responderla sin ejecutar la herramienta, o enviar una solicitud a un modelo diferente. Vea [Proteger o cambiar una llamada de herramienta](/docs/es/plugins/mods/events#guard-or-change-a-tool-call) y [Seguir un turno](/docs/es/plugins/mods/events#follow-a-turn).

24* **Ejecutar su propio código en un comando**: un `/command` que ejecuta su función de inmediato, sin un turno de Claude, incluso mientras Claude está trabajando. Vea [Agregar un comando o una herramienta](/docs/es/plugins/mods/api#add-a-command-or-a-tool).

25* **Compartir datos entre hooks**: los hooks de un mod comparten las variables en su archivo, por lo que lo que un hook registra, otro puede mostrar. Por ejemplo, un hook puede contar llamadas de herramientas mientras otro muestra el conteo junto al spinner, o uno puede leer el uso de tokens de cada solicitud mientras otro lo grafica en un panel. Vea [Reaccionar a eventos](/docs/es/plugins/mods/events).

26 

27Los mods funcionan en la CLI de Claude Code y en la pestaña Code de la aplicación Claude Desktop. Vea [Dónde se ejecutan los mods](#where-mods-run) para entender cómo se comportan en otros lugares, como en la extensión de VS Code, `claude -p`, y sesiones en la nube. Si un settings hook, un skill, o un servidor MCP ya hace lo que necesita, [compárelos](#compare-mods-settings-hooks-skills-and-mcp-servers) antes de escribir un mod. Para administrar mods para una organización, vea [Administrar mods para su organización](/docs/es/plugins/mods/admin).

28 

29<h2 id="get-a-mod">

30 Obtener un mod

31</h2>

32 

33Puede comenzar con un mod de una de tres formas:

34 

35* **Usar uno que ya tiene**: algunas de las propias características de Claude Code son mods, como `/diff`. Vea [Mods integrados en Claude Code](#mods-built-into-claude-code).

36* **Hacer uno**: describa lo que desea en una sesión de Claude Code, y Claude escribe el mod. Vea [Pedir a Claude un mod](/docs/es/plugins/mods/create#ask-claude-for-a-mod). Para aprender cómo funciona el código de un mod, [escriba uno usted mismo](/docs/es/plugins/mods/create#write-a-mod-yourself).

37* **Instalar uno**: vea [Instalar o actualizar un mod](#install-or-update-a-mod)

38 

39<h3 id="install-or-update-a-mod">

40 Instalar o actualizar un mod

41</h3>

42 

43<Warning>

44 Un mod es código que se ejecuta con sus permisos. Puede leer y escribir sus archivos, iniciar procesos, y hacer solicitudes de red. Instale mods solo de autores y mercados en los que confíe. Vea [Decidir si confiar en un mod](#decide-whether-to-trust-a-mod).

45</Warning>

46 

47Un mod se instala como un plugin, desde un mercado. Proporcione el nombre del plugin, una `@`, y el nombre del mercado. Estos ejemplos instalan un plugin llamado `token-chart` desde un mercado llamado `your-org`:

48 

49* En una sesión de Claude Code, ejecute `/plugin install token-chart@your-org`.

50* En su shell, ejecute `claude plugin install token-chart@your-org`.

51 

52[Instalar plugins](/docs/es/plugins/install) cubre mercados, alcances, la extensión de VS Code y la aplicación Desktop, y [mantener plugins actualizados](/docs/es/plugins/install#keep-plugins-updated), todo lo cual se aplica a un plugin que contiene un mod sin cambios.

53 

54Si instala o actualiza un mod desde su shell mientras una sesión está abierta, ejecute `/reload-plugins` en esa sesión para cargarlo. De lo contrario, se carga la próxima vez que inicie Claude Code.

55 

56<h2 id="decide-whether-to-trust-a-mod">

57 Decidir si confiar en un mod

58</h2>

59 

60Un mod es código que se ejecuta con sus permisos, dentro de Claude Code. Instale mods solo de autores y [mercados en los que confíe](/docs/es/plugins/security).

61 

62<h3 id="what-a-mod-can-reach">

63 A qué puede acceder un mod

64</h3>

65 

66Un mod se ejecuta con sus permisos, por lo que antes de instalar uno, sepa a qué tiene acceso. Una vez que se carga, un mod puede:

67 

68* **Actuar en su máquina como usted**: leer y escribir archivos en cualquier lugar donde su cuenta de usuario pueda, iniciar programas, y hacer solicitudes de red

69* **Leer sus secretos**: variables de entorno y archivos de configuración, incluida una clave API que mantenga en cualquiera de ellos

70* **Ver su sesión**: cada mensaje que envía y cada llamada de herramienta que Claude hace

71* **Cambiar su sesión**: reescribir un mensaje o una llamada de herramienta, enviar un mensaje como si lo hubiera escrito, o enviar un mensaje a otra de sus sesiones

72* **Actuar sin pedirle**: aprobar una llamada de herramienta antes de que se le pregunte

73* **Gastar su uso**: llamar a un modelo en su plan o clave API

74 

75Un mod que aprueba llamadas de herramientas puede aprobar una que una regla `ask` solicitaría, o que uno de sus propios hooks `PreToolUse` bloqueó. [Extender permisos con hooks](/docs/es/permissions#extend-permissions-with-hooks) enumera lo que tal mod puede aprobar, incluido cuándo puede aprobar una llamada que una regla `deny` rechaza.

76 

77Un mod puede cambiar el estilo de gran parte de la interfaz de Claude Code, pero no el mensaje de permiso. No puede cambiar lo que un mensaje le muestra.

78 

79<h3 id="list-what-a-mod-does-before-you-install-one">

80 Enumerar lo que hace un mod antes de instalarlo

81</h3>

82 

83Antes de instalar un mod, puede enumerar qué eventos engancha y qué le pide a Claude Code que haga, como leer un archivo o hacer una solicitud de red, sin ejecutarlo. Obtenga primero los archivos del plugin, por ejemplo clonando su repositorio. Luego, en su shell, ejecute `claude plugin validate` en el directorio del plugin:

84 

85```bash theme={null}

86claude plugin validate ./some-mod

87```

88 

89Las líneas `hooks:` y `calls:` en la salida enumeran los eventos que el mod maneja y qué le pide a Claude Code que haga. [Revisar qué puede hacer un mod](/docs/es/plugins/mods/admin#review-what-a-mod-can-do) muestra la salida y qué llamadas buscar.

90 

91<h2 id="turn-mods-on-or-off">

92 Activar o desactivar mods

93</h2>

94 

95Los mods requieren Claude Code v2.1.287 o posterior, y están activados de forma predeterminada. En su shell, ejecute `claude --version` para verificar, y actualice Claude Code si el suyo es más antiguo.

96 

97Para desactivar los mods, elija cuántos detener y por cuánto tiempo. Para activarlos de nuevo, deshaga el mismo cambio:

98 

99* **Un mod**: deshabilite o desinstale su plugin desde la [pestaña **Installed** en `/plugin`](/docs/es/plugins/install#manage-installed-plugins)

100* **Cada mod instalado, para una sesión**: inicie Claude Code con [`--safe-mode`](/docs/es/cli-reference#cli-flags), que también deja fuera sus otras personalizaciones

101* **Cada mod que instaló, en cada sesión**: establezca [`"disableAllHooks": true`](/docs/es/settings-reference#disableallhooks) en `~/.claude/settings.json`. Sus settings hooks y línea de estado personalizada también se detienen. Lo que su organización administra sigue ejecutándose.

102 

103Si usa Claude Code a través de una organización, un administrador también puede limitar qué mods se cargan. Los administradores comienzan en [Evitar que los mods instalados por el usuario se carguen](/docs/es/plugins/mods/admin#stop-user-installed-mods-from-loading).

104 

105Para saber si los mods pueden cargarse para usted, vea [Verificar si los mods pueden cargarse](/docs/es/plugins/mods/troubleshoot#check-whether-mods-can-load).

106 

107<Note>

108 Si estableció `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` durante el acceso temprano, elimínelo. Claude Code v2.1.287 y posterior lo ignora, por lo que establecerlo en `0` no mantiene los mods desactivados.

109</Note>

110 

111<h3 id="see-which-mods-a-session-loaded">

112 Ver qué mods cargó una sesión

113</h3>

114 

115Para ver qué mods cargó una sesión de terminal, ejecute `/plugin` en el mensaje de Claude Code. Una línea atenuada bajo las pestañas da el conteo y los nombres, como `1 mod active · first-mod`. Si un mod que instaló no aparece allí, vea [Averiguar por qué un mod no hace nada](/docs/es/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing).

116 

117<h2 id="how-a-mod-works">

118 Cómo funciona un mod

119</h2>

120 

121Un mod es un [plugin](/docs/es/plugins/overview) cuyo código registra controladores de eventos, llamados hooks. Claude Code ejecuta un hook cuando ocurre su evento, como cuando Claude llama a una herramienta o cuando se dibuja el spinner. Un mod pequeño tiene tres archivos:

122 

123```text theme={null}

124first-mod/

125├── .claude-plugin/

126│ └── plugin.json

127└── hooks/

128 ├── hooks.json

129 └── register.js

130```

131 

132* **`plugin.json`**: el [manifiesto](/docs/es/plugins/manifest-reference) del plugin

133* **`hooks.json`**: [apunta a su archivo de código](/docs/es/plugins/mods/reference#files)

134* **`register.js`**: [su código](/docs/es/plugins/mods/create#write-a-mod-yourself), llamado el módulo de hooks. Le dice a Claude Code en qué eventos ejecutar sus funciones.

135 

136Este es un `register.js` completo. Cuenta las llamadas de herramientas que Claude hace y muestra el conteo junto al spinner mientras Claude trabaja, como en `Thinking · tool calls: 3…`.

137 

138```javascript hooks/register.js theme={null}

139// The count, shared by the two hooks below

140let calls = 0

141 

142// Claude Code calls this once when the mod loads

143export function register(on) {

144 // Runs each time Claude is about to use a tool

145 on('tool.call', async ($, e, next) => {

146 calls += 1

147 // Ask Claude Code to draw the interface again, so the new count shows

148 $.ui.invalidate('ui.render')

149 // Let the tool run as usual

150 return next(e)

151 })

152 

153 // Runs each time Claude Code draws the spinner

154 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

155 // Keep Claude Code's spinner, with the count added after its word

156 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

157 })

158}

159```

160 

161El archivo registra dos hooks, y ambos usan la variable `calls` en la parte superior:

162 

163* **El hook [`tool.call`](/docs/es/plugins/mods/reference#tools)** se ejecuta cada vez que Claude está a punto de usar una herramienta. Suma uno a `calls`, le pide a Claude Code que dibuje la interfaz de nuevo, y deja que la herramienta se ejecute como de costumbre.

164* **El hook [`ui.render`](/docs/es/plugins/mods/reference#interface)** se ejecuta cada vez que Claude Code dibuja el spinner. Mantiene el propio spinner de Claude Code y agrega el conteo después de la palabra.

165 

166Esta grabación muestra el mod en acción. Observe la línea del spinner encima del cuadro de mensaje: mientras Claude enumera un directorio y lee dos archivos, lee `Thinking · tool calls: 1…`, luego `2…`, luego `3…`.

167 

168<Frame>

169 <video autoPlay muted loop playsInline controls className="w-full dark:hidden" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-overview-light.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=00a18aa0743b59a700f0275ce226e6d1" aria-label="In a Claude Code session, the prompt 'list the files here and read the README' is typed and sent. While Claude works, the spinner reads 'Thinking · tool calls: 1', then 2, then 3, as Claude lists the files and reads two of them." data-path="images/mods-overview-light.mp4" />

170 

171 <video autoPlay muted loop playsInline controls className="w-full hidden dark:block" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-overview-dark.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=d5223da2fef16ceaaa214a36d72c0536" aria-label="In a Claude Code session, the prompt 'list the files here and read the README' is typed and sent. While Claude works, the spinner reads 'Thinking · tool calls: 1', then 2, then 3, as Claude lists the files and reads two of them." data-path="images/mods-overview-dark.mp4" />

172</Frame>

173 

174<h3 id="what-a-hook-can-do-with-an-event">

175 Qué puede hacer un hook con un evento

176</h3>

177 

178Claude Code ejecuta su hook antes de actuar sobre el evento, por lo que el hook decide qué sucede a continuación. Tiene tres opciones:

179 

180* **Observar**: notar qué está sucediendo y dejar que continúe sin cambios, como lo hace el hook `tool.call` en el ejemplo

181* **Reescribir**: cambiar el evento antes de que continúe, como lo hace el hook `ui.render` cuando agrega el conteo al spinner

182* **Responder**: manejar el evento a sí mismo, por lo que el comportamiento habitual no se ejecuta, como rechazar un comando

183 

184Para hacer cualquier cosa fuera de su propio código, como dibujar, agregar un comando, llamar a un modelo, leer un archivo, iniciar un proceso, o hacer una solicitud de red, un hook llama a la API de mods. Un hook no tiene otra forma de hacer esas cosas, que es por qué Claude Code puede [enumerar qué hace un mod](#list-what-a-mod-does-before-you-install-one) antes de instalarlo.

185 

186Para el código detrás de cada opción, vea [Reaccionar a eventos](/docs/es/plugins/mods/events#how-a-hook-handles-an-event). Para lo que un hook puede llamar, vea [Usar la API de mods](/docs/es/plugins/mods/api).

187 

188<h3 id="where-mods-run">

189 Dónde se ejecutan los mods

190</h3>

191 

192Los hooks de un mod se ejecutan en cada tipo de sesión que carga el plugin. El dibujo es más estrecho: solo la terminal y la aplicación Desktop muestran los paneles, bandas, y filas reemplazadas de un mod. Esta tabla enumera cada lugar donde podría ejecutar Claude Code:

193 

194| Dónde ejecuta Claude Code | Los hooks se ejecutan | Lo que el mod dibuja aparece |

195| :- | :- | :- |

196| `claude` en una terminal, incluida la terminal integrada de un editor y el plugin de JetBrains | Sí | Sí |

197| La pestaña Code de la aplicación Desktop, excepto en una sesión WSL | Sí | Sí, excepto elementos que la [tabla de elementos](/docs/es/plugins/mods/reference#elements) marca como solo terminal |

198| Una [sesión WSL](/docs/es/desktop-wsl) en la aplicación Desktop | No, porque los plugins no están disponibles en sesiones WSL | No |

199| El panel de chat de la extensión de VS Code | Sí | No |

200| `claude -p` y el [Agent SDK](/docs/es/agent-sdk/overview) | Sí | No |

201| [Remote Control](/docs/es/remote-control) desde claude.ai o la aplicación móvil | Sí, en la sesión en su máquina | En la terminal en su máquina |

202| Una [sesión en la nube](/docs/es/claude-code-on-the-web) | Sí, para un plugin que [llega a la sesión en la nube](/docs/es/cloud-environments#what-carries-over-from-your-setup) | No |

203 

204Un mod que dibuja puede verificar en qué aplicación se está ejecutando y recurrir a una línea en la transcripción o una respuesta de texto de comando donde nada se dibuja.

205 

206<h2 id="control-mods-for-your-organization">

207 Controlar mods para su organización

208</h2>

209 

210Los administradores deciden si los mods se ejecutan y cuáles, a través de [configuración administrada](/docs/es/managed-settings). [Administrar mods para su organización](/docs/es/plugins/mods/admin) cubre qué sucede de forma predeterminada, cómo revisar un mod, y cómo aplicar una política con un mod propio.

211 

212<h2 id="compare-mods-settings-hooks-skills-and-mcp-servers">

213 Comparar mods, settings hooks, skills, y servidores MCP

214</h2>

215 

216Los mods, settings hooks, skills, y servidores MCP se superponen. Esta tabla muestra qué es cada uno y cuándo elegirlo.

217 

218| | Mod | Settings hook | Skill | Servidor MCP |

219| :- | :- | :- | :- | :- |

220| Qué es | Funciones en un plugin que Claude Code llama en su propio proceso | Un comando de shell, solicitud HTTP, o mensaje que Claude Code ejecuta en un evento del ciclo de vida | Un archivo `SKILL.md` de instrucciones que Claude lee | Un proceso o servicio externo que le da herramientas a Claude |

221| Qué puede cambiar | Llamadas de herramientas, mensajes, comandos, turnos, y lo que la interfaz dibuja | Si una llamada de herramienta o mensaje continúa, los argumentos y resultado de una llamada de herramienta, y contexto agregado para Claude | Lo que Claude sabe y hace | Qué herramientas tiene Claude |

222| ¿Puede dibujar en la interfaz? | Sí | No | No | No |

223| Qué escribe | JavaScript o TypeScript | Un script y una entrada `settings.json` | Markdown | Un servidor en cualquier idioma |

224| Elíjalo cuando | Desea un panel, una banda encima del mensaje, un comando personalizado, o reescribir un evento | Desea bloquear, permitir, o registrar un evento con un script que ya tiene | Sigue pegando las mismas instrucciones en el chat | Claude necesita llegar a un sistema externo |

225 

226Cada uno de los otros tiene su propia página: [Hooks](/docs/es/hooks), [Skills](/docs/es/skills), y [MCP](/docs/es/mcp). Un plugin puede contener los cuatro, por lo que un mod puede enviarse en el mismo plugin que un skill y un servidor MCP.

227 

228<h2 id="mods-built-into-claude-code">

229 Mods integrados en Claude Code

230</h2>

231 

232Algunas de las propias características de Claude Code son mods. Para ver los que su sesión tiene, ejecute `/plugin` en el mensaje de Claude Code y vaya a la pestaña **Installed**, que los enumera bajo **Built-in**. No puede actualizar o desinstalar un mod integrado, y la última columna de la tabla dice cómo desactivar cada uno. La línea [`mods active`](#see-which-mods-a-session-loaded) deja fuera los mods integrados.

233 

234Esta tabla enumera cada entrada por el nombre que `/plugin` muestra:

235 

236| Nombre en `/plugin` | Qué hace | Dónde está activado | Cómo desactivarlo |

237| :- | :- | :- | :- |

238| `cc-plugin-agents-md` | Carga `AGENTS.md` como instrucciones del proyecto | Cada sesión, aparte de [las que no pueden leer `AGENTS.md`](/docs/es/memory#when-agents-md-support-is-unavailable) | Desactívelo en `/plugin`, o [elija qué archivos de instrucciones se cargan](/docs/es/memory#choose-which-instruction-files-load) |

239| `cc-plugin-diff` | Se hace cargo de [`/diff`](/docs/es/interactive-mode#review-changes-with-%2Fdiff) y dibuja su panel | Sesiones de terminal interactivas | Desactívelo en `/plugin`. `/diff` permanece, y la versión integrada de Claude Code del comando responde. |

240| `cc-plugin-plugin-authoring` | Le da a Claude el skill [`plugin-authoring`](/docs/es/plugins/mods/create#ask-claude-for-a-mod) para escribir mods. Contiene un skill y sin código de mod. | A menos que Anthropic haya desactivado los mods instalados de forma remota | Desactívelo en `/plugin` |

241| `cc-plugin-sec-default` | Protege lo que su organización administra de los mods que instala un usuario | [Dónde se carga el guardia](/docs/es/plugins/mods/admin#know-what-happens-by-default) | No puede. Un administrador [establece el orden](/docs/es/plugins/mods/admin#install-your-organizations-mods) en la configuración administrada |

242| `cc-plugin-telemetry` | Envía los registros de análisis que Claude Code y sus mods integrados registran | Dondequiera que el análisis propio de Claude Code esté activado | Desactívelo en `/plugin`, o desactive el análisis, por ejemplo con [`DISABLE_TELEMETRY`](/docs/es/env-vars) |

243| `cc-plugin-you-should-know` | Ejecuta un subagente lateral que vigila su espalda mientras Claude trabaja en tareas más largas. Cuando encuentra algo que vale la pena saber que podría perderse, le muestra una nota encima del mensaje. | Desactivado de forma predeterminada. Enumerado en `/plugin` -> **Installed** -> **Show disabled** si está disponible para su organización. Habilitar con [`/plugin enable cc-plugin-you-should-know@builtin`](/docs/es/plugins/cli-reference#plugin-in-a-session). | Desactívelo en `/plugin` |

244 

245La configuración y las banderas que detienen los mods instalados, como `disableAllHooks`, `--bare`, y `--safe-mode`, no detienen los mods integrados.

246 

247<h3 id="read-the-source-of-built-in-mods">

248 Leer la fuente de los mods integrados

249</h3>

250 

251La fuente de cuatro de estos mods es pública en el [directorio `mods` del repositorio de Claude Code](https://github.com/anthropics/claude-code/tree/main/mods). Cada uno es un plugin completo con su módulo de hooks y pruebas:

252 

253* [`diff`](https://github.com/anthropics/claude-code/tree/main/mods/diff): el panel `/diff`, con botones vinculados a acciones de teclado y desplazamiento que el mod maneja a sí mismo

254* [`agents-md`](https://github.com/anthropics/claude-code/tree/main/mods/agents-md): carga `AGENTS.md` como instrucciones del proyecto, con una opción [`userConfig`](/docs/es/plugins/components#user-configuration)

255* [`sec-default`](https://github.com/anthropics/claude-code/tree/main/mods/sec-default): el guardia descrito en [Saber qué sucede de forma predeterminada](/docs/es/plugins/mods/admin#know-what-happens-by-default), un modelo para un mod que aplica política

256* [`telemetry`](https://github.com/anthropics/claude-code/tree/main/mods/telemetry): agrega métodos que otros mods pueden llamar, y envía sus tipos

257 

258<h2 id="next-steps">

259 Próximos pasos

260</h2>

261 

262* [Crear un mod](/docs/es/plugins/mods/create): construya uno que cuente llamadas de herramientas, muestre el conteo junto al spinner, y agregue un comando, y aprenda el bucle de edición y recarga

263* [Dibujar en la interfaz](/docs/es/plugins/mods/interface): paneles, la banda encima del mensaje, botones, campos de texto, y estado

264* [Reaccionar a eventos](/docs/es/plugins/mods/events): llamadas de herramientas, mensajes, turnos, y el orden en que se ejecutan los mods

265* [Usar la API de mods](/docs/es/plugins/mods/api): comandos, herramientas, llamadas de modelo, temporizadores, y archivos

266* [Probar un mod](/docs/es/plugins/mods/test): pruebas automatizadas que se ejecutan sin una sesión

267* [Solucionar problemas de un mod](/docs/es/plugins/mods/troubleshoot): las razones por las que un mod no hace nada, y el registro de depuración

268* [Administrar mods para su organización](/docs/es/plugins/mods/admin): valores predeterminados, configuración administrada, revisión de un mod, y mods de política

269* [Referencia de mods](/docs/es/plugins/mods/reference): cada evento, método, elemento, y límite

plugins/mods/test.md +422 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Prueba un mod

6 

7> Escribe pruebas automatizadas para un mod de Claude Code que generen eventos, simulen las respuestas de Claude Code y presionen botones, sin sesión, inicio de sesión ni red.

8 

9Puedes escribir pruebas automatizadas para un mod y ejecutarlas desde tu shell con [`claude plugin test`](/docs/es/plugins/mods/reference#commands). Una prueba genera los eventos que tus hooks manejan y verifica qué hicieron los hooks, para que detectes un problema antes de que llegue a una sesión. El primer ejemplo prueba el mod de [Crear un mod](/docs/es/plugins/mods/create).

10 

11<h2 id="write-a-test">

12 Escribe una prueba

13</h2>

14 

15Una prueba carga tu mod, envía eventos a través de sus hooks de la manera que lo haría Claude Code, y verifica qué hicieron los hooks, sin una sesión, un inicio de sesión ni una red. Ejecutas las pruebas desde tu shell con `claude plugin test`, y cada archivo de prueba importa el kit de pruebas, una biblioteca de pruebas en el módulo `claude-code/testing`.

16 

17Dale a cada archivo de prueba un nombre que termine en `.test.ts`, como `first-mod.test.ts`, y guárdalo en cualquier lugar del directorio del plugin. Cada archivo de prueba necesita al menos una `test()`, o la ejecución falla con `declares no test(): nothing ran`. Un archivo de prueba puede importar los propios archivos de tu mod y helpers `.ts` hermanos, para que puedas hacer pruebas unitarias de funciones simples, como las reglas de un juego, sin el kit.

18 

19Esta prueba genera dos llamadas de herramientas, ejecuta el comando `/tally` de [Crear un mod](/docs/es/plugins/mods/create), y verifica que la respuesta cuente ambas. Su primera línea es un [stub](#stub-what-claude-code-would-answer), que responde las llamadas de herramientas en lugar de Claude Code. Guárdalo como `first-mod/tests/first-mod.test.ts`:

20 

21```typescript first-mod/tests/first-mod.test.ts theme={null}

22import { expect, test } from 'claude-code/testing'

23 

24test('/tally reports the tool calls the mod has seen', async ($, on) => {

25 // Answer each tool call in Claude Code's place, so no tool runs

26 on('tool.call', () => ({ result: 'ok' }))

27 

28 // Raise two tool calls, which the mod's tool.call hook counts

29 await $.tool.call({ tool: 'Bash', command: 'ls' })

30 await $.tool.call({ tool: 'Read', file_path: 'README.md' })

31 

32 // Run /tally and check the text its hook returns

33 const answer = await $.command.run({ command: 'tally', args: '' })

34 expect(answer.text).toBe('Claude has made 2 tool calls since this mod loaded')

35})

36```

37 

38En tu shell, ejecuta las pruebas desde el directorio `first-mod`:

39 

40```bash theme={null}

41claude plugin test

42```

43 

44La salida nombra cada prueba y si pasó, con tiempos que varían de una ejecución a otra:

45 

46```text theme={null}

47tests/first-mod.test.ts:

48(pass) /tally reports the tool calls the mod has seen [22.87ms]

49 

50 1 pass

51 0 fail

52Ran 1 test across 1 file. [0.19s]

53```

54 

55Cada `$.tool.call` pasó a través del hook [`tool.call`](/docs/es/plugins/mods/reference#tools) del mod, que agregó uno a su contador y pasó la llamada al stub. No se ejecutó `ls` y no se leyó ningún archivo. `$.command.run` luego fue al hook [`command.run`](/docs/es/plugins/mods/reference#commands-and-configuration) del mod, y `answer` es el objeto que ese hook devolvió.

56 

57El comando sale con estado 1 cuando una prueba falla, por lo que funciona en CI. Si tus propios mods no pueden cargarse en el shell que lo ejecuta, imprime una línea que comienza con `claude plugin test: hooks modules are turned off` con la razón, y sale con estado 1.

58 

59<h3 id="stub-what-claude-code-would-answer">

60 Simula lo que Claude Code respondería

61</h3>

62 

63Ningún modelo, almacén o herramienta se ejecuta en una prueba, por lo que dondequiera que tu mod espere que Claude Code responda, la prueba proporciona la respuesta con un stub. Una función de prueba recibe dos argumentos para eso:

64 

65* **`$`**: el `$` propio de la prueba, que se sitúa donde Claude Code lo hace. No es la [API de mods](/docs/es/plugins/mods/reference#mods-api-methods) que recibe un hook. Cada uno de sus métodos genera el evento del mismo nombre, lo envía a través de los hooks de tu mod, y se resuelve al resultado: `$.tool.call({ tool: 'Bash', command: 'ls' })` genera `tool.call`. `$.command.run`, `$.prompt.submit`, `$.session.start`, y `$.turn.complete` funcionan de la misma manera, y `$.classic.Stop` y los otros métodos `$.classic` generan un [evento de hook de configuración](/docs/es/plugins/mods/events#hook-the-settings-hook-events). Una prueba no puede generar directamente una llamada de API de mods como `ui.close`. Actívala a través de tu mod, por ejemplo presionando el botón que cierra el panel.

66* **`on`**: llámalo para registrar stubs, que son hooks que responden en lugar de Claude Code. Nombra un stub para una llamada de API de mods sin el `$.`, por lo que un stub registrado como `store.get` responde a `$.store.get` de tu mod. Cuando tu mod llama a [`$.model.complete`](/docs/es/plugins/mods/api#call-a-model) o [`$.store.get`](/docs/es/plugins/mods/interface#keep-state), un stub proporciona la respuesta.

67 

68Este ejemplo simula una llamada de modelo. El hook pertenece a un mod llamado `grader`, y maneja un comando `/grade` que envía una oración a un modelo e informa si la respuesta comienza con `PASS`. El archivo contiene solo el hook bajo prueba, por lo que el mod también necesita un `plugin.json` y un `hooks.json`, como en [Crear un mod](/docs/es/plugins/mods/create#write-a-mod-yourself). Para escribir `/grade` en una sesión, el mod también tiene que [registrar el comando](/docs/es/plugins/mods/api#add-a-command):

69 

70```javascript grader/hooks/register.js theme={null}

71export function register(on) {

72 on('command.run', { command: 'grade' }, async ($, e) => {

73 // e.args is the text typed after /grade

74 const reply = await $.model.complete({

75 model: 'haiku',

76 system: 'Grade the sentence. Start your reply with PASS or FAIL.',

77 prompt: e.args,

78 })

79 const passed = reply.isAnswered && reply.text.startsWith('PASS')

80 return { text: passed ? 'Passed' : 'Try again' }

81 })

82}

83```

84 

85Esta prueba simula la llamada del modelo para verificar qué hace el hook con una respuesta aprobada:

86 

87```typescript grader/tests/grader.test.ts theme={null}

88import { expect, test } from 'claude-code/testing'

89 

90test('a passing grade is reported', async ($, on) => {

91 // Answer the mod's $.model.complete call with a fixed reply, so no model runs

92 on('model.complete', () => ({

93 value: {

94 isAnswered: true,

95 text: 'PASS\nNice sentence.',

96 usage: { input_tokens: 10, output_tokens: 5, cache_read_input_tokens: 0, cache_creation_input_tokens: 0 },

97 },

98 }))

99 

100 // Run /grade, which makes the mod call the model

101 const answer = await $.command.run({ command: 'grade', args: 'The cat sat on the mat.' })

102 expect(answer.text).toBe('Passed')

103})

104```

105 

106La prueba pasa porque el `reply` del hook es el objeto bajo `value`, cuyo `text` comienza con `PASS`. Para verificar la otra rama, agrega una segunda prueba cuyo stub devuelva un `text` que comience con `FAIL`, y espera `Try again`.

107 

108Un stub para una llamada de API de mods devuelve un objeto con un campo `value`, que contiene lo que la llamada se resuelve en tu mod: `{ value: 7 }` hace que `$.store.get` se resuelva a `7`. Un stub para uno de los eventos de Claude Code, como [`turn.step`](/docs/es/plugins/mods/reference#turns) o `tool.call`, devuelve el resultado propio de ese evento, como `{ result: 'ok' }`. `$.session.send` y `$.prompt.fill` también toman el resultado del evento, como muestra la tabla. [Busca qué devuelve un stub](#look-up-what-a-stub-returns) muestra qué forma toma cada nombre común. Dos errores significan que un stub es incorrecto o falta. La salida de una prueba fallida incluye un bloque encabezado `the engine reported:`, y cada error aparece allí:

109 

110* `returned neither { value } nor { deny }`: un stub para una llamada de API de mods devolvió un valor simple

111* `no implementation for` seguido de un nombre: tu mod hizo esa llamada y ningún stub la responde

112 

113El kit también exporta mocks en memoria que responden un espacio de nombres completo por ti. `mock.clock(on)` responde [`$.clock`](/docs/es/plugins/mods/api#run-work-in-the-background), `mock.store(on, { count: 7 })` responde `$.store` desde un almacén que comienza con esas entradas, y `mock.env(on, { CI: 'true' })` responde `$.env.get` desde esas variables. `mock.clock` devuelve un reloj simulado que tu prueba avanza, por lo que una prueba de un temporizador no espera. `mock.store` no devuelve nada, por lo que para verificar qué guardó tu mod, escribe los dos stubs `store` tú mismo como lo hace la [prueba de dibujo](#test-a-drawing).

114 

115<h3 id="follow-the-test-kit’s-rules">

116 Sigue las reglas del kit de pruebas

117</h3>

118 

119El kit de pruebas tiene algunas reglas propias, y romper una produce los errores que los nuevos autores de pruebas encuentran primero:

120 

121* **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 $`.

122 

123* **[`session.start`](/docs/es/plugins/mods/reference#session) no se ejecuta por sí solo.** Cada prueba comienza con tu módulo recién cargado y ninguno de sus hooks llamado, por lo que las variables a nivel de módulo mantienen sus valores iniciales. Si un hook depende de lo que `session.start` configura, genéralo primero:

124 

125 ```typescript theme={null}

126 // Answer the event after your hook passes it on with next(e)

127 on('session.start', () => ({ cwd: '/work' }))

128 // Answer the $.command.register call your hook makes

129 on('command.register', () => ({ value: undefined }))

130 // Raise the event, which runs your session.start hook

131 await $.session.start({ surface: 'terminal', isInteractive: true, cwd: '/work' })

132 ```

133 

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

135 

136* **Un hook que devuelve `next(e)` necesita un stub para responder.** Cuando tu hook [`ui.render`](/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:

137 

138 ```typescript theme={null}

139 // Stands for what Claude Code would draw at the site

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

141 ```

142 

143 Con el stub registrado, el montaje tiene éxito, y `ui.find({ type: 'Text' })` devuelve ese elemento siempre que tu hook devolvió `next(e)`.

144 

145* **Un stub para `turn.step` es un generador asincrónico**, y la prueba lee el flujo hasta su fin para obtener el resultado:

146 

147 ```typescript theme={null}

148 on('turn.step', async function* ($, e) {

149 // Each yield is one piece of the model's streamed reply

150 yield { kind: 'text', index: 0, text: 'ok' }

151 // The return value is the result of the whole request

152 return { turnId: e.turnId, index: e.index, answer: 'ok', toolUses: [], stopReason: 'end_turn', usage: null }

153 })

154 

155 // Raise one request to the model, which runs your turn.step hook

156 const stream = $.turn.step({ turnId: 't', index: 0, model: 'claude-test', messageCount: 1 })

157 // Read every piece until the stream says it's done

158 let step = await stream.next()

159 while (step.done !== true) step = await stream.next()

160 const result = step.value

161 ```

162 

163 Cuando el bucle termina, `result` es el objeto que el stub devolvió, después de que tu hook `turn.step` haya tenido la oportunidad de cambiarlo. Aquí `result.answer` es `'ok'`.

164 

165* **Genera una llamada de herramienta con el nombre de la herramienta y los argumentos como campos**, como `await $.tool.call({ tool: 'Bash', command: 'ls' })`, y registra un stub `tool.call` que devuelva `{ result }`.

166 

167<h3 id="look-up-what-a-stub-returns">

168 Busca qué devuelve un stub

169</h3>

170 

171Cada llamada de API de mods que tu mod hace en una prueba necesita un stub que responda en lugar de Claude Code, excepto las pocas que el kit responde por sí solo: llamadas [`$.ui.invalidate`](/docs/es/plugins/mods/interface#redraw-when-something-changes) y [`$.state`](/docs/es/plugins/mods/interface#keep-state). Para llamadas `$.clock`, usa `mock.clock(on)`, o `$.clock.now()` de tu mod falla con `no implementation for clock.now`.

172 

173Esta tabla enumera las que los mods usan más. La primera columna es la llamada que tu mod hace o el evento que pasa con `next(e)`. La segunda es la función a pasar a `on` bajo ese nombre, por lo que la fila `$.store.get` se convierte en `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. Un `'...'` en un stub marca texto para que lo completes:

174 

175| Tu mod llama o pasa | Stub |

176| :- | :- |

177| `$.command.register`, `$.tool.register`, `$.ui.toast`, `$.ui.log`, `$.ui.status`, `$.ui.close`, `$.store.set` | `() => ({ value: undefined })`. Para `ui.toast` y `ui.log`, el texto es `e.text`. |

178| `$.store.get` | `($, e) => ({ value: saved.get(e.key) })` |

179| `$.fs.read` | `($, e) => ({ value: e.path.endsWith('notes.md') ? '# Notes' : '' })`. `e.path` llega como una ruta absoluta, así que compara con `endsWith`. |

180| `$.ui.open` | `() => ({ value: { isPlaced: true } })` |

181| `$.ui.ask` | Un stub `tool.call`, porque la pregunta la alcanza como una llamada a la herramienta `AskUserQuestion`: `($, e) => ({ result: { answers: { [e.questions[0].question]: 'Run it' } } })`. Verifica `e.tool` primero si tu mod pasa otras llamadas de herramientas. |

182| `$.model.complete` | `() => ({ value: { isAnswered: true, text: '...', usage } })` |

183| `$.process.run` | `($, e) => ({ value: { exitCode: 0, stdout: '...', stderr: '' } })`. `e.argv` es la lista de argumentos y `e.init` contiene `cwd` y `timeoutMs`. |

184| Cualquier llamada de API de mods que debería fallar | `() => ({ deny: 'the reason' })`, que hace que la llamada rechace en tu mod. Un stub que lanza se omite en su lugar. |

185| `session.start` | `() => ({ cwd: '/work' })` |

186| `turn.start` | `($, e) => ({ turnId: e.turnId })` |

187| `tool.call` | `() => ({ result: '...' })` |

188| `turn.complete` | `() => ({ text: '' })`. Genéralo con `$.turn.complete({ turnId, answer, durationMs, isAborted: false, usage: null })`. |

189| `prompt.submit` | `($, e) => ({ text: e.text })` |

190| `prompt.fill` | `() => ({ isFilled: true })` |

191| `$.prompt.read` | `() => ({ value: { text: '...', cursor: 0 } })` |

192| `$.ui.copy` | `() => ({ value: { isCopied: true } })` |

193| `$.session.messages` | `() => ({ value: [{ role: 'assistant', text: '...', toolUses: [] }] })` |

194| `$.session.id`, `$.agent.list` | `() => ({ value: 'abc123' })`, `() => ({ value: [] })` |

195| `session.send` | `() => ({ isDelivered: true })`. `e.to` llega como una cadena incluso cuando tu mod pasó `{ sessionId }`. |

196| `session.receive` | `($, e) => ({ text: e.text })`. Genéralo con `$.session.receive({ origin: { kind: 'peer-send-message' }, text })`. |

197| `ui.render` | `() => ({ type: 'Text', props: {}, children: ['...'] })` |

198 

199`expect` tiene las aserciones `toBe`, `toEqual`, `toMatch`, `toMatchObject`, `toContain`, `toBeDefined`, `toBeUndefined`, y `toThrow`, y `.not` antes de cualquiera de ellas.

200 

201<h2 id="test-a-timer">

202 Prueba un temporizador

203</h2>

204 

205Un mod que ejecuta trabajo en un temporizador necesita un reloj que la prueba controle, para que la prueba pueda avanzar el tiempo en lugar de esperar. `const clock = mock.clock(on)` devuelve un reloj simulado que comienza en `0` y se mueve solo cuando tu prueba lo mueve. Para comenzar en otro momento, pásalo en milisegundos, como en `mock.clock(on, { now: 5000 })`. El reloj tiene estos métodos:

206 

207| Método | Lo que hace |

208| :- | :- |

209| `await clock.advance(1000)` | Avanza el tiempo por esa cantidad de milisegundos y ejecuta cada temporizador que vence |

210| `await clock.set(5000)` | Avanza el tiempo a ese valor, como lo haría `advance` |

211| `clock.now()` | Devuelve el tiempo, que es lo que `$.clock.now()` de tu mod se resuelve a |

212| `await clock.settle()` | Ejecuta temporizadores que ya vencen, como una cadena de llamadas `$.clock.after` de cero retrasos, sin mover el tiempo |

213| `await clock.sleep(2000)` | Dentro de un stub, hace que ese stub responda solo una vez que la prueba haya avanzado tan lejos, que es cómo simulas un modelo o proceso lento |

214 

215Este hook pertenece a un mod llamado `countdown`, y maneja un comando `/countdown` que toma un número de segundos, inicia un temporizador `$.clock.every` de un segundo, y muestra un toast en cero. Como con `grader`, el archivo contiene solo el hook bajo prueba y no registra el comando:

216 

217```javascript countdown/hooks/register.js theme={null}

218export function register(on) {

219 on('command.run', { command: 'countdown' }, async ($, e) => {

220 // e.args is the text typed after /countdown

221 let left = Number(e.args)

222 const timer = $.clock.every(1000, () => {

223 left -= 1

224 if (left === 0) {

225 timer.cancel()

226 $.ui.toast('Time is up')

227 }

228 })

229 // Print nothing in the transcript

230 return {}

231 })

232}

233```

234 

235Esta prueba ejecuta `/countdown 3` y mueve el reloj simulado, por lo que verifica tres segundos de comportamiento sin esperar tres segundos:

236 

237```typescript countdown/tests/countdown.test.ts theme={null}

238import { expect, mock, test } from 'claude-code/testing'

239 

240test('the countdown ends with a toast', async ($, on) => {

241 // Answer every $.clock call from a clock the test controls

242 const clock = mock.clock(on)

243 // Collect the text of each toast the mod shows

244 const toasts: string[] = []

245 on('ui.toast', ($, e) => {

246 toasts.push(e.text)

247 return { value: undefined }

248 })

249 

250 await $.command.run({ command: 'countdown', args: '3' })

251 // After two seconds the timer has fired twice, and no toast is due

252 await clock.advance(2000)

253 expect(toasts).toEqual([])

254 // The third second brings the count to zero

255 await clock.advance(1000)

256 expect(toasts).toEqual(['Time is up'])

257})

258```

259 

260El primer `expect` muestra que el toast no viene temprano, y el segundo muestra que viene una vez. Cada `advance` se resuelve después de que los temporizadores que vencieron hayan ejecutado, por lo que la verificación en la siguiente línea ve su efecto.

261 

262<h2 id="test-a-drawing">

263 Prueba un dibujo

264</h2>

265 

266Una prueba puede dibujar uno de los [sitios de renderizado](/docs/es/plugins/mods/reference#render-sites) de tu mod, luego presionar, escribir en, y encontrar los elementos que dibujó. `$.ui.mount` dibuja el sitio a través del hook `ui.render` de tu mod y devuelve un identificador con un método para cada uno de esos. Para cubrir varias aplicaciones en una prueba, establece `surface` en la aplicación para la que dibujar. Esta prueba abre el panel de [Construye un panel con pestañas](/docs/es/plugins/mods/interface#build-a-pane-with-tabs), cambia pestañas, presiona el botón, y verifica el contador en la terminal y la aplicación de escritorio:

267 

268```typescript hello-tabs/tests/hello-tabs.test.ts theme={null}

269import { expect, test } from 'claude-code/testing'

270 

271// What Claude Code passes to a ui.render hook for this pane, apart from the app

272const PANE = {

273 plugin: 'hello-tabs',

274 component: 'Pane',

275 requestId: 'hello-tabs',

276 viewport: { columns: 100, rows: 30 },

277 props: {

278 title: 'Hello tabs',

279 isFocused: true,

280 bodyColumns: 60,

281 placement: 'inline',

282 scroll: { offset: 0, bodyRows: 10 },

283 view: {},

284 },

285} as const

286 

287test('the second tab counts presses and saves the count', async ($, on) => {

288 // Stub $.store with a Map, so the test can read what the mod saved

289 const saved = new Map<string, unknown>()

290 on('store.get', ($, e) => ({ value: saved.get(e.key) }))

291 on('store.set', ($, e) => {

292 saved.set(e.key, e.value)

293 return { value: undefined }

294 })

295 

296 // Draw the pane once for each app

297 for (const surface of ['terminal', 'desktop'] as const) {

298 const ui = await $.ui.mount({ ...PANE, surface })

299 // Press the buttons by the key the mod gave them

300 await ui.press({ key: 'tab-two' })

301 await ui.press({ key: 'more' })

302 // The second tab's count line is in the drawing

303 expect(await ui.find({ type: 'Text', text: /^Count: \d+$/ })).toBeDefined()

304 await ui.unmount()

305 }

306 

307 // One press in each app makes two

308 expect(saved.get('count')).toBe(2)

309})

310```

311 

312En tu shell, ejecuta `claude plugin test` desde el directorio `hello-tabs`. La prueba pasa cuando ambas aplicaciones dibujan la línea de contador y el mod ha guardado `2`. El contador se transfiere de la primera aplicación a la segunda porque ambos montajes usan el mismo módulo cargado.

313 

314El identificador que `$.ui.mount` devuelve tiene estos métodos, que direccionan elementos por la `key` que les diste:

315 

316| Método | Lo que hace |

317| :- | :- |

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

319| `input({ key: 'new-note', text: 'buy milk' })` | Escribe el texto en el `Input` con esa clave y presiona Enter. Agrega `kind: 'change'` para escribir sin enviar. |

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

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

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

323 

324Cada método se resuelve después de que tu controlador haya terminado, por lo que puedes verificar el resultado en la siguiente línea. Establece `props` en lo que Claude Code pasaría para ese sitio. La [tabla de sitios de renderizado](/docs/es/plugins/mods/reference#render-sites) enumera los props de cada sitio, y [los tipos para tu compilación](/docs/es/plugins/mods/create#get-the-types-for-your-build) tienen sus tipos.

325 

326Una prueba de dibujo verifica el árbol que devuelve tu hook y si es válido para esa aplicación. No verifica cómo la aplicación lo pinta, así que mira un nuevo diseño en una sesión real también.

327 

328<h3 id="test-a-drawing-after-clear">

329 Prueba un dibujo después de `/clear`

330</h3>

331 

332Cada prueba comienza con cada valor `$.state` en su predeterminado, que es cómo `/clear` los deja. Para probar qué hace tu mod a continuación, omite `session.start`, genera `classic.SessionStart` con `source: 'clear'`, y verifica qué dibuja tu mod.

333 

334Esta prueba verifica el módulo de [Carga un valor guardado nuevamente después de `/clear`](/docs/es/plugins/mods/interface#load-a-saved-value-again-after-clear). Agrégalo al archivo de [Prueba un dibujo](#test-a-drawing), donde `PANE` está definido. La primera prueba de ese archivo espera que el botón guarde el contador, como lo hace el botón en [Guarda desde más de una sesión](/docs/es/plugins/mods/interface#save-from-more-than-one-session):

335 

336```typescript hello-tabs/tests/hello-tabs.test.ts theme={null}

337test('the saved count comes back after /clear', async ($, on) => {

338 // The store already holds a count of 7

339 on('store.get', () => ({ value: 7 }))

340 // Answer the event after your hook passes it on with next(e)

341 on('classic.SessionStart', () => ({}))

342 

343 // Raise the event that fires after /clear, which runs your hook

344 await $.classic.SessionStart({ source: 'clear' })

345 

346 const ui = await $.ui.mount({ ...PANE, surface: 'terminal' })

347 await ui.press({ key: 'tab-two' })

348 // The pane shows the stored count, not the default of 0

349 expect(await ui.find({ type: 'Text', text: 'Count: 7' })).toBeDefined()

350})

351```

352 

353La prueba pasa cuando tu hook `classic.SessionStart` ha copiado el `7` guardado en `$.state` antes de que el panel se dibuje. Sin ese hook en tu módulo, el panel dibuja `Count: 0`, `find` devuelve `undefined`, y la prueba falla en `toBeDefined`.

354 

355<h2 id="test-a-mod-that-judges-other-mods">

356 Prueba un mod que juzga otros mods

357</h2>

358 

359Un mod que tu organización enumera en [`prependPlugins`](/docs/es/plugins/mods/admin) puede rechazar otro mod antes de que cargue. Para probar uno, establece el nivel de tu mod y dale a la prueba un segundo mod para que el tuyo admita o rechace:

360 

361* **`tier`**: llámalo una vez en la parte superior del archivo de prueba, como en `tier('prepend')`, para cargar tu mod como `prepend`, `append`, o `builtin`, su lugar en el [orden en que los mods se ejecutan](/docs/es/plugins/mods/events#the-order-mods-run-in). Sin él, tu mod carga como `user`.

362* **`plugins`**: pasa a `test` un objeto de opciones antes del cuerpo de la prueba. Su matriz `plugins` contiene mods que escribes en línea, cada uno con un `name` y una función `register`. Para cargar uno en algún lugar que no sea `user`, agrega `tier` a él.

363 

364Este archivo de prueba carga el [mod de política de la página de administración](/docs/es/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) primero. Verifica que el mod de política rechace un mod que inicia un proceso y admita uno que no:

365 

366```typescript acme-guard/tests/guard.test.ts theme={null}

367import { expect, test, tier } from 'claude-code/testing'

368 

369// Load the mod under test ahead of every other mod

370tier('prepend')

371 

372// A second mod whose code calls $.process.run, which the policy blocks

373const runner = {

374 name: 'runner',

375 register(on) {

376 on('tool.call', async ($, e, next) => {

377 await $.process.run(['ls'])

378 return { result: 'runner answered' }

379 })

380 },

381}

382 

383// A second mod that calls nothing the policy blocks

384const reader = {

385 name: 'reader',

386 register(on) {

387 on('tool.call', async ($, e, next) => {

388 return { result: 'reader answered' }

389 })

390 },

391}

392 

393test('refuses a mod that starts a process', { plugins: [runner] }, async ($, on) => {

394 on('tool.call', () => ({ result: 'claude code answered' }))

395 let message = ''

396 try {

397 // The first call on $ loads the mods, so the refusal is thrown here

398 await $.tool.call({ tool: 'Bash', command: 'ls' })

399 } catch (error) {

400 message = error.message

401 }

402 expect(message).toBe('runner: refused by acme-guard: Acme policy: mods may not call process.run')

403})

404 

405test('admits a mod that starts no process', { plugins: [reader] }, async ($, on) => {

406 on('tool.call', () => ({ result: 'claude code answered' }))

407 const out = await $.tool.call({ tool: 'Bash', command: 'ls' })

408 // The answer comes from reader, which shows that it loaded

409 expect(out).toEqual({ result: 'reader answered' })

410})

411```

412 

413En tu shell, ejecuta `claude plugin test` desde el directorio `acme-guard`. Ambas pruebas pasan con el mod de política como lo muestra la página de administración.

414 

415El kit carga cada mod en la primera llamada de la prueba a `$`. Cuando tu mod rechaza uno, esa llamada lanza, y el mensaje nombra el mod rechazado, el mod que lo rechazó, y tu razón. En la segunda prueba nada es rechazado, por lo que `reader` responde la llamada de herramienta antes de que llegue al stub.

416 

417<h2 id="next-steps">

418 Próximos pasos

419</h2>

420 

421* [Soluciona problemas de un mod](/docs/es/plugins/mods/troubleshoot): descubre por qué un mod no hace nada en una sesión

422* [Referencia de mods](/docs/es/plugins/mods/reference): cada evento de entrada y resultado, para escribir stubs

plugins/mods/troubleshoot.md +284 −0 created

Details

1> ## Documentation Index

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

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

4 

5# Solucionar problemas de un mod

6 

7> Descubre por qué un mod de Claude Code no hace nada: haz coincidir el síntoma o mensaje con su causa, busca mensajes de rechazo y lee el registro de depuración.

8 

9Cuando el módulo de un mod o uno de sus hooks falla, Claude Code lo omite y la sesión continúa, por lo que un mod roto puede parecer uno que no hace nada. Comienza verificando qué leyó Claude Code de tu mod y dónde reporta un problema, luego encuentra el síntoma o mensaje que tienes.

10 

11<h2 id="find-out-why-a-mod-does-nothing">

12 Descubre por qué un mod no hace nada

13</h2>

14 

15Cuando un mod no hace nada, dos verificaciones encuentran la razón: qué lee Claude Code de los archivos del mod y la línea que escribe cuando omite algo. Para la primera, en tu shell ejecuta [`claude plugin validate`](/docs/es/plugins/mods/create#check-what-claude-code-reads-from-your-mod) con el directorio del mod, como en `claude plugin validate ./first-mod`. Detecta un evento mal escrito, un manifiesto incorrecto y un módulo que Claude Code no puede leer, sin iniciar una sesión.

16 

17Cuando un módulo no se carga, se omite un hook o otro mod rechaza el tuyo, Claude Code escribe una línea que nombra tu mod. Dónde lees esa línea depende de la sesión:

18 

19* **Una sesión que recarga en caliente un directorio de plugins**: una línea tenue en la transcripción. Esa es una sesión interactiva que iniciaste con `--plugin-dir`, o una donde [habilitaste la recarga en caliente](/docs/es/plugins/mods/create#ask-claude-for-a-mod) para mods que Claude escribió.

20* **Cualquier otra sesión interactiva, como una que ejecuta un mod que instalaste desde un marketplace**: el [registro de depuración](#read-the-debug-log) solamente. Para obtener uno, inicia la sesión con `claude --debug`.

21* **Una ejecución `claude -p` con `--plugin-dir`**: stderr, en el formato de salida de texto predeterminado. Un rechazo por otro mod va al registro de depuración solamente.

22 

23<h2 id="check-whether-mods-can-load">

24 Verifica si los mods pueden cargarse

25</h2>

26 

27Para verificar si tu configuración permite que los mods se carguen en absoluto, sin instalar uno, ejecuta `claude plugin test` en tu shell, desde un directorio que no contenga un mod. No necesitas una sesión. El mensaje que imprime te dice el estado:

28 

29| El mensaje incluye | Qué significa |

30| :- | :- |

31| `no hooks module to load` | Los mods pueden cargarse. El comando no encontró ningún mod para probar en este directorio. |

32| `hooks modules are turned off here` | Una configuración está manteniendo tus mods fuera: `disableAllHooks` en tu propia configuración, o la política de tu organización |

33| `hooks modules are turned off in this process` | Anthropic ha desactivado los mods instalados de forma remota. Ninguna configuración en tu máquina los vuelve a activar. |

34 

35Una organización también puede establecer `allowManagedModsOnly` para permitir solo sus propios mods, que este comando no reporta. En ese caso, un mod que instales no se carga, y [un mensaje dice por qué](/docs/es/plugins/mods/troubleshoot#messages-from-the-built-in-guard).

36 

37<h2 id="the-mod-doesn’t-load">

38 El mod no se carga

39</h2>

40 

41Nada de lo que agrega el mod aparece: ningún comando, ningún dibujo y ningún cambio de comportamiento.

42 

43<h3 id="your-version-is-older-than-2-1-287">

44 Tu versión es anterior a 2.1.287

45</h3>

46 

47`claude --version` imprime una versión anterior a 2.1.287. Tu versión es anterior a que los mods estén activados de forma predeterminada.

48 

49[Actualiza Claude Code](/docs/es/setup#update-claude-code).

50 

51<h3 id="the-mods-active-line-doesn’t-name-the-mod">

52 La línea `mods active` no nombra el mod

53</h3>

54 

55Nada de lo que agrega el mod aparece, y la [línea `mods active`](/docs/es/plugins/mods/overview#see-which-mods-a-session-loaded) en `/plugin` no lo nombra. El módulo hooks no se cargó. Cuando Claude Code lo rechazó, el registro de depuración tiene una línea que comienza con `hooks module`, el nombre del mod y `not loaded:`, como en `hooks module first-mod@inline not loaded: disableAllHooks in managed settings` para un mod cargado con `--plugin-dir`.

56 

57Lee la razón después de los dos puntos. La sección [refusal messages](#refusal-messages) enumera cada una. Si el registro no tiene tal línea, trabaja a través de las otras entradas en este grupo.

58 

59<h3 id="a-claude-p-run-prints-hooks-module-not-loaded">

60 Una ejecución `claude -p` imprime `hooks module not loaded`

61</h3>

62 

63La línea comienza con el nombre del mod y va a stderr. El módulo hooks fue rechazado. Una ejecución no interactiva no tiene transcripción, por lo que el mensaje va a stderr.

64 

65Lee la razón después de los dos puntos. La sección [refusal messages](#refusal-messages) enumera cada una.

66 

67<h3 id="refusal-messages">

68 Mensajes de rechazo

69</h3>

70 

71Cada uno de estos sigue a `hooks module`, el nombre del mod y `not loaded:` en el registro de depuración.

72 

73| El mensaje comienza con | Qué significa |

74| :- | :- |

75| `hooks modules are turned off for installed plugins in this process` | Anthropic ha desactivado los mods instalados de forma remota. Ninguna configuración en tu máquina los vuelve a activar. |

76| `disableAllHooks in managed settings` | Tu organización desactivó los hooks de los plugins instalados |

77| `only managed plugins and built-in plugins run` | `allowManagedHooksOnly` está establecido, o `disableAllHooks` está establecido en un archivo de configuración que no sea configuración administrada |

78| `installed plugins that are not managed load no hooks module in this mode (--bare)` | Iniciaste Claude Code con `--bare` |

79| `another plugin of that name loads first` | Dos plugins comparten un nombre. Se usa el administrado o el que se cargó primero. |

80 

81<h3 id="messages-from-the-built-in-guard">

82 Mensajes del guardia integrado

83</h3>

84 

85En una máquina con configuración administrada, o para un usuario que inició sesión con un plan de Team o Enterprise, el [guardia integrado](/docs/es/plugins/mods/admin#know-what-happens-by-default) puede rechazar un mod o una de sus respuestas. Cada mensaje nombra la opción que el administrador de tu organización establece para cambiar la regla.

86 

87| El mensaje contiene | Qué significa | Dónde aparece |

88| :- | :- | :- |

89| `mods are limited to your organization's by policy (allowManagedModsOnly)` | Tu organización permite solo [sus propios mods](/docs/es/plugins/mods/admin#install-your-organizations-mods), por lo que el tuyo no se cargó | El registro de depuración y la transcripción en una [sesión que recarga en caliente un directorio de plugins](#find-out-why-a-mod-does-nothing) |

90| `tried to lift a deny rule in your settings` | El hook [`tool.check`](/docs/es/plugins/mods/reference#tools) de tu mod aprobó una llamada que una regla `deny` rechaza. La llamada permanece denegada. | La transcripción y el registro de depuración, una vez para cada mod en una sesión. En una ejecución `claude -p`, solo el registro de depuración. |

91| `the deny rules in your settings could not be checked for this call, so it is refused` | El guardia falló mientras verificaba una llamada que un mod aprobó, por lo que rechazó la llamada | La razón que Claude lee para la llamada denegada |

92 

93<h3 id="validate-passes-and-lists-no-hooks-line">

94 `validate` pasa y no enumera ninguna línea `hooks`

95</h3>

96 

97`hooks/hooks.json` no tiene una clave `modules`, o la clave está mal escrita.

98 

99Agrega `"modules": ["./register.js"]`.

100 

101<h3 id="hooks-module-did-not-load">

102 `hooks module did not load`

103</h3>

104 

105La línea comienza con el nombre del mod, luego `hooks module did not load:` y una razón, que proporciona el archivo y la línea cuando el problema está en tu código. Claude Code no pudo cargar el módulo, por ejemplo porque su código de nivel superior lanzó una excepción.

106 

107Corrige el error que la razón nombra.

108 

109<h3 id="options-do-not-fit-plugin-json-userconfig">

110 `options do not fit plugin.json userConfig`

111</h3>

112 

113La línea comienza con el nombre del mod, luego `hooks module did not load: options do not fit plugin.json userConfig:` y una razón. Una opción no se ajusta a su campo [`userConfig`](/docs/es/plugins/components#user-configuration), como un número por encima del `max` del campo, o un campo requerido no tiene valor.

114 

115Establece o cambia el valor. El final de la línea nombra su entrada `pluginConfigs` en `settings.json`.

116 

117<h3 id="no-mod-loads-in-a-directory-you-opened-for-the-first-time">

118 Ningún mod se carga en un directorio que abriste por primera vez

119</h3>

120 

121No has respondido al aviso de confianza para el directorio.

122 

123Inicia una sesión interactiva en ese directorio con `claude` y acepta el aviso de confianza que abre.

124 

125<h3 id="no-installed-plugin-loads-at-all">

126 Ningún plugin instalado se carga en absoluto

127</h3>

128 

129Iniciaste Claude Code con `--safe-mode`.

130 

131Inicia sin la bandera.

132 

133<h2 id="a-hook-is-skipped-or-a-mod-is-unloaded">

134 Se omite un hook o se descarga un mod

135</h2>

136 

137El mod se cargó y luego Claude Code omitió uno de sus hooks o lo descargó.

138 

139<h3 id="hook-skipped">

140 `hook skipped`

141</h3>

142 

143La línea nombra el mod y el evento, luego dice `hook skipped:` y una razón, como en `first-mod: tool.call hook skipped: threw Error: boom`. Un hook lanzó una excepción, se ejecutó más allá de su [límite de tiempo de 10 segundos](/docs/es/plugins/mods/reference#limits), o devolvió un resultado de forma incorrecta. La línea aparece una vez para cada evento y tipo de fallo hasta que el mod se recarga.

144 

145Corrige el error. El registro de depuración tiene una línea para cada ocurrencia.

146 

147<h3 id="it-crashed-the-hooks-worker">

148 `it crashed the hooks worker`

149</h3>

150 

151La línea comienza con el nombre del mod, como en `first-mod was unloaded: it crashed the hooks worker`. Los mods instalados comparten un hilo de trabajo. El trabajador dejó de responder o se bloqueó, y Claude Code rastreó eso a este mod y lo descargó. Un hook que bloquea el hilo, como un bucle que nunca espera, es una causa.

152 

153Corrige el hook.

154 

155<h3 id="mods-that-run-in-the-hooks-worker-are-off-for-this-session">

156 `mods that run in the hooks worker are off for this session`

157</h3>

158 

159La línea dice `hooks: mods that run in the hooks worker are off for this session: it crashed 3 times`. El trabajador se detuvo tres veces y Claude Code no pudo rastrear las paradas a un mod, por lo que descargó cada mod que no es integrado, incluidos los mods que tu organización instala. Esta línea llega a la transcripción en cada sesión interactiva.

160 

161Ejecuta `/reload-plugins` para cargarlos de nuevo.

162 

163<h2 id="a-tool-call-is-denied">

164 Se deniega una llamada de herramienta

165</h2>

166 

167El mod se cargó y sus hooks se ejecutan, y se rechaza una llamada de herramienta que tocó.

168 

169<h3 id="a-hook-changed-this-call’s-input-after-the-model-wrote-it">

170 `a hook changed this call's input after the model wrote it`

171</h3>

172 

173En modo automático, una llamada de herramienta denegada da esta razón. Un hook cambió la entrada de la llamada de herramienta después de que el [clasificador del lado del servidor](/docs/es/permission-modes#server-side-classifier-review) la revisó, por lo que esa revisión no cubre lo que se ejecutaría. El hook puede ser un hook [`tool.call`](/docs/es/plugins/mods/reference#tools) o [`turn.step`](/docs/es/plugins/mods/reference#turns) de un mod, o un hook de configuración [`PreToolUse`](/docs/es/hooks#pretooluse). El mensaje no dice cuál.

174 

175El mensaje le dice a Claude que emita la llamada una vez más como se registró. Si también se deniega, el hook cambia la entrada cada vez, así que desactiva el mod o el hook, o sal del modo automático y aprueba la llamada tú mismo.

176 

177<h3 id="a-message-about-the-deny-rules-in-your-settings">

178 Un mensaje sobre las reglas de denegación en tu configuración

179</h3>

180 

181`tried to lift a deny rule in your settings` y `the deny rules in your settings could not be checked for this call, so it is refused` ambos provienen del guardia integrado.

182 

183Búscalos en [Messages from the built-in guard](#messages-from-the-built-in-guard).

184 

185<h2 id="a-drawing-doesn’t-appear-or-respond">

186 Un dibujo no aparece o no responde

187</h2>

188 

189El mod se cargó y su panel, banda o controles no se comportan como esperas.

190 

191<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">

192 Un panel o banda está vacío o muestra el contenido habitual de Claude Code

193</h3>

194 

195El [árbol](/docs/es/plugins/mods/interface#build-a-tree-from-elements) que devolvió tu hook no se validó. Con `--plugin-dir`, la transcripción dice `ui.render (Pane) refused:` con la razón, como en `first-mod: ui.render (Pane) refused: Box prop "flexDirection" must be one of row, column, row-reverse, column-reverse; the engine drew its own`. El registro de depuración tiene `a hook returned a tree that does not validate` con la misma razón.

196 

197Lee la razón en esa línea. Las causas comunes son una propiedad que el elemento no toma y un elemento que la aplicación no tiene.

198 

199<h3 id="ui-open-runs-and-no-pane-appears">

200 `$.ui.open` se ejecuta y no aparece ningún panel

201</h3>

202 

203La llamada no provino de algo que el usuario hizo, y la terminal es más estrecha que 144 columnas.

204 

205Abre el panel desde un comando o un botón, o verifica el resultado `isPlaced` de la llamada. Consulta [Open a pane at the right time](/docs/es/plugins/mods/interface#open-a-pane-at-the-right-time).

206 

207<h3 id="hotkeys-do-nothing">

208 Las teclas de acceso rápido no hacen nada

209</h3>

210 

211Tu panel no tiene el enfoque del teclado.

212 

213Presiona Ctrl+X luego Tab, o haz clic en el panel. Ábrelo con `focus: true` desde un comando.

214 

215<h3 id="a-drawing-works-in-the-terminal-and-not-in-the-desktop-app">

216 Un dibujo funciona en la terminal y no en la aplicación de escritorio

217</h3>

218 

219El sitio o elemento no está disponible allí.

220 

221Verifica las [render sites](/docs/es/plugins/mods/reference#render-sites) y las tablas de [elements](/docs/es/plugins/mods/reference#elements).

222 

223<h2 id="an-edit-or-a-value-is-lost">

224 Se pierde una edición o un valor

225</h2>

226 

227El mod se ejecuta y un cambio que hiciste o un valor que mantuvo no está allí.

228 

229<h3 id="your-edits-don’t-take-effect">

230 Tus ediciones no tienen efecto

231</h3>

232 

233Estás editando un plugin que instalaste. Claude Code ejecuta la copia en caché para la versión instalada.

234 

235Desarrolla con `--plugin-dir` apuntando a tu copia de trabajo, como en `claude --plugin-dir ./first-mod`, que se recarga cuando guardas.

236 

237<h3 id="a-value-resets-when-the-module-reloads">

238 Un valor se reinicia cuando el módulo se recarga

239</h3>

240 

241Las variables a nivel de módulo se reinicializan en cada recarga.

242 

243[Mantén el valor en `$.state` o `$.store`](/docs/es/plugins/mods/interface#keep-state).

244 

245<h3 id="a-value-resets-after-/clear-/resume-or-/branch">

246 Un valor se reinicia después de `/clear`, `/resume` o `/branch`

247</h3>

248 

249Un valor se reinicia, o un valor guardado se reemplaza por su predeterminado. Cada uno de esos comandos reinicia `$.state` a sus valores predeterminados, y `session.start` no se dispara de nuevo.

250 

251[Carga el valor guardado de nuevo](/docs/es/plugins/mods/interface#load-a-saved-value-again-after-clear) en un hook `classic.SessionStart`.

252 

253<h2 id="read-the-debug-log">

254 Lee el registro de depuración

255</h2>

256 

257El registro de depuración tiene una línea para cada módulo que Claude Code carga o rechaza, cada hook que falla y cada resultado que rechaza, por lo que es donde buscar cuando la transcripción no muestra nada. Para escribir uno, en tu shell inicia Claude Code con `--debug`, o con `--debug-file <path>` para elegir dónde va:

258 

259```bash theme={null}

260claude --debug-file ./mod-debug.log --plugin-dir ./first-mod

261```

262 

263En otra terminal, sigue el archivo y filtra por el nombre de tu mod:

264 

265```bash theme={null}

266tail -f ./mod-debug.log | grep first-mod

267```

268 

269Un mod que se cargó tiene una línea que lo nombra y enumera los eventos que engancha. Un mod cargado con `--plugin-dir` aparece bajo su nombre seguido de `@inline`:

270 

271```text theme={null}

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

273```

274 

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

276 

277Mientras editas un mod cargado con `--plugin-dir`, la transcripción muestra una línea para cada recarga que nombra el mod y enumera sus hooks. Si un guardado rompe el módulo, la línea dice `reload failed, the previous version stays loaded:` con la razón, y la última versión que funcionó sigue ejecutándose.

278 

279<h2 id="next-steps">

280 Próximos pasos

281</h2>

282 

283* [Test a mod](/docs/es/plugins/mods/test): detecta problemas antes de que lleguen a una sesión

284* [Troubleshoot plugins](/docs/es/plugins/troubleshooting): problemas con la instalación y carga de un plugin que no son específicos de los mods

plugins/org.md +4 −1

Details

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

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

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

215| [`allowManagedModsOnly`](/docs/es/plugins/mods/admin#stop-user-installed-mods-from-loading) | Detiene cada [mod](/docs/es/plugins/mods/overview) instalado que no [cuenta como el de su organización](/docs/es/plugins/mods/admin#install-your-organizations-mods) de cargarse | No detiene un plugin que contiene un mod de instalar. Para eso, use las claves de marketplace en esta tabla |

215 216 

216Cada clave en la tabla es una configuración administrada, aparte de `enabledPlugins`, `syncClaudeAiPlugins` y `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL`:217Cada clave en la tabla es una configuración administrada, aparte de `enabledPlugins`, `syncClaudeAiPlugins`, `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` y `allowManagedModsOnly`:

217 218 

218* **`enabledPlugins`**: puede establecerla en cualquier alcance, y la configuración administrada la bloquea.219* **`enabledPlugins`**: puede establecerla en cualquier alcance, y la configuración administrada la bloquea.

219* **`syncClaudeAiPlugins`**: cada usuario también puede establecerla en su propia configuración de usuario o local. Consulte su [alcance en la referencia de configuración](/docs/es/settings-reference#syncclaudeaiplugins).220* **`syncClaudeAiPlugins`**: cada usuario también puede establecerla en su propia configuración de usuario o local. Consulte su [alcance en la referencia de configuración](/docs/es/settings-reference#syncclaudeaiplugins).

220* **`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL`**: esta es una variable de entorno que entrega a través del bloque `env` administrado que se muestra bajo [Turn updates off for the whole fleet](#turn-updates-off-for-the-whole-fleet).221* **`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL`**: esta es una variable de entorno que entrega a través del bloque `env` administrado que se muestra bajo [Turn updates off for the whole fleet](#turn-updates-off-for-the-whole-fleet).

222* **`allowManagedModsOnly`**: esta es una opción en un plugin built-in, que establece bajo `pluginConfigs` en configuración administrada. Consulte [Stop user-installed mods from loading](/docs/es/plugins/mods/admin#stop-user-installed-mods-from-loading).

221 223 

222Cada clave de configuración aquí tiene una entrada en la [settings reference](/docs/es/settings-reference).224Cada clave de configuración aquí tiene una entrada en la [settings reference](/docs/es/settings-reference).

223 225 


457* [Marketplace reference](/docs/es/plugins/marketplace-reference#marketplace-sources): los valores `source` que `extraKnownMarketplaces`, `strictKnownMarketplaces` y `blockedMarketplaces` aceptan459* [Marketplace reference](/docs/es/plugins/marketplace-reference#marketplace-sources): los valores `source` que `extraKnownMarketplaces`, `strictKnownMarketplaces` y `blockedMarketplaces` aceptan

458* [Host and maintain a marketplace](/docs/es/plugins/host-marketplace): ejecute el marketplace al que apunta su política460* [Host and maintain a marketplace](/docs/es/plugins/host-marketplace): ejecute el marketplace al que apunta su política

459* [Plugin security and trust](/docs/es/plugins/security): lo que un plugin puede hacer en una máquina y cómo revisar uno antes de instalar461* [Plugin security and trust](/docs/es/plugins/security): lo que un plugin puede hacer en una máquina y cómo revisar uno antes de instalar

462* [Administrar mods para su organización](/docs/es/plugins/mods/admin): desactive o limite mods, los plugins que ejecutan JavaScript dentro de Claude Code

460* [Server-managed settings](/docs/es/server-managed-settings): entregue estas claves desde la consola de administración de claude.ai463* [Server-managed settings](/docs/es/server-managed-settings): entregue estas claves desde la consola de administración de claude.ai

461* [Troubleshoot plugins](/docs/es/plugins/troubleshooting#blocked-by-your-organization): los mensajes que ven los usuarios cuando la política los bloquea464* [Troubleshoot plugins](/docs/es/plugins/troubleshooting#blocked-by-your-organization): los mensajes que ven los usuarios cuando la política los bloquea

Details

30* [**Skills**](/docs/es/plugins/components#skills): instrucciones `SKILL.md` que Claude carga cuando es relevante, y que también puede ejecutar como un comando30* [**Skills**](/docs/es/plugins/components#skills): instrucciones `SKILL.md` que Claude carga cuando es relevante, y que también puede ejecutar como un comando

31* [**Agentes**](/docs/es/plugins/components#agents): definiciones de subagentes a las que Claude puede delegar31* [**Agentes**](/docs/es/plugins/components#agents): definiciones de subagentes a las que Claude puede delegar

32* [**Hooks**](/docs/es/plugins/components#hooks): comandos que Claude Code ejecuta en puntos de su ciclo de vida, como después de cada edición32* [**Hooks**](/docs/es/plugins/components#hooks): comandos que Claude Code ejecuta en puntos de su ciclo de vida, como después de cada edición

33* [**Un módulo de hooks**](/docs/es/plugins/mods/overview): hooks escritos como funciones JavaScript, que también pueden dibujar paneles y agregar comandos. Un plugin que tiene uno se llama mod

33* [**Servidores MCP**](/docs/es/plugins/components#mcp-servers): servidores de herramientas a los que Claude Code se conecta mientras el plugin está habilitado34* [**Servidores MCP**](/docs/es/plugins/components#mcp-servers): servidores de herramientas a los que Claude Code se conecta mientras el plugin está habilitado

34 35 

35Este diagrama muestra un plugin llamado `my-plugin` que contiene uno de cada uno de esos componentes, y lo que obtiene de cada archivo una vez que se carga el plugin.36Este diagrama muestra un plugin llamado `my-plugin` que contiene una skill, un agente, hooks y un servidor MCP, y lo que obtiene de cada archivo una vez que se carga el plugin.

36 37 

37<img src="https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugin-directory.svg?fit=max&auto=format&n=2Q_GtOEovg5qaBem&q=85&s=f623b64e82713b830e48174f0a922888" className="dark:hidden" alt="Diagram in two columns joined by five straight arrows. Left, the directory of a plugin named my-plugin, holding a manifest at .claude-plugin/plugin.json, skills/review/SKILL.md, agents/reviewer.md, hooks/hooks.json, .mcp.json, and other components. Right, what each file gives you in your session: the manifest sets the plugin name, my-plugin; the skill runs as /my-plugin:review; the agent file is a subagent Claude can delegate to; the hooks file holds hooks that run on lifecycle events; and .mcp.json adds an MCP server that gives Claude tools." width="760" height="336" data-path="images/plugin-directory.svg" />38<img src="https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugin-directory.svg?fit=max&auto=format&n=2Q_GtOEovg5qaBem&q=85&s=f623b64e82713b830e48174f0a922888" className="dark:hidden" alt="Diagram in two columns joined by five straight arrows. Left, the directory of a plugin named my-plugin, holding a manifest at .claude-plugin/plugin.json, skills/review/SKILL.md, agents/reviewer.md, hooks/hooks.json, .mcp.json, and other components. Right, what each file gives you in your session: the manifest sets the plugin name, my-plugin; the skill runs as /my-plugin:review; the agent file is a subagent Claude can delegate to; the hooks file holds hooks that run on lifecycle events; and .mcp.json adds an MCP server that gives Claude tools." width="760" height="336" data-path="images/plugin-directory.svg" />

38 39 

Details

29Un plugin puede contener contenido que ejecuta código en tu máquina con tus privilegios de usuario y contenido que entra en el contexto de Claude como instrucciones, así que [revisa un plugin antes de instalarlo](#review-a-plugin-before-you-install). Esto es lo que un plugin instalado puede hacer:29Un plugin puede contener contenido que ejecuta código en tu máquina con tus privilegios de usuario y contenido que entra en el contexto de Claude como instrucciones, así que [revisa un plugin antes de instalarlo](#review-a-plugin-before-you-install). Esto es lo que un plugin instalado puede hacer:

30 30 

31* **Hooks**: los [hooks](/docs/es/hooks) de un plugin se ejecutan como comandos de shell en puntos del ciclo de vida de Claude Code, como antes o después de una llamada a herramienta.31* **Hooks**: los [hooks](/docs/es/hooks) de un plugin se ejecutan como comandos de shell en puntos del ciclo de vida de Claude Code, como antes o después de una llamada a herramienta.

32* **Mods**: un [mod](/docs/es/plugins/mods/overview) de un plugin ejecuta JavaScript dentro de Claude Code con tus permisos. Para ver qué hace un mod antes de instalarlo, consulta [Decide whether to trust a mod](/docs/es/plugins/mods/overview#decide-whether-to-trust-a-mod).

32* **Servidores MCP y LSP**: Claude Code se conecta a los [servidores MCP](/docs/es/mcp) que declara un plugin habilitado y le da a Claude sus herramientas. Un servidor MCP de stdio se ejecuta como un proceso que Claude Code inicia en tu máquina. Claude Code también inicia los servidores de lenguaje que declara el plugin.33* **Servidores MCP y LSP**: Claude Code se conecta a los [servidores MCP](/docs/es/mcp) que declara un plugin habilitado y le da a Claude sus herramientas. Un servidor MCP de stdio se ejecuta como un proceso que Claude Code inicia en tu máquina. Claude Code también inicia los servidores de lenguaje que declara el plugin.

33* **Directorio `bin/`**: Claude Code añade el directorio `bin/` de cada plugin habilitado a la `PATH` del shell de la herramienta Bash, así que los comandos Bash de Claude pueden ejecutar cualquier ejecutable allí.34* **Directorio `bin/`**: Claude Code añade el directorio `bin/` de cada plugin habilitado a la `PATH` del shell de la herramienta Bash, así que los comandos Bash de Claude pueden ejecutar cualquier ejecutable allí.

34* **Skills, comandos y agentes**: estos entran en el contexto de Claude como instrucciones, así que influyen en lo que Claude hace con las herramientas que ya tiene.35* **Skills, comandos y agentes**: estos entran en el contexto de Claude como instrucciones, así que influyen en lo que Claude hace con las herramientas que ya tiene.


37Las [reglas de permisos](/docs/es/permissions) y [sandbox](/docs/es/sandboxing) de Claude Code cubren las llamadas a herramientas que hace Claude, no el código que ejecuta un plugin por sí solo:38Las [reglas de permisos](/docs/es/permissions) y [sandbox](/docs/es/sandboxing) de Claude Code cubren las llamadas a herramientas que hace Claude, no el código que ejecuta un plugin por sí solo:

38 39 

39* **Hooks y procesos de servidor**: los hooks de comando ejecutan comandos de shell con tus permisos de usuario completos. Claude Code ejecuta hooks y servidores MCP fuera del sandbox.40* **Hooks y procesos de servidor**: los hooks de comando ejecutan comandos de shell con tus permisos de usuario completos. Claude Code ejecuta hooks y servidores MCP fuera del sandbox.

40* **Llamadas a herramientas de Claude**: una llamada a una de las herramientas MCP del plugin, y un comando Bash que ejecuta un ejecutable del `bin/` del plugin, son llamadas a herramientas, así que tus reglas de permisos se aplican a ellas.41* **Llamadas a herramientas de Claude**: una llamada a una de las herramientas MCP del plugin, y un comando Bash que ejecuta un ejecutable del `bin/` del plugin, son llamadas a herramientas, así que tus reglas de permisos se aplican a ellas. Para ver qué puede hacer un mod en una llamada a herramienta, consulta [Decide whether to trust a mod](/docs/es/plugins/mods/overview#decide-whether-to-trust-a-mod).

41 42 

42Instalar un plugin también lo habilita, a menos que su manifiesto o entrada de marketplace establezca [`defaultEnabled: false`](/docs/es/plugins/install#choose-an-install-scope) y no lo hayas habilitado tú mismo.43Instalar un plugin también lo habilita, a menos que su manifiesto o entrada de marketplace establezca [`defaultEnabled: false`](/docs/es/plugins/install#choose-an-install-scope) y no lo hayas habilitado tú mismo.

43 44 

Details

201 201 

202Una adición exitosa imprime `Successfully added marketplace: <name>`.202Una adición exitosa imprime `Successfully added marketplace: <name>`.

203 203 

204<h3 id="invalid-git-url">

205 `Invalid git URL`

206</h3>

207 

208Agregó un mercado, instaló un plugin, o ejecutó una actualización desde una dirección git, y el comando falló con `Invalid git URL` en su mensaje.

209 

210Claude Code verifica cada dirección git antes de ejecutar git. Rechaza una dirección cuyo protocolo no admite. También rechaza una dirección que git podría leer como nombrando un servidor o carpeta diferente del que muestra la dirección.

211 

212El texto después de la dirección nombra qué cambiar. Reescriba la dirección como dice el mensaje y ejecute el comando nuevamente.

213 

214Un rechazo que en su lugar dice `is blocked by enterprise policy` proviene de la configuración de su organización. Vea [Marketplace source is blocked by enterprise policy](#marketplace-source-is-blocked-by-enterprise-policy).

215 

204<h3 id="path-does-not-exist">216<h3 id="path-does-not-exist">

205 `Path does not exist: <path>`217 `Path does not exist: <path>`

206</h3>218</h3>


410 422 

411`claude plugin install` en su shell imprime un mensaje diferente. Para un plugin ya instalado en el scope de destino, imprime `Plugin "<name>@<marketplace>" is already installed (scope: user)` y sale con 0. Si su directorio de caché falta, el mismo comando lo descarga nuevamente.423`claude plugin install` en su shell imprime un mensaje diferente. Para un plugin ya instalado en el scope de destino, imprime `Plugin "<name>@<marketplace>" is already installed (scope: user)` y sale con 0. Si su directorio de caché falta, el mismo comando lo descarga nuevamente.

412 424 

425<h3 id="plugin-would-share-its-folder">

426 `"<plugin>" was not installed: it would share its folder with "<other>"`

427</h3>

428 

429Instaló un plugin a través de `claude plugin install`, `/plugin`, o una sugerencia de instalación en una sesión, y Claude Code lo rechazó con esta línea, o con `would share its saved data with`.

430 

431El id del plugin rechazado y el id de un plugin instalado se asignan a la misma carpeta en el disco: son iguales una vez que `.` y `@` se escriben como `-`. En macOS y Windows, los ids que difieren solo en mayúsculas se asignan a la misma carpeta también. Instalar ambos pondría los archivos de un plugin en la carpeta del otro, por lo que Claude Code rechaza y el plugin instalado mantiene sus archivos.

432 

433El mensaje nombra la salida:

434 

435* **El otro plugin está instalado**: el mensaje dice `Only one of the two can be installed.` y nombra el comando `claude plugin uninstall`, o el paso de desinstalación en `/plugin`, que elimina el otro plugin. Ejecútelo, luego instale nuevamente. Para lo que la desinstalación elimina, vea [What an uninstall deletes and keeps](/docs/es/plugins/cli-reference#what-an-uninstall-deletes-and-keeps).

436* **Ambos ids llegan en una instalación**, como un plugin y una dependencia que necesita: ningún orden de instalación ayuda. Solo un mantenedor del mercado que enumera los dos plugins puede arreglarlo, renombrando uno de ellos. Cuando los dos provienen de diferentes mercados, un mantenedor de cualquiera de ellos puede.

437 

413<h3 id="this-plugin-uses-a-source-type-your-claude-code-version-does-not-suppo">438<h3 id="this-plugin-uses-a-source-type-your-claude-code-version-does-not-suppo">

414 `This plugin uses a source type your Claude Code version does not support`439 `This plugin uses a source type your Claude Code version does not support`

415</h3>440</h3>


790* **`URL is unset or invalid`**: una opción `${user_config.*}` que usa la URL no está establecida. Ejecute `/plugin configure <plugin>` para establecerla815* **`URL is unset or invalid`**: una opción `${user_config.*}` que usa la URL no está establecida. Ejecute `/plugin configure <plugin>` para establecerla

791* **`has an invalid MCP url`** o **`headersHelper for MCP server '<server>' references ${user_config.*}`**: la configuración del plugin en sí es culpable. Corrija la `url` o `headersHelper` en la configuración MCP de su plugin, o infórmelo al autor del plugin si el plugin no es suyo. El caso `headersHelper` tiene su propia entrada bajo [plugin command references user\_config](/docs/es/errors#plugin-command-references-user-config)816* **`has an invalid MCP url`** o **`headersHelper for MCP server '<server>' references ${user_config.*}`**: la configuración del plugin en sí es culpable. Corrija la `url` o `headersHelper` en la configuración MCP de su plugin, o infórmelo al autor del plugin si el plugin no es suyo. El caso `headersHelper` tiene su propia entrada bajo [plugin command references user\_config](/docs/es/errors#plugin-command-references-user-config)

792 817 

818<h4 id="bundled-mcp-server-name-was-not-started-it-needs-configuration">

819 `Bundled MCP server "<name>" was not started: it needs configuration`

820</h4>

821 

822El plugin incluye el servidor como un [MCPB bundle](/docs/es/plugins/components#include-a-packaged-mcpb-server) que declara `user_config`, y una configuración requerida no tiene un valor guardado aún o un valor guardado falla la validación propia del bundle, por lo que Claude Code omite iniciar el servidor. El resto del plugin funciona.

823 

824Seleccione el plugin en la pestaña **Installed** de `/plugin` y elija **Configure** para proporcionar los valores. Después de guardar, `/plugin` muestra `Configuration saved.` y se cierra, y Claude Code recarga plugins como se describe bajo [Manage installed plugins](/docs/es/plugins/install#manage-installed-plugins). El servidor se inicia una vez que esa recarga se aplica. Antes de v2.1.285, Claude Code omitía el servidor sin mostrar esta línea.

825 

793<h4 id="server-is-configured-but-never-connects">826<h4 id="server-is-configured-but-never-connects">

794 Server is configured but never connects827 Server is configured but never connects

795</h4>828</h4>


937La instalación interactiva muestra el diálogo, y el comando de shell toma los valores como indicadores en su lugar:970La instalación interactiva muestra el diálogo, y el comando de shell toma los valores como indicadores en su lugar:

938 971 

939* **`/plugin install` en una sesión, o la pestaña Discover en `/plugin`**: el diálogo es parte de esta instalación interactiva972* **`/plugin install` en una sesión, o la pestaña Discover en `/plugin`**: el diálogo es parte de esta instalación interactiva

973* **El diálogo Manage plugins de la extensión VS Code**: solicita opciones sin establecer como un formulario después de la instalación. Antes de v2.1.285, la instalación allí no mostraba ningún formulario de opciones, así que establezca los valores desde una sesión de terminal con `/plugin configure <plugin>@<marketplace>`

940* **`claude plugin install` en su shell**: nunca solicita valores `userConfig`. Guarda cualquier valor `--config KEY=VALUE` que pase, y cuando las opciones permanecen sin establecer imprime `N userConfig options not yet set — run /plugin configure <plugin>@<marketplace> in Claude Code, or pass --config KEY=VALUE.` Cuando cualquiera de las opciones sin establecer es requerida, `(M required)` sigue `not yet set`.974* **`claude plugin install` en su shell**: nunca solicita valores `userConfig`. Guarda cualquier valor `--config KEY=VALUE` que pase, y cuando las opciones permanecen sin establecer imprime `N userConfig options not yet set — run /plugin configure <plugin>@<marketplace> in Claude Code, or pass --config KEY=VALUE.` Cuando cualquiera de las opciones sin establecer es requerida, `(M required)` sigue `not yet set`.

941 975 

942Si instaló desde el shell, pase los valores con `--config`, un indicador por opción:976Si instaló desde el shell, pase los valores con `--config`, un indicador por opción:


945claude plugin install my-plugin@my-marketplace --config api_url=https://example.com979claude plugin install my-plugin@my-marketplace --config api_url=https://example.com

946```980```

947 981 

948Cuando cada opción está establecida, la salida de instalación no lleva ninguna línea `not yet set`. Para abrir el diálogo después en su lugar, ejecute `/plugin configure my-plugin@my-marketplace` en una sesión.982Cuando cada opción está establecida, la salida de instalación no lleva ninguna línea `not yet set`.

983 

984Para abrir el diálogo después en su lugar, ejecute `/plugin configure my-plugin@my-marketplace` en una sesión. Desde el shell, [`claude plugin configure`](/docs/es/plugins/cli-reference#plugin-configure) muestra qué opciones aún no están establecidas y guarda valores canalizados en stdin. Requiere Claude Code v2.1.285 o posterior.

949 985 

950Si pasa una clave `--config` que el manifiesto no declara, el plugin aún se instala, y el comando imprime `⚠ Installed, but --config not applied: --config key "<key>" isn't declared in this plugin's userConfig.` seguido de las claves que el plugin sí declara.986Si pasa una clave `--config` que el manifiesto no declara, el plugin aún se instala, y el comando imprime `⚠ Installed, but --config not applied: --config key "<key>" isn't declared in this plugin's userConfig.` seguido de las claves que el plugin sí declara.

951 987 

988Para un plugin que envía un [archivo de paquete MCPB](/docs/es/plugins/components#include-a-packaged-mcpb-server) declarando `user_config` propio, el mensaje dice `isn't declared in this plugin's userConfig or by its bundled MCP servers.` en su lugar, y las claves conocidas incluyen las de ese servidor, escritas `<server>.<key>`. Un paquete que el manifiesto referencia por URL no se lee en el tiempo de instalación, por lo que sus claves no se enumeran y el mensaje dice configurarlo en `/plugin`. Establecer claves `<server>.<key>` requiere Claude Code v2.1.285 o posterior.

989 

952<h3 id="claude-plugin-validate-reports-errors">990<h3 id="claude-plugin-validate-reports-errors">

953 `claude plugin validate` reports errors991 `claude plugin validate` reports errors

954</h3>992</h3>


968| `Path contains ".." which could be a path traversal attempt: <path>` | Una ruta de componente escapa del directorio del plugin. | Use rutas dentro de la raíz del plugin. |1006| `Path contains ".." which could be a path traversal attempt: <path>` | Una ruta de componente escapa del directorio del plugin. | Use rutas dentro de la raíz del plugin. |

969| `Path is a file; skills entries must be directories containing SKILL.md` | Una entrada `skills` apunta a `SKILL.md` en lugar de su directorio. | Apunte al directorio padre, o `.` para un `SKILL.md` a nivel de raíz. |1007| `Path is a file; skills entries must be directories containing SKILL.md` | Una entrada `skills` apunta a `SKILL.md` en lugar de su directorio. | Apunte al directorio padre, o `.` para un `SKILL.md` a nivel de raíz. |

970| `No frontmatter block found` o `YAML frontmatter failed to parse: <error>` | Un archivo de skill, agent, o comando tiene frontmatter YAML faltante o inválido. | Agregue o corrija el frontmatter entre delimitadores `---`. Se informa al validar un directorio de plugin. |1008| `No frontmatter block found` o `YAML frontmatter failed to parse: <error>` | Un archivo de skill, agent, o comando tiene frontmatter YAML faltante o inválido. | Agregue o corrija el frontmatter entre delimitadores `---`. Se informa al validar un directorio de plugin. |

1009| `Plugin name "<name>" is reserved: it passes as one of Anthropic's own` | El nombre `name` del plugin es uno de los [nombres reservados](/docs/es/plugins/manifest-reference#name). | Renombre el plugin por lo que hace. |

971| `Unknown field '<key>'` | El manifiesto tiene un campo que el esquema no define. | Elimínelo, o use el nombre que el mensaje sugiere. Claude Code ignora campos desconocidos en el tiempo de carga. |1010| `Unknown field '<key>'` | El manifiesto tiene un campo que el esquema no define. | Elimínelo, o use el nombre que el mensaje sugiere. Claude Code ignora campos desconocidos en el tiempo de carga. |

972 1011 

973Ejecute el comando nuevamente después de cada solución hasta que no imprima errores.1012Ejecute el comando nuevamente después de cada solución hasta que no imprima errores.

Details

84<span id="loop-provider-differences" />84<span id="loop-provider-differences" />

85 85 

86<Note>86<Note>

87 Los intervalos elegidos dinámicamente y el [prompt de mantenimiento integrado](#run-the-built-in-maintenance-prompt) funcionan en todos los proveedores, y con [obtención de banderas de características](/docs/es/env-vars#features-that-need-feature-flag-fetching) desactivada. En Amazon Bedrock, Claude Platform en AWS, Google Cloud's Agent Platform y Microsoft Foundry, o con obtención desactivada, ambos requieren Claude Code v2.1.248 o posterior. En esos casos, en versiones anteriores, un prompt sin intervalo se ejecuta en un horario fijo de 10 minutos, y un `/loop` sin prompt imprime el mensaje de uso.87 Los intervalos elegidos dinámicamente y el [prompt de mantenimiento integrado](#run-the-built-in-maintenance-prompt) funcionan en todos los proveedores, y con [obtención de banderas de características](/docs/es/env-vars#features-that-need-feature-flag-fetching) desactivada. En Amazon Bedrock, Claude Platform en AWS, Google Cloud's Agent Platform y Microsoft Foundry, o con obtención desactivada, ambos requieren Claude Code v2.1.248 o posterior.

88</Note>88</Note>

89 89 

90<h3 id="run-the-built-in-maintenance-prompt">90<h3 id="run-the-built-in-maintenance-prompt">

Details

87Un ejecutor sirve a un propietario a la vez. La primera sesión que un ejecutor recoge bloquea el ejecutor al propietario de esa sesión, y el ejecutor luego ejecuta sesiones solo para ese propietario, hasta una capacidad configurada. Quién es el propietario depende de cómo se inició la sesión:87Un ejecutor sirve a un propietario a la vez. La primera sesión que un ejecutor recoge bloquea el ejecutor al propietario de esa sesión, y el ejecutor luego ejecuta sesiones solo para ese propietario, hasta una capacidad configurada. Quién es el propietario depende de cómo se inició la sesión:

88 88 

89* **Sesiones que inicia un usuario**: el propietario es la cuenta de ese usuario.89* **Sesiones que inicia un usuario**: el propietario es la cuenta de ese usuario.

90* **Sesiones de canal de Claude Tag**: Claude las ejecuta sin cuenta de usuario adjunta, por lo que el propietario es el [agente de Claude Tag](https://claude.com/docs/claude-tag/concepts/glossary#agent-identity) que inició la sesión. Cada sesión de canal que ese agente inicia tiene el mismo propietario, quienquiera que haya enviado el mensaje de Slack, por lo que un ejecutor bloqueado a él sirve sesiones que diferentes personas iniciaron cuando lo ejecuta en una `--capacity` superior a uno o con un `--drain-grace-sec` positivo. Un ejecutor bloqueado a un usuario nunca recoge estos, y un ejecutor bloqueado a un agente de Claude Tag nunca recoge sesiones de un usuario.90* **Sesiones de canal de Claude Tag**: Claude las ejecuta sin cuenta de usuario adjunta, por lo que el propietario es el [agente de Claude Tag](https://claude.com/docs/claude-tag/concepts/glossary#agent-identity) que inició la sesión. Cada sesión de canal que ese agente inicia tiene el mismo propietario, quienquiera que haya enviado el mensaje de Slack, por lo que un ejecutor bloqueado a él sirve sesiones que diferentes personas iniciaron cuando lo ejecuta en una `--capacity` superior a uno o con un `--drain-grace-sec` positivo.

91 91 

92El tamaño mínimo de la flota es, por lo tanto, el número de propietarios que espera que estén activos a la vez, contando usuarios y agentes de Claude Tag.92El tamaño mínimo de la flota es, por lo tanto, el número de propietarios que espera que estén activos a la vez, contando usuarios y agentes de Claude Tag.

93 93 

Details

163 Excepciones por clave en fuentes administradas163 Excepciones por clave en fuentes administradas

164</h3>164</h3>

165 165 

166Tres tipos de claves son excepciones a la regla de no fusión:166Estas claves son excepciones a la regla de no fusión:

167 167 

168* **Claves de bloqueo entre fuentes**: un pequeño conjunto de claves, como los bloqueos de lista de permitidos de sandbox, [enumeradas en la página de configuración administrada](/docs/es/managed-settings#precedence-within-the-managed-tier). Claude Code las honra cuando cualquier fuente administrada controlada por administrador las establece; el nivel de registro HKCU escribible por el usuario se excluye.168* **Claves de bloqueo entre fuentes**: un pequeño conjunto de claves, como los bloqueos de lista de permitidos de sandbox, [enumeradas en la página de configuración administrada](/docs/es/managed-settings#precedence-within-the-managed-tier). Claude Code las honra cuando cualquier fuente administrada controlada por administrador las establece; el nivel de registro HKCU escribible por el usuario se excluye.

169 169 


171* **El bloque `env`**: aparte de la unidad de telemetría y las variables de enrutamiento emparejadas con una clave de credencial, ambas cubiertas a continuación, se fusiona por clave en las fuentes controladas por administrador. Para cada variable de entorno, la fuente de mayor prioridad que la define gana, y las fuentes de administrador inferiores rellenan las variables que las fuentes superiores dejan sin establecer. Una entrada `env` administrada por endpoint se aplica, por lo tanto, siempre que la configuración administrada por servidor deje esa variable sin establecer, o mientras un valor de servidor en caché para ella se [retiene pendiente de confirmación del servidor](#fetch-and-caching-behavior). Requiere Claude Code v2.1.223 o posterior. Antes de v2.1.223, Claude Code aplica solo el bloque `env` de la fuente seleccionada.171* **El bloque `env`**: aparte de la unidad de telemetría y las variables de enrutamiento emparejadas con una clave de credencial, ambas cubiertas a continuación, se fusiona por clave en las fuentes controladas por administrador. Para cada variable de entorno, la fuente de mayor prioridad que la define gana, y las fuentes de administrador inferiores rellenan las variables que las fuentes superiores dejan sin establecer. Una entrada `env` administrada por endpoint se aplica, por lo tanto, siempre que la configuración administrada por servidor deje esa variable sin establecer, o mientras un valor de servidor en caché para ella se [retiene pendiente de confirmación del servidor](#fetch-and-caching-behavior). Requiere Claude Code v2.1.223 o posterior. Antes de v2.1.223, Claude Code aplica solo el bloque `env` de la fuente seleccionada.

172 * **Unidad de telemetría**: las claves del exportador `OTEL_EXPORTER_OTLP_*`, los conmutadores de captura de contenido `OTEL_LOG_*`, `OTEL_LOGS_EXPORTER` y las variables de rastreo beta `ENABLE_BETA_TRACING_DETAILED` y `BETA_TRACING_ENDPOINT` siguen la fuente más alta que establece cualquiera de ellas como una unidad. Una fuente que entrega la clave de credencial `otelHeadersHelper` reclama la unidad también, pero coloca estas variables solo cuando es la fuente seleccionada: una fuente que no está seleccionada pero entrega la clave no contribuye ninguna de ellas y aún bloquea las fuentes inferiores de rellenarlas. De cualquier forma, un punto final del exportador de una fuente nunca puede emparejarse con credenciales de otra.172 * **Unidad de telemetría**: las claves del exportador `OTEL_EXPORTER_OTLP_*`, los conmutadores de captura de contenido `OTEL_LOG_*`, `OTEL_LOGS_EXPORTER` y las variables de rastreo beta `ENABLE_BETA_TRACING_DETAILED` y `BETA_TRACING_ENDPOINT` siguen la fuente más alta que establece cualquiera de ellas como una unidad. Una fuente que entrega la clave de credencial `otelHeadersHelper` reclama la unidad también, pero coloca estas variables solo cuando es la fuente seleccionada: una fuente que no está seleccionada pero entrega la clave no contribuye ninguna de ellas y aún bloquea las fuentes inferiores de rellenarlas. De cualquier forma, un punto final del exportador de una fuente nunca puede emparejarse con credenciales de otra.

173 * **Enrutamiento emparejado con credencial**: una fuente que empareja variables de enrutamiento con una clave de credencial solo para fuente seleccionada, como `apiKeyHelper` u `otelHeadersHelper`, contribuye esas variables de enrutamiento solo cuando gana la ranura.173 * **Enrutamiento emparejado con credencial**: una fuente que empareja variables de enrutamiento con una clave de credencial solo para fuente seleccionada, como `apiKeyHelper` u `otelHeadersHelper`, contribuye esas variables de enrutamiento solo cuando gana la ranura.

174* **`allowedProviders`**: una lista establecida en la máquina y una lista administrada por servidor se combinan como [la nota de Alcance de su entrada](/docs/es/settings-reference#allowedproviders) indica. Requiere Claude Code v2.1.285 o posterior

174* **Claves de inicio de sesión de puerta de enlace**: Claude Code nunca lee [`forceLoginGatewayUrl`](/docs/es/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/es/settings-reference#gatewayinternalnetworks), ni el valor `"gateway"` de [`forceLoginMethod`](/docs/es/settings-reference#forceloginmethod) de la configuración administrada por servidor, por lo que un valor allí ni se aplica ni oculta uno establecido en una política MDM o archivo de configuración administrada. La entrada [`managedSourcesBehavior`](/docs/es/settings-reference#managedsourcesbehavior) dice qué fuente de administrador en la máquina los suministra.175* **Claves de inicio de sesión de puerta de enlace**: Claude Code nunca lee [`forceLoginGatewayUrl`](/docs/es/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/es/settings-reference#gatewayinternalnetworks), ni el valor `"gateway"` de [`forceLoginMethod`](/docs/es/settings-reference#forceloginmethod) de la configuración administrada por servidor, por lo que un valor allí ni se aplica ni oculta uno establecido en una política MDM o archivo de configuración administrada. La entrada [`managedSourcesBehavior`](/docs/es/settings-reference#managedsourcesbehavior) dice qué fuente de administrador en la máquina los suministra.

175 176 

176<h3 id="fetch-and-caching-behavior">177<h3 id="fetch-and-caching-behavior">

sessions.md +20 −2

Details

29 29 

30`claude --continue` abre una [sesión en segundo plano](/docs/es/agent-view) que ha terminado, pero no una que aún se está ejecutando; abrir sesiones en segundo plano terminadas requiere Claude Code v2.1.257 o posterior. Si su conversación más reciente es una que [movió al segundo plano](/docs/es/agent-view#send-the-session-to-the-background) y aún se está ejecutando allí, Claude Code sale con `Your most recent conversation is running in the background` y el ID de esa sesión. Conéctese a la sesión desde [`claude agents`](/docs/es/agent-view#attach-to-a-session), o ejecute `claude --resume` para elegir otra.30`claude --continue` abre una [sesión en segundo plano](/docs/es/agent-view) que ha terminado, pero no una que aún se está ejecutando; abrir sesiones en segundo plano terminadas requiere Claude Code v2.1.257 o posterior. Si su conversación más reciente es una que [movió al segundo plano](/docs/es/agent-view#send-the-session-to-the-background) y aún se está ejecutando allí, Claude Code sale con `Your most recent conversation is running in the background` y el ID de esa sesión. Conéctese a la sesión desde [`claude agents`](/docs/es/agent-view#attach-to-a-session), o ejecute `claude --resume` para elegir otra.

31 31 

32<span id="resume-a-running-background-session" />

33 

34Cuando la conversación que reanuda con `claude --resume` o `/resume` pertenece a una [sesión en segundo plano](/docs/es/agent-view) que aún se está ejecutando, Claude Code abre la sesión en ejecución en sí. Con `--bg` en la línea de comandos, la reanudación es un [envío en segundo plano](/docs/es/agent-view#from-your-shell) en su lugar. Antes de v2.1.285, Claude Code se negaba y le indicaba que abriera la sesión con `claude attach <id>`, o que la detuviera primero con `claude stop <id>`.

35 

36* **Desde su shell**: `claude --resume <session>` ejecuta [`claude attach`](/docs/es/agent-view#attach-to-a-session) en esa sesión en la misma terminal en lugar de cargar la transcripción en sí. Una solicitud que pasa en la línea de comandos, como en `claude --resume <session> "check the tests too"`, va a la sesión como su siguiente turno primero, y Claude Code imprime `Sent your prompt to the background session (<id>); opening it…` antes de adjuntar. `claude -p --resume <session> "prompt"` escrito en una terminal hace lo mismo, por lo que `-p` no mantiene esa ejecución no interactiva.

37 

38 Claude Code no abre la sesión cuando la línea de comandos tiene cualquiera de estos:

39 

40 * Entrada o salida canalizadas o redirigidas

41 * Banderas que configuran la sesión, como `--permission-mode`, `--model` o `--settings`

42 * Banderas que leen la salida, como `--output-format json` u `--json-schema`

43 * Banderas que limitan o rebobinan la ejecución, como `--max-turns` o `--max-budget-usd`

44 

45 Con cualquiera de estos, o cuando [la vista de agente está desactivada](/docs/es/agent-view#turn-off-agent-view), Claude Code no envía nada y sale con estado 1, imprimiendo que la sesión se está ejecutando en segundo plano junto con el comando `claude attach <id>` que la abre, o indicándole que la encuentre en `claude agents` cuando no puede determinar el ID. Agregue `--fork-session` para reanudar una copia de la conversación en su lugar. Para continuar la conversación en sí en una sesión propia, con sus banderas aplicadas, ejecute `claude stop <id>` y luego repita el comando.

46 

47 Una solicitud que comienza con `/` o `!` no se envía, ni tampoco ninguna solicitud mientras la sesión espera su respuesta a una pregunta. En ambos casos Claude Code no abre la sesión, y el mensaje incluye `Your prompt was not sent to it` con la razón.

48* **Desde dentro de una sesión**: `/resume` mueve su conversación actual al segundo plano y adjunta esta terminal a la sesión en ejecución, imprimiendo `Opening "<title>", running in the background (<id>)`. Presione `←` en una solicitud vacía para volver a la vista de agente, que también enumera la conversación que dejó. Cuando la conversación actual no puede moverse al segundo plano, por ejemplo porque ya está adjunto a una sesión en segundo plano o la persistencia de sesión está desactivada, `/resume` imprime el comando `claude attach` para ejecutar en su lugar.

49 

32Puede ejecutar `claude --resume <session-id>` desde cualquier directorio: Claude Code busca el ID en el directorio del proyecto actual y sus git worktrees primero, luego en todos los demás proyectos en esta máquina, por lo que encuentra una sesión que comenzó en otro lugar o se movió con [`/cd`](/docs/es/commands). La búsqueda entre proyectos resuelve el ID solo cuando exactamente otro proyecto contiene una transcripción con mensajes para él, por lo que un duplicado copiado manualmente hace que Claude Code reporte no encontrado en lugar de reanudar una copia arbitraria. Si ninguna sesión almacenada coincide con el ID, Claude Code reporta `No conversation found with session ID: <session-id>`. Antes de v2.1.223, la búsqueda se detenía en el directorio del proyecto actual y sus git worktrees, por lo que tenía que reanudar desde el directorio en el que la sesión trabajó por última vez.50Puede ejecutar `claude --resume <session-id>` desde cualquier directorio: Claude Code busca el ID en el directorio del proyecto actual y sus git worktrees primero, luego en todos los demás proyectos en esta máquina, por lo que encuentra una sesión que comenzó en otro lugar o se movió con [`/cd`](/docs/es/commands). La búsqueda entre proyectos resuelve el ID solo cuando exactamente otro proyecto contiene una transcripción con mensajes para él, por lo que un duplicado copiado manualmente hace que Claude Code reporte no encontrado en lugar de reanudar una copia arbitraria. Si ninguna sesión almacenada coincide con el ID, Claude Code reporta `No conversation found with session ID: <session-id>`. Antes de v2.1.223, la búsqueda se detenía en el directorio del proyecto actual y sus git worktrees, por lo que tenía que reanudar desde el directorio en el que la sesión trabajó por última vez.

33 51 

34<h3 id="what-a-resumed-session-restores">52<h3 id="what-a-resumed-session-restores">

35 Qué restaura una sesión reanudada53 Qué restaura una sesión reanudada

36</h3>54</h3>

37 55 

38Una sesión reanudada restaura la conversación junto con el estado guardado en ella:56Cuando Claude Code carga una conversación desde su transcripción, la sesión reanudada restaura la conversación junto con el estado guardado en ella:

39 57 

40* Historial de conversación: el historial completo, incluidas las llamadas a herramientas y los resultados. Una herramienta que aún se estaba ejecutando cuando terminó el proceso anterior, por ejemplo en un bloqueo, no termina ni se ejecuta de nuevo cuando reanuda. Claude ve la llamada marcada como cortada antes de que se registrara su resultado y se le indica que verifique si tuvo efecto antes de ejecutarla de nuevo, a menos que [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/es/env-vars#variables) esté configurado. Antes de v2.1.281, Claude Code eliminaba la llamada cortada de la conversación o se la mostraba a Claude como una que usted interrumpió.58* Historial de conversación: el historial completo, incluidas las llamadas a herramientas y los resultados. Una herramienta que aún se estaba ejecutando cuando terminó el proceso anterior, por ejemplo en un bloqueo, no termina ni se ejecuta de nuevo cuando reanuda. Claude ve la llamada marcada como cortada antes de que se registrara su resultado y se le indica que verifique si tuvo efecto antes de ejecutarla de nuevo, a menos que [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/es/env-vars#variables) esté configurado. Antes de v2.1.281, Claude Code eliminaba la llamada cortada de la conversación o se la mostraba a Claude como una que usted interrumpió.

41* Modelo: la sesión continúa en el modelo que estaba usando. El modelo no se restaura cuando ha sido retirado o no está permitido por `availableModels`, cuando una bandera `--model` o una variable de entorno de la familia `ANTHROPIC_MODEL` elige una en el lanzamiento, o en proveedores que usan ID de implementación específicos del proveedor, como [Amazon Bedrock, Google Cloud's Agent Platform y Microsoft Foundry](/docs/es/third-party-integrations); consulte [configuración de modelo](/docs/es/model-config#setting-your-model) para el orden de resolución.59* Modelo: la sesión continúa en el modelo que estaba usando. El modelo no se restaura cuando ha sido retirado o no está permitido por `availableModels`, cuando una bandera `--model` o una variable de entorno de la familia `ANTHROPIC_MODEL` elige una en el lanzamiento, o en proveedores que usan ID de implementación específicos del proveedor, como [Amazon Bedrock, Google Cloud's Agent Platform y Microsoft Foundry](/docs/es/third-party-integrations); consulte [configuración de modelo](/docs/es/model-config#setting-your-model) para el orden de resolución.


51 Modo de permisos al reanudar69 Modo de permisos al reanudar

52</h4>70</h4>

53 71 

54El modo de permisos en el que Claude Code inicia una sesión reanudada depende de cómo reanude:72El modo de permisos en el que Claude Code inicia una sesión reanudada depende de cómo reanude. Los casos a continuación se aplican cuando Claude Code carga la conversación desde su transcripción; cuando [abre una sesión en segundo plano que aún se está ejecutando](#resume-a-running-background-session) en su lugar, esa sesión mantiene el modo de permisos en el que está.

55 73 

56* Terminal: `claude --continue`, `claude --resume <session-id>` o `claude --resume <name>` cuando el nombre coincide con una sesión, sin `-p`. Claude Code restaura el modo de permisos en el que estaba la sesión, excepto en los casos de la tabla. Pase `--permission-mode` o `--dangerously-skip-permissions` para anular el modo restaurado.74* Terminal: `claude --continue`, `claude --resume <session-id>` o `claude --resume <name>` cuando el nombre coincide con una sesión, sin `-p`. Claude Code restaura el modo de permisos en el que estaba la sesión, excepto en los casos de la tabla. Pase `--permission-mode` o `--dangerously-skip-permissions` para anular el modo restaurado.

57* No interactivo: `claude -p --resume` o `claude -p --continue`. Claude Code inicia la ejecución en el modo de permisos en el que se iniciaría una nueva ejecución de `claude -p`, excepto que una sesión que terminó en modo de plan se reanuda en modo de plan bajo las [condiciones a continuación](#resume-in-plan-mode-with-p).75* No interactivo: `claude -p --resume` o `claude -p --continue`. Claude Code inicia la ejecución en el modo de permisos en el que se iniciaría una nueva ejecución de `claude -p`, excepto que una sesión que terminó en modo de plan se reanuda en modo de plan bajo las [condiciones a continuación](#resume-in-plan-mode-with-p).

Details

599| [`allowedChannelPlugins`](#allowedchannelplugins) | Reemplace la lista de permitidos predeterminada de [plugins de canal](/docs/es/channels#restrict-which-channel-plugins-can-run) que pueden enviar mensajes | Plugins y skills | Managed |599| [`allowedChannelPlugins`](#allowedchannelplugins) | Reemplace la lista de permitidos predeterminada de [plugins de canal](/docs/es/channels#restrict-which-channel-plugins-can-run) que pueden enviar mensajes | Plugins y skills | Managed |

600| [`allowedHttpHookUrls`](#allowedhttphookurls) | Limite qué URLs pueden dirigirse a los [hooks HTTP](/docs/es/hooks) | Hooks y automatización | Any file |600| [`allowedHttpHookUrls`](#allowedhttphookurls) | Limite qué URLs pueden dirigirse a los [hooks HTTP](/docs/es/hooks) | Hooks y automatización | Any file |

601| [`allowedMcpServers`](#allowedmcpservers) | Lista de permitidos de qué [servidores MCP](/docs/es/mcp) pueden agregar los usuarios | MCP | Any file |601| [`allowedMcpServers`](#allowedmcpservers) | Lista de permitidos de qué [servidores MCP](/docs/es/mcp) pueden agregar los usuarios | MCP | Any file |

602| [`allowedProviders`](#allowedproviders) | Limite qué [proveedores de API](/docs/es/third-party-integrations) puede usar una máquina | Autenticación y proveedores | Managed |

602| [`allowManagedHooksOnly`](#allowmanagedhooksonly) | Ejecute solo los [hooks](/docs/es/hooks) que su organización implementa | Hooks y automatización | Managed |603| [`allowManagedHooksOnly`](#allowmanagedhooksonly) | Ejecute solo los [hooks](/docs/es/hooks) que su organización implementa | Hooks y automatización | Managed |

603| [`allowManagedMcpServersOnly`](#allowmanagedmcpserversonly) | Haga que la lista de permitidos de [MCP](/docs/es/mcp) administrada sea la única que se aplique | MCP | Managed |604| [`allowManagedMcpServersOnly`](#allowmanagedmcpserversonly) | Haga que la lista de permitidos de [MCP](/docs/es/mcp) administrada sea la única que se aplique | MCP | Managed |

604| [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly) | Haga que la [configuración administrada](/docs/es/managed-settings) sea la única fuente de configuración de [reglas de permisos](/docs/es/permissions#managed-settings) | Configuración de permisos | Managed |605| [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly) | Haga que la [configuración administrada](/docs/es/managed-settings) sea la única fuente de configuración de [reglas de permisos](/docs/es/permissions#managed-settings) | Configuración de permisos | Managed |

605| [`alwaysThinkingEnabled`](#alwaysthinkingenabled) | Desactive el [pensamiento extendido](/docs/es/model-config#extended-thinking) para cada sesión | Modelo y respuestas | Any file |606| [`alwaysThinkingEnabled`](#alwaysthinkingenabled) | Desactive el [pensamiento extendido](/docs/es/model-config#extended-thinking) para cada sesión | Modelo y respuestas | Any file |

606| [`apiKeyHelper`](#apikeyhelper) | Genere la [credencial de API](/docs/es/authentication#credential-management) con su propio comando | Autenticación y proveedores | Any file |607| [`apiKeyHelper`](#apikeyhelper) | Genere la [credencial de API](/docs/es/authentication#credential-management) con su propio comando | Autenticación y proveedores | Any file |

607| [`askUserQuestionTimeout`](#askuserquestiontimeout) | Permita que una pregunta sin respuesta [continúe automáticamente](/docs/es/tools-reference#question-auto-continue-timeout) después del tiempo de inactividad | Interfaz y terminal | User or managed |608| [`askUserQuestionTimeout`](#askuserquestiontimeout) | Permita que una pregunta sin respuesta [continúe automáticamente](/docs/es/tools-reference#question-auto-continue-timeout) después del tiempo de inactividad | Interfaz y terminal | User or managed |

609| [`appendPlugins`](#appendplugins) | Ejecute los [mods](/docs/es/plugins/mods/admin) de su organización después de cada mod que instale un usuario | Plugins y skills | User or managed |

608| [`attribution`](#attribution) | Personalice la atribución que Claude Code agrega a commits y pull requests | Git y atribución | Any file |610| [`attribution`](#attribution) | Personalice la atribución que Claude Code agrega a commits y pull requests | Git y atribución | Any file |

609| [`attribution.commit`](#attribution-commit) | Cambie u oculte el tráiler que Claude Code agrega a los commits | Git y atribución | Any file |611| [`attribution.commit`](#attribution-commit) | Cambie u oculte el tráiler que Claude Code agrega a los commits | Git y atribución | Any file |

610| [`attribution.pr`](#attribution-pr) | Cambie u oculte la línea de atribución en las descripciones de pull requests | Git y atribución | Any file |612| [`attribution.pr`](#attribution-pr) | Cambie u oculte la línea de atribución en las descripciones de pull requests | Git y atribución | Any file |


729| [`policyHelper.timeoutMs`](#policyhelper-timeoutms) | Establezca cuánto tiempo Claude Code espera al [auxiliar](/docs/es/managed-settings#compute-the-policy-with-a-helper-program) | Configuración empresarial y administrada | Managed |731| [`policyHelper.timeoutMs`](#policyhelper-timeoutms) | Establezca cuánto tiempo Claude Code espera al [auxiliar](/docs/es/managed-settings#compute-the-policy-with-a-helper-program) | Configuración empresarial y administrada | Managed |

730| [`preferredNotifChannel`](#preferrednotifchannel) | Elija un [timbre de terminal o notificación de escritorio](/docs/es/terminal-config#get-a-terminal-bell-or-notification) para la finalización de tareas | Remoto, escritorio y notificaciones | Any file |732| [`preferredNotifChannel`](#preferrednotifchannel) | Elija un [timbre de terminal o notificación de escritorio](/docs/es/terminal-config#get-a-terminal-bell-or-notification) para la finalización de tareas | Remoto, escritorio y notificaciones | Any file |

731| [`prefersReducedMotion`](#prefersreducedmotion) | [Reduzca o desactive](/docs/es/accessibility#accessibility-settings) las animaciones de spinner, shimmer y flash | Interfaz y terminal | Any file |733| [`prefersReducedMotion`](#prefersreducedmotion) | [Reduzca o desactive](/docs/es/accessibility#accessibility-settings) las animaciones de spinner, shimmer y flash | Interfaz y terminal | Any file |

734| [`prependPlugins`](#prependplugins) | Ejecute los [mods](/docs/es/plugins/mods/admin) de su organización antes de cada mod que instale un usuario | Plugins y skills | User or managed |

732| [`processWrapper`](#processwrapper) | Ejecute los procesos de fondo de Claude Code a través de un [iniciador corporativo](/docs/es/corporate-launcher) en macOS y Linux | Agentes, sesiones y worktrees | User or managed |735| [`processWrapper`](#processwrapper) | Ejecute los procesos de fondo de Claude Code a través de un [iniciador corporativo](/docs/es/corporate-launcher) en macOS y Linux | Agentes, sesiones y worktrees | User or managed |

733| [`promptCacheTtl`](#promptcachettl) | Elija la [duración del caché de prompt](/docs/es/prompt-caching#cache-lifetime) para la conversación principal | Modelo y respuestas | Any file |736| [`promptCacheTtl`](#promptcachettl) | Elija la [duración del caché de prompt](/docs/es/prompt-caching#cache-lifetime) para la conversación principal | Modelo y respuestas | Any file |

734| [`promptSuggestionEnabled`](#promptsuggestionenabled) | Oculte las [sugerencias de prompt](/docs/es/interactive-mode#prompt-suggestions) atenuadas en el cuadro de entrada | Interfaz y terminal | Any file |737| [`promptSuggestionEnabled`](#promptsuggestionenabled) | Oculte las [sugerencias de prompt](/docs/es/interactive-mode#prompt-suggestions) atenuadas en el cuadro de entrada | Interfaz y terminal | Any file |


3675 `spinnerTipsOverride`3678 `spinnerTipsOverride`

3676</h3>3679</h3>

3677 3680 

3678Agrega tus propios consejos a los [consejos del spinner](#spinnertipsenabled) que Claude Code muestra mientras Claude trabaja, o reemplaza los consejos integrados con los tuyos. Claude Code pone tus consejos en la misma rotación que los integrados: elige el consejo que ha estado sin mostrarse más tiempo, omite consejos aún en su enfriamiento, y rompe empates por prioridad.3681Agrega tus propios consejos a los [consejos del spinner](#spinnertipsenabled) que Claude Code muestra mientras Claude trabaja, o reemplaza los consejos integrados con los tuyos. Claude Code pone tus consejos en la misma rotación que los integrados.

3679 3682 

3680Si estableces [`spinnerTipsEnabled`](#spinnertipsenabled) a `false`, Claude Code oculta todos los consejos, incluyendo los tuyos.3683Si estableces [`spinnerTipsEnabled`](#spinnertipsenabled) a `false`, Claude Code oculta todos los consejos, incluyendo los tuyos.

3681 3684 


3683* **Type**: objeto con campos `tips`, `tipsFile`, `label`, y `excludeDefault`, cada uno opcional3686* **Type**: objeto con campos `tips`, `tipsFile`, `label`, y `excludeDefault`, cada uno opcional

3684* **Default**: unset, por lo que Claude Code muestra solo los consejos integrados3687* **Default**: unset, por lo que Claude Code muestra solo los consejos integrados

3685 3688 

3686Objetos de consejo, `tipsFile`, `label`, y la regla de la línea Scope que la configuración de proyecto y local contribuyen solo strings planos requieren Claude Code v2.1.247 o posterior. En versiones anteriores, `excludeDefault` de un archivo de proyecto o local también se aplica.3689Objetos de consejo, `tipsFile`, `label`, y la regla de la línea Scope que la configuración de proyecto y local contribuyen solo strings planos requieren Claude Code v2.1.247 o posterior.

3687 3690 

3688Cada entrada `tips` es un string plano u objeto con estos campos:3691Cada entrada `tips` es un string plano u objeto con estos campos:

3689 3692 


4305Cuando lo establece en `true`, Claude Code cambia qué hooks y comandos similares a hooks se cargan:4308Cuando lo establece en `true`, Claude Code cambia qué hooks y comandos similares a hooks se cargan:

4306 4309 

4307* **Se ejecutan hooks administrados y SDK**: hooks de configuración administrada y hooks que el [Agent SDK](/docs/es/agent-sdk/overview) registra en proceso4310* **Se ejecutan hooks administrados y SDK**: hooks de configuración administrada y hooks que el [Agent SDK](/docs/es/agent-sdk/overview) registra en proceso

4308* **Se ejecutan hooks de plugins forzados a habilitarse**: hooks de plugins que su configuración administrada fuerza a habilitar a través de [`enabledPlugins`](#enabledplugins). Claude Code coincide con el ID completo `plugin@marketplace`, por lo que un plugin con el mismo nombre de un marketplace diferente permanece bloqueado. Esto le permite distribuir hooks verificados a través de un marketplace de organización mientras bloquea todo lo demás4311* **Se ejecutan hooks de plugins forzados a habilitarse**: hooks de plugins que su configuración administrada fuerza a habilitar a través de [`enabledPlugins`](#enabledplugins). Claude Code coincide con el ID completo `plugin@marketplace`, por lo que un plugin con el mismo nombre de un marketplace diferente permanece bloqueado. Esto le permite distribuir hooks verificados a través de un marketplace de organización mientras bloquea todo lo demás. Un [mod](/docs/es/plugins/mods/overview) en tal plugin se carga solo cuando [cuenta como el de su organización](/docs/es/plugins/mods/admin#install-your-organizations-mods)

4309* **Todo lo demás está bloqueado**: hooks de usuario, proyecto y locales, hooks de otros plugins y hooks declarados en frontmatter de agente4312* **Todo lo demás está bloqueado**: hooks de usuario, proyecto y locales, hooks y mods de otros plugins instalados, y hooks declarados en frontmatter de agente. [Los mods integrados en Claude Code](/docs/es/plugins/mods/overview#mods-built-into-claude-code) continúan ejecutándose. Para bloquear solo los mods de los usuarios, establezca [`allowManagedModsOnly`](/docs/es/plugins/mods/admin#set-options-on-the-built-in-guard) en su lugar.

4310* **Los plugins con origen de comando están deshabilitados**: Claude Code también deshabilita plugins con un [origen `command`](/docs/es/plugins/marketplace-reference#command-plugin-source), incluidos plugins forzados a habilitarse en `enabledPlugins` administrado, a menos que establezca [`disableCommandPluginSources`](#disablecommandpluginsources) explícitamente en `false`4313* **Los plugins con origen de comando están deshabilitados**: Claude Code también deshabilita plugins con un [origen `command`](/docs/es/plugins/marketplace-reference#command-plugin-source), incluidos plugins forzados a habilitarse en `enabledPlugins` administrado, a menos que establezca [`disableCommandPluginSources`](#disablecommandpluginsources) explícitamente en `false`

4311* **Los comandos `headersHelper` del marketplace están bloqueados**: Claude Code también bloquea los comandos [`headersHelper`](/docs/es/plugins/host-marketplace#authenticate-archive-downloads) del marketplace a menos que [`disableCommandPluginSources`](#disablecommandpluginsources) esté explícitamente establecido en `false`, excepto para un marketplace que la configuración administrada declara. Requiere Claude Code v2.1.238 o posterior4314* **Los comandos `headersHelper` del marketplace están bloqueados**: Claude Code también bloquea los comandos [`headersHelper`](/docs/es/plugins/host-marketplace#authenticate-archive-downloads) del marketplace a menos que [`disableCommandPluginSources`](#disablecommandpluginsources) esté explícitamente establecido en `false`, excepto para un marketplace que la configuración administrada declara. Requiere Claude Code v2.1.238 o posterior

4312* **La línea de estado y la sugerencia de archivo se reducen a configuración administrada**: Claude Code lee [`statusLine`](/docs/es/statusline), [`fileSuggestion`](#filesuggestion) y [`subagentStatusLine`](/docs/es/statusline#subagent-status-lines) solo de configuración administrada, siguiendo las [puertas de línea de estado y sugerencia de archivo](#status-line-and-file-suggestion-gates)4315* **La línea de estado y la sugerencia de archivo se reducen a configuración administrada**: Claude Code lee [`statusLine`](/docs/es/statusline), [`fileSuggestion`](#filesuggestion) y [`subagentStatusLine`](/docs/es/statusline#subagent-status-lines) solo de configuración administrada, siguiendo las [puertas de línea de estado y sugerencia de archivo](#status-line-and-file-suggestion-gates)


4502 4505 

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

4504* **Type**: Boolean4507* **Type**: Boolean

4505 * `true`: Claude Code elimina los skills y flujos de trabajo incluidos y oculta comandos integrados como `/init` del modelo4508 * `true`: Claude Code elimina los skills y flujos de trabajo incluidos y oculta del modelo los comandos integrados como `/init`

4506 * `false`: los skills incluidos se cargan4509 * `false`: los skills incluidos se cargan

4507* **Default**: sin establecer, por lo que los skills incluidos se cargan4510* **Default**: sin establecer, por lo que los skills incluidos se cargan

4508* **Per-session overrides**: [`CLAUDE_CODE_DISABLE_BUNDLED_SKILLS`](/docs/es/env-vars) establecido en `1` desactiva los skills incluidos para una sesión; cualquiera de los dos que los desactive, el otro no puede volver a activarlos4511* **Per-session overrides**: [`CLAUDE_CODE_DISABLE_BUNDLED_SKILLS`](/docs/es/env-vars) establecido en `1` desactiva los skills incluidos durante una sesión; cualquiera de los dos que los desactive, el otro no puede volver a activarlos

4509 4512 

4510```json settings.json theme={null}4513```json settings.json theme={null}

4511{4514{


4549 * `"off"`: Claude no ve el skill y `/name` está oculto del autocompletado4552 * `"off"`: Claude no ve el skill y `/name` está oculto del autocompletado

4550* **Default**: sin establecer, por lo que cada skill es `"on"`4553* **Default**: sin establecer, por lo que cada skill es `"on"`

4551 4554 

4552Este ejemplo enumera `legacy-context` a Claude solo por nombre y oculta `deploy` de Claude y del autocompletado `/`:4555Este ejemplo lista `legacy-context` a Claude solo por nombre y oculta `deploy` de Claude y del autocompletado `/`:

4553 4556 

4554```json settings.json theme={null}4557```json settings.json theme={null}

4555{4558{


4560}4563}

4561```4564```

4562 4565 

4563Los anulaciones no se aplican a los skills de plugins, que administra a través de `/plugin`.4566Los anulaciones no se aplican a los skills de plugins, que gestiona a través de `/plugin`.

4564 4567 

4565En configuración administrada y archivos pasados con `--settings`, una clave en un alias de skill incluido, como `checkup` para `/doctor`, también se aplica al skill; consulte [cómo las claves de alias se combinan con las claves en el nombre propio del skill](/docs/es/skills#override-skill-visibility-from-settings).4568En configuración administrada y archivos pasados con `--settings`, una clave en un alias de un skill incluido, como `checkup` para `/doctor`, también se aplica al skill; consulte [cómo las claves de alias se combinan con las claves en el nombre propio del skill](/docs/es/skills#override-skill-visibility-from-settings).

4566 4569 

4567<h3 id="syncclaudeaiskills">4570<h3 id="syncclaudeaiskills">

4568 `syncClaudeAiSkills`4571 `syncClaudeAiSkills`

4569</h3>4572</h3>

4570 4573 

4571Desactive la descarga de los [skills habilitados para su cuenta claude.ai](/docs/es/skills#how-synced-skills-behave). Claude Code los descarga en `~/.claude/skills/synced/` en [sesiones de terminal donde inicia sesión con su cuenta claude.ai](/docs/es/skills#where-synced-skills-load), interactivas o no interactivas, y en sesiones de Cowork y en la nube. Establezca `false` para detener esa descarga y dejar de cargar los skills que ya sincronizó. Claude Code solo respeta `false`: `true` es lo mismo que sin establecer y no activa la sincronización donde de otro modo está desactivada.4574Desactive la descarga de los [skills habilitados para su cuenta de claude.ai](/docs/es/skills#how-synced-skills-behave). Claude Code los descarga en `~/.claude/skills/synced/` en [sesiones de terminal donde inicia sesión con su cuenta de claude.ai](/docs/es/skills#where-synced-skills-load), interactivas o no interactivas, y en sesiones de Cowork y en la nube. Establezca `false` para detener esa descarga y dejar de cargar los skills que ya sincronizó. Claude Code solo respeta `false`: `true` es lo mismo que sin establecer y no activa la sincronización donde de otro modo está desactivada.

4572 4575 

4573* **Scope**: [`User, local, or managed`](#scopes), y archivos pasados con `--settings`. Un repositorio no puede desactivarlo para usted.4576* **Scope**: [`User, local, or managed`](#scopes), y archivos pasados con `--settings`. Un repositorio no puede desactivarla para usted.

4574* **Type**: Boolean4577* **Type**: Boolean

4575 * `false`: Claude Code deja de descargar skills sincronizados y deja de cargar los que ya están en `~/.claude/skills/synced/`. En configuración de usuario o administrada, también los mueve a `~/.claude/skills/.trash/`4578 * `false`: Claude Code deja de descargar skills sincronizados y deja de cargar los que ya están en `~/.claude/skills/synced/`. En configuración de usuario o administrada, también los mueve a `~/.claude/skills/.trash/`

4576 * `true`: lo mismo que sin establecer4579 * `true`: lo mismo que sin establecer

4577* **Default**: sin establecer, por lo que las sesiones que iniciaron sesión con su cuenta claude.ai sincronizan sus skills4580* **Default**: sin establecer, por lo que las sesiones que inician sesión con su cuenta de claude.ai sincronizan sus skills

4578 4581 

4579Este ejemplo evita que una máquina descargue los skills de la cuenta en cualquier sesión:4582Este ejemplo evita que una máquina descargue los skills de la cuenta en cualquier sesión:

4580 4583 


4588 `syncClaudeAiPlugins`4591 `syncClaudeAiPlugins`

4589</h3>4592</h3>

4590 4593 

4591Desactive la descarga de los [plugins habilitados para su cuenta claude.ai](/docs/es/plugins/loading#synced-plugins). Claude Code los descarga en `~/.claude/plugins/synced/` al inicio de sesiones de terminal donde inicia sesión con su cuenta claude.ai y en sesiones de Cowork, y carga cada uno como `<name>@synced`. Establezca `false` para detener esa descarga y dejar de cargar los plugins que ya sincronizó. Claude Code solo respeta `false`: `true` es lo mismo que sin establecer y no activa la sincronización donde de otro modo está desactivada. Requiere Claude Code v2.1.273 o posterior.4594Desactive la descarga de los [plugins habilitados para su cuenta de claude.ai](/docs/es/plugins/loading#synced-plugins). Claude Code los descarga en `~/.claude/plugins/synced/` al inicio de sesiones de terminal donde inicia sesión con su cuenta de claude.ai y en sesiones de Cowork, y carga cada uno como `<name>@synced`. Establezca `false` para detener esa descarga y dejar de cargar los plugins que ya sincronizó. Claude Code solo respeta `false`: `true` es lo mismo que sin establecer y no activa la sincronización donde de otro modo está desactivada. Requiere Claude Code v2.1.273 o posterior.

4592 4595 

4593* **Scope**: [`User, local, or managed`](#scopes), y archivos pasados con `--settings`. Un repositorio no puede desactivarlo para usted.4596* **Scope**: [`User, local, or managed`](#scopes), y archivos pasados con `--settings`. Un repositorio no puede desactivarla para usted.

4594* **Type**: Boolean4597* **Type**: Boolean

4595 * `false`: Claude Code deja de descargar plugins sincronizados y deja de cargar los que ya están en `~/.claude/plugins/synced/`. En configuración de usuario o administrada, también los mueve a `~/.claude/plugins/.trash/`4598 * `false`: Claude Code deja de descargar plugins sincronizados y deja de cargar los que ya están en `~/.claude/plugins/synced/`. En configuración de usuario o administrada, también los mueve a `~/.claude/plugins/.trash/`

4596 * `true`: lo mismo que sin establecer4599 * `true`: lo mismo que sin establecer

4597* **Default**: sin establecer, por lo que las sesiones que iniciaron sesión con su cuenta claude.ai sincronizan sus plugins4600* **Default**: sin establecer, por lo que las sesiones que inician sesión con su cuenta de claude.ai sincronizan sus plugins

4598 4601 

4599Para desactivar un plugin sincronizado en lugar de todos ellos, establezca `"<name>@synced": false` en [`enabledPlugins`](#enabledplugins).4602Para desactivar un plugin sincronizado en lugar de todos, establezca `"<name>@synced": false` en [`enabledPlugins`](#enabledplugins).

4600 4603 

4601Este ejemplo evita que una máquina descargue los plugins de la cuenta en cualquier sesión:4604Este ejemplo evita que una máquina descargue los plugins de la cuenta en cualquier sesión:

4602 4605 


4629 4632 

4630Una matriz vacía bloquea cada plugin de canal.4633Una matriz vacía bloquea cada plugin de canal.

4631 4634 

4632Esta clave entra en vigor una vez que los canales pasan la puerta [`channelsEnabled`](#channelsenabled) para la cuenta: en planes Team y Enterprise, y en cuentas de Console con configuración administrada, eso significa `channelsEnabled: true`. Consulte [Restringir qué plugins de canal pueden ejecutarse](/docs/es/channels#restrict-which-channel-plugins-can-run).4635Esta clave entra en vigor una vez que los canales pasan la puerta [`channelsEnabled`](#channelsenabled) para la cuenta: en planes de Team y Enterprise, y en cuentas de Console con configuración administrada, eso significa `channelsEnabled: true`. Consulte [Restringir qué plugins de canal pueden ejecutarse](/docs/es/channels#restrict-which-channel-plugins-can-run).

4633 4636 

4634<h3 id="blockedmarketplaces">4637<h3 id="blockedmarketplaces">

4635 `blockedMarketplaces`4638 `blockedMarketplaces`

4636</h3>4639</h3>

4637 4640 

4638Bloquee fuentes de mercado de plugins para su organización. Claude Code verifica la lista de bloqueo al agregar mercado y al instalar, actualizar, actualizar y actualizar automáticamente plugins, por lo que un mercado que alguien agregó antes de que establezca la política no puede usarse para obtener plugins tampoco. Las fuentes bloqueadas se verifican antes de la descarga, por lo que nunca tocan el sistema de archivos.4641Bloquee fuentes de mercado de plugins para su organización. Claude Code verifica la lista de bloqueo al agregar un mercado y al instalar, actualizar, actualizar y actualizar automáticamente un plugin, por lo que un mercado que alguien agregó antes de establecer la política no puede usarse para obtener plugins tampoco. Las fuentes bloqueadas se verifican antes de la descarga, por lo que nunca tocan el sistema de archivos.

4639 4642 

4640Si establece esta clave en la [consola de administrador de claude.ai](/docs/es/server-managed-settings), claude.ai también la aplica cuando alguien en su organización agrega un mercado desde un repositorio de git en claude.ai, como [Cómo funcionan las restricciones](/docs/es/plugins/org#restrict-what-users-can-install) describe.4643Si establece esta clave en la [consola de administración de claude.ai](/docs/es/server-managed-settings), claude.ai también la aplica cuando alguien en su organización agrega un mercado desde un repositorio de git en claude.ai, como [Cómo funcionan las restricciones](/docs/es/plugins/org#restrict-what-users-can-install) describe.

4641 4644 

4642* **Scope**: [`Managed`](#scopes)4645* **Scope**: [`Managed`](#scopes)

4643* **Type**: matriz de objetos de fuente de mercado, en las mismas formas que [`strictKnownMarketplaces`](#allowed-source-types)4646* **Type**: matriz de objetos de fuente de mercado, en las mismas formas que [`strictKnownMarketplaces`](#allowed-source-types)


4653}4656}

4654```4657```

4655 4658 

4656Una entrada `github` puede usar la forma [comodín de propietario](#owner-wildcards) `"owner/*"` para bloquear cada repositorio bajo ese propietario de GitHub, que requiere Claude Code v2.1.223 o posterior. Agregue `{ "source": "skills-dir" }` para evitar que Claude Code cargue plugins [`@skills-dir`](/docs/es/plugins/loading#plugins-shared-through-a-repository) desde `~/.claude/skills/` sin restringir ningún mercado. Consulte [Restricciones de mercado administradas](/docs/es/plugins/org#restrict-what-users-can-install).4659Una entrada `github` puede usar la forma [comodín de propietario](#owner-wildcards) `"owner/*"` para bloquear cada repositorio bajo ese propietario de GitHub, que requiere Claude Code v2.1.223 o posterior. Agregue `{ "source": "skills-dir" }` para detener la carga de Claude Code de [plugins `@skills-dir`](/docs/es/plugins/loading#plugins-shared-through-a-repository) desde `~/.claude/skills/` sin restringir ningún mercado. Consulte [Restricciones de mercado administradas](/docs/es/plugins/org#restrict-what-users-can-install).

4657 4660 

4658<h3 id="channelsenabled">4661<h3 id="channelsenabled">

4659 `channelsEnabled`4662 `channelsEnabled`

4660</h3>4663</h3>

4661 4664 

4662Permita [canales](/docs/es/channels) para su organización. En planes Team y Enterprise de claude.ai, Claude Code bloquea canales hasta que establezca esto en `true`. Para cuentas de [Anthropic Console](/docs/es/authentication#claude-console-authentication) que se autentican con una clave API, los canales se permiten de forma predeterminada. Si su organización implementa configuración administrada, Claude Code también bloquea canales en esas cuentas hasta que establezca esta clave en `true`.4665Permita [canales](/docs/es/channels) para su organización. En planes de Team y Enterprise de claude.ai, Claude Code bloquea los canales hasta que establezca esto en `true`. Para cuentas de [Anthropic Console](/docs/es/authentication#claude-console-authentication) que se autentican con una clave API, los canales se permiten de forma predeterminada. Si su organización implementa configuración administrada, Claude Code también bloquea los canales en esas cuentas hasta que establezca esta clave en `true`.

4663 4666 

4664* **Scope**: [`Managed`](#scopes)4667* **Scope**: [`Managed`](#scopes)

4665* **Type**: Boolean4668* **Type**: Boolean

4666 * `true`: Claude Code permite canales para su organización4669 * `true`: Claude Code permite canales para su organización

4667 * `false`: lo mismo que sin establecer; si los canales están bloqueados depende de su plan, como dice el Default4670 * `false`: lo mismo que sin establecer; si los canales están bloqueados depende de su plan, como dice el Default

4668* **Default**: sin establecer; los canales están bloqueados en planes Team y Enterprise y en cuentas de Console con configuración administrada, y permitidos en planes Pro y Max y en cuentas de Console sin configuración administrada4671* **Default**: sin establecer; los canales están bloqueados en planes de Team y Enterprise y en cuentas de Console con configuración administrada, y permitidos en planes Pro y Max y en cuentas de Console sin configuración administrada

4669 4672 

4670```json managed-settings.json theme={null}4673```json managed-settings.json theme={null}

4671{4674{


4679 `disableCommandPluginSources`4682 `disableCommandPluginSources`

4680</h3>4683</h3>

4681 4684 

4682Bloquee la [fuente de plugin `command`](/docs/es/plugins/marketplace-reference#command-plugin-source), que instala un plugin ejecutando un comando declarado por el mercado en la máquina del usuario. Cuando lo establece en `true`, Claude Code nunca ejecuta el comando, no instala ni actualiza plugins de origen de comando, y deja de cargar los ya instalados. Establézcalo en `false` para permitirlos explícitamente. Siempre que bloquea fuentes de comando, ya sea que lo establezca en `true` o lo deje sin establecer bajo [`allowManagedHooksOnly`](#allowmanagedhooksonly), también bloquea comandos [`headersHelper`](/docs/es/plugins/host-marketplace#authenticate-archive-downloads) del mercado, excepto para un mercado que la configuración administrada declara. Requiere Claude Code v2.1.229 o posterior, y el bloqueo `headersHelper` requiere v2.1.238 o posterior.4685Bloquee la [fuente de plugin `command`](/docs/es/plugins/marketplace-reference#command-plugin-source), que instala un plugin ejecutando un comando declarado por el mercado en la máquina del usuario. Cuando lo establece en `true`, Claude Code nunca ejecuta el comando, no instala ni actualiza plugins de origen de comando, y deja de cargar los ya instalados. Establézcalo en `false` para permitirlos explícitamente. Siempre que bloquea fuentes de comando, ya sea que lo establezca en `true` o lo deje sin establecer bajo [`allowManagedHooksOnly`](#allowmanagedhooksonly), también bloquea los comandos [`headersHelper`](/docs/es/plugins/host-marketplace#authenticate-archive-downloads) del mercado, excepto para un mercado que la configuración administrada declara. Requiere Claude Code v2.1.229 o posterior, y el bloqueo de `headersHelper` requiere v2.1.238 o posterior.

4683 4686 

4684* **Scope**: [`Managed`](#scopes)4687* **Scope**: [`Managed`](#scopes)

4685* **Type**: Boolean4688* **Type**: Boolean


4717 `pluginTrustMessage`4720 `pluginTrustMessage`

4718</h3>4721</h3>

4719 4722 

4720Agregue el texto de su propia organización a la advertencia de confianza de plugin que Claude Code muestra antes de la instalación, por ejemplo para confirmar que los plugins de su mercado interno están revisados.4723Agregue el texto de su propia organización al aviso de confianza de plugin que Claude Code muestra antes de la instalación, por ejemplo para confirmar que los plugins de su mercado interno están revisados.

4721 4724 

4722* **Scope**: [`Managed`](#scopes)4725* **Scope**: [`Managed`](#scopes)

4723* **Type**: cadena4726* **Type**: cadena

4724* **Default**: sin establecer, por lo que Claude Code muestra solo la advertencia estándar4727* **Default**: sin establecer, por lo que Claude Code muestra solo el aviso estándar

4725 4728 

4726```json managed-settings.json theme={null}4729```json managed-settings.json theme={null}

4727{4730{


4733 `strictKnownMarketplaces`4736 `strictKnownMarketplaces`

4734</h3>4737</h3>

4735 4738 

4736Restrinja qué fuentes de mercado de plugins pueden agregar e instalar plugins las personas en su organización. Claude Code aplica la lista de permitidos al agregar mercado y al instalar, actualizar, actualizar y actualizar automáticamente plugins, antes de cualquier operación de red o sistema de archivos, por lo que un mercado que alguien agregó antes de que establezca la política no puede usarse para obtener plugins una vez que su fuente ya no coincida. Los usuarios bloqueados ven un error que nombra la política administrada.4739Restrinja qué fuentes de mercado de plugins pueden agregar e instalar plugins las personas en su organización. Claude Code aplica la lista de permitidos al agregar un mercado y al instalar, actualizar, actualizar y actualizar automáticamente un plugin, antes de cualquier operación de red o sistema de archivos, por lo que un mercado que alguien agregó antes de establecer la política no puede usarse para obtener plugins una vez que su fuente ya no coincida. Los usuarios bloqueados ven un error que nombra la política administrada.

4737 4740 

4738Si establece esta clave en la [consola de administrador de claude.ai](/docs/es/server-managed-settings), claude.ai también la aplica cuando alguien en su organización agrega un mercado desde un repositorio de git en claude.ai, como [Cómo funcionan las restricciones](/docs/es/plugins/org#restrict-what-users-can-install) describe.4741Si establece esta clave en la [consola de administración de claude.ai](/docs/es/server-managed-settings), claude.ai también la aplica cuando alguien en su organización agrega un mercado desde un repositorio de git en claude.ai, como [Cómo funcionan las restricciones](/docs/es/plugins/org#restrict-what-users-can-install) describe.

4739 4742 

4740* **Scope**: [`Managed`](#scopes)4743* **Scope**: [`Managed`](#scopes)

4741* **Type**: matriz de objetos de fuente de mercado; consulte [Tipos de fuente permitidos](#allowed-source-types)4744* **Type**: matriz de objetos de fuente de mercado; consulte [Tipos de fuente permitidos](#allowed-source-types)


4768| `url` | `{ "source": "url", "url": "https://plugins.example.com/marketplace.json", "headers": { "Authorization": "Bearer ${TOKEN}" } }` | `url` requerido; `headers` agrega encabezados HTTP para acceso autenticado |4771| `url` | `{ "source": "url", "url": "https://plugins.example.com/marketplace.json", "headers": { "Authorization": "Bearer ${TOKEN}" } }` | `url` requerido; `headers` agrega encabezados HTTP para acceso autenticado |

4769| `file` | `{ "source": "file", "path": "/opt/acme-corp/plugins/marketplace.json" }` | `path` requerido, la ruta absoluta a un archivo `marketplace.json` |4772| `file` | `{ "source": "file", "path": "/opt/acme-corp/plugins/marketplace.json" }` | `path` requerido, la ruta absoluta a un archivo `marketplace.json` |

4770| `directory` | `{ "source": "directory", "path": "/opt/acme-corp/approved-marketplaces" }` | `path` requerido, la ruta absoluta a un directorio que contiene `.claude-plugin/marketplace.json` |4773| `directory` | `{ "source": "directory", "path": "/opt/acme-corp/approved-marketplaces" }` | `path` requerido, la ruta absoluta a un directorio que contiene `.claude-plugin/marketplace.json` |

4771| `hostPattern` | `{ "source": "hostPattern", "hostPattern": "^github\\.example\\.com$" }` | `hostPattern` requerido, una regex coincidida en cualquier lugar del host del mercado; anclela con `^` y `$` para coincidir con el host completo |4774| `hostPattern` | `{ "source": "hostPattern", "hostPattern": "^github\\.example\\.com$" }` | `hostPattern` requerido, una regex coincidida en cualquier lugar del host del mercado; anclela con `^` y `$` para coincidir con todo el host |

4772| `pathPattern` | `{ "source": "pathPattern", "pathPattern": "^/opt/approved/" }` | `pathPattern` requerido, una regex coincidida en cualquier lugar en la `path` de fuentes `file` y `directory`; comience con `^` para fijar un prefijo |4775| `pathPattern` | `{ "source": "pathPattern", "pathPattern": "^/opt/approved/" }` | `pathPattern` requerido, una regex coincidida en cualquier lugar en la `path` de fuentes `file` y `directory`; comience con `^` para fijar un prefijo |

4773| `skills-dir` | `{ "source": "skills-dir" }` | Sin campos. Opta por el escaneo de plugin `~/.claude/skills/` nuevamente |4776| `skills-dir` | `{ "source": "skills-dir" }` | Sin campos. Vuelve a optar por el escaneo de plugin `~/.claude/skills/` |

4774 4777 

4775Tres tipos de fuente llevan reglas más allá de la tabla:4778Tres tipos de fuente llevan reglas más allá de la tabla:

4776 4779 

4777* **`url`**: un mercado de URL descarga solo el archivo `marketplace.json`, y Claude Code no obtiene archivos de plugin por ruta relativa desde ese servidor, por lo que sus plugins deben usar una [fuente de plugin](/docs/es/plugins/marketplace-reference#plugin-sources) que no sea una ruta relativa, como una URL de archivo, que puede estar en el mismo host. Para plugins con rutas relativas, use un mercado basado en Git en su lugar. Consulte [Los plugins con rutas relativas fallan en mercados basados en URL](/docs/es/plugins/troubleshooting#plugins-with-relative-paths-fail-in-url-based-marketplaces).4780* **`url`**: un mercado de URL descarga solo el archivo `marketplace.json`, y Claude Code no obtiene archivos de plugin por ruta relativa desde ese servidor, por lo que sus plugins deben usar una [fuente de plugin](/docs/es/plugins/marketplace-reference#plugin-sources) que no sea una ruta relativa, como una URL de archivo, que puede estar en el mismo host. Para plugins con rutas relativas, use un mercado basado en Git en su lugar. Consulte [Los plugins con rutas relativas fallan en mercados basados en URL](/docs/es/plugins/troubleshooting#plugins-with-relative-paths-fail-in-url-based-marketplaces).

4778* **`hostPattern`**: úselo para permitir cada mercado en un GitHub Enterprise interno o servidor GitLab sin enumerar cada repositorio. Claude Code compara fuentes `github` contra `github.com`, toma el nombre de host de fuentes `url`, y lo toma de fuentes `git` dependiendo de la forma de [URL de git](https://git-scm.com/docs/git-clone#_git_urls):4781* **`hostPattern`**: úselo para permitir cada mercado en un GitHub Enterprise interno o servidor GitLab sin listar cada repositorio. Claude Code compara fuentes `github` contra `github.com`, toma el nombre de host de fuentes `url`, y lo toma de fuentes `git` dependiendo de la forma de [URL de git](https://git-scm.com/docs/git-clone#_git_urls):

4779 4782 

4780 * Una URL con un esquema, como `https://` o `ssh://`: el nombre de host en la URL.4783 * Una URL con un esquema, como `https://` o `ssh://`: el nombre de host en la URL.

4781 * Una dirección SSH sin esquema, en la forma `user@host:path` de git, como `git@git.example.com:tools/plugins.git`: el host entre `@` y `:`, que es el host al que se conecta git.4784 * Una dirección SSH sin esquema, en la forma `user@host:path` de git, como `git@git.example.com:tools/plugins.git`: el host entre `@` y `:`, que es el host al que se conecta git.

4782 * Cualquier otra forma sin esquema: sin host, por lo que ninguna entrada `strictKnownMarketplaces` `hostPattern` la coincide. Para una `blockedMarketplaces` `hostPattern`, Claude Code toma un host de un conjunto más amplio de formas, por lo que una entrada de lista de bloqueo aún puede coincidir con tal forma. Antes de v2.1.234, una `strictKnownMarketplaces` `hostPattern` también coincidía con algunas formas que git no trata como direcciones SSH.4785 * Cualquier otra forma sin esquema: sin host, por lo que ninguna entrada `hostPattern` de `strictKnownMarketplaces` coincide con ella. Para una entrada `hostPattern` de `blockedMarketplaces`, Claude Code toma un host de un conjunto más amplio de formas, por lo que una entrada de lista de bloqueo aún puede coincidir con tal forma. Antes de v2.1.234, una entrada `hostPattern` de `strictKnownMarketplaces` también coincidía con algunas formas que git no trata como direcciones SSH.

4783 4786 

4784 Las fuentes `file` y `directory` no tienen host y nunca coinciden con una entrada `hostPattern`.4787 Las fuentes `file` y `directory` no tienen host y nunca coinciden con una entrada `hostPattern`.

4785* **`pathPattern`**: úselo para permitir mercados del sistema de archivos junto con entradas `hostPattern` para fuentes de red. `".*"` permite cada ruta local; un patrón más estrecho como `"^/opt/approved/"` restringe a un directorio.4788* **`pathPattern`**: úselo para permitir mercados del sistema de archivos junto con entradas `hostPattern` para fuentes de red. `".*"` permite cada ruta local; un patrón más estrecho como `"^/opt/approved/"` restringe a un directorio.

4786 4789 

4787Cualquier lista de permitidos, incluso una vacía, también evita que Claude Code cargue plugins [`@skills-dir`](/docs/es/plugins/loading#plugins-shared-through-a-repository) desde `~/.claude/skills/`. Agregue la entrada `{ "source": "skills-dir" }` para seguir cargándolos; la entrada no tiene significado fuera de esta clave y `blockedMarketplaces`.4790Cualquier lista de permitidos, incluso una vacía, también detiene la carga de Claude Code de [plugins `@skills-dir`](/docs/es/plugins/loading#plugins-shared-through-a-repository) desde `~/.claude/skills/`. Agregue la entrada `{ "source": "skills-dir" }` para seguir cargándolos; la entrada no tiene significado fuera de esta clave y `blockedMarketplaces`.

4788 4791 

4789<h4 id="owner-wildcards">4792<h4 id="owner-wildcards">

4790 Comodines de propietario4793 Comodines de propietario


4802}4805}

4803```4806```

4804 4807 

4805Solo la posición de nombre de repositorio completo puede ser un comodín. Claude Code compara entradas como `*`, `*/plugins` o `acme-corp/tools-*` literalmente, por lo que no coinciden con ningún repositorio.4808Solo la posición de nombre de repositorio completo puede ser un comodín. Claude Code ignora entradas como `*`, `*/plugins` o `acme-corp/tools-*` como inválidas, por lo que no coinciden con ningún repositorio.

4806 4809 

4807Las reglas de coincidencia difieren entre las dos configuraciones:4810Las reglas de coincidencia difieren entre las dos configuraciones:

4808 4811 

4809| Rule | `strictKnownMarketplaces` | `blockedMarketplaces` |4812| Rule | `strictKnownMarketplaces` | `blockedMarketplaces` |

4810| - | - | - |4813| - | - | - |

4811| Coincidencia de ortografías de fuente | Solo forma `owner/repo`. Una URL de git que clona el mismo repositorio no coincide | Cualquier ortografía, incluidas las URL de git que se resuelven en el mismo repositorio github.com |4814| Coincidencia de ortografías de fuente | Solo forma `owner/repo`. Una URL de git que clona el mismo repositorio no coincide | Cualquier ortografía, incluidas URLs de git que se resuelven en el mismo repositorio github.com |

4812| Caso del propietario | Sensible a mayúsculas y minúsculas, como coincidencia exacta de entrada | Insensible a mayúsculas y minúsculas |4815| Caso del propietario | Sensible a mayúsculas y minúsculas, como coincidencia exacta de entrada | Insensible a mayúsculas y minúsculas |

4813| `ref` | Sigue las reglas de coincidencia exacta de entrada: una entrada con una `ref` coincide solo con fuentes con esa ref exacta, y una entrada sin una coincide solo con fuentes que no especifican una ref | Una entrada sin una `ref` bloquea todas las refs de los repositorios que coincide |4816| `ref` | Sigue las reglas de entrada exacta: una entrada con un `ref` coincide solo con fuentes con ese ref exacto, y una entrada sin uno coincide solo con fuentes que no especifican un ref | Una entrada sin un `ref` bloquea todos los refs de los repositorios que coincide |

4814| `path` | Más flexible que las reglas de coincidencia exacta de entrada: una entrada con una `path` requiere ese valor exacto, mientras que una entrada sin una coincide con cualquier ruta dentro del repositorio | Una entrada sin una `path` bloquea todas las rutas de los repositorios que coincide |4817| `path` | Más flexible que las reglas de entrada exacta: una entrada con un `path` requiere ese valor exacto, mientras que una entrada sin uno coincide con cualquier ruta dentro del repositorio | Una entrada sin un `path` bloquea todas las rutas de los repositorios que coincide |

4815 4818 

4816<h4 id="exact-matching">4819<h4 id="exact-matching">

4817 Coincidencia exacta4820 Coincidencia exacta


4832 Permitir solo el mercado oficial4835 Permitir solo el mercado oficial

4833</h4>4836</h4>

4834 4837 

4835Para permitir el mercado oficial de Anthropic y nada más, enumere su repositorio:4838Para permitir solo el mercado oficial de Anthropic, liste su repositorio:

4836 4839 

4837```json managed-settings.json theme={null}4840```json managed-settings.json theme={null}

4838{4841{


4842}4845}

4843```4846```

4844 4847 

4845Con esta entrada, Claude Code mantiene un mercado oficial ya registrado disponible y, en una máquina nueva, registra el mercado automáticamente la primera vez que inicia Claude Code interactivamente. El registro automático comúnmente pierde:4848Con esta entrada, Claude Code mantiene un mercado oficial ya registrado disponible y, en una máquina nueva, registra el mercado automáticamente la primera vez que inicia una sesión de terminal interactiva. El registro automático comúnmente falla:

4846 4849 

4847* Entornos no interactivos que se ejecutan antes del primer lanzamiento interactivo de la máquina.4850* Entornos no interactivos que se ejecutan antes de la primera sesión de terminal interactiva de la máquina.

4848* Máquinas donde Claude Code ya se ejecutó interactivamente bajo una política que bloqueó el mercado, como el bloqueo de matriz vacía. Claude Code registra el intento bloqueado y no reintenta después de que cambia la política.4851* Máquinas donde Claude Code solo se ha ejecutado a través de la extensión de VS Code.

4852* Máquinas donde Claude Code ya ejecutó una sesión de terminal interactiva bajo una política que bloqueó el mercado, como el bloqueo de matriz vacía. Claude Code registra el intento bloqueado y no reintenta después de que cambia la política.

4849 4853 

4850En estas máquinas, agregue el mercado a [`extraKnownMarketplaces`](#extraknownmarketplaces) en el mismo `managed-settings.json` para que Claude Code lo registre automáticamente, o ejecute `claude plugin marketplace add anthropics/claude-plugins-official`.4854En estas máquinas, agregue el mercado a [`extraKnownMarketplaces`](#extraknownmarketplaces) en el mismo `managed-settings.json` para que Claude Code lo registre automáticamente, o ejecute `claude plugin marketplace add anthropics/claude-plugins-official`.

4851 4855 


4861| Settings file | Solo configuración administrada | Cualquier archivo de configuración |4865| Settings file | Solo configuración administrada | Cualquier archivo de configuración |

4862| Behavior | Bloquea adiciones no permitidas | Registra mercados faltantes |4866| Behavior | Bloquea adiciones no permitidas | Registra mercados faltantes |

4863| When enforced | Antes de operaciones de red y sistema de archivos | Inmediatamente desde configuración de usuario o administrada; después del diálogo de confianza del espacio de trabajo para archivos de un repositorio |4867| When enforced | Antes de operaciones de red y sistema de archivos | Inmediatamente desde configuración de usuario o administrada; después del diálogo de confianza del espacio de trabajo para archivos de un repositorio |

4864| Can be overridden | No, precedencia más alta | Sí, por configuración de precedencia más alta |4868| Can be overridden | No, máxima precedencia | Sí, por configuración de mayor precedencia |

4865| Source format | Objeto de fuente directo | Mercado nombrado con un objeto `source` anidado |4869| Source format | Objeto de fuente directo | Mercado nombrado con un objeto `source` anidado |

4866 4870 

4867Para restringir y preregistrar un mercado para todos los usuarios, establezca ambos en `managed-settings.json`:4871Para restringir y preregistrar un mercado para todos los usuarios, establezca ambos en `managed-settings.json`:


4879}4883}

4880```4884```

4881 4885 

4882Con solo `strictKnownMarketplaces` establecido, los usuarios aún pueden agregar un mercado permitido ellos mismos con `/plugin marketplace add`. El mercado oficial de Anthropic es el único que Claude Code registra automáticamente, y solo cuando la lista de permitidos lo permite. [Permitir solo el mercado oficial](#allow-only-the-official-marketplace) enumera las máquinas que pierde.4886Con solo `strictKnownMarketplaces` establecido, los usuarios aún pueden agregar un mercado permitido ellos mismos con `/plugin marketplace add`. El mercado oficial de Anthropic es el único que Claude Code registra automáticamente, y solo cuando la lista de permitidos lo permite. [Permitir solo el mercado oficial](#allow-only-the-official-marketplace) lista las máquinas que falla.

4883 4887 

4884<h3 id="strictpluginonlycustomization">4888<h3 id="strictpluginonlycustomization">

4885 `strictPluginOnlyCustomization`4889 `strictPluginOnlyCustomization`


4899}4903}

4900```4904```

4901 4905 

4902Las cuatro entradas de subclave a continuación enumeran lo que cada superficie bloquea y qué aún se carga. Claude Code ignora nombres de superficie que no reconoce en lugar de fallar el archivo de configuración, por lo que puede agregar nuevos nombres de superficie antes de que cada cliente se actualice.4906Las cuatro entradas de subclave a continuación listan lo que cada superficie bloquea y qué aún se carga. Claude Code ignora nombres de superficie que no reconoce en lugar de fallar el archivo de configuración, por lo que puede agregar nuevos nombres de superficie antes de que cada cliente se actualice.

4903 4907 

4904<h3 id="strictpluginonlycustomization-skills">4908<h3 id="strictpluginonlycustomization-skills">

4905 `strictPluginOnlyCustomization.skills`4909 `strictPluginOnlyCustomization.skills`

4906</h3>4910</h3>

4907 4911 

4908Bloquee la superficie `skills`. Claude Code deja de cargar skills de `~/.claude/skills/` y `.claude/skills/`, comandos personalizados de `~/.claude/commands/` y `.claude/commands/`, skills bajo directorios `--add-dir`, y skills sincronizados desde su cuenta claude.ai, y sigue cargando skills de plugins, skills incluidos y skills en el directorio de política administrada.4912Bloquee la superficie `skills`. Claude Code deja de cargar skills desde `~/.claude/skills/` y `.claude/skills/`, comandos personalizados desde `~/.claude/commands/` y `.claude/commands/`, skills y comandos bajo directorios `--add-dir`, y skills sincronizados desde su cuenta de claude.ai. Continúa cargando skills de plugins, skills incluidos y skills en el directorio de política administrada.

4909 4913 

4910* **Scope**: [`Managed`](#scopes)4914* **Scope**: [`Managed`](#scopes)

4911* **Type**: la cadena `"skills"` en la matriz [`strictPluginOnlyCustomization`](#strictpluginonlycustomization)4915* **Type**: la cadena `"skills"` en la matriz [`strictPluginOnlyCustomization`](#strictpluginonlycustomization)


4921 `strictPluginOnlyCustomization.agents`4925 `strictPluginOnlyCustomization.agents`

4922</h3>4926</h3>

4923 4927 

4924Bloquee la superficie `agents`. Claude Code deja de cargar agentes de `~/.claude/agents/` y `.claude/agents/`, y sigue cargando agentes de plugins, agentes integrados y agentes en el directorio de política administrada.4928Bloquee la superficie `agents`. Claude Code deja de cargar agentes desde `~/.claude/agents/`, `.claude/agents/` y directorios `--add-dir`. Continúa cargando agentes de plugins, agentes integrados y agentes en el directorio de política administrada.

4925 4929 

4926* **Scope**: [`Managed`](#scopes)4930* **Scope**: [`Managed`](#scopes)

4927* **Type**: la cadena `"agents"` en la matriz [`strictPluginOnlyCustomization`](#strictpluginonlycustomization)4931* **Type**: la cadena `"agents"` en la matriz [`strictPluginOnlyCustomization`](#strictpluginonlycustomization)


4937 `strictPluginOnlyCustomization.hooks`4941 `strictPluginOnlyCustomization.hooks`

4938</h3>4942</h3>

4939 4943 

4940Bloquee la superficie `hooks`. Claude Code deja de ejecutar hooks de configuración de usuario, proyecto y local `settings.json`, y sigue ejecutando hooks de plugins y hooks en configuración administrada.4944Bloquee la superficie `hooks`. Claude Code deja de ejecutar hooks de configuración de usuario, proyecto y local `settings.json`, y continúa ejecutando hooks de plugins y hooks en configuración administrada.

4941 4945 

4942* **Scope**: [`Managed`](#scopes)4946* **Scope**: [`Managed`](#scopes)

4943* **Type**: la cadena `"hooks"` en la matriz [`strictPluginOnlyCustomization`](#strictpluginonlycustomization)4947* **Type**: la cadena `"hooks"` en la matriz [`strictPluginOnlyCustomization`](#strictpluginonlycustomization)


4953 `strictPluginOnlyCustomization.mcp`4957 `strictPluginOnlyCustomization.mcp`

4954</h3>4958</h3>

4955 4959 

4956Bloquee la superficie `mcp`. Claude Code deja de cargar servidores MCP de `~/.claude.json` y `.mcp.json`, y sigue cargando servidores MCP de plugins, servidores [`managed-mcp.json`](/docs/es/managed-mcp) y servidores de [`managedMcpServers`](#managedmcpservers).4960Bloquee la superficie `mcp`. Claude Code deja de cargar servidores MCP desde `~/.claude.json` y `.mcp.json`, y continúa cargando servidores MCP de plugins, servidores [`managed-mcp.json`](/docs/es/managed-mcp) y servidores de [`managedMcpServers`](#managedmcpservers).

4957 4961 

4958* **Scope**: [`Managed`](#scopes)4962* **Scope**: [`Managed`](#scopes)

4959* **Type**: la cadena `"mcp"` en la matriz [`strictPluginOnlyCustomization`](#strictpluginonlycustomization)4963* **Type**: la cadena `"mcp"` en la matriz [`strictPluginOnlyCustomization`](#strictpluginonlycustomization)


4991 4995 

4992* **Configuración de usuario**: sus preferencias personales de plugin4996* **Configuración de usuario**: sus preferencias personales de plugin

4993* **Configuración de proyecto**: plugins compartidos con todos en el repositorio4997* **Configuración de proyecto**: plugins compartidos con todos en el repositorio

4994* **Configuración local**: anulaciones por máquina, ignoradas cuando Claude Code guarda una configuración allí4998* **Configuración local**: anulaciones por máquina, gitignored cuando Claude Code guarda una configuración allí

4995* **Configuración administrada**: política de toda la organización. Un plugin establecido en `false` aquí está bloqueado de instalación en cada scope y oculto del mercado4999* **Configuración administrada**: política de toda la organización. Un plugin establecido en `false` aquí está bloqueado de instalación en cada scope y oculto del mercado

4996 5000 

4997La configuración del proyecto tiene precedencia sobre la configuración del usuario, por lo que establecer un plugin en `false` en `~/.claude/settings.json` no deshabilita un plugin que la `.claude/settings.json` del proyecto habilita. Para optar por no participar en un plugin habilitado por proyecto en su máquina, establézcalo en `false` en `.claude/settings.local.json` en su lugar. Los plugins forzados habilitados por configuración administrada no pueden deshabilitarse de esta manera, ya que la configuración administrada anula la configuración local.5001La configuración de proyecto tiene precedencia sobre la configuración de usuario, por lo que establecer un plugin en `false` en `~/.claude/settings.json` no deshabilita un plugin que el `.claude/settings.json` del proyecto habilita. Para optar por no participar en un plugin habilitado por proyecto en su máquina, establézcalo en `false` en `.claude/settings.local.json` en su lugar. Los plugins forzados habilitados por configuración administrada no pueden deshabilitarse de esta manera, ya que la configuración administrada anula la configuración local.

4998 5002 

4999Habilitar un plugin de una fuente externa como un repositorio de GitHub o paquete npm en la `.claude/settings.json` de un proyecto no lo instala para otras personas. En cada ruta que carga plugins, Claude Code reporta el plugin como no instalado hasta que cada usuario lo [instale ellos mismos](/docs/es/plugins/org#require-plugins-per-repository).5003Habilitar un plugin de una fuente externa como un repositorio de GitHub o paquete npm en el `.claude/settings.json` de un proyecto no lo instala para otras personas. En cada ruta que carga plugins, Claude Code reporta el plugin como no instalado hasta que cada usuario lo [instale ellos mismos](/docs/es/plugins/org#require-plugins-per-repository).

5000 5004 

5001<h3 id="extraknownmarketplaces">5005<h3 id="extraknownmarketplaces">

5002 `extraKnownMarketplaces`5006 `extraKnownMarketplaces`


5004 5008 

5005Registre mercados de plugins adicionales por nombre, para que las personas que abran el repositorio, o todos los que alcance su configuración administrada, obtengan el mercado sin agregarlo ellos mismos. Claude Code registra cada mercado que aún no conoce. Si un plugin que [`enabledPlugins`](#enabledplugins) nombra desde él se instala depende de la fuente del plugin y qué archivo lo habilita; esa entrada tiene las reglas.5009Registre mercados de plugins adicionales por nombre, para que las personas que abran el repositorio, o todos los que alcance su configuración administrada, obtengan el mercado sin agregarlo ellos mismos. Claude Code registra cada mercado que aún no conoce. Si un plugin que [`enabledPlugins`](#enabledplugins) nombra desde él se instala depende de la fuente del plugin y qué archivo lo habilita; esa entrada tiene las reglas.

5006 5010 

5007* **Scope**: [`Any file`](#scopes). Claude Code respeta entradas en la `.claude/settings.json` o `.claude/settings.local.json` de un repositorio solo después de que acepte el diálogo de confianza del espacio de trabajo para esa carpeta; en una carpeta que no ha confiado, incluida una ejecución `-p` allí, las ignora sin un mensaje.5011* **Scope**: [`Any file`](#scopes). Claude Code respeta entradas en el `.claude/settings.json` o `.claude/settings.local.json` de un repositorio solo después de que acepte el diálogo de confianza del espacio de trabajo para esa carpeta; en una carpeta que no ha confiado, incluida una ejecución `-p` allí, las ignora sin un mensaje.

5008* **Type**: objeto que asigna un nombre de mercado a un objeto con un objeto `source` y un Boolean `autoUpdate` opcional5012* **Type**: objeto que asigna un nombre de mercado a un objeto con un objeto `source` y un Boolean `autoUpdate` opcional

5009* **Default**: sin establecer5013* **Default**: sin establecer

5010 5014 


5029}5033}

5030```5034```

5031 5035 

5032[Lo que se ejecuta antes de que confíe en una carpeta](/docs/es/permissions#what-runs-before-you-trust-a-folder) compara la puerta de confianza con el otro contenido que un repositorio puede suministrar. También puede escribir esta clave como `additionalMarketplaces`; consulte [Alias de clave de mercado](#marketplace-key-aliases).5036[Lo que se ejecuta antes de confiar en una carpeta](/docs/es/permissions#what-runs-before-you-trust-a-folder) compara la puerta de confianza con el otro contenido que un repositorio puede suministrar. También puede escribir esta clave como `additionalMarketplaces`; consulte [Alias de clave de mercado](#marketplace-key-aliases).

5033 5037 

5034Establezca `"autoUpdate": true` junto a `source` para hacer que Claude Code actualice ese mercado e instale sus plugins instalados en segundo plano después del inicio. Cuando se omite, `claude-plugins-official` y la mayoría de otros mercados oficiales de Anthropic tienen como predeterminado `true`, y los mercados de terceros tienen como predeterminado `false`. Consulte [Configurar actualizaciones automáticas](/docs/es/plugins/install#keep-plugins-updated).5038Establezca `"autoUpdate": true` junto a `source` para hacer que Claude Code actualice ese mercado y actualice sus plugins instalados en segundo plano después del inicio. Cuando se omite, `claude-plugins-official` y la mayoría de otros mercados oficiales de Anthropic tienen como predeterminado `true`, y los mercados de terceros tienen como predeterminado `false`. Consulte [Configurar actualizaciones automáticas](/docs/es/plugins/install#keep-plugins-updated).

5035 5039 

5036Cuando más de un archivo de configuración define una entrada de mercado bajo el mismo nombre, Claude Code usa la entrada del [archivo de precedencia más alta](/docs/es/settings#settings-precedence) completo. Esa entrada reemplaza la entrada de precedencia más baja y no hereda ninguno de sus campos, por lo que una redefinición no puede combinar `source.headers` de credencial de un archivo con una URL que otro archivo controla. Antes de v2.1.228, Claude Code fusionaba entradas del mismo nombre campo por campo, por lo que una entrada en un archivo de precedencia más alta podría heredar campos que no estableció, incluidos `headers` de otro archivo.5040Cuando más de un archivo de configuración define una entrada de mercado bajo el mismo nombre, Claude Code usa la entrada del archivo de [mayor precedencia](/docs/es/settings#settings-precedence) completo. Esa entrada reemplaza la entrada de menor precedencia y no hereda ninguno de sus campos, por lo que una redefinición no puede combinar el `source.headers` de credencial de un archivo con una URL que otro archivo controla. Antes de v2.1.228, Claude Code fusionaba entradas del mismo nombre campo por campo, por lo que una entrada en un archivo de mayor precedencia podría heredar campos que no estableció, incluidos `headers` de otro archivo.

5037 5041 

5038<h4 id="marketplace-source-types">5042<h4 id="marketplace-source-types">

5039 Tipos de fuente de mercado5043 Tipos de fuente de mercado


5043 5047 

5044* **`github`**: un repositorio de GitHub, con `repo`5048* **`github`**: un repositorio de GitHub, con `repo`

5045* **`git`**: cualquier URL de git, con `url`5049* **`git`**: cualquier URL de git, con `url`

5046* **`url`**: una URL directa a un archivo `marketplace.json`, con `url` y `headers` opcional y `headersHelper` para acceso autenticado. `headersHelper` nombra un comando que imprime encabezados cuyos valores son demasiado efímeros para enumerar en `headers`, y requiere Claude Code v2.1.238 o posterior5050* **`url`**: una URL directa a un archivo `marketplace.json`, con `url` y `headers` opcional y `headersHelper` para acceso autenticado. `headersHelper` nombra un comando que imprime encabezados cuyos valores son demasiado efímeros para listar en `headers`, y requiere Claude Code v2.1.238 o posterior

5047* **`file`**: una ruta local a un archivo `marketplace.json`, con `path`5051* **`file`**: una ruta local a un archivo `marketplace.json`, con `path`

5048* **`directory`**: una ruta del sistema de archivos local, con `path`, solo para desarrollo5052* **`directory`**: una ruta del sistema de archivos local, con `path`. Úselo para desarrollo, o para un mercado que su organización [implementa en cada máquina](/docs/es/plugins/mods/admin#install-your-organizations-mods).

5049* **`settings`**: un mercado en línea declarado directamente en el archivo de configuración sin un repositorio alojado, con `name` y `plugins`5053* **`settings`**: un mercado en línea declarado directamente en el archivo de configuración sin un repositorio alojado, con `name` y `plugins`

5050 5054 

5051El tipo de fuente `git` funciona con cualquier servicio de alojamiento de git, incluido GitLab autohospedado y Bitbucket. Claude Code clona el repositorio con la misma autenticación que `git clone` usaría en esa máquina: ayudantes de credenciales configurados o claves SSH. Un token de proveedor como `GITHUB_TOKEN` entra en vigor solo a través de un ayudante de credenciales que lo lee. Consulte [Repositorios privados](/docs/es/plugins/host-marketplace#grant-access-to-a-private-marketplace) para detalles de configuración.5055El tipo de fuente `git` funciona con cualquier servicio de alojamiento de git, incluido GitLab autohospedado y Bitbucket. Claude Code clona el repositorio con la misma autenticación que `git clone` usaría en esa máquina: ayudantes de credenciales configurados o claves SSH. Un token de proveedor como `GITHUB_TOKEN` entra en vigor a través de un ayudante de credenciales que lo lee. Consulte [Repositorios privados](/docs/es/plugins/host-marketplace#grant-access-to-a-private-marketplace) para detalles de configuración.

5052 5056 

5053Para fuentes `github` y `git`, Claude Code nunca descarga contenido de [Git LFS](https://git-lfs.com) cuando clona el repositorio de mercado para agregarlo o actualizarlo. Los archivos rastreados por LFS se extraen como archivos de puntero, y la salida de agregar o actualizar reporta cuántos.5057Para fuentes `github` y `git`, Claude Code nunca descarga contenido de [Git LFS](https://git-lfs.com) cuando clona el repositorio de mercado para agregarlo o actualizarlo. Los archivos rastreados por LFS se cierran como archivos de puntero, y la salida de agregar o actualizar reporta cuántos.

5054 5058 

5055El campo `skipLfs` dentro del objeto `source` se acepta y no tiene efecto. Antes de v2.1.274, Claude Code descargaba contenido de LFS a menos que estableciera `"skipLfs": true`.5059El campo `skipLfs` dentro del objeto `source` se acepta y no tiene efecto. Antes de v2.1.274, Claude Code descargaba contenido de LFS a menos que estableciera `"skipLfs": true`.

5056 5060 

5057Para una fuente `url`, establezca `headersHelper` dentro del objeto `source` cuando la credencial en `headers` expira y un comando tiene que producir una nueva. Requiere Claude Code v2.1.238 o posterior. Para lo que el comando debe imprimir y dónde Claude Code lo ejecuta, consulte [Escribir el comando headersHelper](/docs/es/plugins/host-marketplace#write-the-headershelper-command), y para los casos donde Claude Code no lo ejecuta, consulte [Cuándo Claude Code omite un comando headersHelper](/docs/es/plugins/host-marketplace#when-claude-code-skips-a-headershelper-command-or-drops-its-output). Una vez que establezca `headersHelper` en una URL de mercado `https://`, Claude Code ejecuta el comando en dos puntos, reutilizando la salida de una ejecución durante hasta 60 segundos:5061Para una fuente `url`, establezca `headersHelper` dentro del objeto `source` cuando la credencial en `headers` expire y un comando tenga que producir una nueva. Requiere Claude Code v2.1.238 o posterior. Para lo que el comando debe imprimir y dónde Claude Code lo ejecuta, consulte [Escribir el comando headersHelper](/docs/es/plugins/host-marketplace#write-the-headershelper-command), y para los casos donde Claude Code no lo ejecuta, consulte [Cuándo Claude Code omite un comando headersHelper](/docs/es/plugins/host-marketplace#when-claude-code-skips-a-headershelper-command-or-drops-its-output). Una vez que establezca `headersHelper` en una URL de mercado `https://`, Claude Code ejecuta el comando en dos puntos, reutilizando la salida de una ejecución durante hasta 60 segundos:

5058 5062 

5059* Antes de cada obtención del `marketplace.json` de ese mercado, incluida una actualización posterior. Claude Code envía los encabezados impresos con esa obtención.5063* Antes de cada obtención del `marketplace.json` de ese mercado, incluida una actualización posterior. Claude Code envía los encabezados impresos con esa obtención.

5060* Antes de cada descarga de archivo de plugin en el origen de la URL del mercado, lo que significa el mismo esquema, host y puerto. Claude Code envía la salida con esa descarga, y ninguna otra descarga obtiene los encabezados.5064* Antes de cada descarga de archivo de plugin en el origen de la URL del mercado, lo que significa el mismo esquema, host y puerto. Claude Code envía la salida con esa descarga, y ninguna otra descarga obtiene los encabezados.

5061 5065 

5062Claude Code ignora cualquier `headersHelper` establecido en la `.claude/settings.json` o `.claude/settings.local.json` de un directorio que agregue con [`--add-dir`](/docs/es/permissions#what-runs-before-you-trust-a-folder), en una fuente `url` y en una entrada de plugin en línea por igual, y envía solo los `headers` fijos establecidos en ese archivo. [Cómo los usuarios aceptan un comando headersHelper](/docs/es/plugins/host-marketplace#how-users-accept-a-headershelper-command) cubre los otros archivos de configuración.5066Claude Code ignora cualquier `headersHelper` establecido en el `.claude/settings.json` o `.claude/settings.local.json` de un directorio que agregue con [`--add-dir`](/docs/es/permissions#what-runs-before-you-trust-a-folder), en una fuente `url` y en una entrada de plugin en línea por igual, y envía solo los `headers` fijos establecidos en ese archivo. [Cómo los usuarios aceptan un comando headersHelper](/docs/es/plugins/host-marketplace#how-users-accept-a-headershelper-command) cubre los otros archivos de configuración.

5063 5067 

5064Los plugins enumerados en una fuente `settings` deben hacer referencia a fuentes externas como GitHub o npm, y el `name` debe coincidir con la clave de mercado. Aún habilita cada plugin por separado en `enabledPlugins`. Este ejemplo declara un plugin en línea:5068Los plugins listados en una fuente `settings` deben hacer referencia a fuentes externas como GitHub o npm, y el `name` debe coincidir con la clave de mercado. Aún habilita cada plugin por separado en `enabledPlugins`. Este ejemplo declara un plugin en línea:

5065 5069 

5066```json settings.json theme={null}5070```json settings.json theme={null}

5067{5071{


5085}5089}

5086```5090```

5087 5091 

5088Una entrada de plugin bajo `source: 'settings'` cuya propia `source` es un [`archive`](/docs/es/plugins/marketplace-reference#archive-plugin-source) puede establecer `headers` para la descarga del archivo. Si el valor que pondría en `headers` es efímero, como un token que su registro acuña bajo demanda, establezca un comando `headersHelper` en su lugar. Una entrada puede establecer ambos. Ambos campos requieren Claude Code v2.1.238 o posterior.5092Una entrada de plugin bajo `source: 'settings'` cuya propia `source` es un [`archive`](/docs/es/plugins/marketplace-reference#archive-plugin-source) puede establecer `headers` para la descarga de archivo. Si el valor que pondría en `headers` es efímero, como un token que su registro acuña bajo demanda, establezca un comando `headersHelper` en su lugar. Una entrada puede establecer ambos. Ambos campos requieren Claude Code v2.1.238 o posterior.

5089 5093 

5090Claude Code envía los `headers` de la entrada, y lo que el comando imprime, con la descarga del archivo de ese plugin y con ninguna otra descarga. Claude Code ejecuta el comando solo cuando un usuario [instala o actualiza ese único plugin por sí solo](/docs/es/plugins/host-marketplace#how-users-accept-a-headershelper-command). Tres reglas adicionales dependen de qué archivo contiene la entrada:5094Claude Code envía los `headers` de la entrada, y lo que el comando imprime, con la descarga de archivo de ese plugin y con ninguna otra descarga. Claude Code ejecuta el comando solo cuando un usuario [instala o actualiza ese plugin solo](/docs/es/plugins/host-marketplace#how-users-accept-a-headershelper-command). Tres reglas adicionales dependen de qué archivo contiene la entrada:

5091 5095 

5092* **`strict`**: a diferencia de una entrada en el `marketplace.json` de un mercado, una entrada en configuración no necesita `"strict": false`, porque un archivo de configuración no lleva campos de manifiesto para en línea. Consulte [Modo estricto](/docs/es/plugins/marketplace-reference#strict-mode).5096* **`strict`**: a diferencia de una entrada en el `marketplace.json` de un mercado, una entrada en configuración no necesita `"strict": false`, porque un archivo de configuración no lleva campos de manifiesto para en línea. Consulte [Modo estricto](/docs/es/plugins/marketplace-reference#strict-mode).

5093* **Confianza de carpeta**: para una entrada en la `.claude/settings.json` o `.claude/settings.local.json` de un proyecto, Claude Code ejecuta el comando solo después de que el usuario también haya [confiado en esa carpeta](/docs/es/permissions#what-runs-before-you-trust-a-folder).5097* **Confianza de carpeta**: para una entrada en el `.claude/settings.json` o `.claude/settings.local.json` de un proyecto, Claude Code ejecuta el comando solo después de que el usuario también haya [confiado en esa carpeta](/docs/es/permissions#what-runs-before-you-trust-a-folder).

5094* **Filtro de encabezado**: Claude Code elimina [nombres de encabezado de enrutamiento de solicitud e identidad del cliente](/docs/es/plugins/host-marketplace#when-claude-code-skips-a-headershelper-command-or-drops-its-output) de una entrada en la `.claude/settings.json` o `.claude/settings.local.json` de un proyecto, porque un repositorio puede suministrar esos archivos. Claude Code aplica el mismo filtro a una entrada de catálogo y a una entrada en la configuración de un directorio `--add-dir`, y ningún filtro a una entrada en su configuración de usuario, un archivo `--settings` o configuración administrada.5098* **Filtro de encabezado**: Claude Code elimina [nombres de encabezado de enrutamiento de solicitud e identidad del cliente](/docs/es/plugins/host-marketplace#when-claude-code-skips-a-headershelper-command-or-drops-its-output) de una entrada en el `.claude/settings.json` o `.claude/settings.local.json` de un proyecto, porque un repositorio puede suministrar esos archivos. Claude Code aplica el mismo filtro a una entrada de catálogo y a una entrada en un directorio `--add-dir`, y ningún filtro a una entrada en su configuración de usuario, un archivo `--settings` o configuración administrada.

5095 5099 

5096<h4 id="marketplace-key-aliases">5100<h4 id="marketplace-key-aliases">

5097 Alias de clave de mercado5101 Alias de clave de mercado


5128}5132}

5129```5133```

5130 5134 

5131Los plugins integrados almacenan sus opciones bajo la misma clave con un sufijo `@builtin`. Por ejemplo, la configuración [**Instrucciones del proyecto**](/docs/es/memory#choose-which-instruction-files-load) que controla si Claude Code lee archivos `AGENTS.md` es `pluginConfigs["agents-md@builtin"].options.instructionFiles`.5135Los plugins integrados almacenan sus opciones bajo la misma clave con un sufijo `@builtin`. Por ejemplo, la configuración [**Instrucciones de proyecto**](/docs/es/memory#choose-which-instruction-files-load) que controla si Claude Code lee archivos `AGENTS.md` es `pluginConfigs["agents-md@builtin"].options.instructionFiles`.

5132 5136 

5133Claude Code ignora entradas de proyecto y local porque sustituye estos valores en configuraciones de hook de plugin, MCP y LSP, y un repositorio clonado no debe poder suministrarlos. Antes de v2.1.207, la configuración de proyecto y local también se leía.5137Claude Code ignora entradas de proyecto y local porque sustituye estos valores en configuraciones de hook, MCP y LSP de plugin, y un repositorio clonado no debe poder suministrarlos. Antes de v2.1.207, la configuración de proyecto y local también se leía.

5138 

5139<h3 id="prependplugins">

5140 `prependPlugins`

5141</h3>

5142 

5143Liste los plugins administrados cuyos [mods](/docs/es/plugins/mods/overview) se ejecutan antes de cada mod que instala un usuario, en el orden listado. Cuando establece esta clave en configuración administrada, nombre `sec-default@builtin` en la lista para mantener la guardia integrada. En configuración administrada, Claude Code omite un id cuyo plugin no cuenta como el de su organización. Consulte [Instale los mods de su organización y establezca el orden](/docs/es/plugins/mods/admin#install-your-organizations-mods) para esas condiciones y cómo funcionan juntas las dos claves de ordenamiento.

5144 

5145* **Scope**: [`User or managed`](#scopes). Claude Code lee la clave de configuración administrada. Lee la clave de configuración de usuario solo en una máquina sin configuración administrada, para un usuario que no ha iniciado sesión con un plan de Team o Enterprise. Ignora la clave en configuración de proyecto y local y en un archivo `--settings`.

5146* **Type**: matriz de cadenas `plugin-name@marketplace-name`

5147* **Default**: sin establecer

5148 

5149```json managed-settings.json theme={null}

5150{

5151 "extraKnownMarketplaces": {

5152 "acme-tools": {

5153 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }

5154 }

5155 },

5156 "enabledPlugins": { "acme-guard@acme-tools": true },

5157 "prependPlugins": ["acme-guard@acme-tools", "sec-default@builtin"]

5158}

5159```

5160 

5161<h3 id="appendplugins">

5162 `appendPlugins`

5163</h3>

5164 

5165Liste los plugins administrados cuyos [mods](/docs/es/plugins/mods/overview) se ejecutan después de cada mod que instala un usuario, en el orden listado. Un id listado en ambos `prependPlugins` y `appendPlugins` se antepone. En configuración administrada, Claude Code omite un id cuyo plugin no [cuenta como el de su organización](/docs/es/plugins/mods/admin#install-your-organizations-mods).

5166 

5167* **Scope**: [`User or managed`](#scopes). Claude Code lee la clave de configuración administrada. Lee la clave de configuración de usuario solo en una máquina sin configuración administrada, para un usuario que no ha iniciado sesión con un plan de Team o Enterprise. Ignora la clave en configuración de proyecto y local y en un archivo `--settings`.

5168* **Type**: matriz de cadenas `plugin-name@marketplace-name`

5169* **Default**: sin establecer

5170 

5171```json managed-settings.json theme={null}

5172{

5173 "extraKnownMarketplaces": {

5174 "acme-tools": {

5175 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }

5176 }

5177 },

5178 "enabledPlugins": { "acme-audit@acme-tools": true },

5179 "appendPlugins": ["acme-audit@acme-tools"]

5180}

5181```

5134 5182 

5135<h2 id="mcp">5183<h2 id="mcp">

5136 MCP5184 MCP


5652 5700 

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

5654* **Type**: Boolean5702* **Type**: Boolean

5655 * `true`: Claude Code desactiva la herramienta Artifact para cada sesión a la que se aplique el archivo, y ningún otro archivo la vuelve a activar. Antes de v2.1.242, un archivo de mayor precedencia podría anular un `true` de un archivo de menor precedencia en lugar de que la clave actúe como un bloqueo5703 * `true`: Claude Code desactiva la herramienta Artifact para cada sesión a la que se aplique el archivo, y ningún otro archivo la vuelve a activar

5656 * `false`: ignorado; para dejar la herramienta activada, elimine la clave5704 * `false`: ignorado; para dejar la herramienta activada, elimine la clave

5657* **Default**: unset, por lo que la herramienta sigue la [disponibilidad](/docs/es/artifacts#availability) de su cuenta5705* **Default**: unset, por lo que la herramienta sigue la [disponibilidad](/docs/es/artifacts#availability) de su cuenta

5658* **Per-session overrides**: [`CLAUDE_CODE_DISABLE_ARTIFACT`](/docs/es/env-vars) establecido en `1` desactiva la herramienta para una sesión5706* **Per-session overrides**: [`CLAUDE_CODE_DISABLE_ARTIFACT`](/docs/es/env-vars) establecido en `1` desactiva la herramienta para una sesión


5739}5787}

5740```5788```

5741 5789 

5742Mientras una fuente que no sea su propia configuración de usuario mantiene la herramienta desactivada, Claude Code oculta la fila **Artifacts** en `/config`, porque activarla allí no cambiaría nada. [Desactivar artefactos](/docs/es/artifacts#disable-artifacts) enumera todas las formas de desactivar la herramienta. Antes de v2.1.242, Claude Code ignoraba esta clave en la configuración de proyecto y local, y un archivo más alto en la [pila de precedencia](/docs/es/settings#settings-precedence) podría volver a activar la herramienta sobre un `false` de un archivo más bajo.5790Mientras una fuente que no sea su propia configuración de usuario mantiene la herramienta desactivada, Claude Code oculta la fila **Artifacts** en `/config`, porque activarla allí no cambiaría nada. [Desactivar artefactos](/docs/es/artifacts#disable-artifacts) enumera todas las formas de desactivar la herramienta.

5743 5791 

5744<h3 id="inputneedednotifenabled">5792<h3 id="inputneedednotifenabled">

5745 `inputNeededNotifEnabled`5793 `inputNeededNotifEnabled`


5878 5926 

5879Proporcione credenciales a través de scripts auxiliares y, para organizaciones, fuerce un método de inicio de sesión u organización. Consulte [Autenticación](/docs/es/authentication).5927Proporcione credenciales a través de scripts auxiliares y, para organizaciones, fuerce un método de inicio de sesión u organización. Consulte [Autenticación](/docs/es/authentication).

5880 5928 

5929<h3 id="allowedproviders">

5930 `allowedProviders`

5931</h3>

5932 

5933Liste los servicios a través de los cuales una máquina puede acceder a Claude, como la API de Anthropic, Amazon Bedrock, o una puerta de enlace LLM. Una sesión en un proveedor que no está listado se rechaza al inicio, al iniciar sesión, y cuando contacta a continuación con la API, por lo que cambiar a un proveedor no listado a mitad de sesión también se rechaza. El [mensaje de rechazo](/docs/es/errors#managed-settings-dont-allow-this-api-provider) nombra lo que seleccionó el proveedor y los pasos para continuar. Requiere Claude Code v2.1.285 o posterior.

5934 

5935* **Scope**: [`Managed`](#scopes). Una lista que las fuentes de administrador propias de la máquina establecen, las políticas MDM y los archivos de configuración administrada, sigue aplicándose cuando la configuración administrada por servidor también entrega una: una sesión puede entonces usar solo los proveedores en ambas listas, por lo que una lista administrada por servidor puede reducir lo que la máquina permite pero nunca ampliarlo. Cuál `allowedProviders` de la fuente de la máquina cuenta sigue [cómo Claude Code combina fuentes administradas](/docs/es/managed-settings#how-claude-code-combines-managed-sources). Una lista entregada solo a través de configuración administrada por servidor llega solo a las sesiones que [obtienen configuración administrada por servidor](/docs/es/server-managed-settings#platform-availability).

5936* **Type**: matriz de strings, cada uno de:

5937 * `"anthropic"`: la API de Anthropic en el host propio de Anthropic, a través de un inicio de sesión de claude.ai o Console o una clave de API. Emparéjelo con [`forceLoginMethod`](#forceloginmethod) o [`forceLoginOrgUUID`](#forceloginorguuid) para también restringir el inicio de sesión

5938 * `"bedrock"`: [Amazon Bedrock](/docs/es/amazon-bedrock)

5939 * `"vertex"`: [Plataforma de Agente de Google Cloud](/docs/es/google-vertex-ai), anteriormente Vertex AI

5940 * `"foundry"`: [Microsoft Foundry](/docs/es/microsoft-foundry)

5941 * `"anthropicAws"`: [Plataforma Claude en AWS](/docs/es/claude-platform-on-aws)

5942 * `"mantle"`: el punto de conexión [Mantle](/docs/es/amazon-bedrock#use-the-mantle-endpoint) de Amazon Bedrock. Una sesión que [ejecuta Mantle junto con la API de Invoke](/docs/es/amazon-bedrock#run-mantle-alongside-the-invoke-api) usa ambos proveedores, por lo que liste `"bedrock"` y `"mantle"` juntos para ella

5943 * `"customEndpoint"`: la API de Anthropic o la API de un proveedor en la nube enviada a otro host, como una [puerta de enlace LLM](/docs/es/llm-gateway) nombrada por `ANTHROPIC_BASE_URL`, una variable `ANTHROPIC_*_BASE_URL` del proveedor, o un valor `ANTHROPIC_FOUNDRY_RESOURCE` que no es un nombre de recurso simple. Claude Code lo admite solo para el valor exacto que un bloque [`env`](#env) administrado fija

5944 * `"gateway"`: un inicio de sesión de [puerta de enlace en la nube](/docs/es/claude-apps-gateway)

5945* **Default**: sin establecer, por lo que se puede usar cualquier proveedor

5946 

5947```json managed-settings.json theme={null}

5948{

5949 "allowedProviders": ["anthropic", "bedrock"]

5950}

5951```

5952 

5953La entrada de cada proveedor en la nube significa el servicio propio de ese proveedor, incluidos sus puntos de conexión regionales, FIPS y privados.

5954 

5955Una entrada que Claude Code no reconoce como un nombre de proveedor se descarta y se informa, y el resto de la lista se mantiene aplicada. Con una lista vacía, o una cuya cada entrada no es reconocida, Claude Code rechaza cada proveedor y no inicia en la máquina.

5956 

5957<h4 id="endpoints-that-need-a-pin-in-managed-env">

5958 Puntos de conexión que necesitan un fijo en `env` administrado

5959</h4>

5960 

5961Un fijo es el valor de una variable de punto de conexión establecido en un bloque [`env`](#env) administrado. Cuando una sesión envía el tráfico de un proveedor a algún lugar que no sea el servicio propio de ese proveedor, Claude Code lo admite solo si el valor de la sesión es el mismo que el fijo. Estos puntos de conexión necesitan uno:

5962 

5963* **Sesiones `"customEndpoint"`**: la variable que nombra el host, como `ANTHROPIC_BASE_URL`

5964* **Amazon Bedrock**: las variables `AWS_ENDPOINT_URL`, `AWS_ENDPOINT_URL_BEDROCK`, y `AWS_ENDPOINT_URL_BEDROCK_RUNTIME` del SDK de AWS cuando apuntan fuera del servicio propio de Bedrock. La sesión permanece bajo `"bedrock"` en lugar de `"customEndpoint"`

5965* **URL de inicio de sesión de una puerta de enlace**: la sesión permanece bajo `"gateway"`, y [`forceLoginGatewayUrl`](#forcelogingatewayurl) también cuenta como el fijo

5966 

5967Cuáles bloques `env` cuentan como fijos depende de dónde se establezca la lista:

5968 

5969* **Una fuente de administrador en la máquina establece una lista**: solo los bloques `env` de las fuentes de administrador propias de la máquina cuentan

5970* **Solo la configuración administrada por servidor establece una lista**: un valor `env` en esa configuración administrada por servidor también cuenta

5971 

5972La lista no juzga las variables de credencial y tenencia de un proveedor en la nube o la ruta de red, como `HTTPS_PROXY` y la configuración de certificados. Establezca esos para la flota en el bloque `env` administrado.

5973 

5881<h3 id="apikeyhelper">5974<h3 id="apikeyhelper">

5882 `apiKeyHelper`5975 `apiKeyHelper`

5883</h3>5976</h3>


6400| :- | :- | :- |6493| :- | :- | :- |

6401| Listas | Combina entradas de todas las fuentes | [`permissions.allow`](#permissions-allow), [`sandbox.network.allowedDomains`](#sandbox-network-alloweddomains) y otras claves de lista |6494| Listas | Combina entradas de todas las fuentes | [`permissions.allow`](#permissions-allow), [`sandbox.network.allowedDomains`](#sandbox-network-alloweddomains) y otras claves de lista |

6402| Bloqueos | Aplica el valor más estricto que establece cualquier fuente. Cuando ninguna fuente establece un valor estricto, aplica un valor más flexible solo de la fuente más alta | [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly), [`permissions.disableBypassPermissionsMode`](#permissions-disablebypasspermissionsmode) y otros bloqueos booleanos o de enumeración |6495| Bloqueos | Aplica el valor más estricto que establece cualquier fuente. Cuando ninguna fuente establece un valor estricto, aplica un valor más flexible solo de la fuente más alta | [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly), [`permissions.disableBypassPermissionsMode`](#permissions-disablebypasspermissionsmode) y otros bloqueos booleanos o de enumeración |

6403| Listas de restricciones | Toma la lista completa de la fuente más alta que la establece, sin agregar entradas de fuentes inferiores. Cuando la fuente más alta no establece una, la toma completa de la siguiente fuente hacia abajo | [`availableModels`](#availablemodels), [`allowedMcpServers`](#allowedmcpservers), [`strictKnownMarketplaces`](#strictknownmarketplaces), [`allowedChannelPlugins`](#allowedchannelplugins) y la cadena [`fallbackModel`](#fallbackmodel) |6496| Listas de restricciones | Toma la lista completa de la fuente más alta que la establece, sin agregar entradas de fuentes inferiores. Cuando la fuente más alta no establece una, la toma completa de la siguiente fuente hacia abajo | [`availableModels`](#availablemodels), [`allowedMcpServers`](#allowedmcpservers), [`allowedProviders`](#allowedproviders), [`strictKnownMarketplaces`](#strictknownmarketplaces), [`allowedChannelPlugins`](#allowedchannelplugins) y la cadena [`fallbackModel`](#fallbackmodel) |

6404| Valores tomados completos | Toma el valor completo de la fuente más alta que lo establece, sin combinar entradas o campos de fuentes inferiores. Cuando la fuente más alta no lo establece, lo toma completo de la siguiente fuente hacia abajo | [`sandbox.credentials.awsPairs`](#sandbox-credentials-awspairs), [`sandbox.ripgrep`](#sandbox-ripgrep) |6497| Valores tomados completos | Toma el valor completo de la fuente más alta que lo establece, sin combinar entradas o campos de fuentes inferiores. Cuando la fuente más alta no lo establece, lo toma completo de la siguiente fuente hacia abajo | [`sandbox.credentials.awsPairs`](#sandbox-credentials-awspairs), [`sandbox.ripgrep`](#sandbox-ripgrep) |

6405| Servidores MCP proporcionados | Combina los nombres de servidor de todas las fuentes. Cuando dos fuentes establecen el mismo nombre, aplica la entrada completa de la fuente más alta | [`managedMcpServers`](#managedmcpservers) |6498| Servidores MCP proporcionados | Combina los nombres de servidor de todas las fuentes. Cuando dos fuentes establecen el mismo nombre, aplica la entrada completa de la fuente más alta | [`managedMcpServers`](#managedmcpservers) |

6406| Leer solo de la fuente de mayor prioridad | Lee la clave solo de la fuente de mayor prioridad que lleva una clave de política, por lo que el valor de una fuente inferior se ignora incluso cuando la fuente más alta no establece ninguno | [`apiKeyHelper`](#apikeyhelper), [`awsAuthRefresh`](#awsauthrefresh), [`awsCredentialExport`](#awscredentialexport), [`gcpAuthRefresh`](#gcpauthrefresh), [`otelHeadersHelper`](#otelheadershelper), `proxyAuthHelper`, [`forceLoginOrgUUID`](#forceloginorguuid), los valores `"claudeai"` y `"console"` de [`forceLoginMethod`](#forceloginmethod), [`parentSettingsBehavior`](#parentsettingsbehavior), [`modelPicker`](#modelpicker), [`policyHelper`](#policyhelper), [`permissions.defaultMode`](#permissions-defaultmode) |6499| Leer solo de la fuente de mayor prioridad | Lee la clave solo de la fuente de mayor prioridad que lleva una clave de política, por lo que el valor de una fuente inferior se ignora incluso cuando la fuente más alta no establece ninguno | [`apiKeyHelper`](#apikeyhelper), [`awsAuthRefresh`](#awsauthrefresh), [`awsCredentialExport`](#awscredentialexport), [`gcpAuthRefresh`](#gcpauthrefresh), [`otelHeadersHelper`](#otelheadershelper), `proxyAuthHelper`, [`forceLoginOrgUUID`](#forceloginorguuid), los valores `"claudeai"` y `"console"` de [`forceLoginMethod`](#forceloginmethod), [`parentSettingsBehavior`](#parentsettingsbehavior), [`modelPicker`](#modelpicker), [`policyHelper`](#policyhelper), [`permissions.defaultMode`](#permissions-defaultmode) |


6414* **[`policyHelper`](#policyhelper)**: Claude Code la honra solo cuando la fuente más alta que lleva una clave de política es una política MDM o un archivo de configuraciones administradas, por lo que bajo configuraciones administradas por el servidor no se aplica.6507* **[`policyHelper`](#policyhelper)**: Claude Code la honra solo cuando la fuente más alta que lleva una clave de política es una política MDM o un archivo de configuraciones administradas, por lo que bajo configuraciones administradas por el servidor no se aplica.

6415* **[`modelOverrides`](#modeloverrides)**: se empareja con `availableModels`. Claude Code toma `modelOverrides` de la fuente más alta que lo establece, a menos que una fuente más alta establezca `availableModels` sin `modelOverrides`. En ese caso ignora `modelOverrides` de todas las fuentes.6508* **[`modelOverrides`](#modeloverrides)**: se empareja con `availableModels`. Claude Code toma `modelOverrides` de la fuente más alta que lo establece, a menos que una fuente más alta establezca `availableModels` sin `modelOverrides`. En ese caso ignora `modelOverrides` de todas las fuentes.

6416* **[`forceLoginGatewayUrl`](#forcelogingatewayurl), [`gatewayInternalNetworks`](#gatewayinternalnetworks) y el valor `"gateway"` de [`forceLoginMethod`](#forceloginmethod)**: Claude Code nunca los lee de configuraciones administradas por el servidor, por lo que un valor allí ni se aplica ni oculta uno establecido en una política MDM o archivo de configuraciones administradas. Entre las fuentes de administrador en la máquina, solo la de mayor rango que lleva una clave de política los suministra, independientemente de si las configuraciones administradas por el servidor también están presentes.6509* **[`forceLoginGatewayUrl`](#forcelogingatewayurl), [`gatewayInternalNetworks`](#gatewayinternalnetworks) y el valor `"gateway"` de [`forceLoginMethod`](#forceloginmethod)**: Claude Code nunca los lee de configuraciones administradas por el servidor, por lo que un valor allí ni se aplica ni oculta uno establecido en una política MDM o archivo de configuraciones administradas. Entre las fuentes de administrador en la máquina, solo la de mayor rango que lleva una clave de política los suministra, independientemente de si las configuraciones administradas por el servidor también están presentes.

6510* **[`allowedProviders`](#allowedproviders)**: después de la regla de la tabla, la lista propia de la máquina aún limita el resultado, como su nota de Alcance de entrada indica.

6417 6511 

6418Para confirmar qué fuentes se combinaron en una máquina, ejecute `/status` y [lea la línea `Setting sources`](/docs/es/managed-settings#read-the-source-in-/status).6512Para confirmar qué fuentes se combinaron en una máquina, ejecute `/status` y [lea la línea `Setting sources`](/docs/es/managed-settings#read-the-source-in-/status).

6419 6513 

skills.md +1 −1

Details

740 740 

741* **Directorio de trabajo**: Claude Code ejecuta cada comando en el directorio de trabajo actual del shell de la sesión. Ese directorio se mueve cuando Claude ejecuta `cd`. Use [`${CLAUDE_SKILL_DIR}` o `${CLAUDE_PROJECT_DIR}`](#available-string-substitutions) en rutas que deben resolverse de la misma manera cada vez.741* **Directorio de trabajo**: Claude Code ejecuta cada comando en el directorio de trabajo actual del shell de la sesión. Ese directorio se mueve cuando Claude ejecuta `cd`. Use [`${CLAUDE_SKILL_DIR}` o `${CLAUDE_PROJECT_DIR}`](#available-string-substitutions) en rutas que deben resolverse de la misma manera cada vez.

742* **stderr**: con el shell `bash` predeterminado, Claude Code fusiona stderr en stdout. Cualquier cosa que el comando escriba en stderr aparece en el texto inyectado.742* **stderr**: con el shell `bash` predeterminado, Claude Code fusiona stderr en stdout. Cualquier cosa que el comando escriba en stderr aparece en el texto inyectado.

743* **Tiempo de espera**: cada comando se ejecuta bajo el [tiempo de espera](/docs/es/tools-reference#timeout-and-output-limits) predeterminado de 2 minutos de la herramienta Bash. Cuando la herramienta Bash [mueve un comando que agotó el tiempo de espera al fondo](/docs/es/tools-reference#background-commands), la skill aún se renderiza. El texto inyectado informa el movimiento y nombra la tarea de fondo y el archivo que recopila la salida del comando. Cuando el comando es uno que la herramienta Bash nunca pone automáticamente en segundo plano, Claude Code lo mata en el tiempo de espera. Esa falla [aborta la invocación](#when-an-injected-command-fails).743* **Tiempo de espera**: cada comando se ejecuta bajo el [tiempo de espera](/docs/es/tools-reference#timeout-and-output-limits) predeterminado de 2 minutos de la herramienta Bash. Cuando la herramienta Bash [mueve un comando que agotó el tiempo de espera al fondo](/docs/es/tools-reference#foreground-commands-that-move-to-the-background), la skill aún se renderiza. El texto inyectado informa el movimiento y nombra la tarea de fondo y el archivo que recopila la salida del comando. Cuando el comando es uno que la herramienta Bash nunca pone automáticamente en segundo plano, Claude Code lo mata en el tiempo de espera. Esa falla [aborta la invocación](#when-an-injected-command-fails).

744* **Tamaño de salida**: la salida más allá del techo en línea de la herramienta Bash llega como una ruta de archivo más una vista previa corta, no texto truncado. [Output limits](/docs/es/tools-reference#output-limits) cubre el techo y cómo ajustar cada límite.744* **Tamaño de salida**: la salida más allá del techo en línea de la herramienta Bash llega como una ruta de archivo más una vista previa corta, no texto truncado. [Output limits](/docs/es/tools-reference#output-limits) cubre el techo y cómo ajustar cada límite.

745 745 

746La herramienta PowerShell aplica el mismo comportamiento de tiempo de espera, puesta en segundo plano y techo de salida a los comandos que ejecuta. Consulte la sección [herramienta PowerShell](/docs/es/tools-reference#powershell-tool) para obtener sus detalles específicos.746La herramienta PowerShell aplica el mismo comportamiento de tiempo de espera, puesta en segundo plano y techo de salida a los comandos que ejecuta. Consulte la sección [herramienta PowerShell](/docs/es/tools-reference#powershell-tool) para obtener sus detalles específicos.

statusline.md +7 −7

Details

20Aquí hay un ejemplo de una [línea de estado de múltiples líneas](#display-multiple-lines) que muestra información de git en la primera línea y una barra de contexto codificada por colores en la segunda.20Aquí hay un ejemplo de una [línea de estado de múltiples líneas](#display-multiple-lines) que muestra información de git en la primera línea y una barra de contexto codificada por colores en la segunda.

21 21 

22<Frame>22<Frame>

23 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-multiline.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=60f11387658acc9ff75158ae85f2ac87" alt="Una línea de estado de múltiples líneas que muestra el nombre del modelo, directorio, rama de git en la primera línea, y una barra de progreso de uso de contexto con costo y duración en la segunda línea" width="776" height="212" data-path="images/statusline-multiline.png" />23 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-multiline.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=a9d0a2fe8e446d80b1abc46da3f93270" alt="Una línea de estado de múltiples líneas que muestra el nombre del modelo, directorio, rama de git en la primera línea, y una barra de progreso de uso de contexto con costo y duración en la segunda línea" width="1224" height="262" data-path="images/statusline-multiline.png" />

24</Frame>24</Frame>

25 25 

26Esta página le guía a través de [configurar una línea de estado básica](#set-up-a-status-line), explica [cómo fluyen los datos](#how-status-lines-work) desde Claude Code a su script, enumera [todos los campos que puede mostrar](#available-data), y proporciona [ejemplos listos para usar](#examples) para patrones comunes como estado de git, seguimiento de costos y barras de progreso.26Esta página le guía a través de [configurar una línea de estado básica](#set-up-a-status-line), explica [cómo fluyen los datos](#how-status-lines-work) desde Claude Code a su script, enumera [todos los campos que puede mostrar](#available-data), y proporciona [ejemplos listos para usar](#examples) para patrones comunes como estado de git, seguimiento de costos y barras de progreso.


93Estos ejemplos usan scripts de Bash, que funcionan en macOS y Linux. En Windows, consulta [Configuración de Windows](#windows-configuration) para ejemplos de PowerShell y Git Bash.93Estos ejemplos usan scripts de Bash, que funcionan en macOS y Linux. En Windows, consulta [Configuración de Windows](#windows-configuration) para ejemplos de PowerShell y Git Bash.

94 94 

95<Frame>95<Frame>

96 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-quickstart.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=696445e59ca0059213250651ad23db6b" alt="Una línea de estado que muestra el nombre del modelo, directorio y porcentaje de contexto" width="726" height="164" data-path="images/statusline-quickstart.png" />96 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-quickstart.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=88a7eab9c1038dd098ee8e284d96b7e6" alt="Una línea de estado que muestra el nombre del modelo, directorio y porcentaje de contexto" width="1224" height="224" data-path="images/statusline-quickstart.png" />

97</Frame>97</Frame>

98 98 

99<Steps>99<Steps>


444Muestra el modelo actual y el uso de la ventana de contexto con una barra de progreso visual. Cada script lee JSON desde stdin, extrae el campo `used_percentage` y construye una barra de 10 caracteres donde los bloques rellenos (▓) representan el uso:444Muestra el modelo actual y el uso de la ventana de contexto con una barra de progreso visual. Cada script lee JSON desde stdin, extrae el campo `used_percentage` y construye una barra de 10 caracteres donde los bloques rellenos (▓) representan el uso:

445 445 

446<Frame>446<Frame>

447 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-context-window-usage.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=15b58ab3602f036939145dde3165c6f7" alt="Una línea de estado que muestra el nombre del modelo y una barra de progreso con porcentaje" width="448" height="152" data-path="images/statusline-context-window-usage.png" />447 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-context-window-usage.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=f3918a549912dc47e90f2b69e68bc847" alt="Una línea de estado que muestra el nombre del modelo y una barra de progreso con porcentaje" width="1224" height="224" data-path="images/statusline-context-window-usage.png" />

448</Frame>448</Frame>

449 449 

450<CodeGroup>450<CodeGroup>


513Muestra la rama de git con indicadores codificados por colores para archivos preparados y modificados. Este script usa [códigos de escape ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) para colores de terminal: `\033[32m` es verde, `\033[33m` es amarillo, y `\033[0m` restablece al predeterminado.513Muestra la rama de git con indicadores codificados por colores para archivos preparados y modificados. Este script usa [códigos de escape ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) para colores de terminal: `\033[32m` es verde, `\033[33m` es amarillo, y `\033[0m` restablece al predeterminado.

514 514 

515<Frame>515<Frame>

516 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-git-context.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=e656f34f90d1d9a1d0e220988914345f" alt="Una línea de estado que muestra modelo, directorio, rama de git e indicadores codificados por colores para archivos preparados y modificados" width="742" height="178" data-path="images/statusline-git-context.png" />516 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-git-context.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=f13c190724d9ec7188c17cd2f98b7bf4" alt="Una línea de estado que muestra modelo, directorio, rama de git e indicadores codificados por colores para archivos preparados y modificados" width="1224" height="224" data-path="images/statusline-git-context.png" />

517</Frame>517</Frame>

518 518 

519Cada script verifica si el directorio actual es un repositorio de git, cuenta archivos preparados y modificados, y muestra indicadores codificados por colores:519Cada script verifica si el directorio actual es un repositorio de git, cuenta archivos preparados y modificados, y muestra indicadores codificados por colores:


611Cada script formatea el costo como moneda y convierte milisegundos a minutos y segundos:611Cada script formatea el costo como moneda y convierte milisegundos a minutos y segundos:

612 612 

613<Frame>613<Frame>

614 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-cost-tracking.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=e3444a51fe6f3440c134bd5f1f08ad29" alt="Una línea de estado que muestra el nombre del modelo, costo de sesión y duración" width="588" height="180" data-path="images/statusline-cost-tracking.png" />614 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-cost-tracking.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=925f7024c3b38be0f0eca63564bfb52f" alt="Una línea de estado que muestra el nombre del modelo, costo de sesión y duración" width="1224" height="224" data-path="images/statusline-cost-tracking.png" />

615</Frame>615</Frame>

616 616 

617<CodeGroup>617<CodeGroup>


672Tu script puede generar múltiples líneas para crear una pantalla más rica.672Tu script puede generar múltiples líneas para crear una pantalla más rica.

673 673 

674<Frame>674<Frame>

675 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-multiline.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=60f11387658acc9ff75158ae85f2ac87" alt="Una línea de estado de múltiples líneas que muestra el nombre del modelo, directorio, rama de git en la primera línea, y una barra de progreso de uso de contexto con costo y duración en la segunda línea" width="776" height="212" data-path="images/statusline-multiline.png" />675 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-multiline.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=a9d0a2fe8e446d80b1abc46da3f93270" alt="Una línea de estado de múltiples líneas que muestra el nombre del modelo, directorio, rama de git en la primera línea, y una barra de progreso de uso de contexto con costo y duración en la segunda línea" width="1224" height="262" data-path="images/statusline-multiline.png" />

676</Frame>676</Frame>

677 677 

678Este ejemplo combina varias técnicas: colores basados en umbrales (verde por debajo del 70%, amarillo 70-89%, rojo 90%+), una barra de progreso e información de rama de git. Cada declaración `print` o `echo` crea una fila separada:678Este ejemplo combina varias técnicas: colores basados en umbrales (verde por debajo del 70%, amarillo 70-89%, rojo 90%+), una barra de progreso e información de rama de git. Cada declaración `print` o `echo` crea una fila separada:


781Este ejemplo crea un enlace clickeable a tu repositorio de GitHub. Mantén presionado Cmd (macOS) o Ctrl (Windows/Linux) y haz clic para abrir el enlace en tu navegador.781Este ejemplo crea un enlace clickeable a tu repositorio de GitHub. Mantén presionado Cmd (macOS) o Ctrl (Windows/Linux) y haz clic para abrir el enlace en tu navegador.

782 782 

783<Frame>783<Frame>

784 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-links.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=4bcc6e7deb7cf52f41ab85a219b52661" alt="Una línea de estado que muestra un enlace clickeable a un repositorio de GitHub" width="726" height="198" data-path="images/statusline-links.png" />784 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-links.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=4778a144a28cb498c99d5fa018bb374a" alt="Una línea de estado que muestra un enlace clickeable a un repositorio de GitHub" width="1224" height="224" data-path="images/statusline-links.png" />

785</Frame>785</Frame>

786 786 

787Cada script obtiene la URL remota de git, convierte el formato SSH a HTTPS, y envuelve el nombre del repositorio en códigos de escape OSC 8. La versión de Bash usa `printf '%b'` que interpreta escapes de barra invertida de manera más confiable que `echo -e` en diferentes shells:787Cada script obtiene la URL remota de git, convierte el formato SSH a HTTPS, y envuelve el nombre del repositorio en códigos de escape OSC 8. La versión de Bash usa `printf '%b'` que interpreta escapes de barra invertida de manera más confiable que `echo -e` en diferentes shells:

Details

253 253 

254Los equipos de seguridad pueden configurar permisos administrados para lo que Claude Code puede y no puede hacer, que no pueden ser sobrescritos por la configuración local. [Obtenga más información](/docs/es/security).254Los equipos de seguridad pueden configurar permisos administrados para lo que Claude Code puede y no puede hacer, que no pueden ser sobrescritos por la configuración local. [Obtenga más información](/docs/es/security).

255 255 

256Para limitar cuáles de estas opciones de implementación puede usar una máquina administrada, establezca [`allowedProviders`](/docs/es/settings-reference#allowedproviders) en la configuración administrada. Por ejemplo, `["bedrock"]` permite Amazon Bedrock y nada más; una flota de Bedrock que también habilita el punto final de Mantle enumera `"mantle"` también. La entrada indica qué variables de punto final también necesitan un pin de `env` administrado. Requiere Claude Code v2.1.285 o posterior.

257 

256<h3 id="leverage-mcp-for-integrations">258<h3 id="leverage-mcp-for-integrations">

257 Usar MCP para integraciones259 Usar MCP para integraciones

258</h3>260</h3>

tools-reference.md +39 −24

Details

154 Qué persiste entre comandos154 Qué persiste entre comandos

155</h3>155</h3>

156 156 

157* Cuando Claude ejecuta `cd` en la sesión principal, el nuevo directorio de trabajo se mantiene en comandos Bash posteriores siempre que permanezca dentro del directorio del proyecto o un [directorio de trabajo adicional](/docs/es/permissions#working-directories) que agregó con `--add-dir`, `/add-dir`, o `additionalDirectories` en la configuración. Esto incluye comandos que Claude ejecuta en respuesta a sus mensajes posteriores.157* Cuando Claude ejecuta `cd` en la sesión principal, el nuevo directorio de trabajo se mantiene en los comandos Bash posteriores siempre que permanezca dentro del directorio del proyecto o un [directorio de trabajo adicional](/docs/es/permissions#working-directories) que agregó con `--add-dir`, `/add-dir`, o `additionalDirectories` en la configuración. Esto incluye comandos que Claude ejecuta en respuesta a sus mensajes posteriores.

158 * Las sesiones de subagentes nunca mantienen cambios de directorio de trabajo.158 * Las sesiones de subagentes nunca mantienen cambios de directorio de trabajo.

159 * Si `cd` sale de esos directorios, Claude Code se reinicia al directorio del proyecto y añade `Shell cwd was reset to <dir>` al resultado de la herramienta.159 * Si `cd` sale de esos directorios, Claude Code se reinicia al directorio del proyecto y añade `Shell cwd was reset to <dir>` al resultado de la herramienta.

160 * Para desactivar este mantenimiento de modo que cada comando Bash comience en el directorio del proyecto, establezca `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1`.160 * Para desactivar este mantenimiento de modo que cada comando Bash comience en el directorio del proyecto, establezca `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1`.

161* Las variables de entorno no persisten. Un `export` en un comando no estará disponible en el siguiente.161* Las variables de entorno no persisten. Un `export` en un comando no estará disponible en el siguiente.

162* Los alias y funciones de shell definidos en su archivo de inicio de shell están disponibles. Al iniciar la sesión, Claude Code obtiene `~/.zshrc`, `~/.bashrc`, o `~/.profile` según su shell, captura los alias, funciones y opciones de shell resultantes, y los aplica a cada comando Bash.162* Los alias y funciones de shell definidos en su archivo de inicio de shell están disponibles. Al inicio de la sesión, Claude Code obtiene `~/.zshrc`, `~/.bashrc`, o `~/.profile` dependiendo de su shell, captura los alias, funciones y opciones de shell resultantes, y los aplica a cada comando Bash.

163 163 

164Active su virtualenv o entorno conda antes de lanzar Claude Code. Para hacer que las variables de entorno persistan entre comandos Bash, establezca [`CLAUDE_ENV_FILE`](/docs/es/env-vars) en un script de shell antes de lanzar Claude Code, o use un [hook SessionStart](/docs/es/hooks#persist-environment-variables) para poblarlo dinámicamente.164Active su virtualenv o entorno conda antes de lanzar Claude Code. Para hacer que las variables de entorno persistan entre comandos Bash, establezca [`CLAUDE_ENV_FILE`](/docs/es/env-vars) en un script de shell antes de lanzar Claude Code, o use un [hook SessionStart](/docs/es/hooks#persist-environment-variables) para poblarlo dinámicamente.

165 165 


167 Límites de tiempo de espera y salida167 Límites de tiempo de espera y salida

168</h3>168</h3>

169 169 

170Cada comando se ejecuta bajo un tiempo de espera, y Claude lo gestiona: cuando necesita más tiempo que el predeterminado para un comando, pasa el parámetro `timeout` con esa llamada. Usted nunca establece un tiempo de espera por comando.170Cada comando se ejecuta bajo un tiempo de espera, y Claude lo gestiona: cuando necesita más tiempo que el predeterminado para un comando, pasa el parámetro `timeout` con esa llamada. Nunca establece un tiempo de espera por comando.

171 171 

172Dos [variables de entorno](/docs/es/env-vars) controlan lo que Claude obtiene para un comando que se ejecuta en primer plano:172Dos [variables de entorno](/docs/es/env-vars) controlan lo que Claude obtiene para un comando que se ejecuta en primer plano:

173 173 

174* `BASH_DEFAULT_TIMEOUT_MS` — el predeterminado cuando Claude no pasa tiempo de espera; dos minutos de forma predeterminada174* `BASH_DEFAULT_TIMEOUT_MS` — el predeterminado cuando Claude no pasa ningún tiempo de espera; dos minutos de forma predeterminada

175* `BASH_MAX_TIMEOUT_MS` — con el predeterminado, establece el límite máximo que limita lo que Claude solicita: el límite máximo efectivo es el mayor de los dos, diez minutos de forma predeterminada175* `BASH_MAX_TIMEOUT_MS` — con el predeterminado, establece el límite máximo que limita lo que Claude solicita: el límite máximo efectivo es el mayor de los dos, diez minutos de forma predeterminada

176 176 

177Para un comando que Claude inicia en segundo plano, `timeout` en su lugar establece cuánto tiempo el comando puede ejecutarse allí, con el predeterminado y máximo separados descritos bajo [Comandos en segundo plano](#background-commands). La [herramienta PowerShell](#powershell-tool) sigue las mismas reglas de tiempo de espera y lee las mismas dos variables.177Para un comando que Claude inicia en segundo plano, `timeout` en su lugar establece cuánto tiempo puede ejecutarse el comando allí, con el predeterminado y máximo separados descritos en [Límite de tiempo para comandos en segundo plano](#time-limit-for-background-commands). La [herramienta PowerShell](#powershell-tool) sigue las mismas reglas de tiempo de espera y lee las mismas dos variables.

178 178 

179<h4 id="output-limits">179<h4 id="output-limits">

180 Límites de salida180 Límites de salida


189 189 

190Un comando que sale con código 1 cuenta como un resultado válido para la herramienta Bash solo cuando Claude Code reconoce el código de salida 1 como un resultado benigno para ese comando: `grep`, `rg`, `egrep`, `fgrep`, `find`, `diff`, `test`, y `[`, más `git diff` y `git grep`. Todos los demás comandos que salen con código 1 cuentan como un fallo, incluso cuando el código de salida 1 es un resultado informativo benigno: sin coincidencias para `pgrep` y `jq -e`, archivos que difieren para `cmp`.190Un comando que sale con código 1 cuenta como un resultado válido para la herramienta Bash solo cuando Claude Code reconoce el código de salida 1 como un resultado benigno para ese comando: `grep`, `rg`, `egrep`, `fgrep`, `find`, `diff`, `test`, y `[`, más `git diff` y `git grep`. Todos los demás comandos que salen con código 1 cuentan como un fallo, incluso cuando el código de salida 1 es un resultado informativo benigno: sin coincidencias para `pgrep` y `jq -e`, archivos que difieren para `cmp`.

191 191 

192[`BASH_MAX_OUTPUT_LENGTH`](/docs/es/env-vars) establece cuántos caracteres de salida Claude Code lee desde el archivo de trabajo hacia el resultado de un comando: 30.000 de forma predeterminada, hasta un límite máximo fijo de 150.000. Aumente esto cuando sus comandos se desborden rutinariamente de esa ventana, como una compilación detallada o un registro de suite de pruebas completo. Aumentarlo amplía la ventana de lectura, que también es la ventana desde la cual se corta el extracto de un comando fallido. No aumenta los límites en línea: un resultado válido sobre el límite en línea llega como una ruta de archivo más vista previa independientemente de esta variable.192[`BASH_MAX_OUTPUT_LENGTH`](/docs/es/env-vars) establece cuántos caracteres de salida Claude Code lee desde el archivo de trabajo hacia el resultado de un comando: 30.000 de forma predeterminada, hasta un límite máximo fijo de 150.000. Auméntelo cuando sus comandos se desborden rutinariamente de esa ventana, como una compilación detallada o un registro completo de suite de pruebas. Aumentarlo amplía la ventana de lectura, que también es la ventana de la que se corta el extracto de un comando fallido. No aumenta los límites en línea: un resultado válido sobre el límite en línea llega como una ruta de archivo más vista previa independientemente de esta variable.

193 193 

194Para cambiar cuánta salida válida recibe Claude en línea, establezca la configuración [`bashOutputMaxChars`](/docs/es/settings-reference#bashoutputmaxchars) en su lugar, hasta 128.000 caracteres. Dimensiona el límite en línea y la ventana de lectura juntos, y Claude Code ignora `BASH_MAX_OUTPUT_LENGTH`. Requiere Claude Code v2.1.261 o posterior.194Para cambiar cuánta salida válida recibe Claude en línea, establezca la configuración [`bashOutputMaxChars`](/docs/es/settings-reference#bashoutputmaxchars) en su lugar, hasta 128.000 caracteres. Dimensiona el límite en línea y la ventana de lectura juntos, y Claude Code ignora `BASH_MAX_OUTPUT_LENGTH`. Requiere Claude Code v2.1.261 o posterior.

195 195 


199 199 

200Para procesos de larga duración como servidores de desarrollo o compilaciones de vigilancia, Claude puede establecer `run_in_background: true` para iniciar el comando como una tarea en segundo plano y continuar trabajando mientras se ejecuta. Liste y detenga tareas en segundo plano con `/tasks`. Después de detener una allí, o desde un cliente conectado como la aplicación de escritorio, Claude continúa en lugar de esperar. Si un subagente inició el comando, es ese subagente el que continúa.200Para procesos de larga duración como servidores de desarrollo o compilaciones de vigilancia, Claude puede establecer `run_in_background: true` para iniciar el comando como una tarea en segundo plano y continuar trabajando mientras se ejecuta. Liste y detenga tareas en segundo plano con `/tasks`. Después de detener una allí, o desde un cliente conectado como la aplicación de escritorio, Claude continúa en lugar de esperar. Si un subagente inició el comando, es ese subagente el que continúa.

201 201 

202Un comando que un [subagente en primer plano](/docs/es/sub-agents#run-subagents-in-foreground-or-background) inició se detiene cuando ese subagente da su respuesta final, ya sea que haya terminado, fallado o fue interrumpido. Un comando que la conversación principal o un subagente en segundo plano inició sigue ejecutándose después de una respuesta final, hasta que sale, se detiene, o alcanza su límite de tiempo. En modo no interactivo con la bandera `-p`, [los comandos en segundo plano terminan poco después del resultado final de la ejecución](/docs/es/headless#background-tasks-at-exit).202<h4 id="when-a-background-command-stops">

203 Cuándo se detiene un comando en segundo plano

204</h4>

205 

206Un comando que un [subagente en primer plano](/docs/es/sub-agents#run-subagents-in-foreground-or-background) inició se detiene cuando finaliza la ejecución de ese subagente, ya sea que se haya completado, fallado o fue interrumpido. Un comando que la conversación principal o un subagente en segundo plano inició continúa ejecutándose después de una respuesta final, hasta que sale, se detiene o alcanza su [límite de tiempo](#time-limit-for-background-commands). En modo no interactivo con la bandera `-p`, [los comandos en segundo plano terminan poco después del resultado final de la ejecución](/docs/es/headless#background-tasks-at-exit).

207 

208<h4 id="time-limit-for-background-commands">

209 Límite de tiempo para comandos en segundo plano

210</h4>

203 211 

204Los comandos Bash y PowerShell en segundo plano tienen un límite de tiempo, contado desde el momento en que el comando entra en segundo plano:212Los comandos Bash y PowerShell en segundo plano tienen un límite de tiempo, contado desde el momento en que el comando entra en segundo plano:

205 213 

206* Un comando que Claude inicia en segundo plano obtiene 30 minutos, o el `timeout` que Claude pasa con `run_in_background`, hasta un máximo de 2 horas214* Un comando que Claude inicia en segundo plano obtiene 30 minutos, o el `timeout` que Claude pasa con `run_in_background`, hasta un máximo de 2 horas

207* Un comando que comienza en primer plano y luego se mueve al segundo plano, por ejemplo con `Ctrl+B` o en su tiempo de espera, obtiene 30 minutos desde el movimiento215* Un comando que comienza en primer plano y luego se mueve a segundo plano, por ejemplo con `Ctrl+B` o en su tiempo de espera, obtiene 30 minutos desde el movimiento

208 216 

209Dos [variables de entorno](/docs/es/env-vars) elevan estos límites, para comandos Bash y PowerShell por igual. Ambas toman milisegundos, y ninguna puede acortar un límite: un valor más bajo deja el predeterminado de 30 minutos y el máximo de 2 horas en su lugar.217Cuando un comando en segundo plano alcanza su límite de tiempo, Claude Code lo detiene y le dice a Claude por qué, y Claude puede iniciar el comando nuevamente con un `timeout` más largo si el trabajo aún lo necesita. El aviso de detención dice `Background command "<description>" was stopped after reaching its background time limit`.

218 

219<h4 id="raise-the-time-limit-for-background-commands">

220 Aumente el límite de tiempo para comandos en segundo plano

221</h4>

222 

223Dos [variables de entorno](/docs/es/env-vars) aumentan estos límites, para comandos Bash y PowerShell por igual. Ambas toman milisegundos, y ninguna puede acortar un límite: un valor más bajo deja el predeterminado de 30 minutos y el máximo de 2 horas en su lugar.

210 224 

211* Establezca `BASH_DEFAULT_TIMEOUT_MS` por encima de `1800000` para reemplazar el predeterminado de 30 minutos con ese valor, tanto para comandos que Claude inicia sin un `timeout` como para comandos movidos225* Establezca `BASH_DEFAULT_TIMEOUT_MS` por encima de `1800000` para reemplazar el predeterminado de 30 minutos con ese valor, tanto para comandos que Claude inicia sin un `timeout` como para comandos movidos

212* Establezca `BASH_MAX_TIMEOUT_MS` por encima de `7200000` para elevar el máximo de 2 horas a ese valor. Establecer `BASH_DEFAULT_TIMEOUT_MS` por encima de `7200000` eleva el máximo de la misma manera226* Establezca `BASH_MAX_TIMEOUT_MS` por encima de `7200000` para aumentar el máximo de 2 horas a ese valor. Establecer `BASH_DEFAULT_TIMEOUT_MS` por encima de `7200000` aumenta el máximo de la misma manera

213 227 

214Cuando un comando en segundo plano alcanza su límite de tiempo, Claude Code lo detiene y le dice a Claude por qué, y Claude puede iniciar el comando nuevamente con un `timeout` más largo si el trabajo aún lo necesita. El aviso de parada dice `Background command "<description>" was stopped after reaching its background time limit`.228<h4 id="foreground-commands-that-move-to-the-background">

229 Comandos en primer plano que se mueven a segundo plano

230</h4>

215 231 

216Cuando un comando en primer plano alcanza su tiempo de espera sin terminar, Claude Code lo mueve al segundo plano en lugar de detenerlo, a menos que el comando comience con `sleep`. El límite de tiempo de un comando movido se cuenta desde el movimiento, y el comando movido de un subagente en primer plano aún se detiene cuando ese subagente da su respuesta final.232Cuando un comando en primer plano alcanza su tiempo de espera sin terminar, Claude Code lo mueve a segundo plano en lugar de detenerlo, a menos que el comando comience con `sleep`. El [límite de tiempo](#time-limit-for-background-commands) de un comando movido se cuenta desde el movimiento, y el comando movido de un subagente en primer plano aún se detiene cuando finaliza la ejecución de ese subagente.

217 233 

218Establecer [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1`](/docs/es/env-vars#variables) desactiva el segundo plano automático junto con el resto de la funcionalidad de tareas en segundo plano.234Establecer [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1`](/docs/es/env-vars#variables) desactiva el auto-backgrounding junto con el resto de la funcionalidad de tareas en segundo plano.

219 235 

220El resultado de un comando movido al segundo plano indica lo que sucedió:236El resultado de un comando movido a segundo plano indica lo que sucedió:

221 237 

222* Cuando el tiempo de espera activa el movimiento, el resultado lo reporta explícitamente: `Command did not complete within its 120s timeout and was moved to the background`, con los segundos coincidiendo con el tiempo de espera que se aplicó, seguido del ID de tarea y la ruta del archivo en el que se escribe la salida.238* Cuando el tiempo de espera desencadena el movimiento, el resultado lo reporta explícitamente: `Command did not complete within its 120s timeout and was moved to the background`, con los segundos coincidiendo con el tiempo de espera que se aplicó, seguido del ID de tarea y la ruta del archivo en el que se escribe la salida.

223* Un `cd`, `pushd`, `popd`, o `chdir` dentro de un comando que se mueve al segundo plano nunca se mantiene: el resultado indica `Session cwd remains <dir>; directory changes made by the backgrounded command do not apply to subsequent commands.`, por lo que Claude no actúa sobre un cambio de directorio que no sucedió.239* Un `cd`, `pushd`, `popd`, o `chdir` dentro de un comando que se mueve a segundo plano nunca se mantiene: el resultado indica `Session cwd remains <dir>; directory changes made by the backgrounded command do not apply to subsequent commands.`, por lo que Claude no actúa sobre un cambio de directorio que no sucedió.

224 240 

225<h3 id="memory-limit-on-linux-and-wsl">241<h3 id="memory-limit-on-linux-and-wsl">

226 Límite de memoria en Linux y WSL242 Límite de memoria en Linux y WSL

227</h3>243</h3>

228 244 

229En Linux y WSL, establezca [`CLAUDE_CODE_TOOL_MEMORY_LIMIT`](/docs/es/env-vars#variables) en un tamaño como `4G` para limitar la memoria que los comandos de herramientas Bash, PowerShell y [Monitor](#monitor-tool) pueden usar, de modo que una compilación descontrolada no consuma la memoria que el resto de la sesión necesita. Requiere Claude Code v2.1.233 o posterior. Antes de v2.1.246, los comandos de herramientas Monitor se ejecutaban fuera del límite.245En Linux y WSL, establezca [`CLAUDE_CODE_TOOL_MEMORY_LIMIT`](/docs/es/env-vars#variables) en un tamaño como `4G` para limitar la memoria que los comandos de las herramientas Bash, PowerShell y [Monitor](#monitor-tool) pueden usar, de modo que una compilación descontrolada no consuma la memoria que el resto de la sesión necesita. Requiere Claude Code v2.1.233 o posterior. Antes de v2.1.246, los comandos de la herramienta Monitor se ejecutaban fuera del límite.

230 246 

231* Escriba el tamaño como un número de bytes o con un sufijo `K`, `M`, `G`, o `T`. Establezca `0`, `off`, `false`, `no`, o `none` para desactivar el límite. Claude Code ignora cualquier otro valor que no pueda leer como un tamaño, como `4e9`.247* Escriba el tamaño como un número de bytes o con un sufijo `K`, `M`, `G`, o `T`. Establezca `0`, `off`, `false`, `no`, o `none` para desactivar el límite. Claude Code ignora cualquier otro valor que no pueda leer como un tamaño, como `4e9`.

232* Claude Code cuenta todos los comandos Bash, PowerShell y Monitor de una sesión contra el límite único, no cada comando por su cuenta.248* Claude Code cuenta todos los comandos Bash, PowerShell y Monitor de una sesión contra el límite único, no cada comando por su cuenta.

233* Claude Code aplica el límite con un cgroup de memoria. Cuando no puede configurar el cgroup, los comandos se ejecutan sin límite, y el registro de depuración de `claude --debug` indica por qué.249* Claude Code aplica el límite con un cgroup de memoria. Cuando no puede configurar el cgroup, los comandos se ejecutan sin límite, y el registro de depuración de `claude --debug` dice por qué.

234* Después de que el primer proceso que Claude Code inicia ha activado el límite, o lo ha desactivado debido a un valor desactivado o una configuración de cgroup fallida, Claude Code mantiene ese resultado hasta que reinicie. Para aplicar un valor cambiado o eliminado, o una configuración corregida, lance `claude` nuevamente.250* Después de que el primer proceso que Claude Code inicia haya activado el límite, o lo haya desactivado debido a un valor off o una configuración de cgroup fallida, Claude Code mantiene ese resultado hasta que relance. Para aplicar un valor cambiado o eliminado, o una configuración fija, lance `claude` nuevamente.

235* Cuando los comandos no pueden mantenerse bajo el límite, el kernel detiene un comando, y nada en su resultado nombra el límite.251* Cuando los comandos no pueden mantenerse bajo el límite, el kernel detiene un comando, y nada en su resultado nombra el límite.

236 252 

237Claude Code también puede contar otros tipos de procesos que inicia contra el mismo límite. Establezca [`CLAUDE_CODE_TOOL_MEMORY_CGROUP_EXCLUDE`](/docs/es/env-vars#variables) en una lista separada por comas de los tipos a eximir del límite; Claude Code aplica el límite a cada tipo que no esté en su lista. Establézcalo en `none` para limitar cada tipo, o en `all-new` para limitar solo comandos de herramientas Bash, PowerShell y Monitor. Requiere Claude Code v2.1.246 o posterior. Los tipos que puede nombrar:253Claude Code también puede contar otros tipos de procesos que inicia contra el mismo límite. Establezca [`CLAUDE_CODE_TOOL_MEMORY_CGROUP_EXCLUDE`](/docs/es/env-vars#variables) en una lista separada por comas de los tipos a eximir del límite; Claude Code aplica el límite a cada tipo que no esté en su lista. Establézcalo en `none` para limitar cada tipo, o en `all-new` para limitar solo los comandos de las herramientas Bash, PowerShell y Monitor. Requiere Claude Code v2.1.246 o posterior. Los tipos que puede nombrar:

238 254 

239* `mcp`: [servidores MCP](/docs/es/mcp) locales255* `mcp`: servidores [MCP](/docs/es/mcp) locales

240* `lsp`: [servidores de lenguaje](#lsp-tool-behavior)256* `lsp`: [servidores de lenguaje](#lsp-tool-behavior)

241* `hooks`: comandos de [hook](/docs/es/hooks)257* `hooks`: comandos de [hook](/docs/es/hooks)

242* `plugin`: comandos que ejecutan [plugins](/docs/es/plugins/overview)258* `plugin`: comandos que ejecutan [plugins](/docs/es/plugins/overview)


246Sea lo que sea que liste, estas reglas se aplican:262Sea lo que sea que liste, estas reglas se aplican:

247 263 

248* **Nombres desconocidos**: Claude Code ignora nombres que no reconoce264* **Nombres desconocidos**: Claude Code ignora nombres que no reconoce

249* **Bash, PowerShell y Monitor**: Claude Code mantiene comandos de herramientas Bash, PowerShell y Monitor bajo el límite sea lo que sea que liste265* **Variable no establecida**: Claude Code toma el conjunto de otros tipos limitados de la configuración que Anthropic entrega desde el servidor, y ese conjunto puede cambiar con el tiempo, así que establezca la variable cuando necesite un conjunto que no cambie

250* **Variable no establecida**: Claude Code toma el conjunto de otros tipos limitados de la configuración que Anthropic entrega desde el servidor, y ese conjunto puede cambiar con el tiempo, por lo que establezca la variable cuando necesite un conjunto que no cambie266* **Hooks de control de permisos**: incluso con cada tipo limitado, Claude Code excluye del límite un hook que puede bloquear o cambiar el resultado de una acción, y cualquier servidor MCP que tal hook llame, de modo que el kernel matando un hook de control de permisos no puede permitir la acción que estaba bloqueando

251* **Hooks de control de permisos**: incluso con cada tipo limitado, Claude Code excluye del límite un hook que puede bloquear o cambiar el resultado de una acción, y cualquier servidor MCP que tal hook llame, por lo que el kernel matando un hook de control de permisos no puede permitir la acción que estaba bloqueando

252 267 

253<h2 id="edit-tool-behavior">268<h2 id="edit-tool-behavior">

254 Comportamiento de la herramienta Edit269 Comportamiento de la herramienta Edit

ultrareview.md +1 −1

Details

66 66 

67En modo PR, el sandbox remoto clona la solicitud de extracción directamente desde el host en lugar de agrupar su árbol de trabajo local. El modo PR funciona con repositorios en `github.com` y en instancias de [GitHub Enterprise Server](/docs/es/github-enterprise-server) que un administrador ha conectado a Claude Code.67En modo PR, el sandbox remoto clona la solicitud de extracción directamente desde el host en lugar de agrupar su árbol de trabajo local. El modo PR funciona con repositorios en `github.com` y en instancias de [GitHub Enterprise Server](/docs/es/github-enterprise-server) que un administrador ha conectado a Claude Code.

68 68 

69Para repositorios en `github.com`, el sandbox clona con la cuenta de GitHub conectada a su cuenta de Claude, por lo que la cuenta debe poder leer el repositorio del PR. Claude Code verifica esto antes de crear la sesión en la nube, a menos que haya establecido [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/es/env-vars#variables), y rechaza el lanzamiento cuando [ninguna cuenta está conectada](/docs/es/errors#no-github-account-is-connected-to-your-claude-account) o [la cuenta no puede ver el repositorio](/docs/es/errors#your-connected-github-account-cant-see-the-repository); el rechazo nombra la solución. Antes de v2.1.248, Claude Code no verificaba esto antes del lanzamiento.69Para repositorios en `github.com`, el sandbox clona con la cuenta de GitHub conectada a su cuenta de Claude, por lo que la cuenta debe poder leer el repositorio del PR.

70 70 

71Ejecute [`/web-setup`](/docs/es/web-quickstart#connect-from-your-terminal) para conectar su inicio de sesión de GitHub CLI a su cuenta de Claude.71Ejecute [`/web-setup`](/docs/es/web-quickstart#connect-from-your-terminal) para conectar su inicio de sesión de GitHub CLI a su cuenta de Claude.

72 72 

vs-code.md +25 −5

Details

58 58 

59 * **Barra de actividades**: haga clic en el icono Spark en la barra lateral izquierda para abrir la lista de sesiones. Haga clic en cualquier sesión para abrirla en su [ubicación preferida](#extension-settings), o inicie una nueva. Este icono siempre es visible en la Barra de actividades.59 * **Barra de actividades**: haga clic en el icono Spark en la barra lateral izquierda para abrir la lista de sesiones. Haga clic en cualquier sesión para abrirla en su [ubicación preferida](#extension-settings), o inicie una nueva. Este icono siempre es visible en la Barra de actividades.

60 * **Paleta de comandos**: `Cmd+Shift+P` (Mac) o `Ctrl+Shift+P` (Windows/Linux), escriba "Claude Code" y seleccione una opción como "Open in New Tab"60 * **Paleta de comandos**: `Cmd+Shift+P` (Mac) o `Ctrl+Shift+P` (Windows/Linux), escriba "Claude Code" y seleccione una opción como "Open in New Tab"

61 * **Barra de estado**: si ha establecido [`preferredLocation`](#extension-settings) en `sidebar`, o abrió Claude con **Claude Code: Open in Side Bar**, haga clic en **✻ Claude Code** en la esquina inferior derecha de la ventana. Esto funciona incluso cuando no hay ningún archivo abierto.61 * **Barra de estado**: haga clic en **✻ Claude Code** en la esquina inferior derecha de la ventana. Esto funciona incluso cuando no hay ningún archivo abierto.

62 62 

63 Puede arrastrar el panel de Claude para reposicionarlo en cualquier lugar de VS Code. Consulte [Personalizar su flujo de trabajo](#customize-your-workflow) para obtener más detalles.63 Puede arrastrar el panel de Claude para reposicionarlo en cualquier lugar de VS Code. Consulte [Personalizar su flujo de trabajo](#customize-your-workflow) para obtener más detalles.

64 </Step>64 </Step>


362 362 

363En la pestaña Plugins:363En la pestaña Plugins:

364 364 

365* Los **plugins instalados** aparecen en la parte superior con interruptores de alternancia para habilitarlos o deshabilitarlos365* Los **plugins instalados** aparecen en la parte superior con interruptores de alternancia para habilitarlos o deshabilitarlos.

366 * Si desactiva un plugin que el archivo `.claude/settings.json` compartido de su proyecto activa, la extensión pregunta primero: **Disable for me** lo desactiva solo para usted, mientras que **Disable for everyone** cambia el archivo compartido.

366* Los **plugins disponibles** de sus marketplaces configurados aparecen a continuación367* Los **plugins disponibles** de sus marketplaces configurados aparecen a continuación

367* Busque para filtrar plugins por nombre o descripción368* Busque para filtrar plugins por nombre o descripción

368* Haga clic en **Instalar** en cualquier plugin disponible369* Haga clic en **Instalar** en cualquier plugin disponible


373* **Instalar para este proyecto**: compartido con colaboradores del proyecto (alcance de proyecto)374* **Instalar para este proyecto**: compartido con colaboradores del proyecto (alcance de proyecto)

374* **Instalar localmente**: solo para usted, solo en este repositorio (alcance local)375* **Instalar localmente**: solo para usted, solo en este repositorio (alcance local)

375 376 

377Una vez que la instalación finaliza, un formulario solicita cualquiera de las [opciones de configuración](/docs/es/plugins/components#user-configuration) del plugin que aún no estén configuradas. Para revisar o cambiar las opciones más tarde, haga clic en el icono de engranaje en la fila del plugin.

378 

379Los campos de texto sensibles están enmascarados, y un secreto que guardó anteriormente muestra **(sin cambios)**. Deje el campo en blanco para mantener el valor guardado.

380 

381Después de guardar los cambios, las sesiones abiertas recargan sus plugins y el diálogo muestra **Restart Claude to apply plugin changes**.

382 

383<h3 id="uninstall-plugins">

384 Desinstalar plugins

385</h3>

386 

387Cada fila instalada nombra el [alcance](/docs/es/plugins/install#choose-an-install-scope) en el que está instalada. Para desinstalar esa instalación, haga clic en el icono de papelera de la fila. Un icono de papelera atenuado marca una fila que no puede desinstalar desde este espacio de trabajo, como un plugin que su organización gestiona o uno instalado para otro proyecto.

388 

389La extensión pregunta primero en dos casos:

390 

391* **Un plugin que el archivo `.claude/settings.json` compartido de su proyecto activa**: elija **Disable for me**, que mantiene el plugin instalado para sus colaboradores, o **Uninstall for everyone**, que elimina la instalación del proyecto con [`--keep-data`](/docs/es/plugins/cli-reference#what-an-uninstall-deletes-and-keeps), por lo que el directorio de datos guardados del plugin permanece. Si ya desactivó el plugin para usted mismo, el icono de papelera elimina su propia instalación sin la pregunta.

392* **De lo contrario, la última instalación de un plugin con datos guardados**: elija si desea mantener o eliminar los datos; **Keep** es el predeterminado

393 

376<h3 id="share-a-plugin-install-link">394<h3 id="share-a-plugin-install-link">

377 Compartir un enlace de instalación de plugin395 Compartir un enlace de instalación de plugin

378</h3>396</h3>


407 425 

408* Ingrese un repositorio de GitHub, URL o ruta local para agregar un nuevo marketplace426* Ingrese un repositorio de GitHub, URL o ruta local para agregar un nuevo marketplace

409* Haga clic en el icono de actualización para actualizar la lista de plugins de un marketplace427* Haga clic en el icono de actualización para actualizar la lista de plugins de un marketplace

410* Haga clic en el icono de papelera para eliminar un marketplace428* Haga clic en el icono de papelera para eliminar un marketplace. Eliminarlo [desinstala cada plugin que instaló desde él](/docs/es/plugins/install#manage-marketplaces), por lo que una confirmación nombra esos plugins primero

429 

430Los cambios de plugins que realiza en el diálogo se aplican inmediatamente a las sesiones de Claude Code abiertas en esa ventana de VS Code.

411 431 

412Los cambios de plugins que realiza en el diálogo se aplican inmediatamente a las sesiones de Claude Code abiertas en esa ventana de VS Code. Si la sesión desde la que abrió el diálogo no puede recargar sus plugins, el diálogo le ofrece intentar de nuevo o reiniciar Claude en esa sesión.432Si la sesión desde la que abrió el diálogo no puede recargar sus plugins, el diálogo le ofrece intentar de nuevo o reiniciar Claude en esa sesión.

413 433 

414<Note>434<Note>

415 La gestión de plugins en VS Code utiliza los mismos comandos CLI bajo el capó. Los plugins y marketplaces que configure en la extensión también están disponibles en la CLI, y viceversa.435 La gestión de plugins en VS Code utiliza los mismos comandos CLI bajo el capó. Los plugins y marketplaces que configure en la extensión también están disponibles en la CLI, y viceversa.


7904. **Desactive extensiones conflictivas**: Desactive temporalmente otras extensiones de IA (Cline, Continue, etc.)8104. **Desactive extensiones conflictivas**: Desactive temporalmente otras extensiones de IA (Cline, Continue, etc.)

7915. **Verifique la confianza del espacio de trabajo**: La extensión no funciona en Modo restringido8115. **Verifique la confianza del espacio de trabajo**: La extensión no funciona en Modo restringido

792 812 

793Alternativamente, si ha establecido [`preferredLocation`](#extension-settings) en `sidebar`, o ha abierto Claude con **Claude Code: Open in Side Bar**, haga clic en "✻ Claude Code" en la **Barra de estado** (esquina inferior derecha). Esto funciona incluso sin un archivo abierto. También puede usar la **Paleta de comandos** (`Cmd+Shift+P` / `Ctrl+Shift+P`) y escribir "Claude Code".813Alternativamente, haga clic en **✻ Claude Code** en la **Barra de estado** en la esquina inferior derecha de la ventana. Esto funciona incluso sin un archivo abierto. También puede usar la **Paleta de comandos** (`Cmd+Shift+P` / `Ctrl+Shift+P`) y escribir "Claude Code".

794 814 

795<h3 id="cmd-esc-does-nothing-on-macos">815<h3 id="cmd-esc-does-nothing-on-macos">

796 Cmd+Esc no hace nada en macOS816 Cmd+Esc no hace nada en macOS

worktrees.md +1 −1

Details

145* El worktree pertenece a una sesión `--worktree` que no ha enviado al fondo, sin importar su antigüedad.145* El worktree pertenece a una sesión `--worktree` que no ha enviado al fondo, sin importar su antigüedad.

146* Creó el worktree usted mismo con `git worktree add`, incluso si luego ejecutó una sesión `--worktree <name>` en él y envió esa sesión al fondo.146* Creó el worktree usted mismo con `git worktree add`, incluso si luego ejecutó una sesión `--worktree <name>` en él y envió esa sesión al fondo.

147 147 

148Claude Code escribe un marcador en los metadatos de git de cada worktree que crea con git, y el barrido mantiene cualquier worktree sin uno, incluido un worktree que un [hook `WorktreeCreate`](#non-git-version-control) creó. Antes de v2.1.246, el barrido no verificaba el marcador, y podría eliminar un worktree que creó usted mismo cuando un registro de sesión en segundo plano antiguo apuntaba a él.148Claude Code escribe un marcador en los metadatos de git de cada worktree que crea con git, y el barrido mantiene cualquier worktree sin uno, incluido un worktree que un [hook `WorktreeCreate`](#non-git-version-control) creó.

149 149 

150Mientras un agente se está ejecutando, Claude Code mantiene un `git worktree lock` en su worktree para que la limpieza concurrente no pueda eliminarlo, y libera el bloqueo cuando el agente termina. Claude Code mantiene el mismo bloqueo en el worktree que creó para una sesión enviada al fondo mientras la sesión se ejecuta, por lo que el barrido deja el worktree en su lugar y `git worktree remove` se niega a eliminarlo.150Mientras un agente se está ejecutando, Claude Code mantiene un `git worktree lock` en su worktree para que la limpieza concurrente no pueda eliminarlo, y libera el bloqueo cuando el agente termina. Claude Code mantiene el mismo bloqueo en el worktree que creó para una sesión enviada al fondo mientras la sesión se ejecuta, por lo que el barrido deja el worktree en su lugar y `git worktree remove` se niega a eliminarlo.

151 151