SpyBara
Go Premium

Documentation 2026-11-09 23:02 UTC to 2026-11-10 21:57 UTC

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

advisor.md +1 −1

Details

160* **Facturación por API**: paga las tasas de entrada y salida del modelo advisor para los tokens del advisor160* **Facturación por API**: paga las tasas de entrada y salida del modelo advisor para los tokens del advisor

161* **Planes de suscripción**: el uso del advisor cuenta hacia los límites de uso de su plan, excepto que un advisor Fable se factura a [créditos de uso](https://code.claude.com/docs/es/model-config.md#fable-and-usage-credits) en planes donde el uso de Fable lo hace161* **Planes de suscripción**: el uso del advisor cuenta hacia los límites de uso de su plan, excepto que un advisor Fable se factura a [créditos de uso](https://code.claude.com/docs/es/model-config.md#fable-and-usage-credits) en planes donde el uso de Fable lo hace

162 162 

163Si su cuenta requiere el consentimiento de créditos de uso, un advisor Fable no se factura nada antes de que lo otorgue, porque Claude Code [no aplica la selección](#fable-advisor-and-usage-credits) hasta entonces.163Para saber cómo funciona un advisor Fable con los créditos de uso, consulta [Advisor Fable y créditos de uso](#fable-advisor-and-usage-credits).

164 164 

165Claude llama al advisor en puntos de decisión en lugar de en cada turno, por lo que emparejar un modelo principal más rápido con un advisor más fuerte típicamente cuesta menos que ejecutar el modelo más fuerte en todo. El uso del advisor cuenta hacia los totales de sesión mostrados por [`/usage`](https://code.claude.com/docs/es/costs#track-your-costs).165Claude llama al advisor en puntos de decisión en lugar de en cada turno, por lo que emparejar un modelo principal más rápido con un advisor más fuerte típicamente cuesta menos que ejecutar el modelo más fuerte en todo. El uso del advisor cuenta hacia los totales de sesión mostrados por [`/usage`](https://code.claude.com/docs/es/costs#track-your-costs).

166 166 

Details

247* **Campos de nivel superior** se aceptan en cada evento: `systemMessage` muestra un mensaje al usuario, y `continue` (`continue_` en Python) determina si el agente sigue ejecutándose después de este hook. Algunos eventos los descartan o los entregan en otro lugar. Cada [sección del evento](https://code.claude.com/docs/es/hooks.md#hook-events) en la página de hooks dice dónde llegan.247* **Campos de nivel superior** se aceptan en cada evento: `systemMessage` muestra un mensaje al usuario, y `continue` (`continue_` en Python) determina si el agente sigue ejecutándose después de este hook. Algunos eventos los descartan o los entregan en otro lugar. Cada [sección del evento](https://code.claude.com/docs/es/hooks.md#hook-events) en la página de hooks dice dónde llegan.

248* **`hookSpecificOutput`** controla la operación actual. Los campos que estableces dentro dependen del tipo de evento de hook:248* **`hookSpecificOutput`** controla la operación actual. Los campos que estableces dentro dependen del tipo de evento de hook:

249 * Para hooks `PreToolUse`, aquí es donde estableces `permissionDecision` (`"allow"`, `"deny"`, `"ask"` o `"defer"`), `permissionDecisionReason` e `updatedInput`. Si devuelves `"defer"`, el turno termina con un mensaje de resultado cuyo `stop_reason` es `"tool_deferred"`, para que puedas [reanudar la llamada más tarde](https://code.claude.com/docs/es/hooks.md#defer-a-tool-call-for-later).249 * Para hooks `PreToolUse`, aquí es donde estableces `permissionDecision` (`"allow"`, `"deny"`, `"ask"` o `"defer"`), `permissionDecisionReason` e `updatedInput`. Si devuelves `"defer"`, el turno termina con un mensaje de resultado cuyo `stop_reason` es `"tool_deferred"`, para que puedas [reanudar la llamada más tarde](https://code.claude.com/docs/es/hooks.md#defer-a-tool-call-for-later).

250 * Para hooks `PostToolUse`, puedes establecer `additionalContext` para agregar información al resultado de la herramienta. Para reemplazar la salida de la herramienta antes de que Claude la vea, establece `updatedToolOutput`, que funciona para cualquier herramienta en ambos SDK. El campo anterior `updatedMCPToolOutput` reemplaza solo la salida de herramientas MCP.250 * Para hooks `PostToolUse`, puedes establecer `additionalContext` para agregar información al resultado de la herramienta. Para reemplazar la salida de la herramienta antes de que Claude la vea, establece `updatedToolOutput`, que funciona para herramientas integradas y MCP en ambos SDK. El campo anterior `updatedMCPToolOutput` reemplaza solo la salida de herramientas MCP.

251 * En el SDK de TypeScript, una devolución de llamada `PostToolUse` también puede devolver `classifierContext`, una nota breve sobre el resultado de la llamada a herramienta para el clasificador de permisos del [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode). Debido a que tu devolución de llamada se ejecuta en el proceso propio de tu aplicación, el clasificador puede considerar una declaración de usuario que retransmitas en la nota como intención del usuario. El campo requiere TypeScript Agent SDK v0.3.236 o posterior. [Anotar un resultado para el clasificador del modo automático](https://code.claude.com/docs/es/hooks.md#annotate-a-result-for-the-auto-mode-classifier) cubre el límite de longitud, la regla de solo sincrónico, y qué no poner en la nota.251 * En el SDK de TypeScript, una devolución de llamada `PostToolUse` también puede devolver `classifierContext`, una nota breve sobre el resultado de la llamada a herramienta para el clasificador de permisos del [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode). Debido a que tu devolución de llamada se ejecuta en el proceso propio de tu aplicación, el clasificador puede considerar una declaración de usuario que retransmitas en la nota como intención del usuario. El campo requiere TypeScript Agent SDK v0.3.236 o posterior. [Anotar un resultado para el clasificador del modo automático](https://code.claude.com/docs/es/hooks.md#annotate-a-result-for-the-auto-mode-classifier) cubre el límite de longitud, la regla de solo sincrónico, y qué no poner en la nota.

252 252 

253Devuelve `{}` para permitir la operación sin cambios. Los hooks de devolución de llamada del SDK usan el mismo formato de salida JSON que [hooks de comandos de shell de Claude Code](https://code.claude.com/docs/es/hooks.md#json-output), que documenta cada campo y opción específica del evento. Para las definiciones de tipo del SDK, consulta las referencias del SDK de [TypeScript](https://code.claude.com/docs/es/agent-sdk/typescript.md#synchookjsonoutput) y [Python](https://code.claude.com/docs/es/agent-sdk/python.md#synchookjsonoutput).253Devuelve `{}` para permitir la operación sin cambios. Los hooks de devolución de llamada del SDK usan el mismo formato de salida JSON que [hooks de comandos de shell de Claude Code](https://code.claude.com/docs/es/hooks.md#json-output), que documenta cada campo y opción específica del evento. Para las definiciones de tipo del SDK, consulta las referencias del SDK de [TypeScript](https://code.claude.com/docs/es/agent-sdk/typescript.md#synchookjsonoutput) y [Python](https://code.claude.com/docs/es/agent-sdk/python.md#synchookjsonoutput).

Details

1858 1858 

1859### `TaskStartedMessage`1859### `TaskStartedMessage`

1860 1860 

1861Emitido cuando comienza una tarea en segundo plano. Una tarea en segundo plano es cualquier cosa rastreada fuera del turno principal: un comando Bash en segundo plano, una vigilancia de [Monitor](#monitor), un subagente generado a través de la herramienta Agent, o un agente remoto. El campo `task_type` te indica cuál. Este nombre no está relacionado con el cambio de nombre de herramienta `Task`-a-`Agent`.1861Emitido cuando comienza una tarea en segundo plano. Una tarea en segundo plano es cualquier cosa rastreada fuera del turno principal, como un comando Bash en segundo plano, una vigilancia de [Monitor](#monitor), un subagente generado a través de la herramienta Agent, o un agente remoto. Este nombre no está relacionado con el cambio de nombre de herramienta `Task`-a-`Agent`.

1862 1862 

1863```python theme={null}1863```python theme={null}

1864@dataclass1864@dataclass


1878| `uuid` | `str` | Identificador único del mensaje |1878| `uuid` | `str` | Identificador único del mensaje |

1879| `session_id` | `str` | Identificador de sesión |1879| `session_id` | `str` | Identificador de sesión |

1880| `tool_use_id` | `str \| None` | ID de uso de herramienta asociado |1880| `tool_use_id` | `str \| None` | ID de uso de herramienta asociado |

1881| `task_type` | `str \| None` | Qué tipo de tarea en segundo plano: `"local_bash"` para Bash en segundo plano y vigilancias de Monitor, `"local_agent"`, o `"remote_agent"` |1881| `task_type` | `str \| None` | Qué tipo de tarea en segundo plano, como `"local_bash"` para Bash en segundo plano y vigilancias de Monitor, `"local_agent"` para subagentes, `"mcp_task"` para [llamadas a herramientas MCP en segundo plano](https://code.claude.com/docs/es/mcp.md#automatic-backgrounding-of-long-tool-calls), o `"remote_agent"` |

1882 1882 

1883### `TaskUsage`1883### `TaskUsage`

1884 1884 

Details

10 10 

11Para una seguridad de tipos completa, usa [Zod](#type-safe-schemas-with-zod-and-pydantic) (TypeScript) o [Pydantic](#type-safe-schemas-with-zod-and-pydantic) (Python) para definir tu esquema y obtener objetos fuertemente tipados.11Para una seguridad de tipos completa, usa [Zod](#type-safe-schemas-with-zod-and-pydantic) (TypeScript) o [Pydantic](#type-safe-schemas-with-zod-and-pydantic) (Python) para definir tu esquema y obtener objetos fuertemente tipados.

12 12 

13## ¿Por qué salidas estructuradas?13## ¿Por qué usar salidas estructuradas?

14 14 

15Los agentes devuelven texto de forma libre de forma predeterminada, lo que funciona para chat pero no cuando necesita usar la salida mediante programación. Las salidas estructuradas le proporcionan datos tipados que puede pasar directamente a su lógica de aplicación, base de datos o componentes de interfaz de usuario.15Los agentes devuelven texto libre de forma predeterminada, lo cual funciona para un chat, pero no cuando necesitas usar la salida de forma programática. Las salidas estructuradas te dan datos tipados que puedes pasar directamente a la lógica de tu aplicación, a tu base de datos o a tus componentes de UI.

16 16 

17Considere una aplicación de recetas donde un agente busca en la web y trae recetas. Sin salidas estructuradas, obtiene texto de forma libre que tendría que analizar usted mismo. Con salidas estructuradas, define la forma que desea y obtiene datos tipados que puede usar directamente en su aplicación.17Piensa en una aplicación de recetas donde un agente busca en la web y trae recetas. Sin salidas estructuradas, obtienes texto libre que tendrías que analizar por tu cuenta. Con salidas estructuradas, defines la forma que quieres y obtienes datos tipados que puedes usar directamente en tu aplicación.

18 18 

19> [accordion] Sin salidas estructuradas19> [accordion] Sin salidas estructuradas

20>20>

21> ```text theme={null}21> ```text theme={null}

22> ¡Aquí hay una receta clásica de galletas con chispas de chocolate!22> Here's a classic chocolate chip cookie recipe!

23>23>

24> **Galletas con Chispas de Chocolate**24> **Chocolate Chip Cookies**

25> Tiempo de preparación: 15 minutos | Tiempo de cocción: 10 minutos25> Prep time: 15 minutes | Cook time: 10 minutes

26>26>

27> Ingredientes:27> Ingredients:

28> - 2 1/4 tazas de harina para todo uso28> - 2 1/4 cups all-purpose flour

29> - 1 taza de mantequilla, ablandada29> - 1 cup butter, softened

30> ...30> ...

31> ```31> ```

32>32>

33> Para usar esto en su aplicación, tendría que analizar el título, convertir "15 minutos" a un número, separar ingredientes de instrucciones y manejar el formato inconsistente en todas las respuestas.33> Para usar esto en tu aplicación, tendrías que extraer el título, convertir "15 minutes" en un número, separar los ingredientes de las instrucciones y manejar el formato inconsistente entre respuestas.

34 34 

35> [accordion] Con salidas estructuradas35> [accordion] Con salidas estructuradas

36>36>

37> ```jsonc theme={null}37> ```jsonc theme={null}

38> {38> {

39> "name": "Galletas con Chispas de Chocolate",39> "name": "Chocolate Chip Cookies",

40> "prep_time_minutes": 15,40> "prep_time_minutes": 15,

41> "cook_time_minutes": 10,41> "cook_time_minutes": 10,

42> "ingredients": [42> "ingredients": [

43> { "item": "harina para todo uso", "amount": 2.25, "unit": "tazas" },43> { "item": "all-purpose flour", "amount": 2.25, "unit": "cups" },

44> { "item": "mantequilla, ablandada", "amount": 1, "unit": "taza" }44> { "item": "butter, softened", "amount": 1, "unit": "cup" }

45> // ...45> // ...

46> ],46> ],

47> "steps": ["Precalentar horno a 375°F", "Mezclar mantequilla y azúcar" /* ... */]47> "steps": ["Preheat oven to 375°F", "Cream butter and sugar" /* ... */]

48> }48> }

49> ```49> ```

50>50>

51> Datos tipados que puede usar directamente en su interfaz de usuario.51> Datos tipados que puedes usar directamente en tu UI.

52 52 

53## Inicio rápido53## Inicio rápido

54 54 

55Para usar salidas estructuradas, defina un [JSON Schema](https://json-schema.org/understanding-json-schema/about) que describa la forma de los datos que desea, luego páselo a `query()` a través de la opción `outputFormat` (TypeScript) u opción `output_format` (Python). Cuando el agente termina, el mensaje de resultado incluye un campo `structured_output` con datos validados que coinciden con su esquema.55Para usar salidas estructuradas, define un [JSON Schema](https://json-schema.org/understanding-json-schema/about) que describa la forma de los datos que quieres y luego pásalo a `query()` mediante la opción `outputFormat` (TypeScript) o la opción `output_format` (Python). Cuando el agente termina, el mensaje de resultado incluye un campo `structured_output` con datos validados que coinciden con tu esquema.

56 56 

57Antes de ejecutar los ejemplos de esta página, instala el Claude Agent SDK siguiendo el [inicio rápido](https://code.claude.com/docs/es/agent-sdk/quickstart.md#setup). El ejemplo a continuación le pide al agente que investigue Anthropic y devuelva el nombre de la empresa, el año de fundación y la sede como salida estructurada.57Antes de ejecutar los ejemplos de esta página, instala el Claude Agent SDK siguiendo la [guía de inicio rápido](https://code.claude.com/docs/es/agent-sdk/quickstart.md#setup). El siguiente ejemplo le pide al agente que investigue Anthropic y devuelva el nombre de la empresa, el año de fundación y la sede como salida estructurada.

58 58 

59```typescript TypeScript theme={null}59```typescript TypeScript theme={null}

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

61 61 

62// Define la forma de los datos que desea recuperar62// Define la forma de los datos que quieres recibir

63const schema = {63const schema = {

64 type: "object",64 type: "object",

65 properties: {65 properties: {


72 72 

73try {73try {

74 for await (const message of query({74 for await (const message of query({

75 prompt: "Investigue Anthropic y proporcione información clave de la empresa",75 prompt: "Research Anthropic and provide key company information",

76 options: {76 options: {

77 outputFormat: {77 outputFormat: {

78 type: "json_schema",78 type: "json_schema",


81 }81 }

82 })) {82 })) {

83 // El mensaje de resultado contiene structured_output con datos validados83 // El mensaje de resultado contiene structured_output con datos validados

84 if (message.type === "result" && message.subtype === "success" && message.structured_output) {84 if (message.type === "result" && message.subtype === "success" && !message.is_error && message.structured_output) {

85 console.log(message.structured_output);85 console.log(message.structured_output);

86 // { company_name: "Anthropic", founded_year: 2021, headquarters: "San Francisco, CA" }86 // { company_name: "Anthropic", founded_year: 2021, headquarters: "San Francisco, CA" }

87 }87 }

88 }88 }

89} catch (error) {89} catch (error) {

90 // Una query() de un solo disparo lanza después de ceder un resultado de error, como90 // Un query() de una sola ejecución lanza una excepción después de producir un resultado de error, como

91 // error_max_structured_output_retries; consulte la sección Manejo de errores.91 // error_max_structured_output_retries; consulta la sección de manejo de errores.

92 console.error(`La sesión terminó con un error: ${error}`);92 console.error(`Session ended with an error: ${error}`);

93}93}

94```94```

95 95 


97import asyncio97import asyncio

98from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage98from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

99 99 

100# Define la forma de los datos que desea recuperar100# Define la forma de los datos que quieres recibir

101schema = {101schema = {

102 "type": "object",102 "type": "object",

103 "properties": {103 "properties": {


112async def main():112async def main():

113 try:113 try:

114 async for message in query(114 async for message in query(

115 prompt="Investigue Anthropic y proporcione información clave de la empresa",115 prompt="Research Anthropic and provide key company information",

116 options=ClaudeAgentOptions(116 options=ClaudeAgentOptions(

117 output_format={"type": "json_schema", "schema": schema}117 output_format={"type": "json_schema", "schema": schema}

118 ),118 ),

119 ):119 ):

120 # El mensaje de resultado contiene structured_output con datos validados120 # El mensaje de resultado contiene structured_output con datos validados

121 if isinstance(message, ResultMessage) and message.structured_output:121 if (

122 isinstance(message, ResultMessage)

123 and not message.is_error

124 and message.structured_output

125 ):

122 print(message.structured_output)126 print(message.structured_output)

123 # {'company_name': 'Anthropic', 'founded_year': 2021, 'headquarters': 'San Francisco, CA'}127 # {'company_name': 'Anthropic', 'founded_year': 2021, 'headquarters': 'San Francisco, CA'}

124 except Exception as error:128 except Exception as error:

125 # Una query() de un solo disparo genera una excepción después de ceder un resultado de error, como129 # Un query() de una sola ejecución lanza una excepción después de producir un resultado de error, como

126 # error_max_structured_output_retries; consulte la sección Manejo de errores.130 # error_max_structured_output_retries; consulta la sección de manejo de errores.

127 print(f"La sesión terminó con un error: {error}")131 print(f"Session ended with an error: {error}")

128 132 

129 133 

130asyncio.run(main())134asyncio.run(main())


173 }177 }

174 }178 }

175 })) {179 })) {

176 if (message.type === "result" && message.subtype === "success" && message.structured_output) {180 if (message.type === "result" && message.subtype === "success" && !message.is_error && message.structured_output) {

177 // Validate and get fully typed result181 // Validate and get fully typed result

178 const parsed = FeaturePlan.safeParse(message.structured_output);182 const parsed = FeaturePlan.safeParse(message.structured_output);

179 if (parsed.success) {183 if (parsed.success) {


223 }227 }

224 ),228 ),

225 ):229 ):

226 if isinstance(message, ResultMessage) and message.structured_output:230 if (

231 isinstance(message, ResultMessage)

232 and not message.is_error

233 and message.structured_output

234 ):

227 # Validate and get fully typed result235 # Validate and get fully typed result

228 plan = FeaturePlan.model_validate(message.structured_output)236 plan = FeaturePlan.model_validate(message.structured_output)

229 print(f"Feature: {plan.feature_name}")237 print(f"Feature: {plan.feature_name}")


254 262 

255La palabra clave `format`, como `"format": "email"`, se acepta como una anotación y no se aplica mediante el validador del SDK. Antes de v2.1.205, cualquier esquema que contenga `format` se trataba como inválido.263La palabra clave `format`, como `"format": "email"`, se acepta como una anotación y no se aplica mediante el validador del SDK. Antes de v2.1.205, cualquier esquema que contenga `format` se trataba como inválido.

256 264 

257## Ejemplo: Agente de seguimiento de TODO265## Ejemplo: agente de seguimiento de TODO

258 266 

259Este ejemplo demuestra cómo funcionan las salidas estructuradas con el uso de herramientas de múltiples pasos. El agente necesita encontrar comentarios TODO en la base de código, luego buscar información de git blame para cada uno. Decide autónomamente qué herramientas usar (Grep para buscar, Bash para ejecutar comandos git) y combina los resultados en una única respuesta estructurada.267Este ejemplo demuestra cómo funcionan las salidas estructuradas con el uso de herramientas en varios pasos. El agente necesita encontrar comentarios TODO en la base de código y luego buscar la información de git blame para cada uno. Decide de forma autónoma qué herramientas usar (Grep para buscar, Bash para ejecutar comandos de git) y combina los resultados en una única respuesta estructurada.

260 268 

261El esquema incluye campos opcionales (`author` y `date`) ya que la información de git blame podría no estar disponible para todos los archivos. El agente completa lo que puede encontrar y omite el resto.269El esquema incluye campos opcionales (`author` y `date`) ya que la información de git blame podría no estar disponible para todos los archivos. El agente completa lo que puede encontrar y omite el resto.

262 270 

263```typescript TypeScript theme={null}271```typescript TypeScript theme={null}

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

265 273 

266// Define estructura para extracción de TODO274// Define la estructura para la extracción de TODO

267const todoSchema = {275const todoSchema = {

268 type: "object",276 type: "object",

269 properties: {277 properties: {


286 required: ["todos", "total_count"]294 required: ["todos", "total_count"]

287};295};

288 296 

289// El agente usa Grep para encontrar TODOs, Bash para obtener información de git blame297// El agente usa Grep para encontrar TODO y Bash para obtener la información de git blame

290try {298try {

291 for await (const message of query({299 for await (const message of query({

292 prompt: "Encuentre todos los comentarios TODO en esta base de código e identifique quién los agregó",300 prompt: "Find all TODO comments in this codebase and identify who added them",

293 options: {301 options: {

294 outputFormat: {302 outputFormat: {

295 type: "json_schema",303 type: "json_schema",


297 }305 }

298 }306 }

299 })) {307 })) {

300 if (message.type === "result" && message.subtype === "success" && message.structured_output) {308 if (message.type === "result" && message.subtype === "success" && !message.is_error && message.structured_output) {

301 const data = message.structured_output as { total_count: number; todos: Array<{ file: string; line: number; text: string; author?: string; date?: string }> };309 const data = message.structured_output as { total_count: number; todos: Array<{ file: string; line: number; text: string; author?: string; date?: string }> };

302 console.log(`Se encontraron ${data.total_count} TODOs`);310 console.log(`Found ${data.total_count} TODOs`);

303 data.todos.forEach((todo) => {311 data.todos.forEach((todo) => {

304 console.log(`${todo.file}:${todo.line} - ${todo.text}`);312 console.log(`${todo.file}:${todo.line} - ${todo.text}`);

305 if (todo.author) {313 if (todo.author) {

306 console.log(` Agregado por ${todo.author} el ${todo.date}`);314 console.log(` Added by ${todo.author} on ${todo.date}`);

307 }315 }

308 });316 });

309 }317 }

310 }318 }

311} catch (error) {319} catch (error) {

312 // Una consulta query() de un solo disparo lanza un error después de ceder un resultado de error, como320 // Un query() de una sola ejecución lanza una excepción después de emitir un resultado de error, como

313 // error_max_structured_output_retries; consulte la sección Manejo de errores.321 // error_max_structured_output_retries; consulta la sección de manejo de errores.

314 console.error(`La sesión terminó con un error: ${error}`);322 console.error(`Session ended with an error: ${error}`);

315}323}

316```324```

317 325 


319import asyncio327import asyncio

320from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage328from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

321 329 

322# Define estructura para extracción de TODO330# Define la estructura para la extracción de TODO

323todo_schema = {331todo_schema = {

324 "type": "object",332 "type": "object",

325 "properties": {333 "properties": {


344 352 

345 353 

346async def main():354async def main():

347 # El agente usa Grep para encontrar TODOs, Bash para obtener información de git blame355 # El agente usa Grep para encontrar TODO y Bash para obtener la información de git blame

348 try:356 try:

349 async for message in query(357 async for message in query(

350 prompt="Encuentre todos los comentarios TODO en esta base de código e identifique quién los agregó",358 prompt="Find all TODO comments in this codebase and identify who added them",

351 options=ClaudeAgentOptions(359 options=ClaudeAgentOptions(

352 output_format={"type": "json_schema", "schema": todo_schema}360 output_format={"type": "json_schema", "schema": todo_schema}

353 ),361 ),

354 ):362 ):

355 if isinstance(message, ResultMessage) and message.structured_output:363 if (

364 isinstance(message, ResultMessage)

365 and not message.is_error

366 and message.structured_output

367 ):

356 data = message.structured_output368 data = message.structured_output

357 print(f"Se encontraron {data['total_count']} TODOs")369 print(f"Found {data['total_count']} TODOs")

358 for todo in data["todos"]:370 for todo in data["todos"]:

359 print(f"{todo['file']}:{todo['line']} - {todo['text']}")371 print(f"{todo['file']}:{todo['line']} - {todo['text']}")

360 if "author" in todo:372 if "author" in todo:

361 print(f" Agregado por {todo['author']} el {todo['date']}")373 print(f" Added by {todo['author']} on {todo['date']}")

362 except Exception as error:374 except Exception as error:

363 # Una consulta query() de un solo disparo genera una excepción después de ceder un resultado de error, como375 # Un query() de una sola ejecución lanza una excepción después de emitir un resultado de error, como

364 # error_max_structured_output_retries; consulte la sección Manejo de errores.376 # error_max_structured_output_retries; consulta la sección de manejo de errores.

365 print(f"La sesión terminó con un error: {error}")377 print(f"Session ended with an error: {error}")

366 378 

367 379 

368asyncio.run(main())380asyncio.run(main())


383 395 

384La generación de salida estructurada puede fallar cuando el agente no puede producir JSON válido que coincida con tu esquema. Esto típicamente sucede cuando el esquema es demasiado complejo para la tarea, la tarea en sí es ambigua, o el agente alcanza su límite de reintentos intentando corregir errores de validación. También puede suceder sin ninguna falla de validación: una [alternativa de modelo](https://code.claude.com/docs/es/model-config.md#automatic-model-fallback) puede retraer una salida ya completada a mitad de la transmisión, y si ningún reintento la reemplaza, la ejecución termina con el mismo error. Revisa la lista `errors` en el mensaje de resultado de error para distinguir las dos causas antes de depurar tu esquema.396La generación de salida estructurada puede fallar cuando el agente no puede producir JSON válido que coincida con tu esquema. Esto típicamente sucede cuando el esquema es demasiado complejo para la tarea, la tarea en sí es ambigua, o el agente alcanza su límite de reintentos intentando corregir errores de validación. También puede suceder sin ninguna falla de validación: una [alternativa de modelo](https://code.claude.com/docs/es/model-config.md#automatic-model-fallback) puede retraer una salida ya completada a mitad de la transmisión, y si ningún reintento la reemplaza, la ejecución termina con el mismo error. Revisa la lista `errors` en el mensaje de resultado de error para distinguir las dos causas antes de depurar tu esquema.

385 397 

386Cuando ocurre un error, el mensaje de resultado tiene un `subtype` que indica qué salió mal:398Revisa el `subtype` del mensaje de resultado:

387 399 

388| Subtype | Significado |400| Subtype | Significado |

389| - | - |401| - | - |

390| `success` | La salida fue generada y validada exitosamente |402| `success` | La ejecución terminó sin un subtype de error |

391| `error_max_structured_output_retries` | Ninguna salida válida sobrevivió después de múltiples intentos (fallos de validación, o una retracción de alternativa de modelo sin reintento exitoso) |403| `error_max_structured_output_retries` | Ninguna salida válida sobrevivió después de múltiples intentos (fallos de validación, o una retracción de alternativa de modelo sin reintento exitoso) |

392 404 

393Un resultado también puede terminar con subtype `success` pero sin valor `structured_output`, por ejemplo cuando la ejecución se completa sin que el agente produzca una salida estructurada. Trate ese caso como un fallo también. La entrada de solución de problemas [structured\_output es None pero el resultado dice success](https://code.claude.com/docs/es/agent-sdk/troubleshooting.md#structured_output-is-none-but-the-result-says-success) cubre este caso. El ejemplo a continuación trata un resultado como exitoso solo cuando el `subtype` es `success` y `structured_output` está presente, y maneja todos los demás resultados como un fallo:405Un subtype `success` no significa por sí solo que la ejecución haya producido una respuesta. Trata un resultado como un fallo cuando el `is_error` del resultado es `true` o cuando `structured_output` está ausente:

406 

407* **`is_error` en el resultado es `true`**: por ejemplo, la solicitud final al modelo terminó en un error de API o en un rechazo. No uses un valor `structured_output` de un resultado así.

408* **`structured_output` está ausente**: para encontrar la causa, consulta [structured\_output es None pero el resultado dice success](https://code.claude.com/docs/es/agent-sdk/troubleshooting.md#structured_output-is-none-but-the-result-says-success)

409 

410El ejemplo a continuación aplica estas comprobaciones:

394 411 

395```typescript TypeScript theme={null}412```typescript TypeScript theme={null}

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


415 }432 }

416 })) {433 })) {

417 if (msg.type === "result") {434 if (msg.type === "result") {

418 if (msg.subtype === "success" && msg.structured_output) {435 if (msg.subtype === "success" && !msg.is_error && msg.structured_output) {

419 // Use the validated output436 // Use the validated output

420 console.log(msg.structured_output);437 console.log(msg.structured_output);

421 } else if (msg.subtype === "error_max_structured_output_retries") {438 } else if (msg.subtype === "error_max_structured_output_retries") {

422 console.error("Could not produce valid output");439 console.error("Could not produce valid output");

423 } else {440 } else {

424 console.error("Run ended without a structured output");441 console.error("Run ended with an error or without a structured output");

425 }442 }

426 }443 }

427 }444 }


456 ),473 ),

457 ):474 ):

458 if isinstance(message, ResultMessage):475 if isinstance(message, ResultMessage):

459 if message.subtype == "success" and message.structured_output:476 if (

477 message.subtype == "success"

478 and not message.is_error

479 and message.structured_output

480 ):

460 # Use the validated output481 # Use the validated output

461 print(message.structured_output)482 print(message.structured_output)

462 elif message.subtype == "error_max_structured_output_retries":483 elif message.subtype == "error_max_structured_output_retries":

463 print("Could not produce valid output")484 print("Could not produce valid output")

464 else:485 else:

465 print("Run ended without a structured output")486 print("Run ended with an error or without a structured output")

466 except Exception as error:487 except Exception as error:

467 # A single-shot query() raises after yielding an error result. If the488 # A single-shot query() raises after yielding an error result. If the

468 # failure was an error result, the error subtype branches above have489 # failure was an error result, the error subtype branches above have

Details

142 142 

143Un mensaje de resultado puede terminar con `subtype: "success"` mientras `structured_output` es `None` en Python o `undefined` en TypeScript. La ejecución se completa, pero no existe una salida validada.143Un mensaje de resultado puede terminar con `subtype: "success"` mientras `structured_output` es `None` en Python o `undefined` en TypeScript. La ejecución se completa, pero no existe una salida validada.

144 144 

145Trata este resultado como un error en el código de la aplicación. Verifica tanto que `subtype` sea `success` como que `structured_output` esté presente antes de usarlo. La sección [Manejo de errores](https://code.claude.com/docs/es/agent-sdk/structured-outputs.md#error-handling) muestra este patrón para ambos SDK. Luego revisa estas causas:145Trata este resultado como un error en el código de la aplicación. La sección [Manejo de errores](https://code.claude.com/docs/es/agent-sdk/structured-outputs.md#error-handling) muestra este patrón para ambos SDK. Luego revisa estas causas:

146 146 

147* **Una solicitud que Claude rechazó**: para detectar este caso en tu código, verifica si el `stop_reason` del mensaje de resultado es `"refusal"`. Para saber qué intentar a continuación, consulta [Rechazo por la Política de uso](https://code.claude.com/docs/es/errors.md#usage-policy-refusal).147* **Una solicitud que Claude rechazó**: para detectar este caso en tu código, verifica si el `stop_reason` del mensaje de resultado es `"refusal"`. Para saber qué intentar a continuación, consulta [Rechazo por la Política de uso](https://code.claude.com/docs/es/errors.md#usage-policy-refusal).

148* **Un esquema que ninguna salida puede satisfacer**: por ejemplo, una cadena cuyo `minLength` es mayor que su `maxLength`. Si `structured_output` falta repetidamente con un esquema que crees que es correcto, busca restricciones que se contradigan entre sí. Si no encuentras ninguna, simplifica el esquema hasta que las salidas se validen y luego vuelve a introducir tus restricciones una a la vez.148* **Un esquema que ninguna salida puede satisfacer**: por ejemplo, una cadena cuyo `minLength` es mayor que su `maxLength`. Si `structured_output` falta repetidamente con un esquema que crees que es correcto, busca restricciones que se contradigan entre sí. Si no encuentras ninguna, simplifica el esquema hasta que las salidas se validen y luego vuelve a introducir tus restricciones una a la vez.

Details

5086 5086 

5087### `ApiKeySource`5087### `ApiKeySource`

5088 5088 

5089De dónde provino la clave de API para las solicitudes de la sesión, reportada como `apiKeySource` en el mensaje de inicialización [`SDKSystemMessage`](#sdksystemmessage).5089De dónde provino la clave de API de las solicitudes de la sesión, informado como `apiKeySource` en el mensaje init de [`SDKSystemMessage`](#sdksystemmessage).

5090 5090 

5091```typescript theme={null}5091```typescript theme={null}

5092type ApiKeySource =5092type ApiKeySource =


5101 | "oauth";5101 | "oauth";

5102```5102```

5103 5103 

5104Claude Code reporta uno de cuatro valores:5104Claude Code informa uno de cuatro valores:

5105 5105 

5106| Valor | Clave en uso |5106| Valor | Clave en uso |

5107| - | - |5107| - | - |

5108| `ANTHROPIC_API_KEY` | La clave en la variable de entorno `ANTHROPIC_API_KEY` |5108| `ANTHROPIC_API_KEY` | La clave de la variable de entorno `ANTHROPIC_API_KEY` |

5109| `apiKeyHelper` | La clave devuelta por tu comando [`apiKeyHelper`](https://code.claude.com/docs/es/settings-reference#apikeyhelper) |5109| `apiKeyHelper` | La clave que devuelve tu comando [`apiKeyHelper`](https://code.claude.com/docs/es/settings-reference#apikeyhelper) |

5110| `/login managed key` | La clave que Claude Code almacenó cuando iniciaste sesión con una [cuenta de Claude Console](https://code.claude.com/docs/es/authentication.md#claude-console-authentication) |5110| `/login managed key` | La clave que Claude Code almacenó cuando iniciaste sesión con una [cuenta de Claude Console](https://code.claude.com/docs/es/authentication.md#claude-console-authentication) |

5111| `none` | Sin clave de API. La sesión se autentica de otra manera, como un inicio de sesión en claude.ai, un token portador o un proveedor de nube |5111| `none` | Sin clave de API. La sesión se autentica de otra forma, como un inicio de sesión en claude.ai, un bearer token o un proveedor de nube |

5112 5112 

5113Agent SDK v0.3.234 y posterior enumeran estos cuatro valores en el tipo. El tipo también mantiene `user`, `project`, `org`, `temporary` y `oauth` para que el código más antiguo siga compilándose, y Claude Code no los reporta.5113Agent SDK v0.3.234 y versiones posteriores enumeran estos cuatro valores en el tipo. El tipo también conserva `user`, `project`, `org`, `temporary` y `oauth` para que el código anterior siga compilando, y Claude Code no los informa.

5114 5114 

5115### `SdkBeta`5115### `SdkBeta`

5116 5116 

5117Características beta disponibles que se pueden habilitar a través de la opción `betas`. Consulta [Encabezados beta](https://platform.claude.com/docs/en/api/beta-headers) para más información.5117Funciones beta disponibles que se pueden habilitar mediante la opción `betas`. Consulta [Encabezados beta](https://platform.claude.com/docs/en/api/beta-headers) para obtener más información.

5118 5118 

5119```typescript theme={null}5119```typescript theme={null}

5120type SdkBeta = "context-1m-2025-08-07";5120type SdkBeta = "context-1m-2025-08-07";


5122 5122 

5123> [!WARNING]5123> [!WARNING]

5124>5124>

5125> En la Claude API, la beta `context-1m-2025-08-07` está retirada para Claude Sonnet 4.5 y Claude Sonnet 4. Si todavía la pasas con cualquiera de esos modelos, las solicitudes que excedan la ventana de contexto estándar de 200K tokens devuelven un error, así que quítala de `betas`. Para ejecutar una sesión con una ventana de contexto de 1M tokens, establece `model` en un modelo que [se ejecute con la ventana de 1M de forma predeterminada](https://code.claude.com/docs/es/model-config.md#extended-context), como `claude-sonnet-5-5` o `claude-opus-5-5`. Para un modelo que alcanza 1M solo a través de su variante `[1m]`, agrega el sufijo al ID del modelo, como en `claude-opus-4-6[1m]`.5125> En la Claude API, la beta `context-1m-2025-08-07` está retirada para Claude Sonnet 4.5 y Claude Sonnet 4. Si todavía la pasas con cualquiera de esos modelos, las solicitudes que superan la ventana de contexto estándar de 200K tokens devuelven un error, así que quítala de `betas`. Para ejecutar una sesión con una ventana de contexto de 1M tokens, establece `model` en un modelo que [se ejecute con la ventana de 1M de forma predeterminada](https://code.claude.com/docs/es/model-config.md#extended-context), como `claude-sonnet-5-5` o `claude-opus-5-5`. Para un modelo que solo alcanza 1M mediante su variante `[1m]`, agrega el sufijo al ID del modelo, como en `claude-opus-4-6[1m]`.

5126 5126 

5127### `SlashCommand`5127### `SlashCommand`

5128 5128 


5138};5138};

5139```5139```

5140 5140 

5141`builtin` es `true` en una fila cuando el comando es propio de Claude Code y escribir `/name` lo ejecuta. Está ausente para un comando definido por un usuario, proyecto, plugin o servidor MCP, y para un comando incluido que uno de esos [reemplaza por nombre](https://code.claude.com/docs/es/skills.md#resolve-skills-that-share-a-name). Requiere Agent SDK v0.3.277 o posterior.5141`builtin` es `true` en una fila cuando el comando es propio de Claude Code y escribir `/name` lo ejecuta. Está ausente para un comando definido por un usuario, proyecto, plugin o servidor MCP, y para un comando incluido que uno de ellos [reemplaza por nombre](https://code.claude.com/docs/es/skills.md#resolve-skills-that-share-a-name). Requiere Agent SDK v0.3.277 o posterior.

5142 5142 

5143### `ModelInfo`5143### `ModelInfo`

5144 5144 


5160 5160 

5161| Campo | Tipo | Descripción |5161| Campo | Tipo | Descripción |

5162| :- | :- | :- |5162| :- | :- | :- |

5163| `value` | `string` | Identificador de modelo para pasar en llamadas a la API |5163| `value` | `string` | Identificador del modelo que se pasa en las llamadas a la API |

5164| `resolvedModel` | `string \| undefined` | El ID de modelo al que se resuelve el `value` de esta entrada, como `claude-sonnet-5-5` para la entrada del alias `sonnet`. Requiere Claude Code v2.1.197 o posterior. |5164| `resolvedModel` | `string \| undefined` | El ID de modelo al que se resuelve el `value` de esta entrada, como `claude-sonnet-5-5` para la entrada del alias `sonnet`. Requiere Claude Code v2.1.197 o posterior. |

5165| `displayName` | `string` | Nombre de visualización legible para humanos |5165| `displayName` | `string` | Nombre visible legible para humanos |

5166| `description` | `string` | Descripción de las capacidades del modelo |5166| `description` | `string` | Descripción de las capacidades del modelo |

5167| `supportsEffort` | `boolean \| undefined` | Si este modelo admite niveles de esfuerzo |5167| `supportsEffort` | `boolean \| undefined` | Si este modelo admite niveles de esfuerzo |

5168| `supportedEffortLevels` | `("low" \| "medium" \| "high" \| "xhigh" \| "max")[] \| undefined` | Niveles de esfuerzo que este modelo acepta |5168| `supportedEffortLevels` | `("low" \| "medium" \| "high" \| "xhigh" \| "max")[] \| undefined` | Niveles de esfuerzo que acepta este modelo |

5169| `supportsAdaptiveThinking` | `boolean \| undefined` | Si este modelo admite pensamiento adaptativo, donde Claude decide cuándo y cuánto pensar |5169| `supportsAdaptiveThinking` | `boolean \| undefined` | Si este modelo admite pensamiento adaptativo, en el que Claude decide cuándo y cuánto pensar |

5170| `supportsFastMode` | `boolean \| undefined` | Si este modelo admite modo rápido |5170| `supportsFastMode` | `boolean \| undefined` | Si este modelo admite el modo rápido |

5171| `supportsAutoMode` | `boolean \| undefined` | Si este modelo admite modo automático |5171| `supportsAutoMode` | `boolean \| undefined` | Si este modelo admite el modo automático |

5172 5172 

5173### `AgentInfo`5173### `AgentInfo`

5174 5174 

5175Información sobre un subagente disponible que se puede invocar a través de la herramienta Agent.5175Información sobre un subagente disponible que se puede invocar mediante la herramienta Agent.

5176 5176 

5177```typescript theme={null}5177```typescript theme={null}

5178type AgentInfo = {5178type AgentInfo = {


5184 5184 

5185| Campo | Tipo | Descripción |5185| Campo | Tipo | Descripción |

5186| :- | :- | :- |5186| :- | :- | :- |

5187| `name` | `string` | Identificador de tipo de agente (por ejemplo, `"Explore"`, `"general-purpose"`) |5187| `name` | `string` | Identificador del tipo de agente (por ejemplo, `"Explore"`, `"general-purpose"`) |

5188| `description` | `string` | Descripción de cuándo usar este agente |5188| `description` | `string` | Descripción de cuándo usar este agente |

5189| `model` | `string \| undefined` | Modelo que usa este agente: un alias o ID de modelo, o `'inherit'` para el modelo del padre. Cuando es `undefined`, Claude Code elige el modelo en el [orden de modelo de subagente](https://code.claude.com/docs/es/sub-agents.md#choose-a-model) |5189| `model` | `string \| undefined` | Modelo que usa este agente: un alias o ID de modelo, o `'inherit'` para el modelo del agente principal. Cuando es `undefined`, Claude Code elige el modelo según el [orden de modelos de subagentes](https://code.claude.com/docs/es/sub-agents.md#choose-a-model) |

5190 5190 

5191### `McpServerProvenance`5191### `McpServerProvenance`

5192 5192 

5193El servidor MCP que sirve una herramienta `mcp__*`, y de dónde provino la definición de ese servidor. Las entradas de hook [`PreToolUse`](#pretoolusehookinput), `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` y `PermissionDenied` la llevan como `mcp_server`, y las opciones [`CanUseTool`](#canusetool) la llevan como `mcpServer`. Ambas la omiten para herramientas que no provienen de un servidor MCP.5193El servidor MCP que proporciona una herramienta `mcp__*` y el origen de la definición de ese servidor. Las entradas de los hooks [`PreToolUse`](#pretoolusehookinput), `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` y `PermissionDenied` lo incluyen como `mcp_server`, y las opciones de [`CanUseTool`](#canusetool) lo incluyen como `mcpServer`. Ambos lo omiten para las herramientas que no provienen de un servidor MCP.

5194 5194 

5195```typescript theme={null}5195```typescript theme={null}

5196type McpServerProvenance = {5196type McpServerProvenance = {


5201 5201 

5202| Campo | Tipo | Descripción |5202| Campo | Tipo | Descripción |

5203| :- | :- | :- |5203| :- | :- | :- |

5204| `name` | `string` | El nombre bajo el cual está registrado el servidor, el mismo valor que [`mcpServerStatus()`](#query-object) reporta para él |5204| `name` | `string` | El nombre con el que está registrado el servidor, el mismo valor que [`mcpServerStatus()`](#query-object) informa para él |

5205| `source` | `string` | De dónde provino la definición del servidor: `sdk`, `plugin` o un alcance de configuración |5205| `source` | `string` | De dónde provino la definición del servidor: `sdk`, `plugin` o un alcance de configuración |

5206 5206 

5207`source` toma uno de los siguientes valores. El conjunto está abierto, así que trata un valor que no reconozcas como una fuente configurada, nunca como `sdk`:5207`source` toma uno de los siguientes valores. El conjunto es abierto, así que trata un valor que no reconozcas como un origen configurado, nunca como `sdk`:

5208 5208 

5209* **`sdk`**: un servidor en proceso que tu aplicación registró. Solo la aplicación host del SDK puede registrar uno, así que un servidor configurado nunca reporta `sdk`, sea cual sea su nombre.5209* **`sdk`**: un servidor en proceso que registró tu aplicación. Solo la aplicación host del SDK puede registrar uno, así que un servidor configurado nunca informa `sdk`, sea cual sea su nombre.

5210* **`plugin`**: un servidor proporcionado por un [plugin](https://code.claude.com/docs/es/agent-sdk/plugins.md). Su `name` es la forma con alcance `plugin:<plugin-name>:<server-name>` descrita en [servidores MCP proporcionados por plugins](https://code.claude.com/docs/es/mcp.md#plugin-provided-mcp-servers).5210* **`plugin`**: un servidor que proporciona un [plugin](https://code.claude.com/docs/es/agent-sdk/plugins.md). Su `name` tiene la forma con alcance `plugin:<plugin-name>:<server-name>` descrita en [servidores MCP proporcionados por plugins](https://code.claude.com/docs/es/mcp.md#plugin-provided-mcp-servers).

5211* **Un alcance de configuración**: `user`, `project`, `local`, `dynamic`, `managed`, `enterprise`, `claudeai` o `agent`. Un servidor de `.mcp.json` reporta `project`, y [alcances de instalación de MCP](https://code.claude.com/docs/es/mcp.md#mcp-installation-scopes) define `local`, `project` y `user`. Los servidores que tu aplicación pasa en la [opción `mcpServers`](#options), salvo los servidores SDK en proceso, reportan `dynamic`.5211* **Un alcance de configuración**: `user`, `project`, `local`, `dynamic`, `managed`, `enterprise`, `claudeai` o `agent`. Un servidor de `.mcp.json` informa `project`, y [alcances de instalación de MCP](https://code.claude.com/docs/es/mcp.md#mcp-installation-scopes) define `local`, `project` y `user`. Los servidores que tu aplicación pasa en la [opción `mcpServers`](#options), excepto los servidores SDK en proceso, informan `dynamic`.

5212 5212 

5213Basa las decisiones de confianza en `source`, no en `name` ni en el prefijo de nombre de herramienta `mcp__<server>__`. Para cualquier fuente que no sea `sdk`, `name` es texto no confiable: escápalo antes de mostrarlo.5213Basa las decisiones de confianza en `source`, no en `name` ni en el prefijo de nombre de herramienta `mcp__<server>__`. Para cualquier origen distinto de `sdk`, `name` es texto no confiable: escápalo antes de mostrarlo.

5214 5214 

5215`McpServerProvenance` y los campos que la llevan requieren Agent SDK v0.3.274 o posterior.5215`McpServerProvenance` y los campos que lo incluyen requieren Agent SDK v0.3.274 o posterior.

5216 5216 

5217### `McpServerStatus`5217### `McpServerStatus`

5218 5218 


5245 5245 

5246Usa `source` para decidir cuánto confiar en un servidor, y el `_meta` de cada entrada de `tools` para encontrar un recurso de UI que el servidor adjuntó a esa herramienta:5246Usa `source` para decidir cuánto confiar en un servidor, y el `_meta` de cada entrada de `tools` para encontrar un recurso de UI que el servidor adjuntó a esa herramienta:

5247 5247 

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

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

5250 5250 

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

5252 5252 

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

5254 5254 


5256 5256 

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

5258 5258 

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

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

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

5262 5262 

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

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

5265 5265 

5266Cuando a Claude Code no le queda ningún miembro `ui` ni ninguna cadena `ui/resourceUri` que enviar, la entrada de `tools` no tiene `_meta` en absoluto.5266Cuando a Claude Code no le queda ningún miembro `ui` ni ninguna cadena `ui/resourceUri` que enviar, la entrada de `tools` no tiene `_meta` en absoluto.

5267 5267 

5268### `McpServerStatusConfig`5268### `McpServerStatusConfig`

5269 5269 

5270La configuración de un servidor MCP tal como la reporta `mcpServerStatus()`. Esta es la unión de todos los tipos de transporte de servidor MCP.5270La configuración de un servidor MCP tal como la informa `mcpServerStatus()`. Es la unión de todos los tipos de transporte de servidores MCP.

5271 5271 

5272```typescript theme={null}5272```typescript theme={null}

5273type McpServerStatusConfig =5273type McpServerStatusConfig =


5278 | McpClaudeAIProxyServerConfig;5278 | McpClaudeAIProxyServerConfig;

5279```5279```

5280 5280 

5281Consulta [`McpServerConfig`](#mcpserverconfig) para ver detalles sobre cada tipo de transporte.5281Consulta [`McpServerConfig`](#mcpserverconfig) para obtener detalles sobre cada tipo de transporte.

5282 5282 

5283### `AccountInfo`5283### `AccountInfo`

5284 5284 

5285Información de cuenta del usuario autenticado.5285Información de la cuenta del usuario autenticado.

5286 5286 

5287```typescript theme={null}5287```typescript theme={null}

5288type AccountInfo = {5288type AccountInfo = {


5296 5296 

5297### `ModelUsage`5297### `ModelUsage`

5298 5298 

5299Estadísticas de uso por modelo devueltas en mensajes de resultado. El valor `costUSD` es una estimación del lado del cliente. Consulta [Rastrear costo y uso](https://code.claude.com/docs/es/agent-sdk/cost-tracking.md) para ver advertencias sobre facturación.5299Estadísticas de uso por modelo que se devuelven en los mensajes de resultado. El valor `costUSD` es una estimación del lado del cliente. Consulta [Seguimiento de costos y uso](https://code.claude.com/docs/es/agent-sdk/cost-tracking.md) para conocer las salvedades de facturación.

5300 5300 

5301```typescript theme={null}5301```typescript theme={null}

5302type ModelUsage = {5302type ModelUsage = {


5315};5315};

5316```5316```

5317 5317 

5318`thinkingTokens` cuenta los tokens de pensamiento que generó este modelo. `outputTokens` ya los incluye, así que no sumes los dos. El campo está ausente hasta que un turno se ejecuta en una versión de Claude Code que lo registra, por lo que una sesión reanudada que comenzó en una versión anterior reporta un recuento parcial. `thinkingTokens` requiere Agent SDK v0.3.257 o posterior.5318`thinkingTokens` cuenta los tokens de pensamiento que generó este modelo. `outputTokens` ya los incluye, así que no sumes los dos. El campo está ausente hasta que se ejecuta un turno en una versión de Claude Code que lo registra, por lo que una sesión reanudada que comenzó en una versión anterior informa un recuento parcial. `thinkingTokens` requiere Agent SDK v0.3.257 o posterior.

5319 5319 

5320Los campos `canonicalModel` y `provider` requieren Claude Code v2.1.218 o posterior. `canonicalModel` es el ID de modelo canónico que usa la búsqueda de precios; puede diferir de la cadena de modelo sin procesar que sirve de clave a la entrada, por ejemplo cuando esa cadena es un ID específico del proveedor o un alias.5320Los campos `canonicalModel` y `provider` requieren Claude Code v2.1.218 o posterior. `canonicalModel` es el ID de modelo canónico que usa la búsqueda de precios; puede diferir de la cadena de modelo sin procesar que identifica la entrada, por ejemplo cuando esa cadena es un ID específico de un proveedor o un alias.

5321 5321 

5322`provider` nombra el backend de API que sirvió el modelo, como `firstParty`, `bedrock`, `vertex`, `foundry`, `anthropicAws`, `mantle` o `gateway`.5322`provider` nombra el backend de API que atendió el modelo, como `firstParty`, `bedrock`, `vertex`, `foundry`, `anthropicAws`, `mantle` o `gateway`.

5323 5323 

5324`costBasis` nombra la tabla de precios que fijó el precio de la solicitud más reciente del modelo: `list` para precio de lista, `managed` para una tabla [`modelPricing`](https://code.claude.com/docs/es/settings-reference#modelpricing), o `unknown` cuando ninguna coincidió con el ID del modelo. El campo requiere Claude Code v2.1.246 o posterior.5324`costBasis` nombra la tabla de precios que fijó el precio de la solicitud más reciente del modelo: `list` para el precio de lista, `managed` para una tabla [`modelPricing`](https://code.claude.com/docs/es/settings-reference#modelpricing), o `unknown` cuando ninguna coincidió con el ID del modelo. El campo requiere Claude Code v2.1.246 o posterior.

5325 5325 

5326### `ConfigScope`5326### `ConfigScope`

5327 5327 


5343 5343 

5344### `Usage`5344### `Usage`

5345 5345 

5346Estadísticas de uso de tokens. Este es el tipo `BetaUsage` de `@anthropic-ai/sdk`.5346Estadísticas de uso de tokens. Es el tipo `BetaUsage` de `@anthropic-ai/sdk`.

5347 5347 

5348```typescript theme={null}5348```typescript theme={null}

5349type Usage = {5349type Usage = {


5365};5365};

5366```5366```

5367 5367 

5368`BetaServerToolUsage`, `BetaIterationsUsage`, `BetaOutputTokensDetails` y `BetaFallbackCreditUsage` se definen en `@anthropic-ai/sdk`.5368`BetaServerToolUsage`, `BetaIterationsUsage`, `BetaOutputTokensDetails` y `BetaFallbackCreditUsage` están definidos en `@anthropic-ai/sdk`.

5369 5369 

5370`output_tokens_details` desglosa la salida facturada por categoría. Actualmente lleva un campo, `thinking_tokens: number`, que cuenta los tokens de salida que el modelo generó como razonamiento interno, incluidos los delimitadores de bloque de pensamiento. El campo `output_tokens_details` requiere TypeScript SDK v0.3.228 o posterior, que incluye Claude Code v2.1.228.5370`output_tokens_details` desglosa la salida facturada por categoría. Actualmente incluye un campo, `thinking_tokens: number`, que cuenta los tokens de salida que el modelo generó como razonamiento interno, incluidos los delimitadores de los bloques de pensamiento. El campo `output_tokens_details` requiere TypeScript SDK v0.3.228 o posterior, que incluye Claude Code v2.1.228.

5371 5371 

5372* **Facturación**: lee el desglose para observabilidad, no para facturación. `output_tokens` sigue siendo el total de referencia, y `output_tokens - thinking_tokens` aproxima la salida sin razonamiento.5372* **Facturación**: lee el desglose para observabilidad, no para facturación. `output_tokens` sigue siendo el total autoritativo, y `output_tokens - thinking_tokens` aproxima la salida que no es razonamiento.

5373* **Qué cubre el recuento**: el razonamiento sin procesar que produjo el modelo, que puede ser más largo que el texto de pensamiento devuelto en el cuerpo de la respuesta. La API lo calcula volviendo a tokenizar ese texto sin procesar, por lo que puede diferir en algunos tokens del recuento exacto de generación del modelo.5373* **Qué cubre el recuento**: el razonamiento sin procesar que produjo el modelo, que puede ser más largo que el texto de pensamiento devuelto en el cuerpo de la respuesta. La API lo calcula volviendo a tokenizar ese texto sin procesar, por lo que puede diferir en unos pocos tokens del recuento exacto de generación del modelo.

5374* **Streaming**: en los mensajes de asistente enviados en streaming, este desglose, al igual que `output_tokens`, es un marcador de posición de `message_start` y no lleva un recuento real, así que léelo del `usage` del mensaje de resultado como se describe en [Leer tokens de salida del mensaje de resultado](https://code.claude.com/docs/es/agent-sdk/cost-tracking.md#read-output-tokens-from-the-result-message). En el mensaje de resultado, `thinking_tokens` vale `0` cuando el modelo o el proveedor no reporta desglose.5374* **Streaming**: en los mensajes del asistente enviados en streaming, este desglose, al igual que `output_tokens`, es un marcador de posición de `message_start` y no incluye un recuento real, así que léelo del `usage` del mensaje de resultado, como describe [Leer los tokens de salida del mensaje de resultado](https://code.claude.com/docs/es/agent-sdk/cost-tracking.md#read-output-tokens-from-the-result-message). En el mensaje de resultado, `thinking_tokens` vale `0` cuando el modelo o el proveedor no informa ningún desglose.

5375* **Casos `null`**: `output_tokens_details` en sí es `null` en mensajes de asistente que Claude Code sintetiza, como los mensajes de error de la API.5375* **Casos `null`**: `output_tokens_details` en sí es `null` en los mensajes del asistente que sintetiza Claude Code, como los mensajes de error de la API.

5376 5376 

5377Que `Usage` lleve `fallback_credit` depende de tu `@anthropic-ai/sdk` instalado, que lo agregó en 0.115.0.5377Que `Usage` incluya `fallback_credit` depende del `@anthropic-ai/sdk` que tengas instalado, que lo agregó en la versión 0.115.0.

5378 5378 

5379### `CallToolResult`5379### `CallToolResult`

5380 5380 

5381Tipo de resultado de herramienta MCP (de `@modelcontextprotocol/sdk/types.js`). `structuredContent` es un objeto JSON que se puede devolver junto con `content`, incluidos bloques de imagen. Consulta [Devolver datos estructurados](https://code.claude.com/docs/es/agent-sdk/custom-tools.md#return-structured-data).5381Tipo de resultado de herramienta MCP (de `@modelcontextprotocol/sdk/types.js`). `structuredContent` es un objeto JSON que se puede devolver junto con `content`, incluidos los bloques de imagen. Consulta [Devolver datos estructurados](https://code.claude.com/docs/es/agent-sdk/custom-tools.md#return-structured-data).

5382 5382 

5383```typescript theme={null}5383```typescript theme={null}

5384type CallToolResult = {5384type CallToolResult = {

5385 content: Array<{5385 content: Array<{

5386 type: "text" | "image" | "audio" | "resource" | "resource_link";5386 type: "text" | "image" | "audio" | "resource" | "resource_link";

5387 // Los campos adicionales varían por tipo5387 // Los campos adicionales varían según el tipo

5388 }>;5388 }>;

5389 structuredContent?: Record<string, unknown>;5389 structuredContent?: Record<string, unknown>;

5390 isError?: boolean;5390 isError?: boolean;


5393 5393 

5394### `SDKMcpResourceLink`5394### `SDKMcpResourceLink`

5395 5395 

5396Un archivo que una herramienta MCP devolvió por referencia. Claude Code crea cada entrada a partir de un bloque `resource_link` en el resultado de la herramienta y entrega la lista como `resourceLinks` en [`SDKUserMessage.tool_use_result`](#sdkusermessage), o como `resource_links` en [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) cuando la llamada terminó en segundo plano. Requiere Agent SDK v0.3.257 o posterior.5396Un archivo que una herramienta MCP devolvió por referencia. Claude Code construye cada entrada a partir de un bloque `resource_link` del resultado de la herramienta y entrega la lista como `resourceLinks` en [`SDKUserMessage.tool_use_result`](#sdkusermessage), o como `resource_links` en [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) cuando la llamada terminó en segundo plano. Requiere Agent SDK v0.3.257 o posterior.

5397 5397 

5398```typescript theme={null}5398```typescript theme={null}

5399type SDKMcpResourceLink = {5399type SDKMcpResourceLink = {


5413| :- | :- | :- |5413| :- | :- | :- |

5414| `uri` | `string` | URI del recurso, tal como lo devolvió el servidor |5414| `uri` | `string` | URI del recurso, tal como lo devolvió el servidor |

5415| `name` | `string` | Nombre que el servidor le dio al recurso |5415| `name` | `string` | Nombre que el servidor le dio al recurso |

5416| `title` | `string \| undefined` | Título de visualización, cuando el servidor estableció uno |5416| `title` | `string \| undefined` | Título visible, cuando el servidor estableció uno |

5417| `description` | `string \| undefined` | Descripción, cuando el servidor estableció una |5417| `description` | `string \| undefined` | Descripción, cuando el servidor estableció una |

5418| `mimeType` | `string \| undefined` | Tipo MIME, cuando el servidor estableció uno |5418| `mimeType` | `string \| undefined` | Tipo MIME, cuando el servidor estableció uno |

5419| `size` | `number \| undefined` | Tamaño en bytes, cuando el servidor estableció uno |5419| `size` | `number \| undefined` | Tamaño en bytes, cuando el servidor estableció uno |


5432 | { type: "disabled" }; // Sin pensamiento extendido5432 | { type: "disabled" }; // Sin pensamiento extendido

5433```5433```

5434 5434 

5435El campo opcional `display` controla si el texto de pensamiento se devuelve `"summarized"` u `"omitted"`. En Claude Opus 4.7 y posterior, el valor predeterminado de la API es `"omitted"`, así que establece `"summarized"` para recibir contenido de pensamiento en bloques `thinking`. En proveedores como Amazon Bedrock y Agent Platform de Google Cloud, Claude Code no pasa `display` para los modelos anteriores que reconoce. Esos son Opus 4.6, Sonnet 4.6, Haiku 4.5 y modelos anteriores, que usan su valor predeterminado.5435El campo opcional `display` controla si el texto de pensamiento se devuelve `"summarized"` u `"omitted"`. En Claude Opus 4.7 y posteriores, el valor predeterminado de la API es `"omitted"`, así que establece `"summarized"` para recibir contenido de pensamiento en bloques `thinking`. En proveedores como Amazon Bedrock y Agent Platform de Google Cloud, Claude Code no pasa `display` para los modelos anteriores que reconoce. Estos son Opus 4.6, Sonnet 4.6, Haiku 4.5 y modelos anteriores, que usan su valor predeterminado.

5436 5436 

5437### `SpawnedProcess`5437### `SpawnedProcess`

5438 5438 

5439Interfaz para la creación personalizada de procesos (se usa con la opción `spawnClaudeCodeProcess`). `ChildProcess` ya satisface esta interfaz.5439Interfaz para la creación personalizada de procesos (se usa con la opción `spawnClaudeCodeProcess`). `ChildProcess` ya cumple con esta interfaz.

5440 5440 

5441```typescript theme={null}5441```typescript theme={null}

5442interface SpawnedProcess {5442interface SpawnedProcess {


5465 5465 

5466### `SpawnOptions`5466### `SpawnOptions`

5467 5467 

5468Opciones que se pasan a la función de creación personalizada.5468Opciones que se pasan a la función de creación de procesos personalizada.

5469 5469 

5470```typescript theme={null}5470```typescript theme={null}

5471interface SpawnOptions {5471interface SpawnOptions {


5479 5479 

5480> [!NOTE]5480> [!NOTE]

5481>5481>

5482> El campo `signal` le indica a tu función de creación cuándo desmontar el proceso. Pásalo como la opción `signal` al `spawn()` de Node, o pásalo a tu controlador de desmontaje de VM o contenedor.5482> El campo `signal` le indica a tu función de creación de procesos cuándo desmontar el proceso. Pásalo como la opción `signal` a `spawn()` de Node, o pásalo al controlador de desmontaje de tu VM o contenedor.

5483>5483>

5484> Esta señal no se activa en el instante en que [`Options.abortController`](#options) aborta. El SDK primero cierra el stdin del proceso y espera unos dos segundos para que la CLI se cierre limpiamente, y luego aborta esta señal. Para reaccionar en cambio en el momento en que el llamador aborta, escucha tu propio `Options.abortController.signal`, al que tu función de creación puede hacer referencia desde su alcance envolvente.5484> Esta señal no se activa en el instante en que [`Options.abortController`](#options) aborta. El SDK primero cierra el stdin del proceso y espera unos dos segundos para que la CLI pueda cerrarse limpiamente, y luego aborta esta señal. Para reaccionar en el momento en que el llamador aborta, escucha tu propio `Options.abortController.signal`, al que tu función de creación de procesos puede hacer referencia desde su ámbito circundante.

5485 5485 

5486### `McpSetServersResult`5486### `McpSetServersResult`

5487 5487 


5495};5495};

5496```5496```

5497 5497 

5498La promesa de `setMcpServers()` se resuelve después de que los servidores stdio, HTTP y SSE recién agregados se conecten o fallen, por lo que las herramientas de los servidores que se conectaron están disponibles en el siguiente turno.5498La promesa de `setMcpServers()` se resuelve después de que los servidores stdio, HTTP y SSE recién agregados se conecten o fallen, de modo que las herramientas de los servidores que se conectaron están disponibles en el siguiente turno.

5499 5499 

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

5501 5501 

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

5503* **Servidores stdio, HTTP y SSE que agregó una llamada anterior a `setMcpServers()`**: fuera de una sesión en la nube, un servidor que vuelves a nombrar con una configuración idéntica conserva su conexión y sus herramientas. No aparece ni en `added` ni en `removed`. Si pasas una configuración modificada, Claude Code vuelve a conectar el servidor usando esa configuración y lo enumera en `added`, no en `removed`.5503* **Servidores stdio, HTTP y SSE que agregó una llamada anterior a `setMcpServers()`**: fuera de una sesión en la nube, un servidor que vuelves a nombrar con una configuración idéntica conserva su conexión y sus herramientas. No aparece ni en `added` ni en `removed`. Si pasas una configuración modificada, Claude Code vuelve a conectar el servidor con esa configuración y lo enumera en `added`, no en `removed`.

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

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

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

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

5508 5508 

5509`added` enumera los servidores que Claude Code agregó o reemplazó, se hayan conectado o no. Un servidor que no logró conectarse aparece tanto en `added` como en `errors`, con el texto del error en `errors` y una fila `failed` en [`mcpServerStatus()`](#methods). Antes de Claude Code v2.1.257, un servidor cuyo intento de conexión lanzó una excepción se reportaba solo en `errors`.5509`added` enumera los servidores que Claude Code agregó o reemplazó, se hayan conectado o no. Un servidor que no pudo conectarse aparece tanto en `added` como en `errors`, con el texto del fallo en `errors` y una fila `failed` en [`mcpServerStatus()`](#methods). Antes de Claude Code v2.1.257, un servidor cuyo intento de conexión lanzaba una excepción se informaba solo en `errors`.

5510 5510 

5511Un valor de `errors` que comienza con `Blocked by enterprise` significa que una política rechazó el servidor, no que la conexión falló:5511Un valor de `errors` que empieza con `Blocked by enterprise` significa que una política rechazó el servidor, no que falló la conexión:

5512 5512 

5513* `Blocked by enterprise policy (allowedMcpServers/deniedMcpServers)`: el servidor no está en `added`. Una entrada de [`deniedMcpServers`](https://code.claude.com/docs/es/managed-mcp#policy-based-control-with-allowlists-and-denylists) coincide con él, o hay una lista `allowedMcpServers` establecida que lo omite. Si esa lista está en un archivo de configuración que cargas mediante [`settingSources`](#options), edita el archivo. Si está en la configuración administrada, pide a tus administradores que la cambien.5513* `Blocked by enterprise policy (allowedMcpServers/deniedMcpServers)`: el servidor no está en `added`. Una entrada de [`deniedMcpServers`](https://code.claude.com/docs/es/managed-mcp#policy-based-control-with-allowlists-and-denylists) coincide con él, o hay una lista `allowedMcpServers` establecida que lo omite. Si esa lista está en un archivo de configuración que cargas mediante [`settingSources`](#options), edita el archivo. Si está en la configuración administrada, pide a tus administradores que la cambien.

5514* `Blocked by enterprise managed policy`: el servidor está en `added`, con una fila `failed` en `mcpServerStatus()`. Pregunta a un administrador qué política lo bloquea.5514* `Blocked by enterprise managed policy`: el servidor está en `added`, con una fila `failed` en `mcpServerStatus()`. Pregunta a un administrador qué política lo bloquea.


5528};5528};

5529```5529```

5530 5530 

5531`skippedLinks` cuenta las rutas rastreadas que el rebobinado se negó a restaurar o eliminar por seguridad de enlaces: un enlace simbólico, un enlace duro u otro archivo no regular en la ruta rastreada, un directorio padre que ya no se resuelve a donde apuntaba cuando se tomó el checkpoint, o una copia de seguridad que no se pudo leer de forma segura. El campo requiere Claude Code v2.1.216 o posterior. Una llamada de vista previa con `rewindFiles(userMessageId, { dryRun: true })` nunca lo establece.5531`skippedLinks` cuenta las rutas rastreadas que el rebobinado se negó a restaurar o eliminar por seguridad de enlaces: un enlace simbólico, un enlace duro u otro archivo no regular en la ruta rastreada, un directorio principal que ya no se resuelve a donde apuntaba cuando se tomó el checkpoint, o una copia de seguridad que no se pudo leer de forma segura. El campo requiere Claude Code v2.1.216 o posterior. Una llamada de vista previa con `rewindFiles(userMessageId, { dryRun: true })` nunca lo establece.

5532 5532 

5533### `SDKStatusMessage`5533### `SDKStatusMessage`

5534 5534 


5572};5572};

5573```5573```

5574 5574 

5575`reason` se establece cuando una tarea termina por una causa distinta de su propia finalización, fallo o detención, y requiere Agent SDK v0.3.273 o posterior. Claude Code lo establece solo en sesiones que se conectan a través de claude.ai: sesiones en la nube, incluidas las que se ejecutan en runners autohospedados, y sesiones de Remote Control. Una llamada local a `query()` nunca lo establece. Su único valor, `worker_restart`, significa que el proceso de Claude Code que ejecutaba la tarea se reinició. La notificación lleva el estado `"stopped"`, así que trata la tarea como ni completada ni fallida.5575`reason` se establece cuando una tarea termina por una causa distinta de su propia finalización, fallo o detención, y requiere Agent SDK v0.3.273 o posterior. Claude Code lo establece solo en sesiones que se conectan a través de claude.ai: sesiones en la nube, incluidas las de runners autoalojados, y sesiones de Remote Control. Una llamada local a `query()` nunca lo establece. Su único valor, `worker_restart`, significa que el proceso de Claude Code que ejecutaba la tarea se reinició. La notificación incluye el estado `"stopped"`, así que trata la tarea como ni completada ni fallida.

5576 5576 

5577Cuando Claude Code [mueve una llamada a herramienta MCP larga a segundo plano](https://code.claude.com/docs/es/mcp.md#automatic-backgrounding-of-long-tool-calls), el bloque `tool_result` de esa llamada contiene solo un marcador de posición y el resultado real de la llamada llega en esta notificación. Asocia la notificación con la llamada mediante `tool_use_id`. En una notificación `completed`, `resource_links` enumera los archivos que la herramienta devolvió por referencia como entradas [`SDKMcpResourceLink`](#sdkmcpresourcelink), con los mismos límites de 50 enlaces y 64 KiB que [`tool_use_result.resourceLinks`](#sdkusermessage). Claude Code omite `resource_links` cuando el resultado no tenía enlaces y en notificaciones de tareas que no son llamadas a herramientas MCP. `resource_links` requiere Agent SDK v0.3.257 o posterior.5577Cuando Claude Code [mueve una llamada larga a una herramienta MCP a segundo plano](https://code.claude.com/docs/es/mcp.md#automatic-backgrounding-of-long-tool-calls), el bloque `tool_result` de esa llamada contiene solo un marcador de posición y el resultado real de la llamada llega en esta notificación. Asocia la notificación con la llamada mediante `tool_use_id`. En una notificación `completed`, `resource_links` enumera los archivos que la herramienta devolvió por referencia como entradas [`SDKMcpResourceLink`](#sdkmcpresourcelink), con los mismos límites de 50 enlaces y 64 KiB que [`tool_use_result.resourceLinks`](#sdkusermessage). Claude Code omite `resource_links` cuando el resultado no tenía enlaces y en las notificaciones de tareas que no son llamadas a herramientas MCP. `resource_links` requiere Agent SDK v0.3.257 o posterior.

5578 5578 

5579Claude Code antepone un aviso a cada notificación de tarea que envía al modelo, excepto en las entregas marcadas con el [subtipo `scheduled-trigger`](#task-notification-subkinds), que en su lugar llevan un encuadre de tarea asignada. El aviso indica que no ha habido ninguna entrada humana, para que el modelo no trate la notificación como una instrucción o aprobación del usuario.5579Claude Code antepone un aviso a cada notificación de tarea que envía al modelo, excepto en las entregas marcadas con el [subkind `scheduled-trigger`](#task-notification-subkinds), que en su lugar llevan un encuadre de tarea asignada. El aviso indica que no ha habido ninguna intervención humana, para que el modelo no trate la notificación como una instrucción o aprobación del usuario.

5580 5580 

5581Para detectar un turno de notificación de tarea, comprueba `origin.kind === "task-notification"` en el [`SDKUserMessage`](#sdkusermessage) o el [`SDKResultMessage`](#sdkresultmessage) en lugar de buscar coincidencias con el texto del aviso. Lee `subkind` del mismo campo si necesitas saber qué lo originó. Antes de v2.1.205, Claude Code no incluía el aviso en las notificaciones que llegaban mientras la sesión estaba inactiva.5581Para detectar un turno de notificación de tarea, comprueba `origin.kind === "task-notification"` en [`SDKUserMessage`](#sdkusermessage) o [`SDKResultMessage`](#sdkresultmessage) en lugar de buscar el texto del aviso. Lee `subkind` del mismo campo si necesitas saber qué lo generó. Antes de v2.1.205, Claude Code omitía el aviso en las notificaciones que llegaban mientras la sesión estaba inactiva.

5582 5582 

5583### `SDKToolUseSummaryMessage`5583### `SDKToolUseSummaryMessage`

5584 5584 


5598 5598 

5599Se emite cuando un hook comienza a ejecutarse.5599Se emite cuando un hook comienza a ejecutarse.

5600 5600 

5601Claude Code entrega este mensaje, [`SDKHookProgressMessage`](#sdkhookprogressmessage) y [`SDKHookResponseMessage`](#sdkhookresponsemessage) al flujo de mensajes de inmediato, incluso mientras un hook `SessionStart` o `Setup` todavía se está ejecutando durante el inicio de la sesión. Claude Code v2.1.169 a v2.1.203 entregaba estos mensajes en un solo lote después de que un hook `SessionStart` o `Setup` se completaba; v2.1.204 restauró la entrega en vivo.5601Claude Code entrega este mensaje, [`SDKHookProgressMessage`](#sdkhookprogressmessage) y [`SDKHookResponseMessage`](#sdkhookresponsemessage) al flujo de mensajes de inmediato, incluso mientras un hook `SessionStart` o `Setup` todavía se está ejecutando durante el inicio de la sesión. Claude Code v2.1.169 a v2.1.203 entregaba estos mensajes en un solo lote después de que se completara un hook `SessionStart` o `Setup`; v2.1.204 restauró la entrega en vivo.

5602 5602 

5603Si inicias la sesión con [`startup()`](#startup), estos mensajes te llegan una vez que llamas a `.query()` e iteras el resultado.5603Si inicias la sesión con [`startup()`](#startup), estos mensajes te llegan una vez que llamas a `.query()` e iteras el resultado.

5604 5604 


5656 5656 

5657### `SDKToolProgressMessage`5657### `SDKToolProgressMessage`

5658 5658 

5659Se emite periódicamente mientras se ejecuta una herramienta para indicar el progreso.5659Se emite periódicamente mientras una herramienta se está ejecutando para indicar el progreso.

5660 5660 

5661```typescript theme={null}5661```typescript theme={null}

5662type SDKToolProgressMessage = {5662type SDKToolProgressMessage = {


5681};5681};

5682```5682```

5683 5683 

5684Mientras una llamada a herramienta se ejecuta en la conversación principal, Claude Code emite un mensaje `tool_progress` cada 30 segundos con `heartbeat: true`. Cada latido lleva el nombre de la herramienta y los segundos transcurridos, para que puedas distinguir una llamada de larga duración de una sesión estancada. Claude Code no emite latidos para llamadas a herramientas dentro de un subagente. El campo `heartbeat` requiere Agent SDK v0.3.214 o posterior. Antes de v2.1.257, Claude Code tampoco emitía latidos para una llamada a la herramienta Agent en primer plano.5684Mientras una llamada a herramienta se ejecuta en la conversación principal, Claude Code emite un mensaje `tool_progress` cada 30 segundos con `heartbeat: true`. Cada heartbeat incluye el nombre de la herramienta y los segundos transcurridos, para que puedas distinguir una llamada de larga duración de una sesión estancada. Claude Code no emite heartbeats para las llamadas a herramientas dentro de un subagente. El campo `heartbeat` requiere Agent SDK v0.3.214 o posterior. Antes de v2.1.257, Claude Code tampoco emitía heartbeats para una llamada a la herramienta Agent en primer plano.

5685 5685 

5686En los mensajes `tool_progress` de la herramienta Agent que no son latidos, `subagent_type` nombra el tipo de subagente en ejecución, como `general-purpose`. `subagent_retry` está presente mientras ese subagente espera el retroceso tras un error de API, como un rate limit o una sobrecarga, con un mensaje por intento de reintento. Ambos campos requieren Agent SDK v0.3.214 o posterior.5686En los mensajes `tool_progress` de la herramienta Agent que no son heartbeats, `subagent_type` nombra el tipo de subagente en ejecución, como `general-purpose`. `subagent_retry` está presente mientras ese subagente espera el backoff de un error de la API, como un rate limit o una sobrecarga, con un mensaje por cada intento de reintento. Ambos campos requieren Agent SDK v0.3.214 o posterior.

5687 5687 

5688Para renderizar un indicador de reintento a partir de `subagent_retry`:5688Para mostrar un indicador de reintento a partir de `subagent_retry`:

5689 5689 

5690* Rastrea el indicador por `parent_tool_use_id`, que es único por subagente. `tool_use_id` lo comparten los subagentes paralelos de un mismo turno de asistente, así que rastrear por él permitiría que la actualización de un subagente borre el indicador de otro.5690* Rastrea el indicador por `parent_tool_use_id`, que es único por subagente. `tool_use_id` lo comparten los subagentes paralelos de un mismo turno del asistente, así que rastrear por él permitiría que la actualización de un subagente borrara el indicador de otro.

5691* Borra el indicador cuando llegue un `tool_progress` posterior para el mismo `parent_tool_use_id` sin `subagent_retry` ni `heartbeat: true`, o cuando llegue el mensaje de resultado de la herramienta. Los frames con `heartbeat: true` solo informan que el proceso sigue activo, así que conserva el indicador cuando llegue uno. `attempt` puede superar `max_retries` con reintento persistente, así que no determines el borrado a partir de los contadores.5691* Borra el indicador cuando llegue un `tool_progress` posterior para el mismo `parent_tool_use_id` sin `subagent_retry` ni `heartbeat: true`, o cuando llegue el mensaje de resultado de la herramienta. Los frames con `heartbeat: true` solo informan que la sesión sigue activa, así que conserva el indicador cuando llegue uno. `attempt` puede superar `max_retries` con reintentos persistentes, así que no derives el borrado de los contadores.

5692* Trata `error_category` como un token para elegir tu propio texto de mensaje, no como texto para mostrar. Los valores son `rate_limit`, `overloaded`, `authentication_failed`, `server_error`, `cloud_credential_error` y `unknown`. Maneja un valor que no reconozcas igual que `unknown`, porque versiones posteriores pueden agregar valores.5692* Trata `error_category` como un token para elegir tu propio texto de mensaje, no como texto para mostrar. Los valores son `rate_limit`, `overloaded`, `authentication_failed`, `server_error`, `cloud_credential_error` y `unknown`. Maneja un valor que no reconozcas del mismo modo que manejas `unknown`, porque versiones posteriores pueden agregar valores.

5693 5693 

5694### `SDKAuthStatusMessage`5694### `SDKAuthStatusMessage`

5695 5695 


5708 5708 

5709### `SDKTaskStartedMessage`5709### `SDKTaskStartedMessage`

5710 5710 

5711Se emite cuando comienza una tarea. El campo `task_type` es `"local_bash"` para comandos Bash y vigilancias de [Monitor](#monitor), `"local_agent"` para subagentes, o `"remote_agent"`.5711Se emite cuando comienza una tarea. `task_type` nombra el tipo de tarea, como `"local_bash"` para comandos Bash y vigilancias de [Monitor](#monitor), `"local_agent"` para subagentes, `"mcp_task"` para [llamadas a herramientas MCP en segundo plano](https://code.claude.com/docs/es/mcp.md#automatic-backgrounding-of-long-tool-calls), o `"remote_agent"`.

5712 5712 

5713```typescript theme={null}5713```typescript theme={null}

5714type SDKTaskStartedMessage = {5714type SDKTaskStartedMessage = {


5730 5730 

5731`run_id` identifica una ejecución de la tarea. Cuando una tarea se ejecuta de nuevo con el mismo `task_id`, como un [subagente que Claude reanuda](https://code.claude.com/docs/es/agent-sdk/subagents.md#resume-subagents), la nueva ejecución obtiene un nuevo `run_id`. El campo requiere Agent SDK v0.3.292 o posterior. Úsalo para distinguir las ejecuciones de una misma tarea:5731`run_id` identifica una ejecución de la tarea. Cuando una tarea se ejecuta de nuevo con el mismo `task_id`, como un [subagente que Claude reanuda](https://code.claude.com/docs/es/agent-sdk/subagents.md#resume-subagents), la nueva ejecución obtiene un nuevo `run_id`. El campo requiere Agent SDK v0.3.292 o posterior. Úsalo para distinguir las ejecuciones de una misma tarea:

5732 5732 

5733* **Asociar mensajes a una ejecución**: los mensajes `task_started`, [`task_progress`](#sdktaskprogressmessage), [`task_updated`](#sdktaskupdatedmessage) y [`task_notification`](#sdktasknotificationmessage) de una ejecución llevan el mismo `run_id`. La entrada de la ejecución en cada [`SDKBackgroundTasksChangedMessage`](#sdkbackgroundtaskschangedmessage) también lo lleva, al igual que el [`runId`](#task-notification-subkinds) en el origen del mensaje de usuario que entrega la notificación de la ejecución.5733* **Asociar mensajes con una ejecución**: los mensajes `task_started`, [`task_progress`](#sdktaskprogressmessage), [`task_updated`](#sdktaskupdatedmessage) y [`task_notification`](#sdktasknotificationmessage) de una ejecución incluyen el mismo `run_id`. La entrada de la ejecución en cada [`SDKBackgroundTasksChangedMessage`](#sdkbackgroundtaskschangedmessage) también lo incluye, al igual que el [`runId`](#task-notification-subkinds) en el origen del mensaje de usuario que entrega la notificación de la ejecución.

5734* **Detectar un mensaje tardío**: comparados como cadenas simples, los ID de ejecución de una tarea se ordenan en el orden en que comenzaron las ejecuciones, así que un mensaje cuyo `run_id` se ordena antes de la ejecución que estás mostrando proviene de una ejecución anterior. Trata el valor como opaco fuera de esa comparación.5734* **Detectar un mensaje tardío**: comparados como cadenas simples, los IDs de ejecución de una tarea se ordenan según el orden en que comenzaron las ejecuciones, así que un mensaje cuyo `run_id` se ordena antes que la ejecución que estás mostrando proviene de una ejecución anterior. Trata el valor como opaco, salvo por esa comparación.

5735* **Recurrir a `task_id`**: cuando un mensaje no lleva `run_id`, como el `task_notification` que emite una sesión reanudada para cerrar una tarea que inició el proceso anterior, atribúyelo por `task_id`.5735* **Recurrir a `task_id`**: cuando un mensaje no incluye `run_id`, como el `task_notification` que emite una sesión reanudada para cerrar una tarea que inició el proceso anterior, atribúyelo mediante `task_id`.

5736 5736 

5737Por ejemplo, estos tres mensajes, recortados a sus campos identificadores, provienen de un subagente en segundo plano que Claude reanudó una vez. Los dos mensajes `task_started` comparten un `task_id`, y la notificación que terminó la primera ejecución lleva el ID de la primera ejecución:5737Por ejemplo, estos tres mensajes, recortados a sus campos identificativos, provienen de un subagente en segundo plano que Claude reanudó una vez. Los dos mensajes `task_started` comparten un `task_id`, y la notificación que terminó la primera ejecución incluye el ID de la primera ejecución:

5738 5738 

5739```json theme={null}5739```json theme={null}

5740{"subtype": "task_started", "task_id": "a5c2e8f41b09d7a36", "run_id": "0mubbs7i8-6f0c2d41"}5740{"subtype": "task_started", "task_id": "a5c2e8f41b09d7a36", "run_id": "0mubbs7i8-6f0c2d41"}


5742{"subtype": "task_started", "task_id": "a5c2e8f41b09d7a36", "run_id": "0mubc18m1-b7719e05"}5742{"subtype": "task_started", "task_id": "a5c2e8f41b09d7a36", "run_id": "0mubc18m1-b7719e05"}

5743```5743```

5744 5744 

5745`ambient` es `true` para tareas que no forman parte del trabajo de la sesión, como las tareas que Claude Code ejecuta para su propio funcionamiento. Los vigilantes de actualización en vivo también son ambientales, incluidos los que pidió el usuario. Excluye las tareas ambientales de los indicadores de actividad. El campo requiere Agent SDK v0.3.247 o posterior.5745`ambient` es `true` para las tareas que no forman parte del trabajo de la sesión, como las tareas que Claude Code ejecuta para su propio funcionamiento. Los observadores de actualizaciones en vivo también son ambient, incluidos los observadores que pidió el usuario. Excluye las tareas ambient de los indicadores de actividad. El campo requiere Agent SDK v0.3.247 o posterior.

5746 5746 

5747`ambient` también aparece en [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) y en las entradas de [`SDKBackgroundTasksChangedMessage`](#sdkbackgroundtaskschangedmessage).5747`ambient` también aparece en [`SDKTaskNotificationMessage`](#sdktasknotificationmessage) y en las entradas de [`SDKBackgroundTasksChangedMessage`](#sdkbackgroundtaskschangedmessage).

5748 5748 

5749`is_backgrounded` y `spawn_depth` describen cómo Claude Code inició la tarea. Ambos campos requieren Agent SDK v0.3.238 o posterior.5749`is_backgrounded` y `spawn_depth` describen cómo Claude Code inició la tarea. Ambos campos requieren Agent SDK v0.3.238 o posterior.

5750 5750 

5751* `is_backgrounded`: Claude Code lo establece en tareas `"local_agent"` y `"local_bash"`. `true` significa que la tarea se ejecuta en segundo plano. `false` significa que la tarea se ejecuta en primer plano, y la llamada a herramienta que la inició permanece bloqueada hasta que la tarea termine o pase a segundo plano.5751* `is_backgrounded`: Claude Code lo establece en las tareas `"local_agent"` y `"local_bash"`. `true` significa que la tarea se ejecuta en segundo plano. `false` significa que la tarea se ejecuta en primer plano, y la llamada a herramienta que la inició permanece bloqueada hasta que la tarea termina o pasa a segundo plano.

5752* `spawn_depth`: Claude Code lo establece solo en tareas `"local_agent"`. Un subagente creado por el hilo principal tiene profundidad `1`. Un subagente creado por un subagente de profundidad `1` tiene profundidad `2`, y así sucesivamente.5752* `spawn_depth`: Claude Code lo establece solo en las tareas `"local_agent"`. Un subagente que creó el hilo principal tiene profundidad `1`. Un subagente que creó un subagente de profundidad `1` tiene profundidad `2`, y así sucesivamente.

5753 5753 

5754Un [subagente reanudado](https://code.claude.com/docs/es/agent-sdk/subagents.md#resume-subagents) siempre reporta `is_backgrounded: true`, porque Claude Code ejecuta todos los subagentes reanudados en segundo plano. Cuando una tarea en primer plano pasa más tarde a segundo plano, Claude Code reporta el nuevo valor de `is_backgrounded` en un mensaje [`task_updated`](#sdktaskupdatedmessage) en lugar de enviar un segundo `task_started`.5754Un [subagente reanudado](https://code.claude.com/docs/es/agent-sdk/subagents.md#resume-subagents) siempre informa `is_backgrounded: true`, porque Claude Code ejecuta en segundo plano todos los subagentes reanudados. Cuando una tarea en primer plano pasa más tarde a segundo plano, Claude Code informa el nuevo valor de `is_backgrounded` en un mensaje [`task_updated`](#sdktaskupdatedmessage) en lugar de enviar un segundo `task_started`.

5755 5755 

5756`parent_task_id` contiene el `task_id` del subagente que lanzó esta tarea. Úsalo para agrupar cada tarea bajo el subagente que la inició. Claude Code lo establece en tareas de subagente, Bash y [Monitor](#monitor). El campo requiere Agent SDK v0.3.292 o posterior. Está ausente cuando:5756`parent_task_id` contiene el `task_id` del subagente que lanzó esta tarea. Úsalo para agrupar cada tarea bajo el subagente que la inició. Claude Code lo establece en las tareas de subagente, Bash y [Monitor](#monitor). El campo requiere Agent SDK v0.3.292 o posterior. Está ausente cuando:

5757 5757 

5758* El hilo principal lanzó la tarea5758* El hilo principal lanzó la tarea

5759* Claude Code ya no rastrea la tarea padre5759* Claude Code ya no rastrea la tarea principal

5760* Un [compañero de equipo](https://code.claude.com/docs/es/agent-teams.md) o un agente dentro de un flujo de trabajo lanzó la tarea5760* Un [compañero de equipo](https://code.claude.com/docs/es/agent-teams.md) o un agente dentro de un flujo de trabajo lanzó la tarea

5761 5761 

5762La tarea padre puede ser una tarea en primer plano o una que ya terminó, así que trata un ID que no reconozcas como si no hubiera padre.5762La tarea principal puede ser una tarea en primer plano o una que ya terminó, así que trata un ID que no reconozcas como si no hubiera tarea principal.

5763 5763 

5764### `SDKTaskProgressMessage`5764### `SDKTaskProgressMessage`

5765 5765 

5766Se emite periódicamente mientras se ejecuta un subagente o una tarea en segundo plano. Para el campo `run_id`, consulta [`SDKTaskStartedMessage`](#sdktaskstartedmessage), que lo define junto con su requisito de versión.5766Se emite periódicamente mientras se ejecuta un subagente o una tarea en segundo plano. Para el campo `run_id`, consulta [`SDKTaskStartedMessage`](#sdktaskstartedmessage), que lo define junto con su requisito de versión.

5767 5767 

5768Para una tarea de subagente, el campo `summary` lleva un resumen de progreso generado por el modelo y solo se completa cuando [`agentProgressSummaries`](#options) está habilitado. Para una [llamada a herramienta MCP en segundo plano](https://code.claude.com/docs/es/mcp.md#automatic-backgrounding-of-long-tool-calls), `summary` lleva el progreso más reciente reportado por el servidor MCP y no depende de esa opción.5768Para una tarea de subagente, el campo `summary` incluye un resumen de progreso generado por el modelo y solo se rellena cuando [`agentProgressSummaries`](#options) está habilitado. Para una [llamada a herramienta MCP en segundo plano](https://code.claude.com/docs/es/mcp.md#automatic-backgrounding-of-long-tool-calls), `summary` incluye el progreso más reciente que informó el servidor MCP y no depende de esa opción.

5769 5769 

5770```typescript theme={null}5770```typescript theme={null}

5771type SDKTaskProgressMessage = {5771type SDKTaskProgressMessage = {


5790 5790 

5791### `SDKTaskUpdatedMessage`5791### `SDKTaskUpdatedMessage`

5792 5792 

5793Se emite cuando cambia el estado de una tarea en segundo plano, por ejemplo cuando pasa de `running` a `completed`. Combina `patch` en tu mapa local de tareas indexado por `task_id`. El campo `end_time` es una marca de tiempo de época Unix en milisegundos, comparable con `Date.now()`. Para el campo `run_id`, consulta [`SDKTaskStartedMessage`](#sdktaskstartedmessage), que lo define junto con su requisito de versión.5793Se emite cuando cambia el estado de una tarea en segundo plano, por ejemplo cuando pasa de `running` a `completed`. Combina `patch` con tu mapa local de tareas indexado por `task_id`. El campo `end_time` es una marca de tiempo de época Unix en milisegundos, comparable con `Date.now()`. Para el campo `run_id`, consulta [`SDKTaskStartedMessage`](#sdktaskstartedmessage), que lo define junto con su requisito de versión.

5794 5794 

5795```typescript theme={null}5795```typescript theme={null}

5796type SDKTaskUpdatedMessage = {5796type SDKTaskUpdatedMessage = {


5813 5813 

5814### `SDKBackgroundTasksChangedMessage`5814### `SDKBackgroundTasksChangedMessage`

5815 5815 

5816Se emite siempre que cambia el conjunto de tareas en segundo plano activas: una tarea comienza, se completa o se termina, un agente en primer plano pasa a segundo plano, o cambia el campo `description`, `ambient` o `parent_task_id` de una tarea. Para los campos `run_id` y `parent_task_id` de cada entrada, consulta [`SDKTaskStartedMessage`](#sdktaskstartedmessage), que los define junto con sus requisitos de versión.5816Se emite cada vez que cambia el conjunto de tareas en segundo plano activas: una tarea se inicia, se completa o se termina; un agente en primer plano pasa a segundo plano; o cambia el campo `description`, `ambient` o `parent_task_id` de una tarea. Para los campos `run_id` y `parent_task_id` de cada entrada, consulta [`SDKTaskStartedMessage`](#sdktaskstartedmessage), que los define junto con sus requisitos de versión.

5817 5817 

5818El array `tasks` es el conjunto activo completo. Reemplaza cualquier conjunto en caché con cada payload en lugar de emparejar eventos `task_started` y `task_notification`, para que el siguiente cambio de membresía corrija cualquier evento que te hayas perdido.5818El array `tasks` es el conjunto activo completo. Reemplaza cualquier conjunto en caché con cada payload en lugar de emparejar los eventos `task_started` y `task_notification`, para que el siguiente cambio de membresía corrija cualquier evento que te hayas perdido.

5819 5819 

5820Cuando una tarea termina, sus mensajes [`task_updated`](#sdktaskupdatedmessage) y [`task_notification`](#sdktasknotificationmessage) llegan antes del `background_tasks_changed` que la quita de la lista. Fuera de eso, el orden relativo a los eventos por tarea no está especificado.5820Cuando una tarea termina, sus mensajes [`task_updated`](#sdktaskupdatedmessage) y [`task_notification`](#sdktasknotificationmessage) llegan antes del `background_tasks_changed` que la quita de la lista. Fuera de eso, el orden relativo a los eventos por tarea no está especificado.

5821 5821 

5822No se emite nada al inicio. Restablece a un conjunto vacío cada vez que el proceso de CLI de la sesión se inicie o reinicie, y deja que el siguiente cambio de membresía lo vuelva a llenar.5822No se emite nada al inicio. Restablece a un conjunto vacío cada vez que el proceso de la CLI de la sesión se inicie o se reinicie, y deja que el siguiente cambio de membresía lo vuelva a llenar.

5823 5823 

5824Cuando envías una solicitud de control `initialize` repetida a una sesión en ejecución, como con [`reinitialize()`](#query-object) después de una interrupción del transporte, Claude Code envía tras la respuesta una instantánea del conjunto activo actual, incluso cuando está vacío. Así, un host que se reconecta sabe qué se está ejecutando sin esperar al siguiente cambio de membresía. Antes de Agent SDK v0.3.239, Claude Code no enviaba ninguna instantánea después de un `initialize` repetido.5824Cuando envías una solicitud de control `initialize` repetida a una sesión en ejecución, como con [`reinitialize()`](#query-object) después de una interrupción del transporte, Claude Code envía tras la respuesta una instantánea del conjunto activo actual, incluso cuando está vacío. Así, un host que se reconecta sabe qué se está ejecutando sin esperar al siguiente cambio de membresía. Antes de Agent SDK v0.3.239, Claude Code no enviaba ninguna instantánea después de un `initialize` repetido.

5825 5825 


5847 5847 

5848### `SDKThinkingTokensMessage`5848### `SDKThinkingTokensMessage`

5849 5849 

5850Se emite mientras Claude produce un bloque de pensamiento, incluido uno redactado. `estimated_tokens` es una estimación acumulada de los tokens de pensamiento generados hasta el momento en el bloque actual, y `estimated_tokens_delta` es el incremento que lleva este frame. Usa estas estimaciones para mostrar el progreso.5850Se emite mientras Claude produce un bloque de pensamiento, incluido uno censurado. `estimated_tokens` es una estimación acumulada de los tokens de pensamiento generados hasta el momento en el bloque actual, y `estimated_tokens_delta` es el incremento que incluye este frame. Usa estas estimaciones para mostrar el progreso.

5851 5851 

5852Cuando el modelo o el proveedor reporta un desglose, el recuento final del bucle de agente de nivel superior es el [`usage.output_tokens_details.thinking_tokens`](#usage) del mensaje de resultado, que [no incluye tokens de subagentes](https://code.claude.com/docs/es/agent-sdk/cost-tracking.md#get-the-total-cost-of-a-query).5852Cuando el modelo o el proveedor informa un desglose, el recuento final del bucle del agente de nivel superior es el [`usage.output_tokens_details.thinking_tokens`](#usage) del mensaje de resultado, que [no incluye los tokens de los subagentes](https://code.claude.com/docs/es/agent-sdk/cost-tracking.md#get-the-total-cost-of-a-query).

5853 5853 

5854Requiere Claude Code v2.1.153 o posterior.5854Requiere Claude Code v2.1.153 o posterior.

5855 5855 


5867 5867 

5868### `SDKSessionStateChangedMessage`5868### `SDKSessionStateChangedMessage`

5869 5869 

5870Se emite cuando Claude Code reporta el estado de la sesión. Para recibir estos mensajes, establece [`CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1`](https://code.claude.com/docs/es/env-vars#variables). Claude Code puede reportar el mismo estado más de una vez, así que interpreta un mensaje como el estado actual de la sesión y no como una transición.5870Se emite cuando Claude Code informa el estado de la sesión. Para recibir estos mensajes, establece [`CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1`](https://code.claude.com/docs/es/env-vars#variables). Claude Code puede informar el mismo estado más de una vez, así que interpreta un mensaje como el estado actual de la sesión en lugar de como una transición.

5871 5871 

5872El campo `state` lleva uno de estos valores:5872El campo `state` incluye uno de estos valores:

5873 5873 

5874* `running`: la sesión está trabajando.5874* `running`: la sesión está trabajando.

5875* `idle`: Claude Code está esperando tu siguiente prompt.5875* `idle`: Claude Code está esperando tu siguiente prompt.

5876* `requires_action`: la sesión está bloqueada a la espera de una respuesta a una solicitud que envió a tu host, como una solicitud de permiso.5876* `requires_action`: la sesión está bloqueada esperando la respuesta a una solicitud que envió a tu host, como una solicitud de permiso.

5877 5877 

5878El mensaje `idle` de un turno y su mensaje `result` pueden llegar en cualquier orden. Para cambiar si `idle` espera el trabajo en segundo plano, como un subagente en segundo plano o una ejecución de un [flujo de trabajo](https://code.claude.com/docs/es/workflows.md), consulta [`CLAUDE_CODE_BG_TASKS_REPORT_RUNNING`](https://code.claude.com/docs/es/env-vars#variables).5878El mensaje `idle` de un turno y su mensaje `result` pueden llegar en cualquier orden. Para cambiar si `idle` espera al trabajo en segundo plano, como un subagente en segundo plano o una ejecución de [flujo de trabajo](https://code.claude.com/docs/es/workflows.md), consulta [`CLAUDE_CODE_BG_TASKS_REPORT_RUNNING`](https://code.claude.com/docs/es/env-vars#variables).

5879 5879 

5880```typescript theme={null}5880```typescript theme={null}

5881type SDKSessionStateChangedMessage = {5881type SDKSessionStateChangedMessage = {


5889 5889 

5890### `SDKFilesPersistedEvent`5890### `SDKFilesPersistedEvent`

5891 5891 

5892Se emite cuando los checkpoints de archivos se guardan en el disco.5892Se emite cuando los checkpoints de archivos se guardan en disco.

5893 5893 

5894```typescript theme={null}5894```typescript theme={null}

5895type SDKFilesPersistedEvent = {5895type SDKFilesPersistedEvent = {


5941 5941 

5942### `SDKCommandsChangedMessage`5942### `SDKCommandsChangedMessage`

5943 5943 

5944Se emite cuando el conjunto de comandos disponibles cambia a mitad de la sesión, por ejemplo cuando Claude Code descubre skills a medida que el agente entra en un subdirectorio. El array `commands` es la lista completa actualizada, así que reemplaza cualquier lista de comandos en caché con este payload. Llamar a [`supportedCommands()`](#query-object) después de este mensaje devuelve la misma lista actualizada, porque el método sigue el envío más reciente; esto requiere Agent SDK v0.3.216 o posterior. En versiones anteriores del SDK, `supportedCommands()` devuelve la instantánea capturada en la inicialización y nunca refleja los cambios a mitad de la sesión.5944Se emite cuando el conjunto de comandos disponibles cambia a mitad de la sesión, por ejemplo cuando Claude Code descubre skills a medida que el agente entra en un subdirectorio. El array `commands` es la lista actualizada completa, así que reemplaza cualquier lista de comandos en caché con este payload. Llamar a [`supportedCommands()`](#query-object) después de este mensaje devuelve la misma lista actualizada, porque el método sigue el envío más reciente; esto requiere Agent SDK v0.3.216 o posterior. En versiones anteriores del SDK, `supportedCommands()` devuelve la instantánea capturada en la inicialización y nunca refleja los cambios a mitad de la sesión.

5945 5945 

5946Claude Code también emite este mensaje cuando los [prompts](https://code.claude.com/docs/es/mcp.md#use-mcp-prompts-as-commands) de un servidor MCP entran o salen de la lista, por ejemplo cuando un servidor termina de conectarse después de que comienza la sesión. Esto requiere Claude Code v2.1.281 o posterior.5946Claude Code también emite este mensaje cuando los [prompts](https://code.claude.com/docs/es/mcp.md#use-mcp-prompts-as-commands) de un servidor MCP se incorporan a la lista o salen de ella, por ejemplo cuando un servidor termina de conectarse después de que se inicia la sesión. Esto requiere Claude Code v2.1.281 o posterior.

5947 5947 

5948```typescript theme={null}5948```typescript theme={null}

5949type SDKCommandsChangedMessage = {5949type SDKCommandsChangedMessage = {


5957 5957 

5958### `SDKPromptSuggestionMessage`5958### `SDKPromptSuggestionMessage`

5959 5959 

5960Se emite después de un turno cuando [`promptSuggestions`](#options) está habilitado y Claude Code generó una sugerencia para ese turno. Contiene el siguiente prompt del usuario previsto. Para los turnos que no reciben ninguna, consulta [Cuándo Claude Code omite sugerencias](https://code.claude.com/docs/es/interactive-mode.md#when-claude-code-skips-suggestions).5960Se emite después de un turno cuando [`promptSuggestions`](#options) está habilitado y Claude Code generó una sugerencia para ese turno. Contiene el siguiente prompt del usuario previsto. Para los turnos que no obtienen ninguna, consulta [Cuándo Claude Code omite las sugerencias](https://code.claude.com/docs/es/interactive-mode.md#when-claude-code-skips-suggestions).

5961 5961 

5962```typescript theme={null}5962```typescript theme={null}

5963type SDKPromptSuggestionMessage = {5963type SDKPromptSuggestionMessage = {


5984};5984};

5985```5985```

5986 5986 

5987Los campos opcionales describen el reinicio:5987Los campos opcionales describen el restablecimiento:

5988 5988 

5989* `trigger`: qué descartó la conversación. Reinicia tu transcripción en cada mensaje `conversation_reset`, incluido uno en el que este campo esté ausente o lleve un valor que no reconozcas.5989* `trigger`: qué descartó la conversación. Restablece tu transcripción en cada mensaje `conversation_reset`, incluido uno en el que este campo esté ausente o tenga un valor que no reconozcas.

5990* `user_message_uuid`: el `uuid` del mensaje de usuario que llevaba el `/clear`. Úsalo para asociar el reinicio con ese mensaje.5990* `user_message_uuid`: el `uuid` del mensaje de usuario que incluía el `/clear`. Úsalo para asociar el restablecimiento con ese mensaje.

5991* `timestamp`: cuándo ocurrió el reinicio, como una cadena ISO 8601 en UTC. Úsalo para mostrarlo, no para ordenar mensajes.5991* `timestamp`: cuándo ocurrió el restablecimiento, como una cadena ISO 8601 en UTC. Úsalo para mostrarlo, no para ordenar mensajes.

5992 5992 

5993Los campos `trigger`, `user_message_uuid` y `timestamp` requieren Claude Code v2.1.281 o posterior.5993Los campos `trigger`, `user_message_uuid` y `timestamp` requieren Claude Code v2.1.281 o posterior.

5994 5994 

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

5996 5996 

5997### `BUILTIN_TOOL_NAMES` y `LEGACY_TOOL_NAME_ALIASES`5997### `BUILTIN_TOOL_NAMES` y `LEGACY_TOOL_NAME_ALIASES`

5998 5998 

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

6000 6000 

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

6002 6002 

6003```typescript theme={null}6003```typescript theme={null}

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

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

6006```6006```

6007 6007 

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

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

6010 6010 

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

6012 6012 

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

6014 6014 

6015### `AbortError`6015### `AbortError`

6016 6016 


6020class AbortError extends Error {}6020class AbortError extends Error {}

6021```6021```

6022 6022 

6023`AbortError` es la única clase de error en la API tipada del SDK. Otros fallos, como que el proceso de Claude Code termine o no logre iniciarse, rechazan la iteración de mensajes con errores que no tienen ninguna clase del SDK con la que comparar. [Solución de problemas](https://code.claude.com/docs/es/agent-sdk/troubleshooting.md) organiza esos errores por mensaje, con la causa y la solución de cada uno.6023`AbortError` es la única clase de error de la API tipada del SDK. Otros fallos, como que el proceso de Claude Code termine o no se pueda iniciar, rechazan la iteración de mensajes con errores que no tienen ninguna clase del SDK con la que compararlos. [Solución de problemas](https://code.claude.com/docs/es/agent-sdk/troubleshooting.md) clasifica esos errores por mensaje, con la causa y la solución de cada uno.

6024 6024 

6025## Configuración de Sandbox6025## Configuración de Sandbox

6026 6026 

Details

647 647 

648 648 

649def parse_response(response: str, options: list) -> str:649def parse_response(response: str, options: list) -> str:

650 """Analizar la entrada del usuario como número(s) de opción o texto libre."""650 """Parse user input as option number(s) or free text."""

651 try:651 try:

652 indices = [int(s.strip()) - 1 for s in response.split(",")]652 indices = [int(s.strip()) - 1 for s in response.split(",")]

653 labels = [options[i]["label"] for i in indices if 0 <= i < len(options)]653 labels = [options[i]["label"] for i in indices if 0 <= i < len(options)]


657 657 

658 658 

659async def handle_ask_user_question(input_data: dict) -> PermissionResultAllow:659async def handle_ask_user_question(input_data: dict) -> PermissionResultAllow:

660 """Mostrar las preguntas de Claude y recopilar respuestas del usuario."""660 """Display Claude's questions and collect user answers."""

661 answers = {}661 answers = {}

662 662 

663 for q in input_data.get("questions", []):663 for q in input_data.get("questions", []):

agent-teams.md +27 −27

Details

8 8 

9> [!WARNING]9> [!WARNING]

10>10>

11> Los equipos de agentes son experimentales y están deshabilitados por defecto. Habilítelos configurando `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` en su [settings.json](https://code.claude.com/docs/es/settings.md) o entorno. Sin esa variable, ningún equipo se configura al inicio de la sesión, no se escriben directorios de equipo, y Claude no genera ni propone compañeros de equipo. Los equipos de agentes tienen [limitaciones conocidas](#limitations) alrededor de la reanudación de sesiones, coordinación de tareas y comportamiento de apagado.11> Los equipos de agentes son experimentales y están deshabilitados por defecto. Habilítalos configurando `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` en tu [settings.json](https://code.claude.com/docs/es/settings.md) o entorno. Los equipos de agentes tienen [limitaciones conocidas](#limitations) alrededor de la reanudación de sesiones, coordinación de tareas y comportamiento de apagado.

12 12 

13Los equipos de agentes le permiten coordinar múltiples instancias de Claude Code trabajando juntas. Una sesión actúa como el líder del equipo, coordinando el trabajo, asignando tareas y sintetizando resultados. Los compañeros de equipo trabajan de forma independiente, cada uno en su propia ventana de contexto, y se comunican directamente entre sí. También puede hablar con cualquier compañero de equipo directamente sin pasar por el líder.13Los equipos de agentes le permiten coordinar múltiples instancias de Claude Code trabajando juntas. Una sesión actúa como el líder del equipo, coordinando el trabajo, asignando tareas y sintetizando resultados. Los compañeros de equipo trabajan de forma independiente, cada uno en su propia ventana de contexto, y se comunican directamente entre sí. También puede hablar con cualquier compañero de equipo directamente sin pasar por el líder.

14 14 


221 221 

222## Cómo funcionan los equipos de agentes222## Cómo funcionan los equipos de agentes

223 223 

224Esta sección cubre la arquitectura y la mecánica detrás de los equipos de agentes. Si desea comenzar a usarlos, consulte [Controle su equipo de agentes](#control-your-agent-team) arriba.224Esta sección cubre la arquitectura y la mecánica detrás de los equipos de agentes. Si quieres comenzar a usarlos, consulta [Controla tu equipo de agentes](#control-your-agent-team) arriba.

225 225 

226### Cómo Claude inicia equipos de agentes226### Cómo Claude inicia equipos de agentes

227 227 

228Para iniciar un equipo, pida a Claude compañeros de equipo. Claude lanza un compañero de equipo cuando llama a la [herramienta Agent](https://code.claude.com/docs/es/tools-reference.md) con un [`name`](https://code.claude.com/docs/es/sub-agents#subagent-names) mientras los equipos de agentes están habilitados, a menos que la llamada sea un [fork](https://code.claude.com/docs/es/sub-agents.md#fork-the-current-conversation) o pase `isolation` en la llamada misma. Claude Code no le pide que confirme el lanzamiento.228Para iniciar un equipo, pide a Claude compañeros de equipo. Claude lanza un compañero de equipo cuando llama a la [herramienta Agent](https://code.claude.com/docs/es/tools-reference.md) con un [`name`](https://code.claude.com/docs/es/sub-agents#subagent-names) mientras los equipos de agentes están habilitados, a menos que la llamada sea un [fork](https://code.claude.com/docs/es/sub-agents.md#fork-the-current-conversation) o pase `isolation` en la llamada misma. Claude Code no te pide que confirmes el lanzamiento.

229 229 

230Claude también nombra subagentes ordinarios por su cuenta para poder enviarles mensajes más tarde. Esas llamadas siguen la misma regla, por lo que los equipos pueden formarse incluso cuando no pidió uno. Si prefiere subagentes en su lugar, [desactive los equipos de agentes](#claude-spawns-teammates-instead-of-subagents).230Claude también nombra subagentes ordinarios por su cuenta para poder enviarles mensajes más tarde. Esas llamadas siguen la misma regla, por lo que los equipos pueden formarse incluso cuando no pediste uno. Si prefieres subagentes en su lugar, [desactiva los equipos de agentes](#claude-spawns-teammates-instead-of-subagents).

231 231 

232### Arquitectura232### Arquitectura

233 233 


242 242 

243El buzón de cada agente es un archivo JSON en `~/.claude/teams/{team-name}/inboxes/{agent-name}.json`. Claude Code valida cada entrada cuando lee un archivo de buzón. Las entradas que no coinciden con el formato de mensaje se reportan como errores y se eliminan del archivo; los mensajes válidos aún se entregan.243El buzón de cada agente es un archivo JSON en `~/.claude/teams/{team-name}/inboxes/{agent-name}.json`. Claude Code valida cada entrada cuando lee un archivo de buzón. Las entradas que no coinciden con el formato de mensaje se reportan como errores y se eliminan del archivo; los mensajes válidos aún se entregan.

244 244 

245Claude Code reporta un mensaje como enviado solo cuando la escritura en el archivo de buzón del destinatario tiene éxito, ya sea que el mensaje sea texto sin formato o un mensaje de protocolo estructurado como una aprobación de plan o una solicitud de cierre. Cuando la escritura falla, por ejemplo porque el disco está lleno o el directorio de buzón no es escribible, el agente que envía recibe un error y nada se envía. Consulte [No se pudo escribir en la bandeja de entrada de un compañero de equipo](https://code.claude.com/docs/es/errors.md#failed-to-write-to-a-teammate-inbox) para los mensajes de error y los pasos de recuperación.245Claude Code reporta un mensaje como enviado solo cuando la escritura en el archivo de buzón del destinatario tiene éxito, ya sea que el mensaje sea texto sin formato o un mensaje de protocolo estructurado como una aprobación de plan o una solicitud de cierre. Cuando la escritura falla, por ejemplo porque el disco está lleno o el directorio de buzón no es escribible, el agente que envía recibe un error y nada se envía. Consulta [No se pudo escribir en la bandeja de entrada de un compañero de equipo](https://code.claude.com/docs/es/errors.md#failed-to-write-to-a-teammate-inbox) para los mensajes de error y los pasos de recuperación.

246 246 

247Claude Code gestiona las dependencias de tareas automáticamente: cuando un compañero de equipo completa una tarea de la que otras tareas dependen, desbloquea las tareas dependientes sin ninguna acción de su parte.247Claude Code gestiona las dependencias de tareas automáticamente: cuando un compañero de equipo completa una tarea de la que otras tareas dependen, desbloquea las tareas dependientes sin ninguna acción de tu parte.

248 248 

249Los equipos y las tareas se almacenan localmente bajo un nombre derivado de la sesión. El nombre es `session-` seguido de los primeros ocho caracteres del ID de sesión:249Los equipos y las tareas se almacenan localmente bajo un nombre derivado de la sesión. El nombre es `session-` seguido de los primeros ocho caracteres del ID de sesión:

250 250 


253 253 

254Claude Code genera ambos automáticamente al inicio de la sesión y los actualiza a medida que los compañeros de equipo se unen, se quedan inactivos o se van.254Claude Code genera ambos automáticamente al inicio de la sesión y los actualiza a medida que los compañeros de equipo se unen, se quedan inactivos o se van.

255 255 

256La configuración del equipo contiene estado de tiempo de ejecución como IDs de sesión e IDs de panel tmux, por lo que no la edite manualmente ni la cree previamente: sus cambios se sobrescriben en la siguiente actualización de estado.256La configuración del equipo contiene estado de tiempo de ejecución como IDs de sesión e IDs de panel tmux, por lo que no la edites manualmente ni la crees previamente: tus cambios se sobrescriben en la siguiente actualización de estado.

257 257 

258Para definir roles de compañeros de equipo reutilizables, use [definiciones de subagentes](#use-subagent-definitions-for-teammates) en su lugar.258Para definir roles de compañeros de equipo reutilizables, usa [definiciones de subagentes](#use-subagent-definitions-for-teammates) en su lugar.

259 259 

260La configuración del equipo contiene un array `members` con el nombre y el ID de agente de cada miembro. La entrada del líder siempre lleva el tipo de agente `team-lead`. La entrada de un compañero de equipo lleva el tipo de agente que el líder nombró al generarlo, ya sea un [tipo integrado](https://code.claude.com/docs/es/sub-agents.md#built-in-subagents) o una [definición de subagente](#use-subagent-definitions-for-teammates), y omite el campo cuando el líder no nombró ninguno. Los compañeros de equipo pueden leer este archivo para descubrir otros miembros del equipo.260La configuración del equipo contiene un array `members` con el nombre y el ID de agente de cada miembro. La entrada del líder siempre lleva el tipo de agente `team-lead`. La entrada de un compañero de equipo lleva el tipo de agente que el líder nombró al generarlo, ya sea un [tipo integrado](https://code.claude.com/docs/es/sub-agents.md#built-in-subagents) o una [definición de subagente](#use-subagent-definitions-for-teammates), y omite el campo cuando el líder no nombró ninguno. Los compañeros de equipo pueden leer este archivo para descubrir otros miembros del equipo.

261 261 

262No hay equivalente a nivel de proyecto de la configuración del equipo. Un archivo como `.claude/teams/teams.json` en el directorio de su proyecto no se reconoce como configuración; Claude lo trata como un archivo ordinario.262No hay equivalente a nivel de proyecto de la configuración del equipo. Un archivo como `.claude/teams/teams.json` en el directorio de tu proyecto no se reconoce como configuración; Claude lo trata como un archivo ordinario.

263 263 

264### Usar definiciones de subagentes para compañeros de equipo264### Usar definiciones de subagentes para compañeros de equipo

265 265 

266Al generar un compañero de equipo en cualquier modo de visualización, puedes hacer referencia a un tipo de [subagente](https://code.claude.com/docs/es/sub-agents.md) del [alcance de subagente](https://code.claude.com/docs/es/sub-agents.md#choose-the-subagent-scope) de proyecto, usuario, administrado o de plugin. Esto te permite definir un rol una vez, como un security-reviewer o test-runner, y reutilizarlo tanto como un subagente delegado como un compañero de equipo de equipo de agentes.266Al generar un compañero de equipo en cualquier modo de visualización, puedes hacer referencia a un tipo de [subagente](https://code.claude.com/docs/es/sub-agents.md) del [alcance de subagente](https://code.claude.com/docs/es/sub-agents.md#choose-the-subagent-scope) de proyecto, usuario, administrado o de plugin. Esto te permite definir un rol una vez, como un security-reviewer o test-runner, y reutilizarlo tanto como un subagente delegado como un compañero de equipo de equipo de agentes.

267 267 

268Para usar una definición de subagente, nómbrela cuando pida a Claude que genere el compañero de equipo:268Para usar una definición de subagente, nómbrala cuando pidas a Claude que genere el compañero de equipo:

269 269 

270```text wrap theme={null}270```text wrap theme={null}

271Spawn a teammate using the security-reviewer agent type to audit the auth module.271Spawn a teammate using the security-reviewer agent type to audit the auth module.

272```272```

273 273 

274Claude Code lee la definición de subagente que nombró y aplica estas partes a ella al compañero de equipo. Donde una parte depende del [modo de visualización](#choose-a-display-mode) del compañero de equipo, la entrada lo dice:274Claude Code lee la definición de subagente que nombraste y aplica estas partes de ella al compañero de equipo. Donde una parte depende del [modo de visualización](#choose-a-display-mode) del compañero de equipo, la entrada lo indica:

275 275 

276* **`tools`**: Claude Code limita el compañero de equipo a las herramientas en la lista `tools` de la definición. Para un compañero de equipo en proceso, Claude Code agrega `SendMessage` a esa lista, y en una [sesión que tiene las herramientas Task](https://code.claude.com/docs/es/tools-reference.md#task-tool-availability) también agrega `TaskCreate`, `TaskGet`, `TaskList` y `TaskUpdate`.276* **`tools`**: Claude Code limita el compañero de equipo a las herramientas en la lista `tools` de la definición. Para un compañero de equipo en proceso, Claude Code agrega `SendMessage` a esa lista, y en una [sesión que tiene las herramientas Task](https://code.claude.com/docs/es/tools-reference.md#task-tool-availability) también agrega `TaskCreate`, `TaskGet`, `TaskList` y `TaskUpdate`.

277* **`model`**: Claude Code usa el `model` de la definición en cualquier modo de visualización cuando su solicitud de generación no nombra uno. Consulte [cómo Claude Code elige el modelo de un compañero de equipo](#specify-teammates-and-models).277* **`model`**: Claude Code usa el `model` de la definición en cualquier modo de visualización cuando tu prompt de generación no nombra uno. Consulta [cómo Claude Code elige el modelo de un compañero de equipo](#specify-teammates-and-models).

278* **`disallowedTools`**: para un compañero de equipo en proceso, Claude Code quita del conjunto del compañero de equipo las herramientas en el `disallowedTools` de la definición. `SendMessage` y las herramientas Task que agrega siguen disponibles incluso cuando la lista las nombra.278* **`disallowedTools`**: para un compañero de equipo en proceso, Claude Code quita del conjunto del compañero de equipo las herramientas en el `disallowedTools` de la definición. `SendMessage` y las herramientas Task que agrega siguen disponibles incluso cuando la lista las nombra.

279* **`effort`**: para un compañero de equipo en proceso, Claude Code aplica el [`effort`](https://code.claude.com/docs/es/sub-agents#supported-frontmatter-fields) de la definición según las [reglas de esfuerzo del frontmatter](https://code.claude.com/docs/es/model-config.md#set-the-effort-level).279* **`effort`**: para un compañero de equipo en proceso, Claude Code aplica el [`effort`](https://code.claude.com/docs/es/sub-agents#supported-frontmatter-fields) de la definición según las [reglas de esfuerzo del frontmatter](https://code.claude.com/docs/es/model-config.md#set-the-effort-level).

280* **`autoCompactWindow`**: para un compañero de equipo en proceso, Claude Code aplica el [`autoCompactWindow`](https://code.claude.com/docs/es/sub-agents#supported-frontmatter-fields) de la definición según [las reglas de ese campo](https://code.claude.com/docs/es/sub-agents.md#subagent-auto-compact-window). Un compañero de equipo de panel dividido ignora el campo. Requiere Claude Code v2.1.296 o posterior.280* **`autoCompactWindow`**: para un compañero de equipo en proceso, Claude Code aplica el [`autoCompactWindow`](https://code.claude.com/docs/es/sub-agents#supported-frontmatter-fields) de la definición según [las reglas de ese campo](https://code.claude.com/docs/es/sub-agents.md#subagent-auto-compact-window). Un compañero de equipo de panel dividido ignora el campo. Requiere Claude Code v2.1.296 o posterior.

281* **Body**: para un compañero de equipo en proceso, Claude Code agrega el cuerpo de la definición a su solicitud de sistema predeterminada como instrucciones adicionales. Para un compañero de equipo de panel dividido, Claude Code usa el cuerpo en lugar de su solicitud de sistema predeterminada.281* **Body**: para un compañero de equipo en proceso, Claude Code agrega el cuerpo de la definición a su prompt del sistema predeterminado como instrucciones adicionales. Para un compañero de equipo de panel dividido, Claude Code usa el cuerpo en lugar de su prompt del sistema predeterminado.

282* **`skills`**: Claude Code no aplica los `skills` de la definición a un compañero de equipo en ningún modo de visualización. El compañero de equipo carga skills de su configuración de proyecto y usuario.282* **`skills`**: Claude Code no aplica los `skills` de la definición a un compañero de equipo en ningún modo de visualización. El compañero de equipo carga skills de tu configuración de proyecto y usuario.

283* **`mcpServers`**: para un compañero de equipo de panel dividido, Claude Code aplica el `mcpServers` de la definición bajo las [reglas para ese campo](https://code.claude.com/docs/es/sub-agents.md#scope-mcp-servers-to-a-subagent), que cubren una sesión iniciada con `--agent` también. Un compañero de equipo en proceso ignora el campo y carga servidores MCP de su configuración de proyecto y usuario.283* **`mcpServers`**: para un compañero de equipo de panel dividido, Claude Code aplica el `mcpServers` de la definición según las [reglas para ese campo](https://code.claude.com/docs/es/sub-agents.md#scope-mcp-servers-to-a-subagent), que también cubren una sesión iniciada con `--agent`. Un compañero de equipo en proceso ignora el campo y carga servidores MCP de tu configuración de proyecto y usuario.

284 284 

285Cuando Claude envía un mensaje a un compañero de equipo en proceso que ya no se está ejecutando, Claude Code lo trae de vuelta en la misma sesión, restaura cualquier conversación guardada para él, y le da el mensaje como su siguiente solicitud. Después de reanudar una sesión, los compañeros de equipo no se traen de vuelta de esta manera, según [la limitación de reanudación](#limitations).285Cuando Claude envía un mensaje a un compañero de equipo en proceso que ya no se está ejecutando, Claude Code lo trae de vuelta en la misma sesión, restaura cualquier conversación guardada para él y le da el mensaje como su siguiente prompt. Después de reanudar una sesión, los compañeros de equipo no se traen de vuelta de esta manera, según [la limitación de reanudación](#limitations).

286 286 

287Para un compañero de equipo que trae de vuelta, Claude Code vuelve a aplicar una definición que provino del directorio `.claude/agents/` de un proyecto o un directorio `--add-dir` solo si ha [confiado en la carpeta en la que se encuentra el archivo del agente](https://code.claude.com/docs/es/permissions.md#what-runs-before-you-trust-a-folder). Confiar en una carpeta principal no cuenta. Hasta entonces, el compañero de equipo vuelve sin ninguna de las herramientas o instrucciones de la definición, manteniendo solo las herramientas que Claude Code agrega a cada compañero de equipo en proceso. Consulte [la definición del agente del compañero de equipo no fue restaurada](https://code.claude.com/docs/es/errors.md#teammate-agent-definition-not-restored) para el texto del aviso.287Para un compañero de equipo que trae de vuelta, Claude Code vuelve a aplicar una definición que provino del directorio `.claude/agents/` de un proyecto o de un directorio `--add-dir` solo si has [confiado en la carpeta en la que se encuentra el archivo del agente](https://code.claude.com/docs/es/permissions.md#what-runs-before-you-trust-a-folder). Confiar en una carpeta principal no cuenta. Hasta entonces, el compañero de equipo vuelve sin ninguna de las herramientas o instrucciones de la definición, manteniendo solo las herramientas que Claude Code agrega a cada compañero de equipo en proceso. Consulta [la definición del agente del compañero de equipo no fue restaurada](https://code.claude.com/docs/es/errors.md#teammate-agent-definition-not-restored) para el texto del aviso.

288 288 

289### Permisos289### Permisos

290 290 


307 307 

308#### Mensajes entre agentes308#### Mensajes entre agentes

309 309 

310Cuando un agente envía a otro un mensaje sobre `SendMessage`, Claude Code le dice al agente receptor que el mensaje provino de otra sesión de Claude, no de usted. Un compañero de equipo no puede aprobar un aviso de permiso o proporcionar consentimiento en su nombre, y un compañero de equipo al que se le negó una acción no puede retransmitirla a otro compañero de equipo para eludir la verificación. Las mismas reglas se aplican a un mensaje que llega de [una de sus otras sesiones de Claude Code](https://code.claude.com/docs/es/cross-session-messaging.md#how-a-session-treats-an-incoming-message), fuera del equipo completamente.310Cuando un agente envía a otro un mensaje mediante `SendMessage`, Claude Code le dice al agente receptor que el mensaje provino de otra sesión de Claude, no de ti. Un compañero de equipo no puede aprobar una solicitud de permiso ni proporcionar consentimiento en tu nombre, y un compañero de equipo al que se le negó una acción no puede retransmitirla a otro compañero de equipo para eludir la verificación. Las mismas reglas se aplican a un mensaje que llega de [una de tus otras sesiones de Claude Code](https://code.claude.com/docs/es/cross-session-messaging.md#how-a-session-treats-an-incoming-message), completamente fuera del equipo.

311 311 

312En [modo auto](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode), el clasificador aplica dos verificaciones a los mensajes entre agentes:312En [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode), el clasificador aplica dos verificaciones a los mensajes entre agentes:

313 313 

314* Trata una afirmación de aprobación retransmitida de otro agente como entrada no confiable en lugar de confirmación de usted.314* Trata una afirmación de aprobación retransmitida de otro agente como entrada no confiable en lugar de confirmación tuya.

315* Revisa cada mensaje antes de que Claude Code lo entregue, ya sea un mensaje simple o un mensaje de protocolo estructurado como una solicitud de cierre o una respuesta de aprobación de plan. Un mensaje que bloquea nunca llega al destinatario.315* Revisa cada mensaje antes de que Claude Code lo entregue, ya sea un mensaje simple o un mensaje de protocolo estructurado como una solicitud de cierre o una respuesta de aprobación de plan. Un mensaje que bloquea nunca llega al destinatario.

316 316 

317### Contexto y comunicación317### Contexto y comunicación

318 318 

319Cada compañero de equipo tiene su propia ventana de contexto. Cuando se genera, un compañero de equipo carga el mismo contexto de proyecto que una sesión regular: CLAUDE.md, servidores MCP y skills. Si inicia el líder con [`--setting-sources`](https://code.claude.com/docs/es/cli-reference#cli-flags), los compañeros de equipo cargan desde la misma lista restringida de fuentes. Antes de v2.1.281, los compañeros de equipo de [panel dividido](#choose-a-display-mode) cargaban cada fuente de configuración.319Cada compañero de equipo tiene su propia ventana de contexto. Cuando se genera, un compañero de equipo carga el mismo contexto de proyecto que una sesión regular: CLAUDE.md, servidores MCP y skills. Si inicias el líder con [`--setting-sources`](https://code.claude.com/docs/es/cli-reference#cli-flags), los compañeros de equipo cargan desde la misma lista restringida de fuentes. Antes de v2.1.281, los compañeros de equipo de [panel dividido](#choose-a-display-mode) cargaban cada fuente de configuración.

320 320 

321Un compañero de equipo también recibe la solicitud de generación del líder. El historial de conversación del líder no se transfiere.321Un compañero de equipo también recibe el prompt de generación del líder. El historial de conversación del líder no se transfiere.

322 322 

323**Cómo los compañeros de equipo comparten información:**323**Cómo los compañeros de equipo comparten información:**

324 324 

325* **Entrega automática de mensajes**: cuando los compañeros de equipo envían mensajes, se entregan automáticamente a los destinatarios. El líder no necesita sondear actualizaciones.325* **Entrega automática de mensajes**: cuando los compañeros de equipo envían mensajes, se entregan automáticamente a los destinatarios. El líder no necesita sondear actualizaciones.

326* **Notificaciones de inactividad**: cuando un compañero de equipo termina y se detiene, notifica automáticamente al líder e incluye su respuesta final en la notificación. Un compañero de equipo cuyo turno termina en un error de API notifica al líder que falló e incluye el texto del error.326* **Notificaciones de inactividad**: cuando un compañero de equipo termina y se detiene, notifica automáticamente al líder e incluye su respuesta final en la notificación. Un compañero de equipo cuyo turno termina en un error de API notifica al líder que falló e incluye el texto del error.

327* **Lista de tareas compartida**: [agentes que tienen las herramientas Task](https://code.claude.com/docs/es/tools-reference.md#task-tool-availability) pueden ver el estado de la tarea y reclamar trabajo disponible.327* **Lista de tareas compartida**: los [agentes que tienen las herramientas Task](https://code.claude.com/docs/es/tools-reference.md#task-tool-availability) pueden ver el estado de las tareas y reclamar trabajo disponible.

328* **Mensajería de compañero de equipo**: envíe un mensaje a un compañero de equipo específico por nombre. Para llegar a todos, envíe un mensaje por destinatario.328* **Mensajería de compañero de equipo**: envía un mensaje a un compañero de equipo específico por nombre. Para llegar a todos, envía un mensaje por destinatario.

329 329 

330El líder asigna a cada compañero de equipo un nombre cuando los genera, y cualquier compañero de equipo puede enviar un mensaje a cualquier otro por ese nombre. Para obtener nombres predecibles que pueda referenciar en solicitudes posteriores, dígale al líder cómo llamar a cada compañero de equipo en su instrucción de generación.330El líder asigna a cada compañero de equipo un nombre cuando los genera, y cualquier compañero de equipo puede enviar un mensaje a cualquier otro por ese nombre. Para obtener nombres predecibles que puedas referenciar en prompts posteriores, dile al líder cómo llamar a cada compañero de equipo en tu instrucción de generación.

331 331 

332### Uso de tokens332### Uso de tokens

333 333 

334Los equipos de agentes usan significativamente más tokens que una sesión única. Cada compañero de equipo tiene su propia ventana de contexto, y el uso de tokens se escala con el número de compañeros de equipo activos. Para investigación, revisión y trabajo de nuevas características, los tokens adicionales generalmente valen la pena. Para tareas rutinarias, una sesión única es más rentable. Consulte [costos de tokens de equipo de agentes](https://code.claude.com/docs/es/costs.md#agent-team-token-costs) para orientación de uso.334Los equipos de agentes usan significativamente más tokens que una sesión única. Cada compañero de equipo tiene su propia ventana de contexto, y el uso de tokens escala con el número de compañeros de equipo activos. Para investigación, revisión y trabajo de nuevas características, los tokens adicionales generalmente valen la pena. Para tareas habituales, una sesión única es más rentable. Consulta [costos de tokens de equipo de agentes](https://code.claude.com/docs/es/costs.md#agent-team-token-costs) para orientación de uso.

335 335 

336Las solicitudes de un compañero de equipo en proceso caen fuera del [bucket TTL de cache](https://code.claude.com/docs/es/prompt-caching.md#which-ttl-each-request-gets) de la conversación principal, por lo que su cache se mantiene durante cinco minutos por defecto, incluso en una suscripción de Claude. Para mantenerlo durante una hora, establezca [`subagentPromptCacheTtl`](https://code.claude.com/docs/es/settings-reference#subagentpromptcachettl) en `1h`. La API factura escrituras de cache de una hora a una tasa más alta.336Las solicitudes de un compañero de equipo en proceso quedan fuera del [bucket de TTL de caché](https://code.claude.com/docs/es/prompt-caching.md#which-ttl-each-request-gets) de la conversación principal, por lo que su caché se mantiene durante cinco minutos por defecto, incluso en una suscripción de Claude. Para mantenerla durante una hora, establece [`subagentPromptCacheTtl`](https://code.claude.com/docs/es/settings-reference#subagentpromptcachettl) en `1h`. La API factura las escrituras de caché de una hora a una tarifa más alta.

337 337 

338## Ejemplos de casos de uso338## Ejemplos de casos de uso

339 339 

agent-view.md +0 −2

Details

892 892 

893El comando también advierte cuando el supervisor en ejecución está en una versión diferente a la de `claude` que invocaste, lo que sucede después de una actualización en la que el supervisor aún no se ha reiniciado. La advertencia muestra ambas versiones y te indica que ejecutes `claude daemon stop --any` para adoptar la nueva versión.893El comando también advierte cuando el supervisor en ejecución está en una versión diferente a la de `claude` que invocaste, lo que sucede después de una actualización en la que el supervisor aún no se ha reiniciado. La advertencia muestra ambas versiones y te indica que ejecutes `claude daemon stop --any` para adoptar la nueva versión.

894 894 

895Las sesiones sobreviven intactas a ese desajuste de versión: una versión anterior de Claude Code que actualiza el `state.json` de una sesión preserva campos que no reconoce y mantiene la sesión listada. La lista de sesiones en `roster.json` sigue la misma regla, por lo que las sesiones iniciadas por la versión más nueva permanecen accesibles y continúan aceptando entrada después de que el supervisor se reinicia.

896 

897### Desactivar la vista de agentes895### Desactivar la vista de agentes

898 896 

899Para desactivar completamente los agentes en segundo plano y la vista de agentes, establece el [ajuste](https://code.claude.com/docs/es/settings.md) `disableAgentView` en `true` o establece la variable de entorno `CLAUDE_CODE_DISABLE_AGENT_VIEW`. Los administradores pueden aplicar esto a través de la [configuración administrada](https://code.claude.com/docs/es/managed-settings.md).897Para desactivar completamente los agentes en segundo plano y la vista de agentes, establece el [ajuste](https://code.claude.com/docs/es/settings.md) `disableAgentView` en `true` o establece la variable de entorno `CLAUDE_CODE_DISABLE_AGENT_VIEW`. Los administradores pueden aplicar esto a través de la [configuración administrada](https://code.claude.com/docs/es/managed-settings.md).

Details

367| `ap-*` | `apac.` |367| `ap-*` | `apac.` |

368| Todas las demás regiones | `global.` |368| Todas las demás regiones | `global.` |

369 369 

370Establezca `ANTHROPIC_BEDROCK_REGION_PREFIX` para elegir el prefijo que Claude Code intenta primero; cuando Claude Code puede verificar la disponibilidad del perfil y no encuentra un perfil coincidente para un modelo, recurre como se describe en el orden de resolución a continuación. Los valores válidos son `us`, `eu`, `apac`, `jp`, `au` y `global`. Por ejemplo, establézcalo en `global` cuando su cuenta tiene perfiles `global.` habilitados pero Claude Code derivaría uno específico de la geografía desde su región de AWS. Requiere Claude Code v2.1.224 o posterior.370Establece `ANTHROPIC_BEDROCK_REGION_PREFIX` para elegir el prefijo que Claude Code intenta primero. Los valores válidos son `us`, `eu`, `apac`, `jp`, `au` y `global`. Por ejemplo, establécelo en `global` cuando tu cuenta tiene perfiles `global.` habilitados pero Claude Code derivaría uno específico de la geografía desde tu región de AWS.

371 371 

372Este ejemplo enruta los modelos predeterminados a través de perfiles `global.`:372Este ejemplo enruta los modelos predeterminados a través de perfiles `global.`:

373 373 

artifacts.md +3 −2

Details

64| :- | :- |64| :- | :- |

65| La sesión está en [modo plan](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode) | Pregunta antes de la primera publicación de cada artefacto |65| La sesión está en [modo plan](https://code.claude.com/docs/es/permission-modes.md#analyze-before-you-edit-with-plan-mode) | Pregunta antes de la primera publicación de cada artefacto |

66| La publicación declara capacidades de tiempo de ejecución para la página, como [llamadas de conector](#pull-live-data-with-mcp-connectors) o [descargas de archivos](#offer-a-file-download) | Pregunta antes de esa publicación |66| La publicación declara capacidades de tiempo de ejecución para la página, como [llamadas de conector](#pull-live-data-with-mcp-connectors) o [descargas de archivos](#offer-a-file-download) | Pregunta antes de esa publicación |

67| Compartiste el artefacto públicamente | Pregunta una vez por conversación antes de cambiarlo |67| Compartiste el artefacto públicamente | Pregunta una vez por conversación antes de cambiarlo, y antes de cada respuesta a un comentario sobre él |

68| Claude publica en un turno que inició una [tarea programada con alcance de sesión](https://code.claude.com/docs/es/scheduled-tasks.md) ejecutada en tu sesión, en lugar de un prompt que escribiste | Pregunta antes de la primera publicación de cada artefacto |68| Claude publica en un turno que inició una [tarea programada con alcance de sesión](https://code.claude.com/docs/es/scheduled-tasks.md) ejecutada en tu sesión, en lugar de un prompt que escribiste | Pregunta antes de la primera publicación de cada artefacto |

69| Claude no puede leer el archivo sin tu aprobación | Pregunta antes de publicarlo. Una regla de permiso para la herramienta `Artifact` no omite esta solicitud |69| Claude no puede leer el archivo sin tu aprobación | Pregunta antes de publicarlo. Una regla de permiso para la herramienta `Artifact` no omite esta solicitud |

70| En modo [Manual](https://code.claude.com/docs/es/permission-modes.md) o `acceptEdits`, Claude hace un pequeño cambio en el archivo de un artefacto que no puede editar sin tu aprobación, como un archivo del proyecto en modo Manual | Pregunta antes de publicar el cambio. Se te pregunta incluso si una regla de permiso cubre la herramienta `Artifact`, porque la edición del archivo necesita tu aprobación |70| En modo [Manual](https://code.claude.com/docs/es/permission-modes.md) o `acceptEdits`, Claude hace un pequeño cambio en el archivo de un artefacto que no puede editar sin tu aprobación, como un archivo del proyecto en modo Manual | Pregunta antes de publicar el cambio. Se te pregunta incluso si una regla de permiso cubre la herramienta `Artifact`, porque la edición del archivo necesita tu aprobación |


111Con quién puede compartir depende de su plan:111Con quién puede compartir depende de su plan:

112 112 

113* **Dentro de su organización**: en los planes Team y Enterprise, otorgue acceso a personas específicas en su organización, o a todos en ella. Los espectadores inician sesión en claude.ai como miembros de su organización para ver la página.113* **Dentro de su organización**: en los planes Team y Enterprise, otorgue acceso a personas específicas en su organización, o a todos en ella. Los espectadores inician sesión en claude.ai como miembros de su organización para ver la página.

114* **Personas con acceso a una carpeta compartida**: en los planes Team y Enterprise, mueve el artefacto a una carpeta de la que seas propietario o editor. Muévelo desde la [página de artefactos](https://claude.ai/artifacts), que está disponible si puedes usar el chat de claude.ai. Así, todos los que tengan acceso a la carpeta podrán abrirlo, y el propietario y los editores de la carpeta podrán modificarlo.

114* **Públicamente**: comparta un enlace que cualquiera en internet pueda abrir, sin necesidad de iniciar sesión en claude.ai. En los planes Team y Enterprise, el uso compartido público está desactivado hasta que un propietario [lo habilite para la organización](#control-public-sharing).115* **Públicamente**: comparta un enlace que cualquiera en internet pueda abrir, sin necesidad de iniciar sesión en claude.ai. En los planes Team y Enterprise, el uso compartido público está desactivado hasta que un propietario [lo habilite para la organización](#control-public-sharing).

115 116 

116### Enlazar a una vista específica117### Enlazar a una vista específica


178Su [modo de permiso](https://code.claude.com/docs/es/permission-modes.md) decide qué hace Claude cuando llega un comentario enviado:179Su [modo de permiso](https://code.claude.com/docs/es/permission-modes.md) decide qué hace Claude cuando llega un comentario enviado:

179 180 

180* **Claude responde por su cuenta**: si estás en un modo de permisos que permite que Claude publique la respuesta sin preguntarte, Claude lee el hilo y responde. Ves `Auto-replied to comment thread on Artifact: <name>`.181* **Claude responde por su cuenta**: si estás en un modo de permisos que permite que Claude publique la respuesta sin preguntarte, Claude lee el hilo y responde. Ves `Auto-replied to comment thread on Artifact: <name>`.

181* **Claude espera por usted**: fuera del Plan Mode, cuando publicar la respuesta necesitaría su aprobación, usted ve `Comments are waiting on Artifact: <name>`. Claude entonces le pide aprobación para leer el hilo, y nuevamente para publicar la respuesta.182* **Claude te espera**: fuera del modo plan, cuando publicar la respuesta [necesitaría tu aprobación](#when-claude-code-asks-before-publishing), ves `Comments are waiting on Artifact: <name>`. Claude entonces te pide aprobación para leer el hilo, y nuevamente para publicar la respuesta.

182* **Claude pausa en Plan Mode**: usted ve `Comments are waiting on Artifact: <name>`, y Claude no responde hasta que salga del Plan Mode y le pida que lea y responda.183* **Claude pausa en Plan Mode**: usted ve `Comments are waiting on Artifact: <name>`, y Claude no responde hasta que salga del Plan Mode y le pida que lea y responda.

183 184 

184Claude también deja de responder por su cuenta a un artefacto después de manejar 60 comentarios enviados o activaciones de hilos en ese artefacto dentro de una hora. Usted ve `Comments are waiting on Artifact: <name>` una vez, y Claude retoma cuando los comentarios de esa hora envejecen.185Claude también deja de responder por su cuenta a un artefacto después de manejar 60 comentarios enviados o activaciones de hilos en ese artefacto dentro de una hora. Usted ve `Comments are waiting on Artifact: <name>` una vez, y Claude retoma cuando los comentarios de esa hora envejecen.

Details

34* **Solicitudes**: para dejar pasar las comprobaciones, el gateway reenvía sin cambios tanto el encabezado `anthropic-beta` como el campo del cuerpo `safeguards`, porque [ambos viajan como un par](https://code.claude.com/docs/es/llm-gateway-protocol.md#beta-header-and-body-field-pairs). En el [formato InvokeModel de Amazon Bedrock](https://code.claude.com/docs/es/llm-gateway-protocol.md#api-formats), reenvía el campo del cuerpo `anthropic_beta` en lugar del encabezado.34* **Solicitudes**: para dejar pasar las comprobaciones, el gateway reenvía sin cambios tanto el encabezado `anthropic-beta` como el campo del cuerpo `safeguards`, porque [ambos viajan como un par](https://code.claude.com/docs/es/llm-gateway-protocol.md#beta-header-and-body-field-pairs). En el [formato InvokeModel de Amazon Bedrock](https://code.claude.com/docs/es/llm-gateway-protocol.md#api-formats), reenvía el campo del cuerpo `anthropic_beta` en lugar del encabezado.

35* **Respuestas**: el gateway devuelve las respuestas y los eventos de streaming sin descartar campos ni reescribir los IDs de uso de herramientas. Para dejar pasar los resultados de las comprobaciones, conserva el campo `safeguard_results`.35* **Respuestas**: el gateway devuelve las respuestas y los eventos de streaming sin descartar campos ni reescribir los IDs de uso de herramientas. Para dejar pasar los resultados de las comprobaciones, conserva el campo `safeguard_results`.

36 36 

37Un gateway que pasa el tráfico de esta manera sigue funcionando con esta característica y con las futuras. Las nuevas sesiones vuelven entonces a utilizar las comprobaciones del servidor.37Una vez que tu gateway haga esto, las nuevas sesiones vuelven a utilizar las comprobaciones del servidor.

38 38 

39Si ya sabe que su puerta de enlace no puede proporcionar las comprobaciones del servidor, indique a Claude Code que no las solicite allí estableciendo `CLAUDE_CODE_AUTO_MODE_SERVER` en `0` antes de iniciar la sesión, en su shell o en la [clave de configuración `env`](https://code.claude.com/docs/es/settings-reference#env):39Si ya sabe que su puerta de enlace no puede proporcionar las comprobaciones del servidor, indique a Claude Code que no las solicite allí estableciendo `CLAUDE_CODE_AUTO_MODE_SERVER` en `0` antes de iniciar la sesión, en su shell o en la [clave de configuración `env`](https://code.claude.com/docs/es/settings-reference#env):

40 40 

Details

213 tools: {}, // omite para canales unidireccionales213 tools: {}, // omite para canales unidireccionales

214 },214 },

215 // Claude Code lo entrega a Claude como contexto cuando el servidor se conecta, para que sepa cómo manejar sus eventos215 // Claude Code lo entrega a Claude como contexto cuando el servidor se conecta, para que sepa cómo manejar sus eventos

216 instructions: 'Los mensajes llegan como <channel source="your-channel" ...>. Responda con la herramienta de respuesta.',216 instructions: 'Messages arrive as <channel source="your-channel" ...>. Reply with the reply tool.',

217 },217 },

218)218)

219```219```


286mcp.setRequestHandler(ListToolsRequestSchema, async () => ({286mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

287 tools: [{287 tools: [{

288 name: 'reply',288 name: 'reply',

289 description: 'Enviar un mensaje de vuelta a través de este canal',289 description: 'Send a message back over this channel',

290 // inputSchema le dice a Claude qué argumentos pasar290 // inputSchema le dice a Claude qué argumentos pasar

291 inputSchema: {291 inputSchema: {

292 type: 'object',292 type: 'object',

293 properties: {293 properties: {

294 chat_id: { type: 'string', description: 'La conversación en la que responder' },294 chat_id: { type: 'string', description: 'The conversation to reply in' },

295 text: { type: 'string', description: 'El mensaje a enviar' },295 text: { type: 'string', description: 'The message to send' },

296 },296 },

297 required: ['chat_id', 'text'],297 required: ['chat_id', 'text'],

298 },298 },


317Actualiza la cadena `instructions` en tu constructor `Server` para que Claude sepa enrutar las respuestas de vuelta a través de la herramienta. Este ejemplo le dice a Claude que pase `chat_id` desde la etiqueta entrante:317Actualiza la cadena `instructions` en tu constructor `Server` para que Claude sepa enrutar las respuestas de vuelta a través de la herramienta. Este ejemplo le dice a Claude que pase `chat_id` desde la etiqueta entrante:

318 318 

319```ts theme={null}319```ts theme={null}

320instructions: 'Los mensajes llegan como <channel source="webhook" chat_id="...">. Responde con la herramienta de respuesta, pasando el chat_id de la etiqueta.'320instructions: 'Messages arrive as <channel source="webhook" chat_id="...">. Reply with the reply tool, passing the chat_id from the tag.'

321```321```

322 322 

323Aquí está el `webhook.ts` completo con soporte bidireccional. Las respuestas salientes se transmiten a través de `GET /events` usando [Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) (SSE), por lo que `curl -N localhost:8788/events` puede verlas en vivo; el chat entrante llega en `POST /`:323Aquí está el `webhook.ts` completo con soporte bidireccional. Las respuestas salientes se transmiten a través de `GET /events` usando [Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) (SSE), por lo que `curl -N localhost:8788/events` puede verlas en vivo; el chat entrante llega en `POST /`:

324 324 

325```ts title="webhook.ts completo con herramienta de respuesta' expandable theme={null}325```ts title="webhook.ts completo con herramienta de respuesta" expandable theme={null}

326#!/usr/bin/env bun326#!/usr/bin/env bun

327import { Server } from '@modelcontextprotocol/sdk/server/index.js'327import { Server } from '@modelcontextprotocol/sdk/server/index.js'

328import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'328import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'


343 experimental: { 'claude/channel': {} },343 experimental: { 'claude/channel': {} },

344 tools: {},344 tools: {},

345 },345 },

346 instructions: 'Los mensajes llegan como <channel source="webhook" chat_id="...">. Responde con la herramienta de respuesta, pasando el chat_id de la etiqueta.',346 instructions: 'Messages arrive as <channel source="webhook" chat_id="...">. Reply with the reply tool, passing the chat_id from the tag.',

347 },347 },

348)348)

349 349 

350mcp.setRequestHandler(ListToolsRequestSchema, async () => ({350mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

351 tools: [{351 tools: [{

352 name: 'reply',352 name: 'reply',

353 description: 'Enviar un mensaje de vuelta a través de este canal',353 description: 'Send a message back over this channel',

354 inputSchema: {354 inputSchema: {

355 type: 'object',355 type: 'object',

356 properties: {356 properties: {

357 chat_id: { type: 'string', description: 'La conversación en la que responder' },357 chat_id: { type: 'string', description: 'The conversation to reply in' },

358 text: { type: 'string', description: 'El mensaje a enviar' },358 text: { type: 'string', description: 'The message to send' },

359 },359 },

360 required: ['chat_id', 'text'],360 required: ['chat_id', 'text'],

361 },361 },


627 tools: {},627 tools: {},

628 },628 },

629 instructions:629 instructions:

630 'Los mensajes llegan como <channel source="webhook" chat_id="...">. ' +630 'Messages arrive as <channel source="webhook" chat_id="...">. ' +

631 'Responde con la herramienta de respuesta, pasando el chat_id de la etiqueta.',631 'Reply with the reply tool, passing the chat_id from the tag.',

632 },632 },

633)633)

634 634 


636mcp.setRequestHandler(ListToolsRequestSchema, async () => ({636mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

637 tools: [{637 tools: [{

638 name: 'reply',638 name: 'reply',

639 description: 'Enviar un mensaje de vuelta a través de este canal',639 description: 'Send a message back over this channel',

640 inputSchema: {640 inputSchema: {

641 type: 'object',641 type: 'object',

642 properties: {642 properties: {

643 chat_id: { type: 'string', description: 'La conversación en la que responder' },643 chat_id: { type: 'string', description: 'The conversation to reply in' },

644 text: { type: 'string', description: 'El mensaje a enviar' },644 text: { type: 'string', description: 'The message to send' },

645 },645 },

646 required: ['chat_id', 'text'],646 required: ['chat_id', 'text'],

647 },647 },

Details

205* **Usando `/teleport`**: dentro de una sesión de CLI existente, ejecute `/teleport` o `/tp` para abrir el mismo selector de sesión sin reiniciar Claude Code.205* **Usando `/teleport`**: dentro de una sesión de CLI existente, ejecute `/teleport` o `/tp` para abrir el mismo selector de sesión sin reiniciar Claude Code.

206* **Desde `/tasks`**: ejecute `/tasks` para ver sus sesiones de fondo, luego presione `t` para teleportarse a una.206* **Desde `/tasks`**: ejecute `/tasks` para ver sus sesiones de fondo, luego presione `t` para teleportarse a una.

207* **Desde claude.ai/code**: seleccione **Abrir en > Terminal** desde el menú de sesión para copiar un comando que puede pegar en su terminal.207* **Desde claude.ai/code**: seleccione **Abrir en > Terminal** desde el menú de sesión para copiar un comando que puede pegar en su terminal.

208* **Desde dentro de la sesión en la nube**: escriba `/teleport` y Claude Code responde con el comando exacto `claude --teleport <session-id>` para esa sesión, listo para ejecutar desde un checkout del repositorio. Requiere Claude Code v2.1.223 o posterior en el entorno de la sesión.208* **Desde dentro de la sesión en la nube**: escribe `/teleport` y Claude Code responde con el comando exacto `claude --teleport <session-id>` para esa sesión, listo para ejecutar desde un checkout del repositorio.

209 209 

210Cuando teleportas una sesión, Claude verifica que estés en el repositorio correcto, obtiene la rama de la sesión en la nube y hace checkout de ella, y carga la conversación en tu terminal.210Cuando teleportas una sesión, Claude verifica que estés en el repositorio correcto, obtiene la rama de la sesión en la nube y hace checkout de ella, y carga la conversación en tu terminal.

211 211 


499* **Autenticación de repositorio**: solo puede extraer una sesión en la nube a su terminal cuando está autenticado en la misma cuenta499* **Autenticación de repositorio**: solo puede extraer una sesión en la nube a su terminal cuando está autenticado en la misma cuenta

500* **Restricciones de plataforma**: la clonación de repositorios en entornos alojados por Anthropic y la creación de pull requests requieren GitHub. Las instancias autohospedadas de [GitHub Enterprise Server](https://code.claude.com/docs/es/github-enterprise-server.md) son compatibles con planes de Team y Enterprise. Puedes enviar un repositorio de GitLab, Bitbucket u otro que no sea GitHub a una sesión en la nube como un [paquete local](#send-local-repositories-without-github) estableciendo `CCR_FORCE_BUNDLE=1`, pero la sesión no puede enviar resultados de vuelta a ese remoto500* **Restricciones de plataforma**: la clonación de repositorios en entornos alojados por Anthropic y la creación de pull requests requieren GitHub. Las instancias autohospedadas de [GitHub Enterprise Server](https://code.claude.com/docs/es/github-enterprise-server.md) son compatibles con planes de Team y Enterprise. Puedes enviar un repositorio de GitLab, Bitbucket u otro que no sea GitHub a una sesión en la nube como un [paquete local](#send-local-repositories-without-github) estableciendo `CCR_FORCE_BUNDLE=1`, pero la sesión no puede enviar resultados de vuelta a ese remoto

501 * **Entornos autohospedados**: para un repositorio en otro host de Git, consulta los [requisitos para iniciar una sesión con `--environment`](https://code.claude.com/docs/es/self-hosted-environments-deploy#start-a-session-on-a-repository-outside-github).501 * **Entornos autohospedados**: para un repositorio en otro host de Git, consulta los [requisitos para iniciar una sesión con `--environment`](https://code.claude.com/docs/es/self-hosted-environments-deploy#start-a-session-on-a-repository-outside-github).

502* **Lista de permitidos de IP de la organización**: las sesiones en la nube llaman a la API de Anthropic desde infraestructura administrada por Anthropic, no desde tu red, mientras que las sesiones en un [entorno autohospedado](https://code.claude.com/docs/es/self-hosted-environments) la llaman desde tu propia red. Si tu organización tiene habilitada la [lista de permitidos de IP](https://support.claude.com/en/articles/13200993-restrict-access-to-claude-with-ip-allowlisting), cada sesión en la nube alojada por Anthropic falla con un error de autenticación.

503 * **Code Review y tareas programadas**: lo mismo se aplica a [Code Review](https://code.claude.com/docs/es/code-review.md) y a las [tareas programadas en la nube](https://code.claude.com/docs/es/routines.md) que se ejecutan en entornos alojados por Anthropic. Una tarea programada enrutada a un entorno autohospedado llama a la API desde tu propia red.

504 * **Obtener una exención**: contacta al [soporte de Anthropic](https://support.claude.com/) para eximir los servicios alojados por Anthropic de la lista de permitidos de IP de tu organización.

505 502 

506## Recursos relacionados503## Recursos relacionados

507 504 

claude-projects.md +24 −26

Details

20 20 

21* **Envíe trabajo a un solo lugar**: pegue un informe de error, un seguimiento de pila o una lista de tareas en la conversación cada vez que surja uno. Claude comienza un hilo para cada pieza de trabajo o lo pasa al hilo que ya está trabajando en esa área, y responde preguntas rápidas en su lugar.21* **Envíe trabajo a un solo lugar**: pegue un informe de error, un seguimiento de pila o una lista de tareas en la conversación cada vez que surja uno. Claude comienza un hilo para cada pieza de trabajo o lo pasa al hilo que ya está trabajando en esa área, y responde preguntas rápidas en su lugar.

22* **Establezca el contexto una sola vez**: cada nuevo hilo comienza con las instrucciones del proyecto, por lo que una regla que establezca una sola vez, como qué rama dirigirse, llega a todos ellos.22* **Establezca el contexto una sola vez**: cada nuevo hilo comienza con las instrucciones del proyecto, por lo que una regla que establezca una sola vez, como qué rama dirigirse, llega a todos ellos.

23* **Aléjese y regrese al trabajo terminado**: cuando regrese una hora después o a la mañana siguiente, el panel **Overview** muestra qué hilos terminaron, qué solicitudes de extracción están listas para revisión y qué hilo está esperando su respuesta.23* **Aléjate y vuelve al trabajo terminado**: el panel Overview muestra qué hilos terminaron, qué pull requests están listos para revisión y qué hilo está esperando tu respuesta.

24 24 

25Si ya sabe el trabajo que desea que un proyecto ejecute, vaya directamente a [Crear un proyecto](#create-a-project).25Si ya sabe el trabajo que desea que un proyecto ejecute, vaya directamente a [Crear un proyecto](#create-a-project).

26 26 


28 28 

29Vale la pena crear un proyecto cuando el trabajo tiene un objetivo que perdura más allá de una sesión y sigue produciendo tareas. Estos tipos de trabajo se adaptan bien a un proyecto:29Vale la pena crear un proyecto cuando el trabajo tiene un objetivo que perdura más allá de una sesión y sigue produciendo tareas. Estos tipos de trabajo se adaptan bien a un proyecto:

30 30 

31* **Un objetivo en muchos repositorios**: "Llevar cada servicio a la nueva configuración de lint." Claude puede ejecutar un hilo por repositorio, cada uno con su propia solicitud de extracción, y el panel [**Overview**](#see-what-needs-you-in-overview) muestra cuáles están listas para revisión.31* **Un objetivo en muchos repositorios**: "Llevar cada servicio a la nueva configuración de lint." Claude puede ejecutar un hilo por repositorio, cada uno con su propio pull request, y el [panel Overview](#see-what-needs-you-in-overview) muestra cuáles están listos para revisión.

32* **Un área que sigues alimentando**: los errores, seguimientos de pila y solicitudes de revisión para un servicio, pegados en la conversación a medida que te llegan. Una trampa que le dices a Claude que recuerde después de una corrección está en [memoria del proyecto](#give-a-project-standing-context) para la siguiente.32* **Un área que sigues alimentando**: los errores, seguimientos de pila y solicitudes de revisión para un servicio, pegados en la conversación a medida que te llegan. Una trampa que le dices a Claude que recuerde después de una corrección está en [memoria del proyecto](#give-a-project-standing-context) para la siguiente.

33* **Una compilación o migración más grande que una sesión**: "Construir lo que describe `docs/spec.md`" o "Mover la aplicación del ORM obsoleto." El trabajo se divide en hilos que cada uno toma una parte, las decisiones que le pides a Claude que recuerde al principio llegan a los hilos posteriores, y la especificación cambia y los errores que encuentras durante la compilación van a la misma conversación.33* **Una compilación o migración más grande que una sesión**: "Construir lo que describe `docs/spec.md`" o "Mover la aplicación del ORM obsoleto." El trabajo se divide en hilos que cada uno toma una parte, las decisiones que le pides a Claude que recuerde al principio llegan a los hilos posteriores, y la especificación cambia y los errores que encuentras durante la compilación van a la misma conversación.

34* **Trabajo que no es código**: una carpeta de contratos o una exportación de tickets de soporte a la que sigues regresando con nuevas preguntas, como "encontrar los diez errores de integración más comunes en estos tickets." Carga los documentos en lugar de agregar un repositorio, y los hilos entregan cada informe como un archivo en la pestaña [**Library**](#see-what-needs-you-in-overview) del proyecto.34* **Trabajo que no es código**: una carpeta de contratos o una exportación de tickets de soporte a la que sigues volviendo con nuevas preguntas, como "encuentra los diez errores de integración más comunes en estos tickets". Sube los documentos en lugar de agregar un repositorio, y los hilos entregan cada informe como un archivo en la [**Library**](#see-what-needs-you-in-overview) del proyecto.

35 35 

36En cualquiera de ellos puedes enviar un lote de tareas, decirle a Claude que comience sin pedirte que confirmes y alejarte. Cuando regreses, puedes encontrar los hilos que te necesitan bajo [**Waiting on you**](#see-what-needs-you-in-overview). También puedes pedirle a Claude que ponga parte del trabajo en un horario como una [tarea programada en la nube](https://code.claude.com/docs/es/routines.md). Si alguna de estas es tu situación, [crea un proyecto](#create-a-project).36En cualquiera de ellos puedes enviar un lote de tareas, decirle a Claude que comience sin pedirte que confirmes y alejarte. Cuando regreses, puedes encontrar los hilos que te necesitan bajo [**Waiting on you**](#see-what-needs-you-in-overview). También puedes pedirle a Claude que ponga parte del trabajo en un horario como una [tarea programada en la nube](https://code.claude.com/docs/es/routines.md). Si alguna de estas es tu situación, [crea un proyecto](#create-a-project).

37 37 


57 * El `CLAUDE.md` de [cada uno de los repositorios del proyecto](#what-threads-pick-up-from-your-repositories), pero no los skills, `.claude/settings.json` ni `.mcp.json` de los repositorios57 * El `CLAUDE.md` de [cada uno de los repositorios del proyecto](#what-threads-pick-up-from-your-repositories), pero no los skills, `.claude/settings.json` ni `.mcp.json` de los repositorios

58 * Los [conectores](#get-skills-plugins-connectors-and-tools-into-threads) en tu cuenta de claude.ai58 * Los [conectores](#get-skills-plugins-connectors-and-tools-into-threads) en tu cuenta de claude.ai

59 * Un [entorno en la nube](#choose-an-environment-for-threads) que establece su acceso a la red, variables de entorno, secretos de red y herramientas instaladas59 * Un [entorno en la nube](#choose-an-environment-for-threads) que establece su acceso a la red, variables de entorno, secretos de red y herramientas instaladas

60* **El panel Overview**: donde [ves todos los hilos a la vez](#see-what-needs-you-in-overview) y cuáles de ellos te necesitan. Sus otras pestañas son **Library** para los archivos que agregaste y los archivos que produjeron los hilos, **Pull requests** para los que abrieron los hilos, y **Scheduled tasks** para el trabajo programado en el proyecto.60* **El panel Overview**: donde [ves todos los hilos a la vez](#see-what-needs-you-in-overview) y cuáles de ellos te necesitan.

61 61 

62Los hilos en la nube no recogen nada de la configuración de Claude Code en tu propia máquina. [Obtener skills, plugins, conectores y herramientas en hilos](#get-skills-plugins-connectors-and-tools-into-threads) cubre cómo darles lo que de otro modo les faltaría.62Los hilos en la nube no recogen nada de la configuración de Claude Code en tu propia máquina. [Obtener skills, plugins, conectores y herramientas en hilos](#get-skills-plugins-connectors-and-tools-into-threads) cubre cómo darles lo que de otro modo les faltaría.

63 63 

64Así es como esas partes se conectan, desde ti a través de la conversación hasta los hilos haciendo el trabajo, con **Overview** rastreando su estado:64Así es como se conectan esas partes, desde ti a través de la conversación hasta los hilos que hacen el trabajo, con Overview haciendo seguimiento de su estado:

65 65 

66![Diagrama de un proyecto. Escribes en la conversación del proyecto, donde Claude responde o comienza un hilo. Cada hilo en la nube trabaja en su propia rama y solicitud de extracción. El panel Overview enumera hilos por estado, como listo para revisión, esperando por ti, y trabajando.](https://mintcdn.com/claude-code/e8CLbxM17eD7cAiv/images/claude-projects-overview.svg?fit=max\&auto=format\&n=e8CLbxM17eD7cAiv\&q=85\&s=dbf446f69f0bbdb9961d21af207cb93b)66![Diagrama de un proyecto. Escribes en la conversación del proyecto, donde Claude responde o comienza un hilo. Cada hilo en la nube trabaja en su propia rama y solicitud de extracción. El panel Overview enumera hilos por estado, como listo para revisión, esperando por ti, y trabajando.](https://mintcdn.com/claude-code/e8CLbxM17eD7cAiv/images/claude-projects-overview.svg?fit=max\&auto=format\&n=e8CLbxM17eD7cAiv\&q=85\&s=dbf446f69f0bbdb9961d21af207cb93b)

67 67 


96 96 

97* **Name**: cómo aparece el proyecto en la lista **Projects**.97* **Name**: cómo aparece el proyecto en la lista **Projects**.

98* **What do you want to work on?** (opcional): una línea que se convierte en el objetivo del proyecto, como "Mantener la latencia p95 de la API por debajo de 200 ms". Claude en la conversación trabaja para alcanzarlo. Sin un objetivo, Claude trabaja a partir de las tareas que envías, y puedes agregar un objetivo más adelante en **Project settings > General**.98* **What do you want to work on?** (opcional): una línea que se convierte en el objetivo del proyecto, como "Mantener la latencia p95 de la API por debajo de 200 ms". Claude en la conversación trabaja para alcanzarlo. Sin un objetivo, Claude trabaja a partir de las tareas que envías, y puedes agregar un objetivo más adelante en **Project settings > General**.

99* **Context** (opcional): los repositorios de GitHub con los que trabaja este proyecto, además de cualquier archivo, carpeta o carpeta de Google Drive que los hilos deban leer. Haz clic en **Add** para cada uno. Agrega los repositorios que necesitan la mayoría de las tareas en lugar de todos los que el trabajo podría tocar; [Decidir qué repositorios agregar](#decide-which-repositories-to-add) trata esta elección, y puedes agregar más después en **Project settings > Environment**.99* **Context** (opcional): los repositorios de GitHub con los que trabaja este proyecto, además de cualquier archivo, carpeta o carpeta de Google Drive que los hilos deban leer. Haz clic en **+** para cada uno. Agrega los repositorios que necesitan la mayoría de las tareas en lugar de todos los que el trabajo podría tocar; [Decidir qué repositorios agregar](#decide-which-repositories-to-add) trata esta elección, y puedes agregar más después en **Project settings > Environment**.

100 100 

101Las reglas permanentes sobre cómo deben trabajar los hilos van en las [instrucciones del proyecto](#give-a-project-standing-context), que configuras una vez que el proyecto existe.101Las reglas permanentes sobre cómo deben trabajar los hilos van en las [instrucciones del proyecto](#give-a-project-standing-context), que configuras una vez que el proyecto existe.

102 102 


109* Iniciar un hilo que explora el repositorio sin cambiar nada y propone los siguientes pasos, si el proyecto tiene un repositorio que puede leer.109* Iniciar un hilo que explora el repositorio sin cambiar nada y propone los siguientes pasos, si el proyecto tiene un repositorio que puede leer.

110* Publicar **Setup recommendations** a partir de tus sesiones en la nube recientes: repositorios para agregar, tareas programadas para crear e hilos que podría iniciar. Cada repositorio y tarea programada recomendados empieza activado. Desactiva los que no quieras y luego haz clic en **Update setup** para agregar el resto, o ignora las recomendaciones y describe el trabajo tú mismo.110* Publicar **Setup recommendations** a partir de tus sesiones en la nube recientes: repositorios para agregar, tareas programadas para crear e hilos que podría iniciar. Cada repositorio y tarea programada recomendados empieza activado. Desactiva los que no quieras y luego haz clic en **Update setup** para agregar el resto, o ignora las recomendaciones y describe el trabajo tú mismo.

111 111 

112El proyecto ahora aparece en **Projects** en la barra lateral, y su conversación está abierta. [Tu primer lote](#your-first-batch) explica qué configurar antes de enviarle trabajo.112El proyecto ahora aparece en la barra lateral, y su conversación está abierta. [Tu primer lote](#your-first-batch) explica qué configurar antes de enviarle trabajo.

113 113 

114### Empezar desde una sesión existente114### Empezar desde una sesión existente

115 115 


168 168 

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

170 170 

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

172 172 

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

174 174 


190 190 

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

192 192 

193El panel **Overview** junto a la conversación rastrea los hilos del proyecto. Ya está abierto la primera vez que abre un nuevo proyecto. El botón **Overview** en el encabezado del proyecto lo cierra y reabre, y muestra un punto cuando un hilo lo está esperando.193El panel Overview junto a la conversación rastrea los hilos del proyecto. Ya está abierto la primera vez que abres un nuevo proyecto. Para reabrirlo después de cerrarlo, haz clic en el botón **Threads** en el encabezado del proyecto. El botón muestra un punto cuando un hilo te está esperando.

194 194 

195En la aplicación de escritorio, también obtiene una notificación de escritorio cuando Claude publica en la conversación, un hilo alcanza un error, o un hilo necesita su entrada, para que no tenga que mantener el proyecto abierto para enterarse. Para obtener también uno cada vez que un hilo termina un turno, o para desactivarlos para un proyecto, elija **Notifications** en el menú de la barra lateral del proyecto. Estas notificaciones son solo de escritorio: en un navegador, verifique el punto en el botón **Overview**.195En la aplicación de escritorio, de forma predeterminada aparece una notificación cuando Claude publica en la conversación, un hilo encuentra un error, o un hilo necesita tu entrada. No aparece ninguna mientras estás viendo el proyecto. Para obtener también una cada vez que un hilo termina un turno, o para desactivarlas para un proyecto, elige **Notifications** en el menú de la barra lateral del proyecto. En un navegador, revisa el punto en el botón **Threads**.

196 196 

197La pestaña **Threads** del panel agrupa hilos por estado:197La vista **Threads** del panel agrupa los hilos por estado:

198 198 

199| Grupo | Qué contiene |199| Grupo | Qué contiene |

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


205| **Idle** | Hilos que terminaron y no están esperando nada |205| **Idle** | Hilos que terminaron y no están esperando nada |

206| **Resolved** | Hilos marcados como completados: por usted desde el menú del hilo, por Claude una vez que ha tomado el último paso, como fusionar su solicitud de extracción, o automáticamente después de una semana sin actividad. Puede reabrir uno desde el mismo menú |206| **Resolved** | Hilos marcados como completados: por usted desde el menú del hilo, por Claude una vez que ha tomado el último paso, como fusionar su solicitud de extracción, o automáticamente después de una semana sin actividad. Puede reabrir uno desde el mismo menú |

207 207 

208Las otras pestañas del panel son:208Abre los archivos y las tareas programadas del proyecto en el panel desde el encabezado del proyecto:

209 209 

210* **Library**: los archivos y carpetas que agregaste y los archivos que produjeron los hilos210* **Library**: los archivos y carpetas que agregaste y los archivos que produjeron los hilos. Haz clic en el botón **Library** junto a **Threads**.

211* **Pull requests**: se muestra una vez que los hilos han abierto alguno211* **Scheduled tasks**: las [tareas programadas en la nube](https://code.claude.com/docs/es/routines.md) que Claude configuró desde este proyecto. Selecciónalo en el menú **⋯** del encabezado.

212* **Scheduled tasks**: las [tareas programadas en la nube](https://code.claude.com/docs/es/routines.md) que Claude configuró desde este proyecto

213 212 

214### Abrir un hilo cuando necesita control213### Abrir un hilo cuando necesita control

215 214 

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

217 216 

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

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


290| :- | :- | :- |289| :- | :- | :- |

291| Memoria del proyecto | Notas que Claude mantiene sobre el proyecto, como requisitos, decisiones y trampas, almacenadas como archivos. Cada hilo en la nube lee el archivo de índice `MEMORY.md` cuando comienza y abre los otros archivos cuando los necesita | Pide a Claude en la conversación del proyecto o en cualquier hilo en la nube que recuerde un requisito, una decisión o una trampa, o que olvide uno. Lee, edita y elimina los archivos en **Configuración del proyecto > Memoria** |290| Memoria del proyecto | Notas que Claude mantiene sobre el proyecto, como requisitos, decisiones y trampas, almacenadas como archivos. Cada hilo en la nube lee el archivo de índice `MEMORY.md` cuando comienza y abre los otros archivos cuando los necesita | Pide a Claude en la conversación del proyecto o en cualquier hilo en la nube que recuerde un requisito, una decisión o una trampa, o que olvide uno. Lee, edita y elimina los archivos en **Configuración del proyecto > Memoria** |

292| Instrucciones del proyecto | Texto enviado a cada nuevo hilo y a Claude en la conversación del proyecto, hasta 16.000 caracteres. [Escribir instrucciones del proyecto](#write-project-instructions) cubre qué poner en él | **Configuración del proyecto > Memoria > Instrucciones del proyecto**, o pide a Claude que cambie las instrucciones |291| Instrucciones del proyecto | Texto enviado a cada nuevo hilo y a Claude en la conversación del proyecto, hasta 16.000 caracteres. [Escribir instrucciones del proyecto](#write-project-instructions) cubre qué poner en él | **Configuración del proyecto > Memoria > Instrucciones del proyecto**, o pide a Claude que cambie las instrucciones |

293| Repositorios, archivos y entorno | Los repositorios que cada hilo en la nube clona, las carpetas y archivos que puede leer en `/mnt/project-files`, y el entorno en la nube en el que se ejecuta | Repositorios y entorno en **Configuración del proyecto > Entorno**, o pide a Claude en la conversación que agregue un repositorio al proyecto. [Archivos y carpetas](#add-files-and-folders) desde **Agregar** en la pestaña **Biblioteca** en **Descripción general** |292| Repositorios, archivos y entorno | Los repositorios que cada hilo en la nube clona, las carpetas y archivos que puede leer en `/mnt/project-files`, y el entorno en la nube en el que se ejecuta | Repositorios y entorno en **Configuración del proyecto > Entorno**, o pide a Claude en la conversación que agregue un repositorio al proyecto. [Archivos y carpetas](#add-files-and-folders) desde **Agregar** en la [**Biblioteca**](#see-what-needs-you-in-overview) del proyecto |

294 293 

295**Configuración del proyecto > Memoria** enumera estos archivos en **Memoria automática**, porque Claude mismo los escribe mientras trabaja en el proyecto. Son independientes de la [memoria automática](https://code.claude.com/docs/es/memory.md) que Claude Code mantiene en tu máquina, aunque ambas usen un índice `MEMORY.md`. La memoria del proyecto también es independiente de los archivos `CLAUDE.md` en los repositorios del proyecto. Cada hilo en la nube aún lee esos archivos `CLAUDE.md` de su clon cuando comienza, así que pon las instrucciones sobre un repositorio en su `CLAUDE.md` y las notas sobre el proyecto en la memoria del proyecto.294**Configuración del proyecto > Memoria** enumera estos archivos en **Memoria automática**, porque Claude mismo los escribe mientras trabaja en el proyecto. Son independientes de la [memoria automática](https://code.claude.com/docs/es/memory.md) que Claude Code mantiene en tu máquina, aunque ambas usen un índice `MEMORY.md`. La memoria del proyecto también es independiente de los archivos `CLAUDE.md` en los repositorios del proyecto. Cada hilo en la nube aún lee esos archivos `CLAUDE.md` de su clon cuando comienza, así que pon las instrucciones sobre un repositorio en su `CLAUDE.md` y las notas sobre el proyecto en la memoria del proyecto.

296 295 

297### Escribir instrucciones del proyecto296### Escribir instrucciones del proyecto

298 297 

299Las instrucciones del proyecto son el resumen con el que comienza cada nuevo hilo. Haz clic en el icono de engranaje en el encabezado del proyecto para abrir **Configuración del proyecto**, luego ve a **Memoria > Instrucciones del proyecto**. Un resumen útil cubre:298Las instrucciones del proyecto son el resumen con el que comienza cada nuevo hilo. Selecciona **Configuración** en el menú **⋯** del encabezado del proyecto para abrir **Configuración del proyecto**, luego ve a **Memoria > Instrucciones del proyecto**. Un resumen útil cubre:

300 299 

301* Para qué es el proyecto300* Para qué es el proyecto

302* Dónde ocurre el trabajo: qué repositorios, de qué rama partir, cómo nombrar los pull requests301* Dónde ocurre el trabajo: qué repositorios, de qué rama partir, cómo nombrar los pull requests


324* **Agrégalo al proyecto**, en el diálogo **Nuevo proyecto**, en **Configuración del proyecto > Entorno**, o pidiendo a Claude en la conversación que lo agregue al proyecto. Cada hilo en la nube a partir de entonces lo clona y comienza con su `CLAUDE.md` cargado, independientemente de si la tarea lo toca.323* **Agrégalo al proyecto**, en el diálogo **Nuevo proyecto**, en **Configuración del proyecto > Entorno**, o pidiendo a Claude en la conversación que lo agregue al proyecto. Cada hilo en la nube a partir de entonces lo clona y comienza con su `CLAUDE.md` cargado, independientemente de si la tarea lo toca.

325* **Déjalo fuera y deja que los hilos lo agreguen cuando sea necesario.** Un hilo en la nube cuya tarea necesita un repositorio que el proyecto no tiene puede agregárselo a sí mismo, y una nota en el hilo indica que se agregó solo a este hilo. El clon ocurre a mitad de la tarea, por lo que el `CLAUDE.md` de ese repositorio no estaba allí cuando el hilo comenzó. El siguiente hilo comienza sin él. Un repositorio agregado de esta manera necesita los mismos [requisitos previos](#check-the-prerequisites) que un repositorio del proyecto: la aplicación GitHub de Claude instalada en él y acceso de push desde tu cuenta de GitHub.324* **Déjalo fuera y deja que los hilos lo agreguen cuando sea necesario.** Un hilo en la nube cuya tarea necesita un repositorio que el proyecto no tiene puede agregárselo a sí mismo, y una nota en el hilo indica que se agregó solo a este hilo. El clon ocurre a mitad de la tarea, por lo que el `CLAUDE.md` de ese repositorio no estaba allí cuando el hilo comenzó. El siguiente hilo comienza sin él. Un repositorio agregado de esta manera necesita los mismos [requisitos previos](#check-the-prerequisites) que un repositorio del proyecto: la aplicación GitHub de Claude instalada en él y acceso de push desde tu cuenta de GitHub.

326 325 

327Un proyecto no necesita ningún repositorio. Sus hilos en la nube aún pueden investigar, escribir documentos, y escribir y ejecutar código en su propio sandbox, y entregan archivos a la pestaña **Biblioteca**. Cualquiera de sus hilos en la nube aún puede agregarse un repositorio a sí mismo cuando una tarea lo requiere.326Un proyecto no necesita ningún repositorio. Sus hilos en la nube aún pueden investigar, escribir documentos, y escribir y ejecutar código en su propio sandbox. Entregan archivos a la **Biblioteca** del proyecto. Cualquiera de sus hilos en la nube aún puede agregarse un repositorio a sí mismo cuando una tarea lo requiere.

328 327 

329Una vez que el proyecto tiene repositorios, Claude solo puede agregar repositorios de un propietario de GitHub que el proyecto ya usa, ya sea que agregue uno al proyecto o que un hilo se agregue uno a sí mismo. Para traer un repositorio de un propietario diferente, agrégalo al proyecto tú mismo en **Configuración del proyecto > Entorno**.328Una vez que el proyecto tiene repositorios, Claude solo puede agregar repositorios de un propietario de GitHub que el proyecto ya usa, ya sea que agregue uno al proyecto o que un hilo se agregue uno a sí mismo. Para traer un repositorio de un propietario diferente, agrégalo al proyecto tú mismo en **Configuración del proyecto > Entorno**.

330 329 


332 331 

333### Agregar archivos y carpetas332### Agregar archivos y carpetas

334 333 

335Agrega los archivos y carpetas que quieres que los hilos lean en el campo **Contexto** del diálogo **Nuevo proyecto**, o después con **Agregar** en la pestaña **Biblioteca** en **Descripción general**. Estos límites se aplican a lo que agregas:334Agrega los archivos y carpetas que quieres que los hilos lean en el campo **Contexto** del diálogo **Nuevo proyecto**, o después con **Agregar** en la [**Biblioteca**](#see-what-needs-you-in-overview) del proyecto. Estos límites se aplican a lo que agregas:

336 335 

337* **Pestaña Biblioteca**: hasta 100 archivos y 2 GB en una selección, con un único archivo de hasta 480 MB.336* **Archivos que cargas en claude.ai/code o en la aplicación de escritorio**: hasta 1.000 archivos y 2 GB a la vez, con un único archivo de hasta 480 MB.

338* **Diálogo Nuevo proyecto**: los archivos de más de 30 MB se omiten, así que agrega los archivos más grandes desde la pestaña **Biblioteca** después de crear el proyecto.337* **Carpetas que cargas**: los archivos ocultos y `node_modules` no se agregan. Un proyecto contiene hasta 10 carpetas y carpetas de Google Drive combinadas, y los archivos individuales no cuentan para ese límite.

339* **Carpetas**: cuando agregas una carpeta desde cualquiera de los dos lugares, el proyecto recibe una copia de sus primeros 100 archivos hasta 200 MB, sin archivos de más de 30 MB, archivos ocultos ni `node_modules`. Un proyecto contiene hasta 10 carpetas y carpetas de Google Drive combinadas, y los archivos individuales no cuentan para ese límite.

340* **Cambios después de la carga**: las cargas son copias, por lo que un cambio que hagas en tu computadora después no llega al proyecto hasta que cargues el archivo nuevamente y elijas **Reemplazar** cuando se te pregunte sobre el nombre existente.338* **Cambios después de la carga**: las cargas son copias, por lo que un cambio que hagas en tu computadora después no llega al proyecto hasta que cargues el archivo nuevamente y elijas **Reemplazar** cuando se te pregunte sobre el nombre existente.

341 339 

342### Lo que los hilos recogen de tus repositorios340### Lo que los hilos recogen de tus repositorios


373 371 

374## Referencia de configuración del proyecto372## Referencia de configuración del proyecto

375 373 

376Cambias la configuración del proyecto en claude.ai/code o en la aplicación de escritorio, no en `settings.json`. Abre **Project settings** desde **Settings** en el menú de la barra lateral del proyecto o desde el icono de engranaje en el encabezado del proyecto.374Cambias la configuración del proyecto en claude.ai/code o en la aplicación de escritorio, no en `settings.json`. Abre **Project settings** desde **Settings** en el menú de la barra lateral del proyecto o en el menú **⋯** del encabezado del proyecto.

377 375 

378Los cambios se guardan a medida que los realizas; un campo de texto que estés editando, como el objetivo o las instrucciones, muestra **Save changes** y **Discard** hasta que lo dejes. Los cambios en instrucciones, repositorios, plugins, y entorno en **Project settings** llegan a hilos nuevos, no a hilos ya en ejecución.376Los cambios se guardan a medida que los realizas; un campo de texto que estés editando, como el objetivo o las instrucciones, muestra **Save changes** y **Discard** hasta que lo dejes. Los cambios en instrucciones, repositorios, plugins, y entorno en **Project settings** llegan a hilos nuevos, no a hilos ya en ejecución.

379 377 


434 432 

435 Los proyectos están disponibles en Pro, Max y Ultra. Un proyecto es solo tuyo: eres el único que le envía trabajo o ve sus hilos, y utiliza tu propio acceso a GitHub y tus conectores. [Cómo Claude Tag difiere de Cowork y Claude Code](https://claude.com/docs/claude-tag/concepts/how-it-works#how-claude-tag-differs-from-cowork-and-claude-code) tiene la comparación lado a lado.433 Los proyectos están disponibles en Pro, Max y Ultra. Un proyecto es solo tuyo: eres el único que le envía trabajo o ve sus hilos, y utiliza tu propio acceso a GitHub y tus conectores. [Cómo Claude Tag difiere de Cowork y Claude Code](https://claude.com/docs/claude-tag/concepts/how-it-works#how-claude-tag-differs-from-cowork-and-claude-code) tiene la comparación lado a lado.

436* **Sesiones en la nube**: cada hilo es una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md) a menos que le pidas a Claude que la ejecute en tu máquina. De cualquier forma, Claude la comienza y rastrea en lugar de ti. También puedes llevar el trabajo de una sesión en la nube que iniciaste tú mismo a un proyecto: elige [**Continue in project**](#start-from-an-existing-cloud-session) en el menú de la barra lateral de esa sesión.434* **Sesiones en la nube**: cada hilo es una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md) a menos que le pidas a Claude que la ejecute en tu máquina. De cualquier forma, Claude la comienza y rastrea en lugar de ti. También puedes llevar el trabajo de una sesión en la nube que iniciaste tú mismo a un proyecto: elige [**Continue in project**](#start-from-an-existing-cloud-session) en el menú de la barra lateral de esa sesión.

437* **Tareas programadas**: cuando pides trabajo programado en un proyecto, Claude crea una [tarea programada en la nube](https://code.claude.com/docs/es/routines.md) que se ejecuta como hilos en ese proyecto y aparece en su pestaña **Scheduled tasks**. Las tareas programadas que creas fuera de un proyecto siguen funcionando por su cuenta.435* **Tareas programadas**: cuando pides trabajo programado en un proyecto, Claude crea una [tarea programada en la nube](https://code.claude.com/docs/es/routines.md) que se ejecuta como hilos en ese proyecto y aparece en su vista **Scheduled tasks**. Las tareas programadas que creas fuera de un proyecto siguen funcionando por su cuenta.

438* **Remote Control**: [Remote Control](https://code.claude.com/docs/es/remote-control.md) conecta claude.ai a una sesión de Claude Code que se ejecuta en su máquina. Cuando pide a Claude en un proyecto que ejecute un hilo en su computadora, el proyecto [utiliza Remote Control para hacerlo](#run-a-thread-on-your-own-computer).436* **Remote Control**: [Remote Control](https://code.claude.com/docs/es/remote-control.md) conecta claude.ai a una sesión de Claude Code que se ejecuta en su máquina. Cuando pide a Claude en un proyecto que ejecute un hilo en su computadora, el proyecto [utiliza Remote Control para hacerlo](#run-a-thread-on-your-own-computer).

439* **Sesiones locales y agent view**: una sesión que inicias tú mismo en tu terminal, IDE o el entorno local de la aplicación de escritorio queda fuera de tus proyectos, aunque puedes [llevar su trabajo a uno](#start-from-an-existing-cloud-session). [Agent view](https://code.claude.com/docs/es/agent-view.md) es una pantalla para rastrear varias sesiones locales lado a lado, y sigues iniciando cada una y dándole su tarea tú mismo.437* **Sesiones locales y agent view**: una sesión que inicias tú mismo en tu terminal, IDE o el entorno local de la aplicación de escritorio queda fuera de tus proyectos, aunque puedes [llevar su trabajo a uno](#start-from-an-existing-cloud-session). [Agent view](https://code.claude.com/docs/es/agent-view.md) es una pantalla para rastrear varias sesiones locales lado a lado, y sigues iniciando cada una y dándole su tarea tú mismo.

440* **Worktrees**: un [worktree](https://code.claude.com/docs/es/worktrees.md) le da a cada sesión local su propia copia de trabajo de un repositorio. Los hilos en la nube no los necesitan: cada uno clona sus repositorios en su propio sandbox en la nube y trabaja en su propia rama.438* **Worktrees**: un [worktree](https://code.claude.com/docs/es/worktrees.md) le da a cada sesión local su propia copia de trabajo de un repositorio. Los hilos en la nube no los necesitan: cada uno clona sus repositorios en su propio sandbox en la nube y trabaja en su propia rama.


466Cuando varios hilos regresan habiendo asumido algo incorrecto, trabajado alrededor del acceso faltante, o detenido con "bloqueado", la causa generalmente es la misma brecha en la configuración del proyecto en lugar de un problema con cada tarea. Ordena qué hilos son sólidos antes de arreglar nada:464Cuando varios hilos regresan habiendo asumido algo incorrecto, trabajado alrededor del acceso faltante, o detenido con "bloqueado", la causa generalmente es la misma brecha en la configuración del proyecto en lugar de un problema con cada tarea. Ordena qué hilos son sólidos antes de arreglar nada:

467 465 

4681. Pídele a Claude en la conversación: "Para cada hilo abierto, enumera lo que le pediste que hiciera, qué asumió o no pudo alcanzar, y en qué está esperando." Claude lee cada hilo y responde en la conversación.4661. Pídele a Claude en la conversación: "Para cada hilo abierto, enumera lo que le pediste que hiciera, qué asumió o no pudo alcanzar, y en qué está esperando." Claude lee cada hilo y responde en la conversación.

4692. Para hilos que comenzaron desde una suposición incorrecta, abre el hilo desde **Overview** y márcalo resuelto desde su menú, o dile qué hacer en su lugar en su cuadro de mensaje. Su rama y cualquier solicitud de extracción permanecen en GitHub hasta que las elimines.4672. Para hilos que comenzaron desde una suposición incorrecta, abre el hilo desde **Overview** y márcalo resuelto desde su menú, o dile qué hacer en su lugar. Su rama y cualquier pull request permanecen en GitHub hasta que los elimines.

4703. Arregla la brecha una vez, en [instrucciones del proyecto](#give-a-project-standing-context) o el [entorno](#choose-an-environment-for-threads), luego envía un hilo antes de enviar el resto del trabajo de nuevo como hilos nuevos.4683. Arregla la brecha una vez, en [instrucciones del proyecto](#give-a-project-standing-context) o el [entorno](#choose-an-environment-for-threads), luego envía un hilo antes de enviar el resto del trabajo de nuevo como hilos nuevos.

471 469 

472### Claude no ha respondido470### Claude no ha respondido

Details

14>14>

15> Para que cada pull request de un repositorio se revise automáticamente en GitHub, consulta [Code Review](https://code.claude.com/docs/es/code-review.md), un servicio administrado que un Owner activa para tu organización.15> Para que cada pull request de un repositorio se revise automáticamente en GitHub, consulta [Code Review](https://code.claude.com/docs/es/code-review.md), un servicio administrado que un Owner activa para tu organización.

16 16 

17`/review` es un alias de `/code-review`. Antes de la v2.1.223, `/review` era un comando independiente que ejecutaba una revisión de una sola pasada y de solo lectura de un pull request de GitHub.17`/review` es un alias de `/code-review`.

18 18 

19**1. Ejecuta /code-review**19**1. Ejecuta /code-review**

20 20 


91* **`ultra`**: la revisión no usa ni actualiza el nivel recordado91* **`ultra`**: la revisión no usa ni actualiza el nivel recordado

92* **Nunca se escribió un nivel**: la revisión usa el esfuerzo actual de la sesión92* **Nunca se escribió un nivel**: la revisión usa el esfuerzo actual de la sesión

93 93 

94Antes de la v2.1.223, un `/code-review` sin nivel siempre usaba el esfuerzo actual de la sesión.

95 

96### Publicar los hallazgos en un merge request de GitLab94### Publicar los hallazgos en un merge request de GitLab

97 95 

98Cuando pasas `--comment` para un merge request de GitLab, Claude Code publica los hallazgos a través de la CLI `glab` de GitLab. Requiere Claude Code v2.1.257 o posterior. Cuando `glab` no está instalado, Claude imprime los hallazgos en la terminal en su lugar.96Cuando pasas `--comment` para un merge request de GitLab, Claude Code publica los hallazgos a través de la CLI `glab` de GitLab. Requiere Claude Code v2.1.257 o posterior. Cuando `glab` no está instalado, Claude imprime los hallazgos en la terminal en su lugar.

commands.md +2 −2

Details

104| `/install-github-app` | Instala la Claude GitHub App para un repositorio, con un paso opcional para configurar workflows y secretos de [GitHub Actions](https://code.claude.com/docs/es/github-actions.md). Te guía para seleccionar un repositorio y configurar la integración. Solo funciona con repositorios de github.com. Cuando el remoto git de tu repositorio está en gitlab.com o bitbucket.org, el comando imprime un aviso y sale en lugar de iniciar la configuración. Para ejecutar Claude Code desde pipelines de GitLab, consulta [GitLab CI/CD](https://code.claude.com/docs/es/gitlab-ci-cd.md) |104| `/install-github-app` | Instala la Claude GitHub App para un repositorio, con un paso opcional para configurar workflows y secretos de [GitHub Actions](https://code.claude.com/docs/es/github-actions.md). Te guía para seleccionar un repositorio y configurar la integración. Solo funciona con repositorios de github.com. Cuando el remoto git de tu repositorio está en gitlab.com o bitbucket.org, el comando imprime un aviso y sale en lugar de iniciar la configuración. Para ejecutar Claude Code desde pipelines de GitLab, consulta [GitLab CI/CD](https://code.claude.com/docs/es/gitlab-ci-cd.md) |

105| `/install-slack-app` | Instala la app de Claude para Slack. Abre un navegador para completar el flujo de OAuth |105| `/install-slack-app` | Instala la app de Claude para Slack. Abre un navegador para completar el flujo de OAuth |

106| `/keybindings` | Abre tu archivo de [atajos de teclado](https://code.claude.com/docs/es/keybindings.md) |106| `/keybindings` | Abre tu archivo de [atajos de teclado](https://code.claude.com/docs/es/keybindings.md) |

107| `/list-agents` | Enumera los subagentes, los compañeros de [equipo de agentes](https://code.claude.com/docs/es/agent-teams.md) y otras sesiones de Claude Code a los que Claude puede enviar mensajes, con el nombre que se debe usar para cada uno. Consulta [mensajería entre sesiones](https://code.claude.com/docs/es/cross-session-messaging.md). También disponible como `/peers`. Requiere Claude Code v2.1.224 o posterior; las versiones anteriores informan `Unknown command: /list-agents`. Las filas de compañeros de equipo y la primera línea que muestra el nombre propio de esta sesión requieren v2.1.239 o posterior. Disponible solo en sesiones donde la [mensajería entre sesiones está habilitada](https://code.claude.com/docs/es/cross-session-messaging.md#availability) |107| `/list-agents` | Enumera los subagentes, los compañeros de [equipo de agentes](https://code.claude.com/docs/es/agent-teams.md) y otras sesiones de Claude Code a los que Claude puede enviar mensajes, con el nombre que se debe usar para cada uno. Consulta [mensajería entre sesiones](https://code.claude.com/docs/es/cross-session-messaging.md). También disponible como `/peers`. Las filas de compañeros de equipo y la primera línea que muestra el nombre propio de esta sesión requieren v2.1.239 o posterior. Disponible solo en sesiones donde la [mensajería entre sesiones está habilitada](https://code.claude.com/docs/es/cross-session-messaging.md#availability) |

108| `/login` | Inicia sesión en tu cuenta de Anthropic |108| `/login` | Inicia sesión en tu cuenta de Anthropic |

109| `/logout` | Cierra sesión en tu cuenta de Anthropic |109| `/logout` | Cierra sesión en tu cuenta de Anthropic |

110| `/loop [interval] [prompt]` | **[Skill](https://code.claude.com/docs/es/skills.md#bundled-skills).** Ejecuta un prompt repetidamente mientras la sesión permanece abierta. Omite el intervalo y Claude [marca su propio ritmo entre iteraciones](https://code.claude.com/docs/es/scheduled-tasks.md#let-claude-choose-the-interval). Omite el prompt y Claude ejecuta el [prompt de mantenimiento integrado](https://code.claude.com/docs/es/scheduled-tasks.md#run-the-built-in-maintenance-prompt) o tu [`loop.md`](https://code.claude.com/docs/es/scheduled-tasks#customize-the-default-prompt-with-loop-md). Ejemplo: `/loop 5m check if the deploy finished`. Consulta [Ejecutar prompts según una programación](https://code.claude.com/docs/es/scheduled-tasks.md). Alias: `/proactive` |110| `/loop [interval] [prompt]` | **[Skill](https://code.claude.com/docs/es/skills.md#bundled-skills).** Ejecuta un prompt repetidamente mientras la sesión permanece abierta. Omite el intervalo y Claude [marca su propio ritmo entre iteraciones](https://code.claude.com/docs/es/scheduled-tasks.md#let-claude-choose-the-interval). Omite el prompt y Claude ejecuta el [prompt de mantenimiento integrado](https://code.claude.com/docs/es/scheduled-tasks.md#run-the-built-in-maintenance-prompt) o tu [`loop.md`](https://code.claude.com/docs/es/scheduled-tasks#customize-the-default-prompt-with-loop-md). Ejemplo: `/loop 5m check if the deploy finished`. Consulta [Ejecutar prompts según una programación](https://code.claude.com/docs/es/scheduled-tasks.md). Alias: `/proactive` |


132| `/rename [name]` | Cambia el nombre de la sesión actual y muestra el nombre en la barra del prompt. Sin un nombre, genera uno automáticamente a partir del historial de la conversación. También disponible en modo no interactivo (`-p`). Desde cualquier superficie de cambio de nombre, incluidos claude.ai y la app de escritorio, Claude Code reemplaza los caracteres de control e invisibles del nuevo nombre por espacios y limita el nombre a 200 caracteres. Si el nombre queda vacío una vez eliminados 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 |132| `/rename [name]` | Cambia el nombre de la sesión actual y muestra el nombre en la barra del prompt. Sin un nombre, genera uno automáticamente a partir del historial de la conversación. También disponible en modo no interactivo (`-p`). Desde cualquier superficie de cambio de nombre, incluidos claude.ai y la app de escritorio, Claude Code reemplaza los caracteres de control e invisibles del nuevo nombre por espacios y limita el nombre a 200 caracteres. Si el nombre queda vacío una vez eliminados 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 |

133| `/restart` | Reinicia Claude Code y reanuda esta sesión, lo que aplica una actualización instalada. Ejecútalo cuando el pie de página lo ofrezca después de que se instale una actualización. Requiere un plan Pro, Max o Ultra y una instalación nativa en macOS o Linux, no en WSL. Requiere Claude Code v2.1.288 o posterior. Alias: `/update` |133| `/restart` | Reinicia Claude Code y reanuda esta sesión, lo que aplica una actualización instalada. Ejecútalo cuando el pie de página lo ofrezca después de que se instale una actualización. Requiere un plan Pro, Max o Ultra y una instalación nativa en macOS o Linux, no en WSL. Requiere Claude Code v2.1.288 o posterior. Alias: `/update` |

134| `/resume [session]` | Reanuda una conversación por ID o nombre, o abre el selector de sesiones. Las [sesiones en segundo plano](https://code.claude.com/docs/es/agent-view.md) aparecen en el selector marcadas con `bg`. Reanudar una que todavía se está ejecutando, desde el selector o por ID o nombre, [abre esa sesión](https://code.claude.com/docs/es/sessions.md#resume-a-running-background-session): tu conversación actual pasa a segundo plano y esta terminal se adjunta a la que está en ejecución. Presiona `←` en un prompt vacío para volver a la vista de agentes, que también enumera la conversación que dejaste. Antes de v2.1.285, Claude Code se negaba y te indicaba que abrieras la sesión con `claude attach` o que primero la detuvieras. Alias: `/continue` |134| `/resume [session]` | Reanuda una conversación por ID o nombre, o abre el selector de sesiones. Las [sesiones en segundo plano](https://code.claude.com/docs/es/agent-view.md) aparecen en el selector marcadas con `bg`. Reanudar una que todavía se está ejecutando, desde el selector o por ID o nombre, [abre esa sesión](https://code.claude.com/docs/es/sessions.md#resume-a-running-background-session): tu conversación actual pasa a segundo plano y esta terminal se adjunta a la que está en ejecución. Presiona `←` en un prompt vacío para volver a la vista de agentes, que también enumera la conversación que dejaste. Antes de v2.1.285, Claude Code se negaba y te indicaba que abrieras la sesión con `claude attach` o que primero la detuvieras. Alias: `/continue` |

135| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | Alias de [`/code-review`](https://code.claude.com/docs/es/code-review-local): revisa el diff actual, o un número de PR, una rama o una ruta que pases, como `/review 1234`, y admite los mismos niveles de esfuerzo y flags. Si no se indica un nivel, la revisión reutiliza el último nivel de `low` a `max` que escribiste; consulta [Revisar localmente con `/code-review`](https://code.claude.com/docs/es/code-review-local) para conocer las reglas exactas. Para una revisión profunda en la nube, usa [`/code-review ultra`](https://code.claude.com/docs/es/ultrareview). Antes de v2.1.223, `/review` era un comando independiente que ejecutaba una revisión de una sola pasada y de solo lectura de un pull request de GitHub por número, y enumeraba los PR abiertos para elegir cuando se ejecutaba sin argumento; de v2.1.186 a v2.1.201, ejecutaba el mismo motor multiagente que `/code-review medium` |135| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | Alias de [`/code-review`](https://code.claude.com/docs/es/code-review-local): revisa el diff actual, o un número de PR, una rama o una ruta que pases, como `/review 1234`, y admite los mismos niveles de esfuerzo y flags. Si no se indica un nivel, la revisión reutiliza el último nivel de `low` a `max` que escribiste; consulta [Revisar localmente con `/code-review`](https://code.claude.com/docs/es/code-review-local) para conocer las reglas exactas. Para una revisión profunda en la nube, usa [`/code-review ultra`](https://code.claude.com/docs/es/ultrareview) |

136| `/rewind` | Retrocede la conversación y/o el código a un punto anterior, o resume desde un mensaje seleccionado. Consulta [checkpointing](https://code.claude.com/docs/es/checkpointing.md). Alias: `/checkpoint`, `/undo` |136| `/rewind` | Retrocede la conversación y/o el código a un punto anterior, o resume desde un mensaje seleccionado. Consulta [checkpointing](https://code.claude.com/docs/es/checkpointing.md). Alias: `/checkpoint`, `/undo` |

137| `/run` | **[Skill](https://code.claude.com/docs/es/skills.md#bundled-skills).** Inicia y maneja la app de tu proyecto para ver un cambio funcionando, no solo pasando las pruebas. Consulta [Ejecutar y verificar tu app](https://code.claude.com/docs/es/skills.md#run-and-verify-your-app) |137| `/run` | **[Skill](https://code.claude.com/docs/es/skills.md#bundled-skills).** Inicia y maneja la app de tu proyecto para ver un cambio funcionando, no solo pasando las pruebas. Consulta [Ejecutar y verificar tu app](https://code.claude.com/docs/es/skills.md#run-and-verify-your-app) |

138| `/run-skill-generator` | **[Skill](https://code.claude.com/docs/es/skills.md#bundled-skills).** Enséñales a `/run` y `/verify` cómo compilar, iniciar y manejar la app de tu proyecto desde un entorno limpio escribiendo un [skill](https://code.claude.com/docs/es/skills.md#run-and-verify-your-app) por proyecto |138| `/run-skill-generator` | **[Skill](https://code.claude.com/docs/es/skills.md#bundled-skills).** Enséñales a `/run` y `/verify` cómo compilar, iniciar y manejar la app de tu proyecto desde un entorno limpio escribiendo un [skill](https://code.claude.com/docs/es/skills.md#run-and-verify-your-app) por proyecto |

costs.md +6 −6

Details

292 292 

293Los [hooks](https://code.claude.com/docs/es/hooks.md) personalizados pueden preprocesar datos antes de que Claude los vea. En lugar de que Claude lea un archivo de registro de 10,000 líneas para encontrar errores, un hook puede buscar `ERROR` y devolver solo las líneas coincidentes, reduciendo el contexto de decenas de miles de tokens a cientos.293Los [hooks](https://code.claude.com/docs/es/hooks.md) personalizados pueden preprocesar datos antes de que Claude los vea. En lugar de que Claude lea un archivo de registro de 10,000 líneas para encontrar errores, un hook puede buscar `ERROR` y devolver solo las líneas coincidentes, reduciendo el contexto de decenas de miles de tokens a cientos.

294 294 

295Un [skill](https://code.claude.com/docs/es/skills.md) puede darle a Claude conocimiento de dominio para que no tenga que explorar. Por ejemplo, un skill "codebase-overview" podría describir la arquitectura de tu proyecto, los directorios clave y las convenciones de nomenclatura. Cuando Claude invoca el skill, obtiene este contexto inmediatamente en lugar de gastar tokens leyendo múltiples archivos para entender la estructura.295Este hook PreToolUse recorta la salida de las pruebas a sus últimas 100 líneas:

296 

297Por ejemplo, este hook PreToolUse filtra la salida de las pruebas para mostrar solo los fallos:

298 296 

299> [tab] settings.json297> [tab] settings.json

300>298>


320 318 

321> [tab] filter-test-output.sh319> [tab] filter-test-output.sh

322>320>

323> El hook llama a este script. Crea la carpeta con `mkdir -p ~/.claude/hooks`, guarda el script a continuación como `~/.claude/hooks/filter-test-output.sh` y hazlo ejecutable con `chmod +x ~/.claude/hooks/filter-test-output.sh`. Verifica si el comando es un ejecutor de pruebas y lo modifica para mostrar solo los fallos:321> El hook llama a este script. Crea la carpeta con `mkdir -p ~/.claude/hooks`, guarda el script a continuación como `~/.claude/hooks/filter-test-output.sh` y hazlo ejecutable con `chmod +x ~/.claude/hooks/filter-test-output.sh`. Verifica si el comando es un ejecutor de pruebas y, de ser así, conserva solo las últimas 100 líneas de su salida:

324>322>

325> ```bash theme={null}323> ```bash theme={null}

326> #!/bin/bash324> #!/bin/bash

327> input=$(cat)325> input=$(cat)

328> cmd=$(echo "$input" | jq -r '.tool_input.command')326> cmd=$(echo "$input" | jq -r '.tool_input.command')

329>327>

330> # If running tests, filter to show only failures328> # If running tests, keep only the last 100 lines

331> pattern='^(npm test|pytest|go test)( [^;&|<>`$#\\[:cntrl:]]*)?$'329> pattern='^(npm test|pytest|go test)( [^;&|<>`$#\\[:cntrl:]]*)?$'

332> if [[ "$cmd" =~ $pattern ]]; then330> if [[ "$cmd" =~ $pattern ]]; then

333> filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100"331> filtered_cmd="$cmd 2>&1 | tail -n 100"

334> echo "$input" | jq --arg filtered "$filtered_cmd" \332> echo "$input" | jq --arg filtered "$filtered_cmd" \

335> '{hookSpecificOutput: {hookEventName: "PreToolUse", updatedInput: (.tool_input + {command: $filtered})}}'333> '{hookSpecificOutput: {hookEventName: "PreToolUse", updatedInput: (.tool_input + {command: $filtered})}}'

336> else334> else


340 338 

341Para verificar la configuración, ejecuta `/hooks` y comprueba que el hook aparezca bajo PreToolUse. También puedes iniciar Claude Code con `claude --debug-file ./claude-debug.txt` y pedirle a Claude que ejecute `npm test`. Cuando el hook reescribe el comando, ese archivo de registro contiene una línea `modified tool input keys` que enumera `command` y los otros campos de entrada de Bash.339Para verificar la configuración, ejecuta `/hooks` y comprueba que el hook aparezca bajo PreToolUse. También puedes iniciar Claude Code con `claude --debug-file ./claude-debug.txt` y pedirle a Claude que ejecute `npm test`. Cuando el hook reescribe el comando, ese archivo de registro contiene una línea `modified tool input keys` que enumera `command` y los otros campos de entrada de Bash.

342 340 

341Un [skill](https://code.claude.com/docs/es/skills.md) puede darle a Claude conocimiento de dominio para que no tenga que explorar. Por ejemplo, un skill "codebase-overview" podría describir la arquitectura de tu proyecto, los directorios clave y las convenciones de nomenclatura. Cuando Claude invoca el skill, obtiene este contexto inmediatamente en lugar de gastar tokens leyendo múltiples archivos para entender la estructura.

342 

343### Mueve instrucciones de CLAUDE.md a skills343### Mueve instrucciones de CLAUDE.md a skills

344 344 

345Tu archivo [CLAUDE.md](https://code.claude.com/docs/es/memory.md) se carga en contexto al inicio de la sesión. Si contiene instrucciones detalladas para flujos de trabajo específicos (como revisiones de PR o migraciones de bases de datos), esos tokens están presentes incluso cuando estás haciendo trabajo no relacionado. Los [skills](https://code.claude.com/docs/es/skills.md) se cargan bajo demanda solo cuando se invocan, por lo que mover instrucciones especializadas a skills mantiene tu contexto base más pequeño. Procura mantener CLAUDE.md por debajo de 200 líneas incluyendo solo lo esencial.345Tu archivo [CLAUDE.md](https://code.claude.com/docs/es/memory.md) se carga en contexto al inicio de la sesión. Si contiene instrucciones detalladas para flujos de trabajo específicos (como revisiones de PR o migraciones de bases de datos), esos tokens están presentes incluso cuando estás haciendo trabajo no relacionado. Los [skills](https://code.claude.com/docs/es/skills.md) se cargan bajo demanda solo cuando se invocan, por lo que mover instrucciones especializadas a skills mantiene tu contexto base más pequeño. Procura mantener CLAUDE.md por debajo de 200 líneas incluyendo solo lo esencial.

Details

56 56 

57### Entrega de mensajes57### Entrega de mensajes

58 58 

59Claude que recibe lee el mensaje entre llamadas de herramientas durante un turno activo, por lo que una herramienta en ejecución nunca se interrumpe. Cuando la sesión receptora está inactiva, Claude Code inicia un nuevo turno con el mensaje.59Claude que recibe lee el mensaje entre llamadas a herramientas durante un turno activo. Cuando la sesión receptora está inactiva, Claude Code inicia un nuevo turno con el mensaje.

60 60 

61Un mensaje de otra sesión llega como texto sin formato. Si menciona un archivo o un [recurso MCP](https://code.claude.com/docs/es/mcp.md#use-mcp-resources) con `@`, Claude ve la mención tal como está escrita y Claude Code no adjunta nada, ya sea que el mensaje inicie un nuevo turno o llegue durante uno. Claude aún puede abrir una ruta mencionada en la máquina receptora con sus propias herramientas, sujeto a los permisos de esa sesión.61Un mensaje de otra sesión llega como texto sin formato. Si menciona un archivo o un [recurso MCP](https://code.claude.com/docs/es/mcp.md#use-mcp-resources) con `@`, Claude ve la mención tal como está escrita y Claude Code no adjunta nada, ya sea que el mensaje inicie un nuevo turno o llegue durante uno. Claude aún puede abrir una ruta mencionada en la máquina receptora con sus propias herramientas, sujeto a los permisos de esa sesión.

62 62 

desktop.md +3 −3

Details

256 256 

257### Minimizar un panel257### Minimizar un panel

258 258 

259Para mantener a la vista en un tamaño pequeño la terminal, el navegador o el [iOS Simulator](https://code.claude.com/docs/es/desktop-ios-simulator.md), haz clic en **Minimize** en el encabezado del panel. El botón requiere Claude Desktop v4.0.0 o posterior y una cuenta de Claude en lugar de un [proveedor externo](https://code.claude.com/docs/es/third-party-integrations.md). El panel del navegador lo tiene solo en sesiones locales.259Para mantener a la vista en un tamaño pequeño la terminal, el navegador, el [iOS Simulator](https://code.claude.com/docs/es/desktop-ios-simulator.md) o un [chat lateral](#ask-a-side-question-without-derailing-the-session), haz clic en **Minimize** en el encabezado del panel. El botón requiere Claude Desktop v4.0.0 o posterior y una cuenta de Claude en lugar de un [proveedor externo](https://code.claude.com/docs/es/third-party-integrations.md). El panel del navegador lo tiene solo en sesiones locales.

260 260 

261El panel minimizado se ubica en el [panel de detalles de la sesión](#see-session-details) mientras ese panel está en pantalla, y en caso contrario flota en una esquina del chat:261El panel minimizado se ubica en el [panel de detalles de la sesión](#see-session-details) mientras ese panel está en pantalla, y en caso contrario flota en una esquina del chat:

262 262 


1382 1382 

1383> [accordion] Cuándo siguen funcionando las ediciones en un worktree1383> [accordion] Cuándo siguen funcionando las ediciones en un worktree

1384>1384>

1385> En una máquina remota Linux o macOS, la revisión no pasa por Desktop, por lo que las ediciones dentro del worktree siguen funcionando mientras Desktop está desconectado. Antes de Claude Desktop v2.37337.0, esto ocurre solo en una máquina remota Linux.1385> En una máquina remota Linux o macOS, las ediciones dentro del worktree pueden seguir funcionando mientras Desktop está desconectado, porque la comprobación de cada edición puede ejecutarse sin Desktop. Antes de [Claude Desktop v2.37337.0](#check-your-version), esto solo funciona en una máquina remota Linux.

1386>1386>

1387> Las ediciones siguen fallando en algunos casos, entre ellos estos:1387> Las ediciones siguen fallando en algunos casos, entre ellos estos:

1388>1388>


2050 2050 

2051* **Sesiones locales en esta máquina**: se aplica un archivo de configuración administrada desplegado en disco. La configuración administrada enviada de forma remota a través de la consola de administración también llega a estas sesiones en la API de Anthropic cuando la sesión se autentica con un [inicio de sesión elegible](https://code.claude.com/docs/es/server-managed-settings.md#platform-availability), siguiendo la misma [precedencia de configuración](https://code.claude.com/docs/es/settings.md#settings-precedence) que la CLI de la terminal.2051* **Sesiones locales en esta máquina**: se aplica un archivo de configuración administrada desplegado en disco. La configuración administrada enviada de forma remota a través de la consola de administración también llega a estas sesiones en la API de Anthropic cuando la sesión se autentica con un [inicio de sesión elegible](https://code.claude.com/docs/es/server-managed-settings.md#platform-availability), siguiendo la misma [precedencia de configuración](https://code.claude.com/docs/es/settings.md#settings-precedence) que la CLI de la terminal.

2052* **[Sesiones en la nube](#cloud-sessions)**: reciben [configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md); los archivos desplegados en dispositivos no llegan a ellas, porque se ejecutan en máquinas virtuales administradas por Anthropic. Las sesiones enrutadas a un [entorno autohospedado](https://code.claude.com/docs/es/self-hosted-environments) también leen el archivo de configuración administrada en la imagen del ejecutor. [Cómo Claude Code combina fuentes administradas](https://code.claude.com/docs/es/managed-settings.md#how-claude-code-combines-managed-sources) indica cuándo se aplica ese archivo.2052* **[Sesiones en la nube](#cloud-sessions)**: reciben [configuración administrada por servidor](https://code.claude.com/docs/es/server-managed-settings.md); los archivos desplegados en dispositivos no llegan a ellas, porque se ejecutan en máquinas virtuales administradas por Anthropic. Las sesiones enrutadas a un [entorno autohospedado](https://code.claude.com/docs/es/self-hosted-environments) también leen el archivo de configuración administrada en la imagen del ejecutor. [Cómo Claude Code combina fuentes administradas](https://code.claude.com/docs/es/managed-settings.md#how-claude-code-combines-managed-sources) indica cuándo se aplica ese archivo.

2053* **[Sesiones SSH](#ssh-sessions)**: la sesión lee el archivo de configuración administrada desde el host remoto. Desktop mismo lee `sshConfigs`, `sshHostAllowlist`, `disableSshSavedPasswords` y `disableDesktopLocalSessions` en la máquina local. Si entregas más de una fuente administrada, los lee desde [una sola de forma predeterminada](https://code.claude.com/docs/es/managed-settings.md#how-claude-code-combines-managed-sources).2053* **[Sesiones SSH](#ssh-sessions)**: la sesión lee el archivo de configuración administrada desde el host remoto. Desktop mismo lee `sshConfigs`, `sshHostAllowlist`, `disableSshSavedPasswords` y `disableDesktopLocalSessions` en la máquina local. Si entregas más de una fuente administrada, los lee desde [una sola de forma predeterminada](https://code.claude.com/docs/es/managed-settings.md#how-claude-code-combines-managed-sources). Si estableces `permissions.disableBypassPermissionsMode` o `disableAutoMode` en la configuración administrada vigente en la máquina local, el selector de modo de una sesión SSH no ofrece ese modo, independientemente de lo que establezca el host remoto.

2054* **Sesiones de [Cowork](https://claude.com/docs/cowork/overview)**: en una sesión de Cowork en esta máquina, Claude Code nunca obtiene la configuración de la consola de administración, incluso cuando el usuario inicia sesión con una cuenta de Team o Enterprise, y lee la política desplegada en la máquina a menos que tu configuración de Claude Desktop establezca `requireCoworkFullVmSandbox`. Las sesiones remotas de Cowork no reciben ninguna de las dos. Consulta [dónde y cuándo se aplica una política](https://code.claude.com/docs/es/managed-settings.md#where-and-when-a-policy-applies) para saber qué archivos de dispositivo llegan a Cowork, y [reglas de permisos de MCP](https://code.claude.com/docs/es/permissions.md#mcp) para saber cómo se aplican las reglas de `Bash` y `WebFetch` a las herramientas de Cowork.2054* **Sesiones de [Cowork](https://claude.com/docs/cowork/overview)**: en una sesión de Cowork en esta máquina, Claude Code nunca obtiene la configuración de la consola de administración, incluso cuando el usuario inicia sesión con una cuenta de Team o Enterprise, y lee la política desplegada en la máquina a menos que tu configuración de Claude Desktop establezca `requireCoworkFullVmSandbox`. Las sesiones remotas de Cowork no reciben ninguna de las dos. Consulta [dónde y cuándo se aplica una política](https://code.claude.com/docs/es/managed-settings.md#where-and-when-a-policy-applies) para saber qué archivos de dispositivo llegan a Cowork, y [reglas de permisos de MCP](https://code.claude.com/docs/es/permissions.md#mcp) para saber cómo se aplican las reglas de `Bash` y `WebFetch` a las herramientas de Cowork.

2055 2055 

2056En sesiones locales y SSH, la aplicación de escritorio entrega directamente a Claude Code los conectores de claude.ai conectados de cada usuario. Ningún ajuste de MCP ni `managed-mcp.json` llega a esos conectores, cualquiera que sea la fuente de configuración o ubicación de archivo que uses. Para bloquear las herramientas de un conector en estas sesiones, usa los [controles de herramientas de conectores](https://code.claude.com/docs/es/mcp.md#organization-controls-on-connector-tools) de tu organización. [Cómo los conectores llegan a Claude Code](https://code.claude.com/docs/es/mcp.md#how-connectors-reach-claude-code) muestra qué configuración rige los conectores en cada tipo de sesión.2056En sesiones locales y SSH, la aplicación de escritorio entrega directamente a Claude Code los conectores de claude.ai conectados de cada usuario. Ningún ajuste de MCP ni `managed-mcp.json` llega a esos conectores, cualquiera que sea la fuente de configuración o ubicación de archivo que uses. Para bloquear las herramientas de un conector en estas sesiones, usa los [controles de herramientas de conectores](https://code.claude.com/docs/es/mcp.md#organization-controls-on-connector-tools) de tu organización. [Cómo los conectores llegan a Claude Code](https://code.claude.com/docs/es/mcp.md#how-connectors-reach-claude-code) muestra qué configuración rige los conectores en cada tipo de sesión.

env-vars.md +4 −4

Details

502| `OTEL_LOG_TOOL_CONTENT` | Establécelo en `1` para incluir el contenido de las herramientas en el evento de span `tool.output` de OpenTelemetry. Los atributos de span llevan el contenido de las herramientas bajo [sus propias condiciones](https://code.claude.com/docs/es/monitoring-usage.md#new-context-gates). Requiere [rastreo](https://code.claude.com/docs/es/monitoring-usage.md#traces-beta). Deshabilitado de forma predeterminada para proteger los datos sensibles. Establécelo en tu shell, en la configuración de usuario o en la configuración administrada. Se ignora en [la configuración de proyecto y local](https://code.claude.com/docs/es/settings-reference.md#variables-claude-code-ignores-in-env), salvo los valores de desactivación que describe esa sección. Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md#tool-output-span-event) |502| `OTEL_LOG_TOOL_CONTENT` | Establécelo en `1` para incluir el contenido de las herramientas en el evento de span `tool.output` de OpenTelemetry. Los atributos de span llevan el contenido de las herramientas bajo [sus propias condiciones](https://code.claude.com/docs/es/monitoring-usage.md#new-context-gates). Requiere [rastreo](https://code.claude.com/docs/es/monitoring-usage.md#traces-beta). Deshabilitado de forma predeterminada para proteger los datos sensibles. Establécelo en tu shell, en la configuración de usuario o en la configuración administrada. Se ignora en [la configuración de proyecto y local](https://code.claude.com/docs/es/settings-reference.md#variables-claude-code-ignores-in-env), salvo los valores de desactivación que describe esa sección. Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md#tool-output-span-event) |

503| `OTEL_LOG_TOOL_DETAILS` | Establécelo en `1` para incluir los argumentos de entrada de las herramientas; los nombres de los servidores MCP; los nombres de los flujos de trabajo creados por el usuario; las cadenas de error sin procesar en los fallos de herramientas; la `category` del rechazo en los eventos `api_refusal`; los nombres reales de agentes, skills, plugins y servidores MCP en las [métricas de costo y tokens](https://code.claude.com/docs/es/monitoring-usage.md#cost-counter); y otros detalles de las herramientas en las métricas, trazas y registros de OpenTelemetry. Deshabilitado de forma predeterminada para proteger la PII. Establécelo en tu shell, en la configuración de usuario o en la configuración administrada. Se ignora en [la configuración de proyecto y local](https://code.claude.com/docs/es/settings-reference.md#variables-claude-code-ignores-in-env), salvo los valores de desactivación que describe esa sección. Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |503| `OTEL_LOG_TOOL_DETAILS` | Establécelo en `1` para incluir los argumentos de entrada de las herramientas; los nombres de los servidores MCP; los nombres de los flujos de trabajo creados por el usuario; las cadenas de error sin procesar en los fallos de herramientas; la `category` del rechazo en los eventos `api_refusal`; los nombres reales de agentes, skills, plugins y servidores MCP en las [métricas de costo y tokens](https://code.claude.com/docs/es/monitoring-usage.md#cost-counter); y otros detalles de las herramientas en las métricas, trazas y registros de OpenTelemetry. Deshabilitado de forma predeterminada para proteger la PII. Establécelo en tu shell, en la configuración de usuario o en la configuración administrada. Se ignora en [la configuración de proyecto y local](https://code.claude.com/docs/es/settings-reference.md#variables-claude-code-ignores-in-env), salvo los valores de desactivación que describe esa sección. Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |

504| `OTEL_LOG_USER_PROMPTS` | Establécelo en `1` para incluir el texto de los prompts del usuario en las trazas y registros de OpenTelemetry. Deshabilitado de forma predeterminada (los prompts se ocultan). Establécelo en tu shell, en la configuración de usuario o en la configuración administrada. Se ignora en [la configuración de proyecto y local](https://code.claude.com/docs/es/settings-reference.md#variables-claude-code-ignores-in-env), salvo los valores de desactivación que describe esa sección. Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |504| `OTEL_LOG_USER_PROMPTS` | Establécelo en `1` para incluir el texto de los prompts del usuario en las trazas y registros de OpenTelemetry. Deshabilitado de forma predeterminada (los prompts se ocultan). Establécelo en tu shell, en la configuración de usuario o en la configuración administrada. Se ignora en [la configuración de proyecto y local](https://code.claude.com/docs/es/settings-reference.md#variables-claude-code-ignores-in-env), salvo los valores de desactivación que describe esa sección. Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |

505| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | Establécelo en `false` para excluir el UUID de la cuenta de los atributos de las métricas (predeterminado: incluido). Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |505| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | Establécela en `false` para excluir el UUID de la cuenta de los atributos de métricas y eventos (predeterminado: incluido). Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |

506| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | Establécelo en `true` para incluir el punto de entrada de la sesión en los atributos de las métricas (predeterminado: excluido). Añadida en v2.1.152. Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |506| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | Establécela en `true` para incluir el punto de entrada de la sesión en los atributos de métricas y eventos (predeterminado: excluido). Se añadió en v2.1.152. Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |

507| `OTEL_METRICS_INCLUDE_REPOSITORY` | Establécelo en `true` para etiquetar las métricas y los eventos de OpenTelemetry con atributos `vcs.*` que identifican el repositorio de la sesión (predeterminado: excluido). Requiere Claude Code v2.1.269 o posterior. Consulta [Atributos del repositorio](https://code.claude.com/docs/es/monitoring-usage.md#repository-attributes) |507| `OTEL_METRICS_INCLUDE_REPOSITORY` | Establécelo en `true` para etiquetar las métricas y los eventos de OpenTelemetry con atributos `vcs.*` que identifican el repositorio de la sesión (predeterminado: excluido). Requiere Claude Code v2.1.269 o posterior. Consulta [Atributos del repositorio](https://code.claude.com/docs/es/monitoring-usage.md#repository-attributes) |

508| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | A partir de v2.1.161, Claude Code adjunta las claves de `OTEL_RESOURCE_ATTRIBUTES` a las etiquetas de los puntos de datos de las métricas. Establécelo en `false` para excluirlas (predeterminado: incluidas). Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md#multi-team-organization-support) |508| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | A partir de v2.1.161, Claude Code adjunta las claves de `OTEL_RESOURCE_ATTRIBUTES` a las etiquetas de los puntos de datos de las métricas. Establécelo en `false` para excluirlas (predeterminado: incluidas). Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md#multi-team-organization-support) |

509| `OTEL_METRICS_INCLUDE_SESSION_ID` | Establécelo en `false` para excluir el ID de sesión de los atributos de las métricas (predeterminado: incluido). Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |509| `OTEL_METRICS_INCLUDE_SESSION_ID` | Establécela en `false` para excluir el ID de sesión de los atributos de métricas y eventos (predeterminado: incluido). Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |

510| `OTEL_METRICS_INCLUDE_VERSION` | Establécelo en `true` para incluir la versión de Claude Code en los atributos de las métricas (predeterminado: excluida). Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |510| `OTEL_METRICS_INCLUDE_VERSION` | Establécela en `true` para incluir la versión de Claude Code en los atributos de métricas y eventos (predeterminado: excluida). Consulta [Monitoreo](https://code.claude.com/docs/es/monitoring-usage.md) |

511| `SLASH_COMMAND_TOOL_CHAR_BUDGET` | Sobrescribe el presupuesto de caracteres para los metadatos de los skills que se muestran a la [herramienta Skill](https://code.claude.com/docs/es/skills.md#control-who-invokes-a-skill). El presupuesto escala dinámicamente al 1% de la ventana de contexto, con un valor de respaldo de 8,000 caracteres. Nombre heredado que se conserva por compatibilidad con versiones anteriores |511| `SLASH_COMMAND_TOOL_CHAR_BUDGET` | Sobrescribe el presupuesto de caracteres para los metadatos de los skills que se muestran a la [herramienta Skill](https://code.claude.com/docs/es/skills.md#control-who-invokes-a-skill). El presupuesto escala dinámicamente al 1% de la ventana de contexto, con un valor de respaldo de 8,000 caracteres. Nombre heredado que se conserva por compatibilidad con versiones anteriores |

512| `TASK_MAX_OUTPUT_LENGTH` | Eliminada en v2.1.277 y ahora no tiene efecto, junto con la herramienta `TaskOutput` cuyo tamaño definía. Anteriormente establecía el número máximo de caracteres de la salida de una [tarea en segundo plano](https://code.claude.com/docs/es/tools-reference.md#background-commands) que conservaba la herramienta `TaskOutput`. Ahora Claude lee el archivo de salida de una tarea en segundo plano con `Read` |512| `TASK_MAX_OUTPUT_LENGTH` | Eliminada en v2.1.277 y ahora no tiene efecto, junto con la herramienta `TaskOutput` cuyo tamaño definía. Anteriormente establecía el número máximo de caracteres de la salida de una [tarea en segundo plano](https://code.claude.com/docs/es/tools-reference.md#background-commands) que conservaba la herramienta `TaskOutput`. Ahora Claude lee el archivo de salida de una tarea en segundo plano con `Read` |

513| `USE_BUILTIN_RIPGREP` | Establécelo en `0` para usar el `rg` instalado en el sistema en lugar del `rg` incluido con Claude Code |513| `USE_BUILTIN_RIPGREP` | Establécelo en `0` para usar el `rg` instalado en el sistema en lugar del `rg` incluido con Claude Code |

errors.md +1 −1

Details

3741 3741 

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

3743 3743 

3744* `Shell command permission check failed for pattern "..."`: la verificación de permisos del comando no lo permitió. [Permission checks on injected commands](https://code.claude.com/docs/es/skills.md#permission-checks-on-injected-commands) explica qué resultados provocan la cancelación en cada modo de permisos y cómo aprobar previamente un comando con `allowed-tools`3744* `Shell command permission check failed for pattern "..."`: la verificación de permisos del comando no lo permitió. [Verificaciones de permisos en comandos inyectados](https://code.claude.com/docs/es/skills.md#permission-checks-on-injected-commands) explica qué resultados provocan la cancelación en cada modo de permisos y cómo aprobar previamente un comando con `allowed-tools`

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

3746 3746 

3747**Qué hacer:**3747**Qué hacer:**

fast-mode.md +1 −3

Details

67 67 

68Siempre que un cambio de modelo activa o desactiva el modo rápido, Claude Code muestra una confirmación `Fast mode ON` o `Fast mode OFF`, y el icono `↯` aparece mientras el modo rápido está activado. Esto se aplica tanto si cambias con `/model`, con [`/config model=<model>`](https://code.claude.com/docs/es/settings), como desde un dispositivo conectado a través de [Control Remoto](https://code.claude.com/docs/es/remote-control.md).68Siempre que un cambio de modelo activa o desactiva el modo rápido, Claude Code muestra una confirmación `Fast mode ON` o `Fast mode OFF`, y el icono `↯` aparece mientras el modo rápido está activado. Esto se aplica tanto si cambias con `/model`, con [`/config model=<model>`](https://code.claude.com/docs/es/settings), como desde un dispositivo conectado a través de [Control Remoto](https://code.claude.com/docs/es/remote-control.md).

69 69 

70Claude Code reenvía el estado del modo rápido de la sesión a los dispositivos conectados a través de Remote Control después de un cambio de modelo, una reconexión, o una [verificación de disponibilidad](#use-fast-mode-behind-proxies-and-llm-gateways) fallida.

71 

72### Usar el modo rápido en sesiones en la nube70### Usar el modo rápido en sesiones en la nube

73 71 

74El modo rápido funciona en [sesiones en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md) cuando está disponible en tu cuenta, ya sea que la sesión se ejecute en infraestructura administrada por Anthropic o en un [ejecutor autohospedado](https://code.claude.com/docs/es/self-hosted-environments). Requiere Claude Code v2.1.271 o posterior en el entorno de la sesión.72El modo rápido funciona en [sesiones en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md) cuando está disponible en tu cuenta, ya sea que la sesión se ejecute en infraestructura administrada por Anthropic o en un [ejecutor autohospedado](https://code.claude.com/docs/es/self-hosted-environments). Requiere Claude Code v2.1.271 o posterior en el entorno de la sesión.


227Si se agotan tus créditos de uso a mitad de la sesión, Claude Code reintenta cada solicitud de modo rápido rechazada a velocidad y precios estándar, por lo que continúas trabajando y no hay enfriamiento. La forma en que ves el rechazo depende del tipo de sesión:225Si se agotan tus créditos de uso a mitad de la sesión, Claude Code reintenta cada solicitud de modo rápido rechazada a velocidad y precios estándar, por lo que continúas trabajando y no hay enfriamiento. La forma en que ves el rechazo depende del tipo de sesión:

228 226 

229* En una sesión interactiva, Claude Code muestra una notificación "Fast mode disabled · Out of usage credits" (Modo rápido desactivado · sin créditos de uso) y desactiva el modo rápido. Tu preferencia de modo rápido guardada no cambia; ejecuta `/fast` para volver a activar el modo rápido.227* En una sesión interactiva, Claude Code muestra una notificación "Fast mode disabled · Out of usage credits" (Modo rápido desactivado · sin créditos de uso) y desactiva el modo rápido. Tu preferencia de modo rápido guardada no cambia; ejecuta `/fast` para volver a activar el modo rápido.

230* En [modo no interactivo](https://code.claude.com/docs/es/headless.md) con `--output-format stream-json`, y a través del Agent SDK, Claude Code emite el mismo texto en el flujo de mensajes como un mensaje `system` con subtipo `notification`, una vez por turno mientras se te acaban los créditos de uso. El modo rápido permanece activado. Requiere Claude Code v2.1.221 o posterior.228* En [modo no interactivo](https://code.claude.com/docs/es/headless.md) con `--output-format stream-json`, y a través del Agent SDK, Claude Code emite el mismo texto en el flujo de mensajes como un mensaje `system` con subtipo `notification`. El mensaje llega una vez por turno mientras no tengas créditos de uso. El modo rápido permanece activado.

231 229 

232## Vista previa de investigación230## Vista previa de investigación

233 231 

gateways.md +1 −1

Details

50 50 

51## Suscripciones y puertas de enlace51## Suscripciones y puertas de enlace

52 52 

53Cuando los desarrolladores se conectan a través de una puerta de enlace con una credencial de puerta de enlace, el uso se factura a la cuenta de proveedor de su organización a tasas de API, y sus suscripciones de claude.ai no se usan ni se cobran. Configurar [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/es/env-vars) para una puerta de enlace que ejecuta, o iniciar sesión en una puerta de enlace de aplicaciones Claude con `/login`, desactiva el inicio de sesión de suscripción para esa sesión. Cada solicitud reenviada bajo esa credencial se cobra a la cuenta detrás de la credencial del proveedor de la puerta de enlace.53Cuando los desarrolladores se conectan a través de un gateway con una credencial de gateway, el uso se factura a la cuenta de proveedor de tu organización a tarifas de API, y sus suscripciones de claude.ai no se usan ni se cobran. Cada solicitud reenviada con esa credencial se cobra a la cuenta asociada a la credencial del proveedor del gateway.

54 54 

55La excepción es configurar solo `ANTHROPIC_BASE_URL`, sin credencial de puerta de enlace. Las solicitudes aún se enrutan a través de la puerta de enlace, pero un inicio de sesión de claude.ai guardado permanece como la credencial activa, por lo que los límites de uso y la facturación de la suscripción se aplican. [Otras puertas de enlace LLM](https://code.claude.com/docs/es/llm-gateway#subscriptions-and-gateways) cubre esa configuración y lo que la puerta de enlace tiene que reenviar para que funcione.55La excepción es configurar solo `ANTHROPIC_BASE_URL`, sin credencial de puerta de enlace. Las solicitudes aún se enrutan a través de la puerta de enlace, pero un inicio de sesión de claude.ai guardado permanece como la credencial activa, por lo que los límites de uso y la facturación de la suscripción se aplican. [Otras puertas de enlace LLM](https://code.claude.com/docs/es/llm-gateway#subscriptions-and-gateways) cubre esa configuración y lo que la puerta de enlace tiene que reenviar para que funcione.

56 56 

Details

135| Merge queues | Lectura |135| Merge queues | Lectura |

136| Metadata | Lectura |136| Metadata | Lectura |

137| Pull requests | Lectura y escritura |137| Pull requests | Lectura y escritura |

138| Repository creation | Lectura y escritura |

138| Repository hooks | Lectura y escritura |139| Repository hooks | Lectura y escritura |

139| Statuses | Lectura |140| Statuses | Lectura |

140| Workflows | Lectura y escritura |141| Workflows | Lectura y escritura |

Details

190Algunas características se comportan de manera diferente en GHES que en github.com. La [tabla de características](#what-works-with-github-enterprise-server) resume la compatibilidad; esta sección cubre las soluciones alternativas.190Algunas características se comportan de manera diferente en GHES que en github.com. La [tabla de características](#what-works-with-github-enterprise-server) resume la compatibilidad; esta sección cubre las soluciones alternativas.

191 191 

192* **Comando `/install-github-app`**: siga el flujo de [configuración del administrador](#admin-setup) en claude.ai en su lugar. Si también desea flujos de trabajo de GitHub Actions en GHES, adapte el [flujo de trabajo de ejemplo](https://github.com/anthropics/claude-code-action/blob/main/examples/claude.yml) manualmente.192* **Comando `/install-github-app`**: siga el flujo de [configuración del administrador](#admin-setup) en claude.ai en su lugar. Si también desea flujos de trabajo de GitHub Actions en GHES, adapte el [flujo de trabajo de ejemplo](https://github.com/anthropics/claude-code-action/blob/main/examples/claude.yml) manualmente.

193* **Servidor GitHub MCP**: use la CLI `gh` configurada para su host de GHES en su lugar. Ejecute `gh auth login --hostname github.example.com` para autenticarse, luego Claude puede usar comandos `gh` en sesiones.193* **Servidor GitHub MCP**: en una sesión en tu propia máquina, usa la CLI `gh` configurada para tu host de GHES en su lugar. Ejecuta `gh auth login --hostname github.example.com` para autenticarte y luego Claude podrá usar comandos `gh` allí.

194 194 

195## Solución de problemas195## Solución de problemas

196 196 

goal.md +3 −2

Details

131 131 

132#### Los errores que debe corregir borran el objetivo132#### Los errores que debe corregir borran el objetivo

133 133 

134Si un turno falla en un error que no se borrará hasta que lo corrija, Claude Code borra el objetivo e imprime una advertencia nombrando la causa. La advertencia comienza con `Goal cleared after an unrecoverable error` y termina con `Run /goal again to continue`. Corrija la causa, luego [establezca el objetivo nuevamente](#set-a-goal) con `/goal <condition>`. Cuatro tipos de fallo borran el objetivo:134Si un turno falla en un error que no se resolverá hasta que lo corrijas, Claude Code borra el objetivo e imprime una advertencia nombrando la causa. La advertencia comienza con `Goal cleared after an unrecoverable error` y termina con `Run /goal again to continue`. Corrige la causa y luego [establece el objetivo nuevamente](#set-a-goal) con `/goal <condition>`. Entre los fallos que borran el objetivo se incluyen:

135 135 

136* Un fallo de autenticación, cuando Claude Code gestiona sus propias credenciales. Cuando un host las gestiona por usted, como la aplicación de escritorio o una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), Claude Code deja el objetivo activo porque el host restaura el acceso por su cuenta.136* Un fallo de autenticación, cuando Claude Code gestiona sus propias credenciales. Cuando un host las gestiona por usted, como la aplicación de escritorio o una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), Claude Code deja el objetivo activo porque el host restaura el acceso por su cuenta.

137* Un disco demasiado lleno para que Claude Code renueve tu inicio de sesión de claude.ai, cuando Claude Code gestiona sus propias credenciales. La advertencia muestra `(disk full)`. [Libera espacio en el disco que contiene el directorio de configuración de Claude Code](https://code.claude.com/docs/es/errors.md#could-not-refresh-your-login-disk-full).

137* Un saldo de crédito agotado138* Un saldo de crédito agotado

138* Un desbordamiento de contexto que [auto-compact](https://code.claude.com/docs/es/model-config.md#set-the-auto-compact-window) no pudo borrar139* Un desbordamiento de contexto que [auto-compact](https://code.claude.com/docs/es/model-config.md#set-the-auto-compact-window) no pudo borrar

139* Un modelo que no está disponible140* Un modelo que no está disponible


178 179 

179## Requisitos180## Requisitos

180 181 

181Claude Code pone `/goal` disponible bajo la misma [regla de confianza del espacio de trabajo que los hooks en archivos de configuración](https://code.claude.com/docs/es/permissions.md#what-runs-before-you-trust-a-folder), porque el evaluador es parte del sistema de hooks. `/goal` también no está disponible cuando [`disableAllHooks`](https://code.claude.com/docs/es/hooks#disable-or-remove-hooks) es `true` después de que se aplica la precedencia de configuración, o cuando [`allowManagedHooksOnly`](https://code.claude.com/docs/es/settings-reference#allowmanagedhooksonly) se establece en la configuración administrada. En cada caso, el comando le indica por qué en lugar de no hacer nada silenciosamente.182Claude Code pone `/goal` disponible bajo la misma [regla de confianza del espacio de trabajo que los hooks en archivos de configuración](https://code.claude.com/docs/es/permissions.md#what-runs-before-you-trust-a-folder), porque el evaluador es parte del sistema de hooks. `/goal` también no está disponible cuando [`disableAllHooks`](https://code.claude.com/docs/es/hooks#disable-or-remove-hooks) es `true` después de que se aplica la precedencia de configuración, o cuando [`allowManagedHooksOnly`](https://code.claude.com/docs/es/settings-reference#allowmanagedhooksonly) se establece en la configuración administrada.

182 183 

183## Ver también184## Ver también

184 185 

Details

139* **Claude Opus 4.5, Sonnet 4.5, Haiku 4.5 y posterior**: Claude Code habilita la búsqueda de herramientas de forma predeterminada.139* **Claude Opus 4.5, Sonnet 4.5, Haiku 4.5 y posterior**: Claude Code habilita la búsqueda de herramientas de forma predeterminada.

140* **Modelos anteriores**: Claude Code carga las definiciones de herramientas MCP por adelantado, porque sus pilas de servicio de Agent Platform rechazan el encabezado beta requerido. Establecer `ENABLE_TOOL_SEARCH=true` no sobrescribe esto.140* **Modelos anteriores**: Claude Code carga las definiciones de herramientas MCP por adelantado, porque sus pilas de servicio de Agent Platform rechazan el encabezado beta requerido. Establecer `ENABLE_TOOL_SEARCH=true` no sobrescribe esto.

141 141 

142Establezca `ENABLE_TOOL_SEARCH=false` para deshabilitar la búsqueda de herramientas en todos los modelos. 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 `ENABLE_TOOL_SEARCH=true`.142Establece `ENABLE_TOOL_SEARCH=false` para deshabilitar la búsqueda de herramientas en todos los modelos.

143 143 

144### Fijar versiones de modelo144### Fijar versiones de modelo

145 145 

hooks.md +28 −4

Details

572 572 

573Claude Code lee el contenido de texto de la herramienta de la misma manera que lee stdout de hook de comando, siguiendo la [regla de análisis bajo código de salida 0](#exit-code-0). Si la herramienta devuelve `isError: true`, el hook produce un error sin bloqueo y la ejecución continúa.573Claude Code lee el contenido de texto de la herramienta de la misma manera que lee stdout de hook de comando, siguiendo la [regla de análisis bajo código de salida 0](#exit-code-0). Si la herramienta devuelve `isError: true`, el hook produce un error sin bloqueo y la ejecución continúa.

574 574 

575Si un error de hook contiene uno de estos mensajes, Claude Code no pudo leer la respuesta de la herramienta, así que el hook no dio ningún veredicto:

576 

577```text theme={null}

578MCP tool "security_scan" on server "my_server" gave no answer that could be read, because a message from the server was too large, so this hook gave no verdict. If this keeps happening, the tool must send a smaller answer.

579MCP tool "security_scan" on server "my_server" answered without its text, which happens when a result is too large, so this hook gave no verdict. If this keeps happening, the tool must send a smaller answer.

580```

581 

582En `PreToolUse`, Claude Code rechaza la llamada a herramienta que el hook estaba verificando. En otros eventos como `UserPromptSubmit`, `PostToolUse` y `Stop`, el error es sin bloqueo.

583 

584Si el error sigue apareciendo, devuelve menos datos desde la herramienta, o cambia [`tool` o `input`](#mcp-tool-hook-fields) del hook para que la respuesta sea más pequeña.

585 

575##### Cuando el servidor aún se está conectando586##### Cuando el servidor aún se está conectando

576 587 

577En 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`](https://code.claude.com/docs/es/env-vars) y dentro del [`timeout`](#common-fields) del propio hook. En eventos observacionales, como `Notification` o `SessionEnd`, no espera.588En 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`](https://code.claude.com/docs/es/env-vars) y dentro del [`timeout`](#common-fields) del propio hook. En eventos observacionales, como `Notification` o `SessionEnd`, no espera.


892 903 

893#### Hooks que inician un proceso en segundo plano904#### Hooks que inician un proceso en segundo plano

894 905 

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

907 

908* Ejecuta el programa en segundo plano

909* Redirige su stdout y su stderr. Por ejemplo, el comando Bash `npm run dev > dev-server.log 2>&1 &` envía ambos a un archivo. Si no los rediriges, un hook que no es [async](#run-hooks-in-the-background) tarda hasta 10 segundos en terminar después de que sale su propio proceso.

910 

895Si tu hook de comando toma su decisión en un proceso en segundo plano y sale, una denegación que ese proceso imprima después de que Claude Code haya dejado de leer no bloquea la llamada a herramienta. Para un hook que no es [async](#run-hooks-in-the-background), Claude Code termina de leer la salida del hook poco después de que sale el propio proceso del hook.911Si tu hook de comando toma su decisión en un proceso en segundo plano y sale, una denegación que ese proceso imprima después de que Claude Code haya dejado de leer no bloquea la llamada a herramienta. Para un hook que no es [async](#run-hooks-in-the-background), Claude Code termina de leer la salida del hook poco después de que sale el propio proceso del hook.

896 912 

897Imprime la decisión antes de iniciar un proceso en segundo plano, y redirige el stdout y el stderr de ese proceso. Si tu script imprime un allow y luego inicia un proceso en segundo plano sin redirigir el stdout y el stderr de ese proceso, Claude Code bloquea la llamada a herramienta. El error del hook incluye `refusing to honor the suspect capture`.913Imprime la decisión antes de iniciar un proceso en segundo plano, y redirige el stdout y el stderr de ese proceso. Si tu script imprime un allow y luego inicia un proceso en segundo plano sin redirigir el stdout y el stderr de ese proceso, Claude Code bloquea la llamada a herramienta. El error del hook incluye `stdio went quiet` y `refusing to honor the suspect capture`.

898 914 

899Este script de hook `PreToolUse` imprime la decisión con `policy-check.sh` y luego sube métricas en segundo plano:915Este script de hook `PreToolUse` imprime la decisión con `policy-check.sh` y luego sube métricas en segundo plano:

900 916 


1193 1209 

1194* `PreToolUse`: `updatedInput` directamente bajo `hookSpecificOutput` reemplaza los argumentos de una herramienta antes de que se ejecute. Consulta [Control de decisión de PreToolUse](#pretooluse-decision-control)1210* `PreToolUse`: `updatedInput` directamente bajo `hookSpecificOutput` reemplaza los argumentos de una herramienta antes de que se ejecute. Consulta [Control de decisión de PreToolUse](#pretooluse-decision-control)

1195* `PermissionRequest`: `updatedInput` dentro del objeto `decision`. Consulta [Control de decisión de PermissionRequest](#permissionrequest-decision-control)1211* `PermissionRequest`: `updatedInput` dentro del objeto `decision`. Consulta [Control de decisión de PermissionRequest](#permissionrequest-decision-control)

1196* `PostToolUse`: `updatedToolOutput` reemplaza el resultado de la herramienta. Consulta [Control de decisión de PostToolUse](#posttooluse-decision-control)1212* `PostToolUse`: `updatedToolOutput` reemplaza el resultado de la herramienta. En una sesión en la nube de [Cowork](https://claude.com/docs/cowork/overview), Claude Code ignora `updatedToolOutput` cuando la herramienta es `AskUserQuestion` o `ExitPlanMode`, y Claude lee la respuesta o el plan originales. Consulta [Control de decisión de PostToolUse](#posttooluse-decision-control)

1197* `UserPromptSubmit`: no puede reemplazar el prompt; solo inyecta `additionalContext` junto a él1213* `UserPromptSubmit`: no puede reemplazar el prompt; solo inyecta `additionalContext` junto a él

1198 1214 

1199Para casos de uso de redacción o transformación, intercepta en `PreToolUse` las entradas salientes de herramientas y en `PostToolUse` los resultados entrantes de herramientas.1215Para casos de uso de redacción o transformación, intercepta en `PreToolUse` las entradas salientes de herramientas y en `PostToolUse` los resultados entrantes de herramientas.


2210| `addDirectories` | `directories`, `destination` | Agrega directorios de trabajo. `directories` es un array de cadenas de rutas |2226| `addDirectories` | `directories`, `destination` | Agrega directorios de trabajo. `directories` es un array de cadenas de rutas |

2211| `removeDirectories` | `directories`, `destination` | Elimina directorios de trabajo |2227| `removeDirectories` | `directories`, `destination` | Elimina directorios de trabajo |

2212 2228 

2229En `rules`, para una [regla de permisos](https://code.claude.com/docs/es/permissions.md#permission-rule-syntax) escrita como `Tool(specifier)`, `toolName` es el nombre de la herramienta y `ruleContent` es el especificador:

2230 

2231* `Bash(npm test)`: `{ "toolName": "Bash", "ruleContent": "npm test" }`

2232* `Bash` o `Bash(*)`: `{ "toolName": "Bash" }`, porque ambas coinciden con toda la herramienta

2233* `mcp__github__get_issue`: `{ "toolName": "mcp__github__get_issue" }`

2234 

2235No incluyas `ruleContent` en una regla allow para una [herramienta MCP](https://code.claude.com/docs/es/permissions.md#mcp). Si lo agregas, la regla no coincide con ninguna llamada.

2236 

2213> [!NOTE]2237> [!NOTE]

2214>2238>

2215> `setMode` con `bypassPermissions` solo tiene efecto si iniciaste la sesión con el modo bypass ya disponible: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` o `permissions.defaultMode: "bypassPermissions"` en la [configuración de usuario, `--settings` o la configuración administrada](https://code.claude.com/docs/es/settings-reference#permissions-defaultmode). De lo contrario, la actualización no tiene efecto. La actualización tampoco tiene efecto cuando [`permissions.disableBypassPermissionsMode`](https://code.claude.com/docs/es/permissions#managed-settings) desactiva el modo, o cuando la sesión se inicia en [modo restringido](https://code.claude.com/docs/es/cli-reference.md#cli-flags).2239> `setMode` con `bypassPermissions` solo tiene efecto si iniciaste la sesión con el modo bypass ya disponible: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` o `permissions.defaultMode: "bypassPermissions"` en la [configuración de usuario, `--settings` o la configuración administrada](https://code.claude.com/docs/es/settings-reference#permissions-defaultmode). De lo contrario, la actualización no tiene efecto. La actualización tampoco tiene efecto cuando [`permissions.disableBypassPermissionsMode`](https://code.claude.com/docs/es/permissions#managed-settings) desactiva el modo, o cuando la sesión se inicia en [modo restringido](https://code.claude.com/docs/es/cli-reference.md#cli-flags).


2289| `reason` | Explicación que se muestra a Claude cuando `decision` es `"block"` |2313| `reason` | Explicación que se muestra a Claude cuando `decision` es `"block"` |

2290| `additionalContext` | Cadena que se agrega al contexto de Claude junto con el resultado de la herramienta. Consulta [Agregar contexto para Claude](#add-context-for-claude) |2314| `additionalContext` | Cadena que se agrega al contexto de Claude junto con el resultado de la herramienta. Consulta [Agregar contexto para Claude](#add-context-for-claude) |

2291| `classifierContext` | Nota breve sobre el resultado de esta llamada destinada al clasificador del [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) en lugar de a Claude. Consulta [Anotar un resultado para el clasificador del modo automático](#annotate-a-result-for-the-auto-mode-classifier). Requiere Claude Code v2.1.236 o posterior |2315| `classifierContext` | Nota breve sobre el resultado de esta llamada destinada al clasificador del [modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) en lugar de a Claude. Consulta [Anotar un resultado para el clasificador del modo automático](#annotate-a-result-for-the-auto-mode-classifier). Requiere Claude Code v2.1.236 o posterior |

2292| `updatedToolOutput` | Reemplaza la salida de la herramienta con el valor proporcionado antes de enviarla a Claude. El valor debe coincidir con la forma de la salida de la herramienta |2316| `updatedToolOutput` | Reemplaza la salida de la herramienta con el valor proporcionado antes de enviarla a Claude. El valor debe coincidir con la forma de la salida de la herramienta. En una sesión en la nube de [Cowork](https://claude.com/docs/cowork/overview), Claude Code ignora este campo cuando la herramienta es `AskUserQuestion` o `ExitPlanMode`, y Claude lee la respuesta o el plan originales |

2293| `updatedMCPToolOutput` | Reemplaza la salida solo para [herramientas MCP](#match-mcp-tools). Prefiere `updatedToolOutput`, que funciona para todas las herramientas |2317| `updatedMCPToolOutput` | Reemplaza la salida solo para [herramientas MCP](#match-mcp-tools). Es preferible `updatedToolOutput`, que también funciona para las herramientas integradas |

2294 2318 

2295El siguiente ejemplo reemplaza la salida de una llamada a `Bash`. El valor de reemplazo coincide con la forma de la salida de la herramienta `Bash`:2319El siguiente ejemplo reemplaza la salida de una llamada a `Bash`. El valor de reemplazo coincide con la forma de la salida de la herramienta `Bash`:

2296 2320 

hooks-guide.md +1 −1

Details

964 964 

965> [!NOTE]965> [!NOTE]

966>966>

967> Si tu máquina no tiene [configuración administrada](https://code.claude.com/docs/es/settings.md#check-what-your-organization-enforces) y tu sesión no usa [credenciales de `/login`](https://code.claude.com/docs/es/authentication#authentication-precedence) para un plan Team o Enterprise, un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) puede aprobar una llamada que tu hook `PreToolUse` bloqueó. Una sesión que se ejecuta con una clave de API o con un [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/es/authentication#generate-a-long-lived-token) de larga duración no está usando ese inicio de sesión, incluso cuando ese inicio de sesión está almacenado.967> Es posible que tu máquina no tenga [configuración administrada](https://code.claude.com/docs/es/settings.md#check-what-your-organization-enforces) ni un [archivo `managed-mcp.json`](https://code.claude.com/docs/es/managed-mcp#deploy-managed-mcp-json), y que tu sesión no use [credenciales de `/login`](https://code.claude.com/docs/es/authentication#authentication-precedence) para un plan Team o Enterprise. En esa configuración, un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) puede aprobar una llamada que tu hook `PreToolUse` bloqueó. Una sesión que se ejecuta con una clave de API o con un [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/es/authentication#generate-a-long-lived-token) de larga duración no está usando ese inicio de sesión, incluso cuando ese inicio de sesión está almacenado.

968>968>

969> En modo plan, un mod puede aprobar una llamada bloqueada de ese tipo solo cuando es de solo lectura, es decir, no una edición de archivo. Para los casos en los que la aprobación de un mod no supera tus reglas y hooks, consulta [Extender permisos con hooks](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods).969> En modo plan, un mod puede aprobar una llamada bloqueada de ese tipo solo cuando es de solo lectura, es decir, no una edición de archivo. Para los casos en los que la aprobación de un mod no supera tus reglas y hooks, consulta [Extender permisos con hooks](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods).

970 970 

Details

251| `d`/`x` | Eliminar selección |251| `d`/`x` | Eliminar selección |

252| `y` | Yanquear selección |252| `y` | Yanquear selección |

253| `c`/`s` | Cambiar selección |253| `c`/`s` | Cambiar selección |

254| `p` | Reemplazar selección con contenido del registro |254| `p`/`P` | Reemplazar selección con contenido del registro |

255| `r{char}` | Reemplazar cada carácter seleccionado con `{char}` |255| `r{char}` | Reemplazar cada carácter seleccionado con `{char}` |

256| `~`/`u`/`U` | Alternar, minúsculas o mayúsculas de selección |256| `~`/`u`/`U` | Alternar, minúsculas o mayúsculas de selección |

257| `>`/`<` | Indentar o desindentación de líneas seleccionadas |257| `>`/`<` | Indentar o desindentación de líneas seleccionadas |


304 304 

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

306 306 

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

308 

307## Comandos Bash en segundo plano309## Comandos Bash en segundo plano

308 310 

309Claude Code admite la ejecución de comandos Bash en segundo plano, lo que le permite continuar trabajando mientras se ejecutan procesos de larga duración.311Claude Code admite la ejecución de comandos Bash en segundo plano, lo que le permite continuar trabajando mientras se ejecutan procesos de larga duración.

keybindings.md +1 −1

Details

305 305 

306### Acciones de diferencias306### Acciones de diferencias

307 307 

308Estas acciones solo llegan al visor de diff anterior de Claude Code, que `/diff` abre fuera del [renderizado de pantalla completa](https://code.claude.com/docs/es/fullscreen.md) después de que deshabilitas el [mod `cc-plugin-diff`](https://code.claude.com/docs/es/plugins/mods/overview#mods-built-into-claude-code) en `/plugin`. Mientras ese mod está habilitado, `/diff` abre el [diálogo de diff](https://code.claude.com/docs/es/interactive-mode.md#diff-dialog) en su lugar. Un `keybindings.json` que nombra estas acciones se carga sin errores en cualquier caso.308Estas acciones solo llegan al visor de diff anterior de Claude Code, que `/diff` abre fuera del [renderizado de pantalla completa](https://code.claude.com/docs/es/fullscreen.md) después de que deshabilitas el [mod `cc-plugin-diff`](https://code.claude.com/docs/es/plugins/mods/overview#mods-built-into-claude-code) en `/plugin`. Mientras ese mod está habilitado, `/diff` abre el [diálogo de diff](https://code.claude.com/docs/es/interactive-mode.md#diff-dialog) en su lugar.

309 309 

310Acciones disponibles en el contexto `DiffDialog`:310Acciones disponibles en el contexto `DiffDialog`:

311 311 

Details

197* `Marketplace "claude-plugins-official" not found`: agregue el marketplace con `/plugin marketplace add anthropics/claude-plugins-official`, luego reintente la instalación.197* `Marketplace "claude-plugins-official" not found`: agregue el marketplace con `/plugin marketplace add anthropics/claude-plugins-official`, luego reintente la instalación.

198* `Plugin "<name>" not found in marketplace "claude-plugins-official"`: es posible que tu copia local del catálogo del marketplace esté desactualizada. Actualízala con `/plugin marketplace update claude-plugins-official` y luego reintenta la instalación. Si el reintento muestra el mismo mensaje, consulta [Plugin not found in marketplace](https://code.claude.com/docs/es/plugins/troubleshooting.md#plugin-not-found-in-marketplace).198* `Plugin "<name>" not found in marketplace "claude-plugins-official"`: es posible que tu copia local del catálogo del marketplace esté desactualizada. Actualízala con `/plugin marketplace update claude-plugins-official` y luego reintenta la instalación. Si el reintento muestra el mismo mensaje, consulta [Plugin not found in marketplace](https://code.claude.com/docs/es/plugins/troubleshooting.md#plugin-not-found-in-marketplace).

199 199 

200Para habilitar un plugin para todos en el repositorio en lugar de instalarlo usted mismo, agréguelo a la configuración de proyecto [`enabledPlugins`](https://code.claude.com/docs/es/settings-reference#plugin-settings).200Para activar un plugin para todos en el repositorio, agrégalo al [ajuste de proyecto `enabledPlugins`](https://code.claude.com/docs/es/settings-reference#plugin-settings). Aun así, cada persona [lo instala](https://code.claude.com/docs/es/plugins/loading.md#enabled-in-project-settings-but-not-installed).

201 201 

202Los plugins de inteligencia de código requieren el binario del servidor de lenguaje del lenguaje en la máquina de cada desarrollador. Consulte [qué binario requiere cada lenguaje](https://code.claude.com/docs/es/plugins/code-intelligence.md). La instalación desde el marketplace oficial requiere acceso de red a GitHub, donde se aloja el marketplace. En una red restringida, [agregue el marketplace desde un host Git interno o ruta local](https://code.claude.com/docs/es/plugins/install.md#add-a-marketplace) en su lugar.202Los plugins de inteligencia de código requieren el binario del servidor de lenguaje del lenguaje en la máquina de cada desarrollador. Consulte [qué binario requiere cada lenguaje](https://code.claude.com/docs/es/plugins/code-intelligence.md). La instalación desde el marketplace oficial requiere acceso de red a GitHub, donde se aloja el marketplace. En una red restringida, [agregue el marketplace desde un host Git interno o ruta local](https://code.claude.com/docs/es/plugins/install.md#add-a-marketplace) en su lugar.

203 203 


235 235 

236Enumere directorios en `sparsePaths`, no archivos individuales. Los archivos de nivel raíz como `package.json`, `tsconfig.base.json` y archivos de bloqueo siempre se verifican junto con los directorios que enumera. Los directorios de nivel raíz no, así que incluya `.claude` en la lista si desea que el `.claude/settings.json` de la raíz del repositorio o los archivos `.claude/rules/` estén disponibles dentro del worktree. Para skills de proyecto, agentes y comandos, consulte [Qué comparten los worktrees con el checkout principal](https://code.claude.com/docs/es/worktrees.md#what-worktrees-share-with-the-main-checkout).236Enumere directorios en `sparsePaths`, no archivos individuales. Los archivos de nivel raíz como `package.json`, `tsconfig.base.json` y archivos de bloqueo siempre se verifican junto con los directorios que enumera. Los directorios de nivel raíz no, así que incluya `.claude` en la lista si desea que el `.claude/settings.json` de la raíz del repositorio o los archivos `.claude/rules/` estén disponibles dentro del worktree. Para skills de proyecto, agentes y comandos, consulte [Qué comparten los worktrees con el checkout principal](https://code.claude.com/docs/es/worktrees.md#what-worktrees-share-with-the-main-checkout).

237 237 

238El sparse checkout requiere que git habilite `extensions.worktreeConfig` en el `.git/config` compartido del repositorio mientras exista un worktree disperso. Claude Code elimina esa entrada después de que se elimina el último worktree, pero solo si Claude Code la agregó. Nunca elimina un valor que hayas establecido tú.238> [!NOTE]

239>

240> El sparse checkout requiere que git habilite `extensions.worktreeConfig` en el `.git/config` compartido del repositorio mientras exista un worktree disperso. Claude Code elimina esa entrada después de que se elimina el último worktree, pero solo si Claude Code la agregó.

239 241 

240Para evitar duplicar directorios grandes como `node_modules` entre worktrees, empareje `sparsePaths` con `symlinkDirectories` en el mismo `.claude/settings.json`:242Para evitar duplicar directorios grandes como `node_modules` entre worktrees, empareje `sparsePaths` con `symlinkDirectories` en el mismo `.claude/settings.json`:

241 243 

Details

156 156 

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

158 158 

159Una variable de credencial de puerta de enlace tiene precedencia sobre un inicio de sesión de claude.ai guardado o una clave de Consola. Su inicio de sesión de claude.ai permanece guardado y sin usar mientras la variable está establecida; desestablezca la variable y Claude Code vuelve a ella. Con `ANTHROPIC_AUTH_TOKEN`, la variable tiene precedencia inmediatamente. Con `ANTHROPIC_API_KEY`, se le solicita una vez en modo interactivo para aprobar la clave antes de que tome el control.159Una variable de credencial de gateway tiene precedencia sobre un inicio de sesión de claude.ai guardado o una clave de Console. Con `ANTHROPIC_AUTH_TOKEN`, la variable tiene precedencia de inmediato. Con `ANTHROPIC_API_KEY`, se te solicita una vez en modo interactivo que apruebes la clave antes de que tome el control.

160 160 

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

162 162 


378Establecer la variable tiene estos efectos y limitaciones:378Establecer la variable tiene estos efectos y limitaciones:

379 379 

380* Desactiva las actualizaciones automáticas, por lo que planifique otra ruta de actualización, como su gestor de paquetes o distribución administrada.380* Desactiva las actualizaciones automáticas, por lo que planifique otra ruta de actualización, como su gestor de paquetes o distribución administrada.

381* Suprime la comprobación de disponibilidad del [modo rápido](https://code.claude.com/docs/es/fast-mode.md). A menos que una comprobación anterior ya haya habilitado el modo rápido en la máquina, `/fast` reporta que el modo rápido no está disponible.381* Suprime la comprobación de disponibilidad del [modo rápido](https://code.claude.com/docs/es/fast-mode.md). En la API de Anthropic, si `/fast` informa entonces que el modo rápido no está disponible, consulta [usar el modo rápido detrás de proxies y gateways de LLM](https://code.claude.com/docs/es/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) para restablecer el modo rápido.

382* No afecta el [descubrimiento de modelos de puerta de enlace](#add-gateway-models-to-the-model-picker), que consulta solo su puerta de enlace. Antes de v2.1.257, la variable también detenía el descubrimiento de actualizarse, por lo que el selector mantenía la lista previamente almacenada en caché.382* No afecta el [descubrimiento de modelos de puerta de enlace](#add-gateway-models-to-the-model-picker), que consulta solo su puerta de enlace. Antes de v2.1.257, la variable también detenía el descubrimiento de actualizarse, por lo que el selector mantenía la lista previamente almacenada en caché.

383* La [comprobación de seguridad de dominio](https://code.claude.com/docs/es/data-usage.md#webfetch-domain-safety-check) de la herramienta WebFetch no se ve afectada y aún llama a `api.anthropic.com`. Desactívela por separado con `skipWebFetchPreflight: true` en [configuración](https://code.claude.com/docs/es/settings.md) si su red bloquea ese host.383* La [comprobación de seguridad de dominio](https://code.claude.com/docs/es/data-usage.md#webfetch-domain-safety-check) de la herramienta WebFetch no se ve afectada y aún llama a `api.anthropic.com`. Desactívela por separado con `skipWebFetchPreflight: true` en [configuración](https://code.claude.com/docs/es/settings.md) si su red bloquea ese host.

384* Para cada flujo de telemetría y la variable que lo controla, consulte [servicios de telemetría](https://code.claude.com/docs/es/data-usage.md#telemetry-services).384* Para cada flujo de telemetría y la variable que lo controla, consulte [servicios de telemetría](https://code.claude.com/docs/es/data-usage.md#telemetry-services).

Details

251 251 

252* Un indicador de inicio de sesión significa una brecha de credencial. Ejecute `/status` y abra la pestaña **Status**: cuando la línea `Setting sources` no incluye configuración administrada, la distribución no alcanzó la máquina; cuando lo hace, la credencial de desarrollador no fue entregada, así que establezca `ANTHROPIC_AUTH_TOKEN` o el `apiKeyHelper`252* Un indicador de inicio de sesión significa una brecha de credencial. Ejecute `/status` y abra la pestaña **Status**: cuando la línea `Setting sources` no incluye configuración administrada, la distribución no alcanzó la máquina; cuando lo hace, la credencial de desarrollador no fue entregada, así que establezca `ANTHROPIC_AUTH_TOKEN` o el `apiKeyHelper`

253* Los errores `Failed to authenticate` significan que la puerta de enlace está rechazando solicitudes; su registro dice qué credencial falló. Un rechazo que la puerta de enlace registra a sí misma nombra la clave de desarrollador, mientras que un `401` de `api.anthropic.com` o el punto final de su proveedor significa que la credencial de proveedor que la puerta de enlace tiene fue rechazada253* Los errores `Failed to authenticate` significan que la puerta de enlace está rechazando solicitudes; su registro dice qué credencial falló. Un rechazo que la puerta de enlace registra a sí misma nombra la clave de desarrollador, mientras que un `401` de `api.anthropic.com` o el punto final de su proveedor significa que la credencial de proveedor que la puerta de enlace tiene fue rechazada

254* Un indicador de aprobación de una sola vez para la clave es esperado en el primer uso cuando la puerta de enlace espera claves en el encabezado `x-api-key`, establecidas como `ANTHROPIC_API_KEY`. Con `ANTHROPIC_AUTH_TOKEN`, no aparece ningún indicador y la variable toma el control silenciosamente; un inicio de sesión de claude.ai previamente guardado está inactivo para esa sesión254* Es normal que aparezca una única solicitud de aprobación para la clave en el primer uso cuando el gateway espera las claves en el encabezado `x-api-key`, establecidas como `ANTHROPIC_API_KEY`

255 255 

256Si su organización usa [modo rápido](https://code.claude.com/docs/es/fast-mode.md), ejecute `/fast` aquí también: la verificación de disponibilidad llama a `api.anthropic.com` directamente en lugar de seguir la URL base de la puerta de enlace, así que una sesión enrutada por puerta de enlace puede reportar modo rápido como no disponible o deshabilitado aunque la inferencia funcione. [Usar modo rápido detrás de proxies y puertas de enlace LLM](https://code.claude.com/docs/es/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) asigna cada mensaje a la variable que lo restaura, distribuida con [el resto de la configuración](#distribute-the-configuration).256Si su organización usa [modo rápido](https://code.claude.com/docs/es/fast-mode.md), ejecute `/fast` aquí también: la verificación de disponibilidad llama a `api.anthropic.com` directamente en lugar de seguir la URL base de la puerta de enlace, así que una sesión enrutada por puerta de enlace puede reportar modo rápido como no disponible o deshabilitado aunque la inferencia funcione. [Usar modo rápido detrás de proxies y puertas de enlace LLM](https://code.claude.com/docs/es/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) asigna cada mensaje a la variable que lo restaura, distribuida con [el resto de la configuración](#distribute-the-configuration).

257 257 

managed-mcp.md +1 −1

Details

187 187 

188* `type` es `http` o `sse`. Como en `.mcp.json`, `streamable-http` se acepta como alias para `http`.188* `type` es `http` o `sse`. Como en `.mcp.json`, `streamable-http` se acepta como alias para `http`.

189* `url` es una URL `https://`. Claude Code rechaza una URL `http://` simple, incluida una que apunte a `localhost`.189* `url` es una URL `https://`. Claude Code rechaza una URL `http://` simple, incluida una que apunte a `localhost`.

190* La entrada no tiene miembro `command`, `args`, `env` o `headersHelper`, por lo que un documento de configuración administrada nunca nombra un programa para ejecutar en la máquina de un usuario.190* La entrada no tiene miembro `command`, `args`, `env` o `headersHelper`.

191* Ningún valor contiene una referencia `${VAR}`. Claude Code no expande variables de entorno en estas entradas, así que escriba valores literales.191* Ningún valor contiene una referencia `${VAR}`. Claude Code no expande variables de entorno en estas entradas, así que escriba valores literales.

192* El nombre del servidor contiene solo letras, números, guiones e guiones bajos, y ninguna clave o valor contiene caracteres de control o formato invisible.192* El nombre del servidor contiene solo letras, números, guiones e guiones bajos, y ninguna clave o valor contiene caracteres de control o formato invisible.

193 193 

mcp.md +215 −217

Details

58 58 

59Claude le pregunta sobre su caso de uso y crea un servidor HTTP remoto o un servidor stdio local.59Claude le pregunta sobre su caso de uso y crea un servidor HTTP remoto o un servidor stdio local.

60 60 

61## Instalación de servidores MCP61## Instalar servidores MCP

62 62 

63Los servidores MCP se pueden configurar de varias formas según tus necesidades:63Los servidores MCP se pueden configurar de varias maneras según tus necesidades:

64 64 

65### Opción 1: Agregar un servidor HTTP remoto65### Opción 1: Agregar un servidor HTTP remoto

66 66 

67Los servidores HTTP son la opción recomendada para conectarse a servidores MCP remotos. Este es el transporte más ampliamente compatible para servicios basados en la nube.67Los servidores HTTP son la opción recomendada para conectarte a servidores MCP remotos. Es el transporte más ampliamente compatible para servicios basados en la nube.

68 68 

69```bash theme={null}69```bash theme={null}

70# Sintaxis básica70# Basic syntax

71claude mcp add --transport http <name> <url>71claude mcp add --transport http <name> <url>

72 72 

73# Ejemplo real: Conectar a Notion73# Real example: Connect to Notion

74claude mcp add --transport http notion https://mcp.notion.com/mcp74claude mcp add --transport http notion https://mcp.notion.com/mcp

75 75 

76# Ejemplo con token Bearer76# Example with Bearer token

77claude mcp add --transport http secure-api https://api.example.com/mcp \77claude mcp add --transport http secure-api https://api.example.com/mcp \

78 --header "Authorization: Bearer your-token"78 --header "Authorization: Bearer your-token"

79```79```

80 80 

81Al 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.81Cuando configuras servidores MCP mediante JSON en `.mcp.json`, `~/.claude.json` o `claude mcp add-json`, el campo `type` acepta `streamable-http` como alias de `http`. La especificación de MCP usa el nombre `streamable-http` para este transporte, por lo que las configuraciones copiadas de la documentación de un servidor funcionan sin modificaciones.

82 82 

83Una 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`.83Una entrada JSON que tiene `url` pero no `type` es un error de configuración, porque Claude Code interpreta 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`.

84 84 

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

86 86 

87> [!NOTE]87> [!NOTE]

88>88>

89> En ejecuciones con `--output-format stream-json`, Claude Code también informa de una entrada omitida de `--mcp-config` en el [campo `mcp_server_errors`](https://code.claude.com/docs/es/headless#stream-responses) del evento `system/init`, para que los scripts puedan detectar que el servidor nunca se cargó.89> En ejecuciones con `--output-format stream-json`, Claude Code también informa una entrada de `--mcp-config` omitida en el [campo `mcp_server_errors`](https://code.claude.com/docs/es/headless#stream-responses) del evento `system/init`, para que los scripts puedan detectar que el servidor nunca se cargó.

90 90 

91### Opción 2: Agregar un servidor SSE remoto91### Opción 2: Agregar un servidor SSE remoto

92 92 


94>94>

95> El transporte SSE (Server-Sent Events) está obsoleto. Usa servidores HTTP en su lugar, cuando estén disponibles.95> El transporte SSE (Server-Sent Events) está obsoleto. Usa servidores HTTP en su lugar, cuando estén disponibles.

96 96 

97Algunos servicios aún exponen solo un endpoint SSE. Agrégalos 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.97Algunos servicios todavía exponen solo un endpoint SSE. Agrégalos con el mismo comando `claude mcp add --transport http <name> <url>` que [un servidor HTTP](#option-1-add-a-remote-http-server). Claude Code prueba primero el transporte HTTP y cambia a SSE cuando el servidor no lo acepta. El cambio automático requiere Claude Code v2.1.265 o posterior.

98 98 

99En una versión anterior, o para conectarte sobre SSE directamente, pasa `--transport sse` en su lugar:99En una versión anterior, o para conectarte directamente por SSE, pasa `--transport sse` en su lugar:

100 100 

101```bash theme={null}101```bash theme={null}

102# Sintaxis básica102# Basic syntax

103claude mcp add --transport sse <name> <url>103claude mcp add --transport sse <name> <url>

104 104 

105# Ejemplo real: Conectar a Asana105# Real example: Connect to Asana

106claude mcp add --transport sse asana https://mcp.asana.com/sse106claude mcp add --transport sse asana https://mcp.asana.com/sse

107 107 

108# Ejemplo con encabezado de autenticación108# Example with authentication header

109claude mcp add --transport sse private-api https://api.company.com/sse \109claude mcp add --transport sse private-api https://api.company.com/sse \

110 --header "X-API-Key: your-key-here"110 --header "X-API-Key: your-key-here"

111```111```

112 112 

113### Opción 3: Agregar un servidor stdio local113### Opción 3: Agregar un servidor stdio local

114 114 

115Los servidores stdio se ejecutan como procesos locales en tu máquina. Son ideales para herramientas que necesitan acceso directo al sistema o scripts personalizados.115Los servidores stdio se ejecutan como procesos locales en tu máquina. Son ideales para herramientas que necesitan acceso directo al sistema o para scripts personalizados.

116 116 

117Claude Code establece `CLAUDE_PROJECT_DIR` en el entorno del servidor generado a la raíz del proyecto, para que tu 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éelo desde dentro de tu proceso de servidor, por ejemplo `process.env.CLAUDE_PROJECT_DIR` en Node o `os.environ["CLAUDE_PROJECT_DIR"]` en Python.117Claude Code establece `CLAUDE_PROJECT_DIR` en el entorno del servidor iniciado con la raíz del proyecto, para que tu servidor pueda resolver rutas relativas al proyecto sin depender del directorio de trabajo. Es el mismo directorio que reciben los hooks en su variable `CLAUDE_PROJECT_DIR`. Léela desde dentro del proceso de tu servidor, por ejemplo `process.env.CLAUDE_PROJECT_DIR` en Node u `os.environ["CLAUDE_PROJECT_DIR"]` en Python.

118 118 

119`CLAUDE_PROJECT_DIR` es la raíz estable del proyecto y no cambia cuando agregas o eliminas 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](https://code.claude.com/docs/es/permissions.md#working-directories) que hayas otorgado con `--add-dir`, `/add-dir`, o el ajuste `additionalDirectories`. Claude Code envía `notifications/roots/list_changed` cuando ese conjunto cambia.119`CLAUDE_PROJECT_DIR` es la raíz estable del proyecto y no cambia cuando agregas o quitas directorios de trabajo a mitad de la sesión. Un servidor que limita su propio acceso al sistema de archivos a un conjunto de directorios permitidos debería implementar en su lugar la solicitud MCP `roots/list`. Claude Code responde a `roots/list` con el directorio de inicio de la sesión más cada [directorio de trabajo adicional](https://code.claude.com/docs/es/permissions.md#working-directories) que hayas concedido con `--add-dir`, `/add-dir` o el ajuste `additionalDirectories`. Claude Code envía `notifications/roots/list_changed` cuando ese conjunto cambia.

120 120 

121Esta 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 de una entrada de servidor con alcance 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.121Esta variable se establece en el entorno del servidor, no en el propio entorno de Claude Code, por lo que referenciarla mediante la expansión `${VAR}` en el `command` o los `args` de una entrada de `.mcp.json` con alcance de proyecto, o de una entrada de servidor con alcance 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.

122 122 

123```bash theme={null}123```bash theme={null}

124# Sintaxis básica124# Basic syntax

125claude mcp add [options] <name> -- <command> [args...]125claude mcp add [options] <name> -- <command> [args...]

126 126 

127# Ejemplo real: Agregar servidor Airtable127# Real example: Add Airtable server

128claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \128claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \

129 -- npx -y airtable-mcp-server129 -- npx -y airtable-mcp-server

130```130```

131 131 

132> [!NOTE]132> [!NOTE]

133>133>

134> Para servidores stdio, el `--` (doble guion) separa las opciones propias de Claude, como `--transport`, `--env`, y `--scope`, del comando y los argumentos que ejecutan el servidor. Todo lo que viene después de `--` se pasa al servidor sin cambios.134> Para los servidores stdio, el `--` (doble guion) separa las opciones propias de Claude, como `--transport`, `--env` y `--scope`, del comando y los argumentos que ejecutan el servidor. Todo lo que va después de `--` se pasa al servidor sin cambios.

135>135>

136> Por ejemplo:136> Por ejemplo:

137>137>

138> * `claude mcp add --transport stdio myserver -- npx server` → ejecuta `npx server`138> * `claude mcp add --transport stdio myserver -- npx server` → ejecuta `npx server`

139> * `claude mcp add --env KEY=value --transport stdio myserver -- python server.py --port 8080` → ejecuta `python server.py --port 8080` con `KEY=value` en el entorno139> * `claude mcp add --env KEY=value --transport stdio myserver -- python server.py --port 8080` → ejecuta `python server.py --port 8080` con `KEY=value` en el entorno

140>140>

141> Sin `--`, Claude Code intentaría analizar los flags del servidor, como `--port` arriba, como sus propias opciones.141> Sin `--`, Claude Code intentaría interpretar los flags del servidor, como `--port` arriba, como sus propias opciones.

142>142>

143> `--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 coloca al menos otra opción, como `--transport stdio`, entre `--env` y el nombre del servidor.143> `--env` acepta varios pares `KEY=value`. Si el nombre del servidor va directamente después de `--env`, la CLI interpreta el nombre como otro par y lo rechaza, así que coloca al menos otra opción, como `--transport stdio`, entre `--env` y el nombre del servidor.

144 144 

145#### Cómo Claude Code detiene un servidor stdio145#### Cómo detiene Claude Code un servidor stdio

146 146 

147Cuando Claude Code desconecta un servidor stdio, por ejemplo cuando termina tu sesión, envía una señal al proceso del servidor y espera brevemente a que termine antes de forzar su detención. Si tu servidor guarda estado o elimina archivos de bloqueo al apagarse, maneja la señal correspondiente a tu plataforma y termina dentro de ese tiempo:147Cuando Claude Code desconecta un servidor stdio, por ejemplo cuando termina tu sesión, envía una señal al proceso del servidor y espera brevemente a que salga antes de forzar su detención. Si tu servidor guarda estado o elimina archivos de bloqueo al apagarse, maneja la señal correspondiente a tu plataforma y termina dentro de ese tiempo:

148 148 

149* **En macOS y Linux**: Claude Code envía `SIGINT`, luego `SIGTERM` si el proceso aún se está ejecutando 100 milisegundos después, y luego `SIGKILL` tras otros 400 milisegundos.149* **En macOS y Linux**: Claude Code envía `SIGINT`, luego `SIGTERM` si el proceso sigue en ejecución 100 milisegundos después, y luego `SIGKILL` tras otros 400 milisegundos.

150* **En Windows**: Claude Code cierra el stdin del servidor y luego finaliza el árbol de procesos del servidor si el proceso aún se está ejecutando 300 milisegundos después.150* **En Windows**: Claude Code cierra el stdin del servidor y luego termina el árbol de procesos del servidor si el proceso sigue en ejecución 300 milisegundos después.

151 151 

152Antes de v2.1.296, Claude Code en Windows finalizaba el árbol de procesos del servidor de inmediato, sin cerrar primero stdin ni esperar.152Antes de v2.1.296, Claude Code en Windows terminaba el árbol de procesos del servidor de inmediato, sin cerrar primero el stdin ni esperar.

153 153 

154### Opción 4: Agregar un servidor WebSocket remoto154### Opción 4: Agregar un servidor WebSocket remoto

155 155 

156Los servidores WebSocket mantienen una conexión bidireccional persistente, que es adecuada para servidores MCP remotos que envían eventos a Claude sin que se les solicite. Usa HTTP en su lugar cuando tu servidor solo responda a solicitudes, ya que HTTP admite OAuth y el flag `claude mcp add --transport`, mientras que WebSocket no admite ninguno de los dos.156Los servidores WebSocket mantienen una conexión bidireccional persistente, lo que conviene a servidores MCP remotos que envían eventos a Claude sin que se los pidan. Usa HTTP en su lugar cuando tu servidor solo responde a solicitudes, ya que HTTP admite OAuth y el flag `claude mcp add --transport`, mientras que WebSocket no admite ninguno de los dos.

157 157 

158Configura servidores WebSocket en `.mcp.json` o con `claude mcp add-json`:158Configura los servidores WebSocket en `.mcp.json` o con `claude mcp add-json`:

159 159 

160```bash theme={null}160```bash theme={null}

161claude mcp add-json events-server \161claude mcp add-json events-server \

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

163```163```

164 164 

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

166 166 

167### Agregar un servidor desde instrucciones de configuración escritas para otro cliente167### Agregar un servidor a partir de instrucciones de configuración escritas para otro cliente

168 168 

169Los 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, busca en esas instrucciones una URL, un comando de lanzamiento, o un bloque JSON:169Los 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 incluir ningún comando `claude mcp add`. Para agregar el servidor de todos modos, busca en esas instrucciones una URL, un comando de inicio o un bloque JSON:

170 170 

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

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

173* **Un bloque JSON `mcpServers`**: configuración escrita para el archivo de configuración de otro cliente.173* **Un bloque JSON `mcpServers`**: configuración escrita para el archivo de configuración de otro cliente.

174 174 

175Cada uno es una de las entradas que toman las cuatro opciones en [Instalación de servidores MCP](#installing-mcp-servers). Encuentra a continuación la forma que tienes para convertirla en el comando que Claude Code acepta. Cada comando escribe en [alcance local](#local-scope) a menos que agregues `--scope project` o `--scope user`.175Cada uno es una de las entradas que aceptan las cuatro opciones de [Instalar servidores MCP](#installing-mcp-servers). Busca a continuación la forma que tienes para convertirla en el comando que acepta Claude Code. Cada comando escribe en el [alcance local](#local-scope) a menos que agregues `--scope project` o `--scope user`.

176 176 

177#### Agregar un servidor desde una URL177#### Agregar un servidor a partir de una URL

178 178 

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

180 180 


182claude mcp add --transport http example https://mcp.example.com/mcp182claude mcp add --transport http example https://mcp.example.com/mcp

183```183```

184 184 

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

186 186 

187#### Agregar un servidor desde un comando `npx`, `uvx`, o binario187#### Agregar un servidor a partir de un comando `npx`, `uvx` o binario

188 188 

189Un comando de lanzamiento significa que el servidor se ejecuta como un proceso stdio local. Pon todo el comando después de `--`, para que Claude Code pase flags como `-y` al comando que inicia el servidor en lugar de leerlos como sus propias opciones. Pasa cualquier variable de entorno que las instrucciones soliciten con `--env`, después del nombre del servidor y antes de `--`:189Un comando de inicio significa que el servidor se ejecuta como un proceso stdio local. Coloca el comando completo después de `--`, para que Claude Code pase flags como `-y` al comando que inicia el servidor en lugar de interpretarlos como sus propias opciones. Pasa con `--env` cualquier variable de entorno que pidan las instrucciones, después del nombre del servidor y antes de `--`:

190 190 

191```bash theme={null}191```bash theme={null}

192claude mcp add example --env API_KEY=your-key -- npx -y @example/mcp-server192claude mcp add example --env API_KEY=your-key -- npx -y @example/mcp-server

193```193```

194 194 

195La [Opción 3](#option-3-add-a-local-stdio-server) cubre el separador `--` en su totalidad.195La [Opción 3](#option-3-add-a-local-stdio-server) explica en detalle el separador `--`.

196 196 

197#### Agregar un servidor desde un bloque JSON `mcpServers`197#### Agregar un servidor a partir de un bloque JSON `mcpServers`

198 198 

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

200 200 

201* **Una `url` sin `type`**: agrega `"type": "http"`, `"type": "sse"`, o `"type": "ws"` para que coincida con el endpoint. Claude Code lee una entrada sin `type` como un servidor stdio, por lo que una entrada `url` sin `type` falla.201* **Una `url` sin `type`**: agrega `"type": "http"`, `"type": "sse"` o `"type": "ws"` según el endpoint. Claude Code interpreta una entrada sin `type` como un servidor stdio, por lo que una entrada con `url` sin `type` falla.

202* **Una clave con caracteres distintos de letras, números, guiones y guiones bajos**: elige un nombre de servidor que use solo esos caracteres. De lo contrario, la clave es el nombre del servidor.202* **Una clave con caracteres distintos de letras, números, guiones y guiones bajos**: elige un nombre de servidor que use solo esos caracteres. En caso contrario, la clave es el nombre del servidor.

203 203 

204Por ejemplo, este bloque:204Por ejemplo, este bloque:

205 205 


220claude mcp add-json example '{"command":"npx","args":["-y","@example/mcp-server"]}'220claude mcp add-json example '{"command":"npx","args":["-y","@example/mcp-server"]}'

221```221```

222 222 

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

224 224 

225Cada 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ó, ejecuta `claude mcp get <name>`; [Estado del servidor](#server-status) cubre los estados que muestra y el paso de aprobación para servidores `.mcp.json`.225Cada comando `claude mcp add` y `claude mcp add-json` imprime una línea `Added ...` si tiene éxito. Para comprobar que Claude Code se conectó, ejecuta `claude mcp get <name>`; [Estado del servidor](#server-status) explica los estados que muestra y el paso de aprobación para los servidores de `.mcp.json`.

226 226 

227### Administración de tus servidores227### Administrar tus servidores

228 228 

229Una vez configurados, puedes administrar tus servidores MCP con estos comandos:229Una vez configurados, puedes administrar tus servidores MCP con estos comandos:

230 230 

231```bash theme={null}231```bash theme={null}

232# Listar todos los servidores configurados232# List all configured servers

233claude mcp list233claude mcp list

234 234 

235# Obtener detalles de un servidor específico235# Get details for a specific server

236claude mcp get notion236claude mcp get notion

237 237 

238# Eliminar un servidor238# Remove a server

239claude mcp remove notion239claude mcp remove notion

240 240 

241# (dentro de Claude Code) Verificar estado del servidor241# (within Claude Code) Check server status

242/mcp242/mcp

243```243```

244 244 

245Cuando eliminas un servidor remoto, Claude Code también borra los tokens OAuth y el registro de cliente que almacenó para ese servidor. Claude Code no revoca los tokens en el servidor de autorización que los emitió. Para revocar los tokens cuando el servidor de autorización admite la revocación, ejecuta [`claude mcp logout <name>`](#authenticate-from-the-command-line) en tu shell antes de `claude mcp remove <name>`.245Cuando eliminas un servidor remoto, Claude Code también borra los tokens de OAuth y el registro de cliente que almacenó para ese servidor. Claude Code no revoca los tokens en el servidor de autorización que los emitió. Para revocar los tokens cuando el servidor de autorización admite la revocación, ejecuta [`claude mcp logout <name>`](#authenticate-from-the-command-line) en tu shell antes de `claude mcp remove <name>`.

246 246 

247#### Estado del servidor247#### Estado del servidor

248 248 

249`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, consulta [MCP server was not saved or removed](https://code.claude.com/docs/es/errors.md#mcp-server-was-not-saved-or-removed); para un mensaje `may not have been saved`, consulta [MCP server may not have been saved or removed](https://code.claude.com/docs/es/errors.md#mcp-server-may-not-have-been-saved-or-removed).249`claude mcp add` confirma que se agregó correctamente imprimiendo una línea `Added ...`, lo que significa que se escribió la configuración. Si el comando imprime en su lugar un mensaje `was not saved`, consulta [El servidor MCP no se guardó ni se eliminó](https://code.claude.com/docs/es/errors.md#mcp-server-was-not-saved-or-removed); para un mensaje `may not have been saved`, consulta [Es posible que el servidor MCP no se haya guardado o eliminado](https://code.claude.com/docs/es/errors.md#mcp-server-may-not-have-been-saved-or-removed).

250 250 

251`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.251`claude mcp list` muestra un estado de salud junto a cada servidor que lista, como `✔ Connected`, `! Needs authentication` o `✘ Failed to connect`. Un estado de fallo significa que Claude Code no pudo conectarse a ese servidor, no que el comando de listado haya fallado.

252 252 

253Los 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:253Los estados de esta lista informan una decisión de configuración y no un intento de conexión, por lo que Claude Code los imprime sin conectarse al servidor:

254 254 

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

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

257* `⊘ 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>`. Vuelve a activar el servidor desde el panel `/mcp`.257* `⊘ Disabled for this project (re-enable via /mcp)`: un servidor que nombra la lista [`disabledMcpServers`](#disable-a-server-without-removing-it) del proyecto. Claude Code lo muestra tanto en `claude mcp list` como en `claude mcp get <name>`. Vuelve a activar el servidor desde el panel `/mcp`.

258* `✘ Blocked by enterprise managed policy`: un servidor que rechaza una de las políticas de tu organización. Claude Code lo muestra tanto en `claude mcp list` como en `claude mcp get <name>`. Un servidor bloqueado por una lista de permitidos, una lista de denegados u otra restricción en la [configuración MCP administrada](https://code.claude.com/docs/es/managed-mcp.md#how-restrictions-appear-to-users) se oculta en ambos comandos en lugar de mostrarse con este estado. Pregunta a tu administrador qué política bloquea el servidor.258* `✘ Blocked by enterprise managed policy`: un servidor que una de las políticas de tu organización rechaza. Claude Code lo muestra tanto en `claude mcp list` como en `claude mcp get <name>`. Un servidor bloqueado por una lista de permitidos, una lista de denegados u otra restricción en la [configuración MCP administrada](https://code.claude.com/docs/es/managed-mcp.md#how-restrictions-appear-to-users) se oculta en ambos comandos en lugar de mostrarse con este estado. Pregúntale a tu administrador qué política bloquea el servidor.

259 259 

260#### Aprobaciones de servidores de proyecto y confianza del espacio de trabajo260#### Aprobaciones de servidores de proyecto y confianza del espacio de trabajo

261 261 

262`claude mcp list` y `claude mcp get` leen aprobaciones de `.mcp.json` solo de archivos de configuración que no están incluidos en el repositorio, hasta que confíes 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`](https://code.claude.com/docs/es/settings-reference#enableallprojectmcpservers) o [`enabledMcpjsonServers`](https://code.claude.com/docs/es/settings-reference#enabledmcpjsonservers) incluidos con commit en el `.claude/settings.json` del proyecto se ignoran en una carpeta no confiable, y el servidor permanece en `⏸ Pending approval` en lugar de conectarse y verificarse su salud.262`claude mcp list` y `claude mcp get` leen las aprobaciones de `.mcp.json` solo de archivos de configuración que no están incluidos en el repositorio, hasta que confíes 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`](https://code.claude.com/docs/es/settings-reference#enableallprojectmcpservers) o [`enabledMcpjsonServers`](https://code.claude.com/docs/es/settings-reference#enabledmcpjsonservers) incluidos mediante commit en el `.claude/settings.json` del proyecto se ignoran en una carpeta que no es de confianza, y el servidor permanece en `⏸ Pending approval` en lugar de conectarse y pasar la comprobación de salud.

263 263 

264Las aprobaciones de estas fuentes aún se aplican en una carpeta no confiable:264Las aprobaciones de estas fuentes siguen aplicándose en una carpeta que no es de confianza:

265 265 

266* tu `~/.claude/settings.json` de usuario266* tu `~/.claude/settings.json` de usuario

267* configuración administrada267* la configuración administrada

268* configuración pasada con `--settings`268* la configuración pasada con `--settings`

269 269 

270Claude Code también aplica aprobaciones de un `.claude/settings.local.json` sin seguimiento, pero ejecuta git para verificar si el archivo tiene seguimiento, y ejecuta esa verificación solo en una [carpeta confiable](https://code.claude.com/docs/es/permissions.md#project-allow-rules-and-workspace-trust). En una carpeta en la que nunca has confiado, Claude Code espera el diálogo de confianza antes de aplicar las aprobaciones del archivo, a menos que la carpeta sea tu propio directorio de configuración: tu directorio home, o un directorio cuyo `.claude` hayas establecido como [`CLAUDE_CONFIG_DIR`](https://code.claude.com/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 en la que nunca habías confiado.270Claude Code también aplica las aprobaciones de un `.claude/settings.local.json` sin seguimiento, pero ejecuta git para comprobar si el archivo tiene seguimiento, y ejecuta esa comprobación solo en una [carpeta de confianza](https://code.claude.com/docs/es/permissions.md#project-allow-rules-and-workspace-trust). En una carpeta en la que nunca has confiado, Claude Code espera al diálogo de confianza antes de aplicar las aprobaciones del archivo, a menos que la carpeta sea tu propio directorio de configuración: tu directorio home, o un directorio cuyo `.claude` hayas establecido como [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/es/env-vars). Antes de v2.1.207, Claude Code aplicaba las aprobaciones de un `.claude/settings.local.json` sin seguimiento incluso en una carpeta en la que nunca habías confiado.

271 271 

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

273 273 

274#### Detalle del estado del servidor274#### Detalle del estado del servidor

275 275 

276En `/mcp`, incluido el menú de un servidor allí, y en el administrador [`/plugin`](https://code.claude.com/docs/es/plugins/install), un servidor HTTP o SSE remoto que hayas 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, guardada 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 tu primer mensaje, por lo que no necesitas hacer nada. La caché de descubrimiento y su estado `cached` requieren Claude Code v2.1.221 o posterior.276En `/mcp`, incluido el menú de un servidor allí, y en el administrador de [`/plugin`](https://code.claude.com/docs/es/plugins/install), un servidor HTTP o SSE remoto que hayas 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, guardada 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 sus herramientas. Las herramientas están disponibles desde tu primer mensaje, así que no necesitas hacer nada. La caché de descubrimiento y su estado `cached` requieren Claude Code v2.1.221 o posterior.

277 277 

278La caché de descubrimiento está desactivada de forma predeterminada a menos que un despliegue gradual la haya habilitado para tu cuenta. Establece [`MCP_DISCOVERY_CACHE=1`](https://code.claude.com/docs/es/env-vars) para activarla, o `0` para mantenerla desactivada incluso cuando el despliegue la haya habilitado. Antes de v2.1.238, la caché estaba activada de forma predeterminada.278La caché de descubrimiento está desactivada de forma predeterminada, a menos que un despliegue gradual la haya activado para tu cuenta. Establece [`MCP_DISCOVERY_CACHE=1`](https://code.claude.com/docs/es/env-vars) para activarla, o `0` para mantenerla desactivada incluso cuando el despliegue la haya activado. Antes de v2.1.238, la caché estaba activada de forma predeterminada.

279 279 

280Cuando seleccionas **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 de inmediato 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 la caché.280Cuando seleccionas **Disable** o **Clear authentication** en 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 con fallo; en un servidor `cached`, **Reconnect** conecta el servidor en ese momento y conserva 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 la caché.

281 281 

282##### Errores de conexión y servidores sin configurar282##### Fallos de conexión y servidores sin configurar

283 283 

284Cuando el estado de un servidor es `✘ Failed to connect`, `claude mcp list` añade el detalle del error a esa línea de estado, y `claude mcp get <name>` lo muestra en una línea `Issue:`. El detalle es el estado HTTP o el código de error, más cualquier texto de error que haya devuelto el servidor. La vista de detalle del servidor en `/mcp` incluye el mismo texto informado por el servidor en su fila `Issue:`.284Cuando el estado de un servidor es `✘ Failed to connect`, `claude mcp list` añade el detalle del fallo a esa línea de estado, y `claude mcp get <name>` lo muestra en una línea `Issue:`. El detalle es el estado HTTP o el código de error, más cualquier texto de error que haya devuelto el servidor. La vista de detalle del servidor en `/mcp` incluye el mismo texto informado por el servidor en su fila `Issue:`.

285 285 

286Claude Code oculta de este detalle el texto que parece una credencial y nunca incluye la URL expandida del servidor, que puede contener secretos. Claude Code no añade ningún detalle a un estado `✘ Connection error`, porque el texto de la excepción que imprimiría allí puede incluir esa URL.286Claude Code oculta de este detalle el texto que parece una credencial y nunca incluye la URL expandida del servidor, que puede contener secretos. Claude Code no añade ningún detalle a un estado `✘ Connection error`, porque el texto de la excepción que imprimiría allí puede incluir esa URL.

287 287 

288Cuando completas 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 el host, más el puerto cuando la URL nombra uno, como `https://mcp.example.com`.288Cuando completas la autenticación desde `/mcp` y la conexión sigue fallando con un 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 el host, más el puerto cuando la URL lo indica, como `https://mcp.example.com`.

289 289 

290* La ruta y la consulta nunca aparecen en ese mensaje.290* La ruta y la consulta nunca aparecen en ese mensaje.

291* Para un servidor en el [alcance](#mcp-installation-scopes) local, de proyecto, o de usuario o en la 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.291* Para un servidor en el [alcance](#mcp-installation-scopes) local, de proyecto o de usuario, o en la 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.

292* Para una falla sin código de estado ni código de error, Claude Code muestra el texto de error sin el origen.292* Para un fallo sin estado ni código de error, Claude Code muestra el texto del error sin el origen.

293 293 

294Un 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`](https://code.claude.com/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 configuras más tarde, por lo que Claude Code no lo informa como un error ni como un problema de configuración. La vista de detalle del servidor en `/mcp` indica `No URL configured for this server`; establece la `url` de la entrada para conectarlo.294Un servidor remoto cuya configuración tiene una `url` vacía aparece como `not configured` en `/mcp`, en `claude mcp list` y en el administrador de [`/plugin`](https://code.claude.com/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 configuras más adelante, así que Claude Code no la informa como un error ni como un problema de configuración. La vista de detalle del servidor en `/mcp` indica `No URL configured for this server`; establece la `url` de la entrada para conectarlo.

295 295 

296#### Advertencias de configuración296#### Advertencias de configuración

297 297 

298Claude Code advierte sobre los problemas de configuración a continuación. Cada entrada dice qué verifica Claude Code y cómo eliminar la advertencia:298Claude Code advierte sobre los problemas de configuración que se indican a continuación. Cada entrada explica qué comprueba Claude Code y cómo eliminar la advertencia:

299 299 

300* **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 un salto de 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 edita la configuración para eliminarlo.300* **Espacios en blanco ocultos**: Claude Code advierte cuando un valor de la configuración MCP tiene espacios en blanco ocultos al principio o al final, lo que suele ocurrir al pegar un token con un salto de línea final. Claude Code comprueba `command`, `url`, cada entrada de `args`, y los valores y nombres de claves bajo `env` y `headers`. Claude Code muestra la advertencia en la salida de `claude mcp list` y en `/mcp`, nombrando los campos afectados sin mostrar sus valores, por ejemplo `Leading or trailing whitespace in: headers.Authorization`. Claude Code no recorta los espacios en blanco y usa los valores exactamente como están escritos, así que edita la configuración para eliminarlos.

301* **Mismo nombre en más de un alcance**: si defines el mismo nombre de servidor en más de un [alcance](#mcp-installation-scopes) con diferentes endpoints, Claude Code advierte sobre el conflicto en la salida de `claude mcp list` y en `/mcp`. Claude Code almacena los inicios de sesión OAuth por endpoint, por lo que cuando autenticas la definición que se carga en un proyecto, aún necesitas iniciar sesión por separado en un proyecto donde se carga una definición diferente. Mantén el endpoint que deseas y elimina los otros con `claude mcp remove <name> --scope <scope>`. En la advertencia, Claude Code cita el endpoint de cada alcance tal como está escrito en tu configuración, con las [referencias `${VAR}`](#environment-variable-expansion-in-mcp-json) sin expandir, por lo que nunca muestra un valor resuelto como una clave de API.301* **El mismo nombre en más de un alcance**: si defines el mismo nombre de servidor en más de un [alcance](#mcp-installation-scopes) con endpoints distintos, Claude Code advierte sobre el conflicto en la salida de `claude mcp list` y en `/mcp`. Claude Code almacena los inicios de sesión de OAuth por endpoint, así que cuando autenticas la definición que se carga en un proyecto, igual necesitas iniciar sesión por separado en un proyecto donde se cargue una definición distinta. Conserva el endpoint que quieras y elimina los demás con `claude mcp remove <name> --scope <scope>`. En la advertencia, Claude Code cita el endpoint de cada alcance tal como está escrito en tu configuración, con las [referencias `${VAR}`](#environment-variable-expansion-in-mcp-json) sin expandir, por lo que nunca muestra un valor resuelto como una clave de API.

302* **Nombres reservados**: Claude Code reserva los nombres de sus servidores integrados, incluidos `workspace`, `claude-in-chrome`, `computer-use`, `Claude Preview`, y `Claude Browser`. Si tu configuración define un servidor con un nombre reservado, Claude Code lo omite en el momento de la carga y muestra una advertencia pidiéndote que lo renombres. `claude mcp add` rechaza un nombre reservado con un error. `Claude Preview` y `Claude Browser` nombran ambos el servidor integrado que utiliza el [panel de vista previa de la aplicación de escritorio de Claude Code](https://code.claude.com/docs/es/desktop.md#preview-your-app).302* **Nombres reservados**: Claude Code reserva los nombres de sus servidores integrados, incluidos `workspace`, `claude-in-chrome`, `computer-use`, `Claude Preview` y `Claude Browser`. Si tu configuración define un servidor con un nombre reservado, Claude Code lo omite al cargarlo y muestra una advertencia que te pide cambiarle el nombre. `claude mcp add` rechaza un nombre reservado con un error. `Claude Preview` y `Claude Browser` nombran ambos el servidor integrado que usa el [panel de vista previa de la aplicación de escritorio de Claude Code](https://code.claude.com/docs/es/desktop.md#preview-your-app).

303* **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. Establece la variable o agrega un valor de respaldo `${VAR:-default}`. En la `url` y los `headers` de un servidor remoto, algunas variables de credenciales [se leen como vacías](#credential-variables-that-read-as-empty) en su lugar, sin advertencia.303* **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 aun así carga el servidor con el texto `${VAR}` sin expandir. Establece la variable o agrega un valor de respaldo `${VAR:-default}`. En la `url` y los `headers` de un servidor remoto, algunas variables de credenciales [se leen como vacías](#credential-variables-that-read-as-empty) en su lugar, sin advertencia.

304 304 

305#### Disponibilidad de herramientas305#### Disponibilidad de herramientas

306 306 

307El panel `/mcp` muestra el recuento de herramientas junto a cada servidor conectado y marca los servidores que anuncian la capacidad de herramientas pero no exponen herramientas.307El panel `/mcp` muestra el recuento de herramientas junto a cada servidor conectado y marca los servidores que anuncian la capacidad de herramientas pero no exponen ninguna.

308 308 

309##### Recuento de herramientas en una sesión en la nube309##### Recuentos de herramientas en una sesión en la nube

310 310 

311En una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), un recuento como `3 of 13 tools available` significa que Claude no puede usar las otras 10. Comprueba estas causas, entre otras:311En una [sesión en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), un recuento como `3 of 13 tools available` significa que Claude no puede usar las otras 10. Comprueba estas causas, entre otras:

312 312 

313* **Una regla de denegación en el `.claude/settings.json` de tu repositorio nombra la herramienta o su servidor completo**: elimina la [regla](https://code.claude.com/docs/es/permissions.md#mcp), si [tu sesión lee ese archivo](https://code.claude.com/docs/es/settings.md#settings-in-cloud-sessions)313* **Una regla de denegación en el `.claude/settings.json` de tu repositorio nombra la herramienta o su servidor completo**: elimina la [regla](https://code.claude.com/docs/es/permissions.md#mcp), si [tu sesión lee ese archivo](https://code.claude.com/docs/es/settings.md#settings-in-cloud-sessions)

314* **El nombre completo de la herramienta tiene más de 128 caracteres**: sigue [los pasos para un nombre demasiado largo](https://code.claude.com/docs/es/errors.md#mcp-tool-name-over-128-characters)314* **El nombre completo de la herramienta supera los 128 caracteres**: sigue [los pasos para un nombre demasiado largo](https://code.claude.com/docs/es/errors.md#mcp-tool-name-over-128-characters)

315* **El servidor lista la herramienta para su propia interfaz y no para Claude**: si mantienes el servidor, agrega `model` a `_meta.ui.visibility` de la herramienta para dársela a Claude. En caso contrario, no hay nada que corregir.315* **El servidor lista la herramienta para su propia interfaz y no para Claude**: si mantienes el servidor, agrega `model` al `_meta.ui.visibility` de la herramienta para darle la herramienta a Claude. De lo contrario, no hay nada que corregir.

316 316 

317##### Herramientas de un servidor que aún se está conectando317##### Herramientas de un servidor que aún se está conectando

318 318 

319Si tu 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 tu configuración:319Si tu 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 ocurre la espera depende de tu configuración:

320 320 

321* **Con [búsqueda de herramientas](#scale-with-mcp-tool-search), el valor predeterminado**: la espera sucede dentro de la llamada `ToolSearch`.321* **Con [búsqueda de herramientas](#scale-with-mcp-tool-search), la opción predeterminada**: la espera ocurre dentro de la llamada a `ToolSearch`.

322* **Sin búsqueda de herramientas**: Claude usa la herramienta `WaitForMcpServers` en su lugar. Las configuraciones sin búsqueda de herramientas incluyen `ENABLE_TOOL_SEARCH=false` y un modelo anterior a Claude Opus 4.5, Claude Sonnet 4.5 y Claude Haiku 4.5 en Agent Platform de Google Cloud. Para un gateway `ANTHROPIC_BASE_URL`, consulta [Búsqueda de herramientas a través de un gateway de LLM](#tool-search-through-a-gateway).322* **Sin búsqueda de herramientas**: Claude usa en su lugar la herramienta `WaitForMcpServers`. Las configuraciones sin búsqueda de herramientas incluyen `ENABLE_TOOL_SEARCH=false` y un modelo anterior a Claude Opus 4.5, Claude Sonnet 4.5 y Claude Haiku 4.5 en Agent Platform de Google Cloud. Para un gateway `ANTHROPIC_BASE_URL`, consulta [Búsqueda de herramientas a través de un gateway de LLM](#tool-search-through-a-gateway).

323* **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 del despliegue 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 quedan disponibles en la siguiente solicitud de Claude.323* **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 por la ruta de búsqueda de herramientas en lugar de con `WaitForMcpServers`, ya que Claude Code descubre el rechazo del lado del servidor del despliegue solo a partir de 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 quedan disponibles en la siguiente solicitud de Claude.

324 324 

325Con 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 dentro del mismo turno. Claude puede entonces buscar y llamar a esas herramientas sin esperar tu siguiente mensaje.325Con la búsqueda de herramientas activada, cuando un servidor termina de conectarse mientras Claude está trabajando, Claude Code le lista a Claude los nombres de las herramientas del servidor en su siguiente solicitud dentro del mismo turno. Claude puede entonces buscar y llamar a esas herramientas sin esperar tu próximo mensaje.

326 326 

327Después de reanudar una sesión, Claude puede llamar a una herramienta de la conversación guardada mientras el servidor MCP de la herramienta aún se está conectando. Mientras el servidor está en su primer intento de conexión, Claude Code retiene la llamada hasta 10 segundos y la ejecuta en cuanto la herramienta está disponible. Si el servidor no se conecta a tiempo, o ya está [reintentando después de un intento fallido](#automatic-reconnection), la llamada falla con el [error de herramienta](https://code.claude.com/docs/es/errors.md#no-such-tool-available) `No such tool available`.327Después de reanudar una sesión, Claude puede llamar a una herramienta de la conversación guardada mientras el servidor MCP de la herramienta todavía se está conectando. Mientras el servidor está en su primer intento de conexión, Claude Code retiene la llamada hasta 10 segundos y la ejecuta en cuanto la herramienta está disponible. Si el servidor no se conecta a tiempo, o ya está [reintentando después de un intento fallido](#automatic-reconnection), la llamada falla con el [error de herramienta](https://code.claude.com/docs/es/errors.md#no-such-tool-available) `No such tool available`.

328 328 

329### Deshabilitar un servidor sin eliminarlo329### Desactivar un servidor sin eliminarlo

330 330 

331Desactiva un servidor en el panel `/mcp` para que Claude Code deje de conectarse a él sin perder su configuración. Claude Code aún enumera el servidor en `/mcp`, marcado como deshabilitado.331Desactiva un servidor en el panel `/mcp` para que Claude Code deje de conectarse a él sin perder su configuración. Claude Code sigue listando el servidor en `/mcp`, marcado como desactivado.

332 332 

333Cuando activas o desactivas un servidor, Claude Code registra tu elección por proyecto en `~/.claude.json`, en una de dos listas que cubren conjuntos disjuntos de servidores:333Cuando activas o desactivas un servidor, Claude Code registra tu elección por proyecto en `~/.claude.json`, en una de dos listas que cubren conjuntos disjuntos de servidores:

334 334 

335* `disabledMcpServers`: una lista de exclusión para servidores configurados por el usuario, servidores de plugins, servidores que tu organización [proporciona a través de la configuración administrada](https://code.claude.com/docs/es/managed-mcp.md#provide-servers-through-managed-settings), los conectores de 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 enumeres aquí. Cuando deshabilitas un conector de claude.ai con el interruptor por proyecto de `/mcp` descrito en [Deshabilitar conectores de claude.ai](#disable-claude-ai-connectors), Claude Code lo escribe en esta lista bajo su nombre visible, por ejemplo `claude.ai Slack`.335* `disabledMcpServers`: una lista de exclusión para servidores configurados por el usuario, servidores de plugins, servidores que tu organización [proporciona mediante la configuración administrada](https://code.claude.com/docs/es/managed-mcp.md#provide-servers-through-managed-settings), los conectores de claude.ai que Claude Code [obtiene por sí mismo](#how-connectors-reach-claude-code) y los servidores integrados que están activados de forma predeterminada. Claude Code no se conecta a un servidor que incluyas aquí. Cuando desactivas un conector de claude.ai con el interruptor por proyecto de `/mcp` descrito en [Desactivar conectores de claude.ai](#disable-claude-ai-connectors), Claude Code lo escribe en esta lista con su nombre visible, por ejemplo `claude.ai Slack`.

336* `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 enumeras aquí.336* `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 incluyes aquí.

337 337 

338Claude Code consulta exactamente una de las dos listas para cada servidor, por lo que ninguna lista sobrescribe a la otra. Si agregas un servidor normal a `enabledMcpServers`, o un servidor integrado desactivado de forma predeterminada a `disabledMcpServers`, Claude Code ignora la entrada.338Claude Code consulta exactamente una de las dos listas para cada servidor, así que ninguna lista sobrescribe a la otra. Si agregas un servidor normal a `enabledMcpServers`, o un servidor integrado desactivado de forma predeterminada a `disabledMcpServers`, Claude Code ignora la entrada.

339 339 

340`disabledMcpServers` y `enabledMcpServers` no están relacionados con [`enabledMcpjsonServers`](https://code.claude.com/docs/es/settings-reference#enabledmcpjsonservers) y [`disabledMcpjsonServers`](https://code.claude.com/docs/es/settings-reference#disabledmcpjsonservers), que controlan la aprobación de servidores definidos en el archivo `.mcp.json` de un proyecto.340`disabledMcpServers` y `enabledMcpServers` no están relacionados con [`enabledMcpjsonServers`](https://code.claude.com/docs/es/settings-reference#enabledmcpjsonservers) ni con [`disabledMcpjsonServers`](https://code.claude.com/docs/es/settings-reference#disabledmcpjsonservers), que controlan la aprobación de los servidores definidos en el archivo `.mcp.json` de un proyecto.

341 341 

342### Tiempos de ejecución del cliente MCP342### Runtimes de cliente MCP

343 343 

344Claude 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 sobre [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.344Claude Code se conecta a los servidores MCP mediante uno de dos runtimes de cliente. El runtime v1 está construido sobre el MCP TypeScript SDK 1.x. El runtime v2 es el mismo código sobre el [MCP TypeScript SDK 2.0](https://ts.sdk.modelcontextprotocol.io/v2/), que agrega la revisión 2026-07-28 del protocolo MCP. El resto de esta página se aplica a ambos runtimes, excepto donde una sección nombra el runtime v2.

345 345 

346Claude Code elige un tiempo de ejecución cada vez que lo inicias y lo mantiene hasta que sales. En sesiones donde [obtiene feature flags](https://code.claude.com/docs/es/env-vars.md#features-that-need-feature-flag-fetching), utiliza el tiempo de ejecución v2 en Claude Code v2.1.232 o posterior.346Claude Code elige un runtime cada vez que lo inicias y lo mantiene hasta que sales. En las sesiones en las que [obtiene feature flags](https://code.claude.com/docs/es/env-vars.md#features-that-need-feature-flag-fetching), usa el runtime v2 en Claude Code v2.1.232 o posterior.

347 347 

348En las sesiones donde no obtiene feature flags, Claude Code utiliza el tiempo de ejecución v2 de forma predeterminada en Claude Code v2.1.274 o posterior:348En las sesiones en las que no obtiene feature flags, Claude Code usa el runtime v2 de forma predeterminada en Claude Code v2.1.274 o posterior:

349 349 

350* Sesiones en Amazon Bedrock, Claude Platform en AWS, Agent Platform de Google Cloud, o Microsoft Foundry, a menos que una plataforma host que incrusta Claude Code establezca [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/es/env-vars)350* Sesiones en Amazon Bedrock, Claude Platform on AWS, Agent Platform de Google Cloud o Microsoft Foundry, a menos que una plataforma host que integre Claude Code establezca [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/es/env-vars)

351* Sesiones iniciadas a través de un [gateway de aplicaciones de Claude](https://code.claude.com/docs/es/claude-apps-gateway)351* Sesiones iniciadas a través de un [gateway de aplicaciones de Claude](https://code.claude.com/docs/es/claude-apps-gateway)

352* Sesiones donde desactivas la telemetría o la obtención de feature flags, por ejemplo con `DISABLE_TELEMETRY`352* Sesiones en las que desactivas la telemetría o la obtención de feature flags, por ejemplo con `DISABLE_TELEMETRY`

353 353 

354En v2, Claude Code también:354En v2, Claude Code además:

355 355 

356* Pregunta a los servidores HTTP, stdio y de conectores de claude.ai si admiten la revisión más nueva, y la utiliza con los que la admiten. Esto incluye los conectores de las sesiones en la nube y de [Remote Control](https://code.claude.com/docs/es/remote-control.md). Claude Code se conecta a todos los demás servidores como lo hace v1.356* Pregunta a los servidores HTTP, stdio y de conectores de claude.ai si admiten la revisión más reciente y la usa con los que sí la admiten. Eso incluye los conectores de las sesiones en la nube y de [Remote Control](https://code.claude.com/docs/es/remote-control.md). Claude Code se conecta a cualquier otro servidor como lo hace v1.

357* Recibe notificaciones `list_changed` de servidores en la revisión más nueva a través de una [secuencia que mantiene abierta](#notification-streams-on-the-v2-runtime).357* Recibe notificaciones `list_changed` de los servidores con la revisión más reciente a través de un [flujo que mantiene abierto](#notification-streams-on-the-v2-runtime).

358* 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 transportar mensajes de canal.358* No registra un servidor de [canal](#push-messages-with-channels) que se conecta con la revisión más reciente, porque esa revisión no puede transportar mensajes de canal.

359* Hace fallar un [inicio de sesión OAuth de MCP](#authenticate-with-remote-mcp-servers) cuya respuesta de autorización nombra un emisor inesperado.359* Hace fallar un [inicio de sesión de MCP OAuth](#authenticate-with-remote-mcp-servers) cuya respuesta de autorización nombra un emisor inesperado.

360* Envía credenciales de [OAuth de MCP](#authenticate-with-remote-mcp-servers) solo a un endpoint de token servido sobre HTTPS o en `localhost`, `127.0.0.1`, o `::1`. El inicio de sesión falla para un servidor cuyo endpoint de token es `http://` simple en cualquier otro lugar, como un dispositivo en tu red local. Consulta [Refusing to send credentials to non-https token endpoint](https://code.claude.com/docs/es/errors.md#refusing-to-send-credentials-to-non-https-token-endpoint).360* Envía las credenciales de [MCP OAuth](#authenticate-with-remote-mcp-servers) solo a un endpoint de token servido por HTTPS o en `localhost`, `127.0.0.1` o `::1`. El inicio de sesión falla para un servidor cuyo endpoint de token es `http://` simple en cualquier otro lugar, como un dispositivo de tu red local. Consulta [Refusing to send credentials to non-https token endpoint](https://code.claude.com/docs/es/errors.md#refusing-to-send-credentials-to-non-https-token-endpoint).

361 361 

362Anthropic puede mantener un servidor específico en el protocolo anterior, o fuera de ese stream, con un feature flag que Claude Code obtiene. Para elegir el runtime tú mismo, establece [`MCP_SDK_GENERATION`](https://code.claude.com/docs/es/env-vars) en `v1` o `v2`.362Anthropic puede mantener un servidor específico en el protocolo anterior, o fuera de ese flujo, con un feature flag que Claude Code obtiene. Para elegir el runtime tú mismo, establece [`MCP_SDK_GENERATION`](https://code.claude.com/docs/es/env-vars) en `v1` o `v2`.

363 363 

364Para decidir si Claude Code pregunta a los servidores por la revisión más reciente, establece [`MCP_PROTOCOL_NEGOTIATION`](https://code.claude.com/docs/es/env-vars) en `auto` o `legacy`. Con esa variable sin establecer, Claude Code puede dejar de preguntar a un servidor stdio durante 7 días, por ejemplo después de que el servidor termina al preguntarle. Para que se le pregunte antes a un servidor actualizado, establece `auto`.364Para decidir si Claude Code pregunta a los servidores por la revisión más reciente, establece [`MCP_PROTOCOL_NEGOTIATION`](https://code.claude.com/docs/es/env-vars) en `auto` o `legacy`. Con esa variable sin establecer, Claude Code puede omitir la pregunta a un servidor stdio durante 7 días, por ejemplo después de que el servidor sale al recibir la pregunta. Para que se le pregunte antes a un servidor actualizado, establece `auto`.

365 365 

366### Actualizaciones dinámicas de herramientas366### Actualizaciones dinámicas de herramientas

367 367 

368Un servidor MCP puede cambiar las herramientas, prompts o recursos que ofrece mientras está conectado y enviar una notificación `list_changed`. Cuando llega una:368Un servidor MCP puede cambiar las herramientas, prompts o recursos que ofrece mientras está conectado y enviar una notificación `list_changed`. Cuando llega una:

369 369 

370* **En una sesión interactiva de terminal**, Claude Code obtiene la lista actualizada de ese servidor, por lo que no necesitas reconectarlo.370* **En una sesión interactiva de la terminal**, Claude Code obtiene la lista actualizada de ese servidor, así que no necesitas volver a conectarlo.

371* **En [modo no interactivo](https://code.claude.com/docs/es/headless.md) con el flag `-p` y en el [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md)**, Claude Code actualiza solo la lista de herramientas con estas notificaciones.371* **En [modo no interactivo](https://code.claude.com/docs/es/headless.md) con el flag `-p` y en el [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md)**, Claude Code actualiza solo la lista de herramientas con estas notificaciones.

372 372 

373Si una solicitud de actualización falla, Claude Code mantiene las herramientas, prompts y recursos descubiertos anteriormente del servidor hasta que una actualización posterior tenga éxito.373Si una solicitud de actualización falla, Claude Code conserva las herramientas, prompts y recursos descubiertos previamente del servidor hasta que una actualización posterior tenga éxito.

374 374 

375#### Secuencias de notificación en el tiempo de ejecución v2375#### Flujos de notificaciones en el runtime v2

376 376 

377En el [tiempo de ejecución v2](#mcp-client-runtimes), Claude Code recibe notificaciones `list_changed` de un servidor en la revisión más nueva del protocolo a través de una secuencia que mantiene abierta. Cuando la secuencia se cierra, Claude Code la reabre, con dos límites:377En el [runtime v2](#mcp-client-runtimes), Claude Code recibe notificaciones `list_changed` de un servidor con la revisión más reciente del protocolo a través de un flujo que mantiene abierto. Cuando el flujo se cierra, Claude Code lo vuelve a abrir, con dos límites:

378 378 

379* **La secuencia se cierra nuevamente dentro de 10 segundos**: Claude Code la reabre hasta tres veces y luego se detiene para esa conexión.379* **El flujo se vuelve a cerrar en menos de 10 segundos**: Claude Code lo reabre hasta tres veces y luego deja de hacerlo para esa conexión.

380* **La secuencia permanece abierta más de 10 segundos y luego se cierra**, como suele ocurrir con las secuencias hacia hosts serverless: después de cinco reaperturas en una hora, Claude Code espera aproximadamente seis horas antes de la siguiente.380* **El flujo permanece abierto más de 10 segundos y luego se cierra**, como suele ocurrir con los flujos hacia hosts serverless: después de cinco reaperturas en una hora, Claude Code espera unas seis horas antes de la siguiente.

381 381 

382Hasta que la secuencia se reabre, conservas las herramientas, prompts y recursos del servidor obtenidos por última vez. Para recoger sus cambios antes, reconecta el servidor desde `/mcp`.382Hasta que el flujo se reabre, conservas las últimas herramientas, prompts y recursos obtenidos del servidor. Para recibir sus cambios antes, vuelve a conectar el servidor desde `/mcp`.

383 383 

384### Reconexión automática384### Reconexión automática

385 385 

386Claude Code reconecta un servidor remoto que se cae a mitad de sesión y reintenta la primera conexión de un servidor HTTP o SSE después de un error transitorio. Para un servidor stdio, consulta [Servidores stdio que terminan o no logran iniciarse](#stdio-servers-that-exit-or-fail-to-start).386Claude Code vuelve a conectar un servidor remoto que se cae a mitad de la sesión y reintenta la primera conexión de un servidor HTTP o SSE después de un error transitorio. Para un servidor stdio, consulta [Servidores stdio que salen o no logran iniciarse](#stdio-servers-that-exit-or-fail-to-start).

387 387 

388#### Caídas a mitad de sesión de un servidor remoto388#### Caídas de un servidor remoto a mitad de la sesión

389 389 

390Claude Code primero intenta reconectar un servidor remoto caído hasta cinco veces con retroceso exponencial, comenzando con un retraso de un segundo y duplicándolo cada vez:390Claude Code primero intenta volver a conectar un servidor remoto caído hasta cinco veces con retroceso exponencial, comenzando con un retraso de un segundo y duplicándolo cada vez:

391 391 

392* **En una sesión interactiva**: `/mcp` muestra el servidor como pendiente mientras Claude Code se reconecta. Después de cinco intentos fallidos, Claude Code marca el servidor como fallido, o como que necesita autenticación cuando el servidor necesita autorizarse de nuevo. Cuando marca el servidor como fallido, ves una notificación `MCP server "<name>" disconnected · open /mcp to reconnect`. Puedes reintentar manualmente desde `/mcp`.392* **En una sesión interactiva**: `/mcp` muestra el servidor como pendiente mientras Claude Code se reconecta. Después de cinco intentos fallidos, Claude Code marca el servidor como fallido, o como que necesita autenticación cuando el servidor necesita autorizarse de nuevo. Cuando lo marca como fallido, ves una notificación `MCP server "<name>" disconnected · open /mcp to reconnect`. Puedes reintentar manualmente desde `/mcp`.

393* **En ejecuciones de [`claude -p`](https://code.claude.com/docs/es/headless) y sesiones del [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md)**: Claude Code hace los mismos cinco intentos, sin panel `/mcp` para mostrarlos. Si los cinco fallan, la ejecución continúa sin las herramientas del servidor:393* **En ejecuciones de [`claude -p`](https://code.claude.com/docs/es/headless) y sesiones del [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md)**: Claude Code hace los mismos cinco intentos, sin un panel `/mcp` donde mostrarlos. Si los cinco fallan, la ejecución continúa sin las herramientas del servidor:

394 * **Después de un error transitorio, como una respuesta 5xx o que se agote el tiempo de espera**: Claude Code sigue reintentando un servidor HTTP o SSE en segundo plano. Los reintentos duran hasta aproximadamente media hora, y las herramientas del servidor vuelven a estar disponibles cuando uno se conecta. Hasta entonces, una sesión del Agent SDK informa el [estado](https://code.claude.com/docs/es/agent-sdk/mcp.md#error-handling) `failed`, y tu código puede [reconectar el servidor](https://code.claude.com/docs/es/agent-sdk/mcp.md#error-handling). Para reconectarlo en `claude -p`, vuelve a iniciar la ejecución.394 * **Después de un error transitorio, como una respuesta 5xx o un tiempo de espera agotado**: Claude Code sigue reintentando un servidor HTTP o SSE en segundo plano. Los reintentos duran hasta una media hora aproximadamente, y las herramientas del servidor vuelven a estar disponibles cuando uno se conecta. Hasta entonces, una sesión del Agent SDK informa el [estado](https://code.claude.com/docs/es/agent-sdk/mcp.md#error-handling) `failed`, y tu código puede [volver a conectar el servidor](https://code.claude.com/docs/es/agent-sdk/mcp.md#error-handling). Para volver a conectarlo en `claude -p`, inicia la ejecución de nuevo.

395 * **Cuando el servidor [necesita que vuelvas a iniciar sesión](#authenticate-with-remote-mcp-servers)**: Claude Code deja de reintentar, y una sesión del Agent SDK informa el estado del servidor como `needs-auth`. Inicia sesión con [`claude mcp login <name>`](#authenticate-from-the-command-line) en tu shell. Luego vuelve a iniciar la ejecución o, en una sesión del Agent SDK, [reconecta el servidor](https://code.claude.com/docs/es/agent-sdk/mcp.md#error-handling) en su lugar.395 * **Cuando el servidor [necesita que vuelvas a iniciar sesión](#authenticate-with-remote-mcp-servers)**: Claude Code deja de reintentar, y una sesión del Agent SDK informa el estado del servidor como `needs-auth`. Inicia sesión con [`claude mcp login <name>`](#authenticate-from-the-command-line) en tu shell. Luego inicia la ejecución de nuevo o, en una sesión del Agent SDK, [vuelve a conectar el servidor](https://code.claude.com/docs/es/agent-sdk/mcp.md#error-handling) en su lugar.

396 396 

397#### Conexiones iniciales fallidas397#### Primeras conexiones fallidas

398 398 

399Cuando la primera conexión de un servidor HTTP o SSE falla con un error transitorio, como una respuesta 5xx, una conexión rechazada, o que se agote el tiempo de espera, Claude Code reintenta hasta tres veces. Si la conexión aún falla, Claude Code marca el servidor como fallido.399Cuando 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 agotado, Claude Code reintenta hasta tres veces. Si la conexión sigue fallando, Claude Code marca el servidor como fallido.

400 400 

401Esos reintentos no se aplican en estos casos:401Esos reintentos no se aplican en estos casos:

402 402 

403* La primera conexión de un servidor stdio. Para intentarla de nuevo, consulta [Servidores stdio que terminan o no logran iniciarse](#stdio-servers-that-exit-or-fail-to-start)403* La primera conexión de un servidor stdio. Para intentarlo de nuevo, consulta [Servidores stdio que salen o no logran iniciarse](#stdio-servers-that-exit-or-fail-to-start)

404* La primera conexión de un servidor WebSocket. Para intentarlo de nuevo en una sesión interactiva de terminal, selecciona **Reconnect** en el menú del servidor en `/mcp`404* La primera conexión de un servidor WebSocket. Para intentarlo de nuevo en una sesión interactiva de la terminal, selecciona **Reconnect** en el menú del servidor en `/mcp`

405* Un error de autenticación o de recurso 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 encabezado `Authorization` del servidor, Claude Code reintenta un error de autenticación de todas formas, porque vuelve a ejecutar el helper en cada intento y puede obtener una credencial nueva405* Un error de autenticación o de recurso 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 encabezado `Authorization` del servidor, Claude Code reintenta de todos modos un error de autenticación, porque vuelve a ejecutar el helper en cada intento y puede obtener una credencial nueva

406 406 

407#### Servidores stdio que terminan o no logran iniciarse407#### Servidores stdio que salen o no logran iniciarse

408 408 

409Para volver a iniciar un servidor stdio, lee la columna que corresponde a lo que le pasó. Encuentra tu fila según cómo ejecutas Claude Code: una sesión interactiva, una ejecución de `claude -p`, o una sesión del Agent SDK.409Para iniciar de nuevo un servidor stdio, lee la columna que corresponde a lo que le pasó. Encuentra tu fila según cómo ejecutas Claude Code: una sesión interactiva, una ejecución de `claude -p` o una sesión del Agent SDK.

410 410 

411| Cómo ejecutas Claude Code | El proceso del servidor termina a mitad de sesión | La primera conexión del servidor falla |411| Cómo ejecutas Claude Code | El proceso del servidor sale a mitad de la sesión | La primera conexión del servidor falla |

412| - | - | - |412| - | - | - |

413| Sesión interactiva | Claude Code marca el servidor como fallido. Para iniciarlo de nuevo, selecciona **Reconnect** en el menú del servidor en `/mcp` | Claude Code marca el servidor como fallido. Para iniciarlo de nuevo, selecciona **Reconnect** en el menú del servidor en `/mcp` |413| Sesión interactiva | Claude Code marca el servidor como fallido. Para iniciarlo de nuevo, selecciona **Reconnect** en el menú del servidor en `/mcp` | Claude Code marca el servidor como fallido. Para iniciarlo de nuevo, selecciona **Reconnect** en el menú del servidor en `/mcp` |

414| Ejecución de `claude -p` | Claude Code vuelve a iniciar el servidor la próxima vez que Claude llama a una de las herramientas del servidor, y la llamada se ejecuta en cuanto el servidor se conecta | La ejecución continúa sin las herramientas del servidor. Para que Claude Code vuelva a intentar la conexión, vuelve a iniciar la ejecución. Cuando un plugin proporciona el servidor, las nuevas ejecuciones omiten la conexión durante 15 minutos después de una falla, así que espera ese tiempo primero o [reintenta antes](https://code.claude.com/docs/es/errors.md#skipping-connection-recent-failure-cached) |414| Ejecución de `claude -p` | Claude Code inicia el servidor de nuevo la próxima vez que Claude llama a una de sus herramientas, y la llamada se ejecuta en cuanto el servidor se conecta | La ejecución continúa sin las herramientas del servidor. Para que Claude Code intente la conexión de nuevo, inicia la ejecución otra vez. Cuando un plugin proporciona el servidor, las nuevas ejecuciones omiten la conexión durante 15 minutos después de un fallo, así que espera ese tiempo primero o [reintenta antes](https://code.claude.com/docs/es/errors.md#skipping-connection-recent-failure-cached) |

415| Sesión del Agent SDK | Claude Code vuelve a iniciar el servidor la próxima vez que Claude llama a una de las herramientas del servidor, y la llamada se ejecuta en cuanto el servidor se conecta | La sesión continúa sin las herramientas del servidor. Tu código puede [reconectar el servidor](https://code.claude.com/docs/es/agent-sdk/mcp.md#error-handling) |415| Sesión del Agent SDK | Claude Code inicia el servidor de nuevo la próxima vez que Claude llama a una de sus herramientas, y la llamada se ejecuta en cuanto el servidor se conecta | La sesión continúa sin las herramientas del servidor. Tu código puede [volver a conectar el servidor](https://code.claude.com/docs/es/agent-sdk/mcp.md#error-handling) |

416 416 

417#### Solicitudes de descubrimiento fallidas417#### Solicitudes de descubrimiento fallidas

418 418 

419Después de que un servidor se conecta, Claude Code le envía solicitudes de descubrimiento de capacidades como `tools/list`, `prompts/list`, y `resources/list`. Claude Code reintenta esas solicitudes hasta tres veces con un retroceso corto después de un error transitorio de red o del servidor. No reintenta errores de autenticación, respuestas 4xx, ni solicitudes cuyo tiempo de espera se agota.419Después de que un servidor se conecta, Claude Code le envía solicitudes de descubrimiento de capacidades como `tools/list`, `prompts/list` y `resources/list`. Claude Code reintenta esas solicitudes hasta tres veces con un retroceso breve después de un error transitorio de red o del servidor. No reintenta errores de autenticación, respuestas 4xx ni solicitudes cuyo tiempo de espera se agotó.

420 420 

421#### Reintentar tú mismo los servidores fallidos421#### Reintentar tú mismo los servidores fallidos

422 422 

423Para reintentar todos los servidores que fallaron o necesitan autenticación, ejecuta `/mcp reconnect all` en el prompt de Claude Code en una sesión interactiva de terminal. Esto requiere Claude Code v2.1.284 o posterior. Las versiones anteriores imprimen `MCP server "all" not found`.423Para reintentar todos los servidores que fallaron o necesitan autenticación, ejecuta `/mcp reconnect all` en el prompt de Claude Code en una sesión interactiva de la terminal. Esto requiere Claude Code v2.1.284 o posterior. Las versiones anteriores imprimen `MCP server "all" not found`.

424 424 

425#### Cómo Claude se entera de que un servidor falló425#### Cómo se entera Claude de que un servidor falló

426 426 

427Que Claude Code le informe a Claude sobre un servidor configurado que no pudo conectarse depende de la [búsqueda de herramientas](#scale-with-mcp-tool-search), que está activada de forma predeterminada:427Que Claude Code le informe a Claude sobre un servidor configurado que no logró conectarse depende de la [búsqueda de herramientas](#scale-with-mcp-tool-search), que está activada de forma predeterminada:

428 428 

429* 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 los resultados de `ToolSearch` que no encuentran ninguna herramienta coincidente.429* Con búsqueda de herramientas, Claude Code le dice a Claude qué servidor falló y su error de conexión, para que Claude informe el fallo de conexión en su respuesta. Claude Code incluye la misma información en los resultados de `ToolSearch` que no encuentran ninguna herramienta coincidente.

430* En cualquier [configuración sin búsqueda de herramientas](#configure-tool-search), Claude Code no informa a Claude de las conexiones fallidas de servidores.430* En cualquier [configuración sin búsqueda de herramientas](#configure-tool-search), Claude Code no informa a Claude de las conexiones de servidor fallidas.

431 431 

432### Enviar mensajes con canales432### Enviar mensajes con canales

433 433 

434Un servidor MCP también puede enviar mensajes directamente a tu sesión para que Claude pueda reaccionar a eventos externos como resultados de CI, alertas de monitoreo, o mensajes de chat. Para habilitar esto, tu servidor declara la capacidad `claude/channel` y tú lo activas con el flag `--channels` al inicio. Consulta [Channels](https://code.claude.com/docs/es/channels.md) para usar un canal con soporte oficial, o [Channels reference](https://code.claude.com/docs/es/channels-reference.md) para crear el tuyo propio.434Un servidor MCP también puede enviar mensajes directamente a tu sesión para que Claude reaccione a eventos externos como resultados de CI, alertas de monitoreo o mensajes de chat. Para habilitarlo, tu servidor declara la capacidad `claude/channel` y tú lo habilitas con el flag `--channels` al iniciar. Consulta [Canales](https://code.claude.com/docs/es/channels.md) para usar un canal con soporte oficial, o la [Referencia de canales](https://code.claude.com/docs/es/channels-reference.md) para crear el tuyo.

435 435 

436En el [tiempo de ejecución v2](#mcp-client-runtimes), un servidor de canal que 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. Un servidor de canal que no admite esa revisión se conecta con el handshake anterior y se registra como antes.436En el [runtime v2](#mcp-client-runtimes), un servidor de canal que negocia la revisión 2026-07-28 del protocolo MCP no puede entregar mensajes de canal, así que Claude Code no lo registra como canal. Un servidor de canal que no admite esa revisión se conecta con el handshake anterior y se registra como antes.

437 437 

438Claude Code pregunta a los servidores stdio por esa revisión de forma predeterminada. Para mantener un servidor de canal stdio en el handshake anterior, establece [`MCP_PROTOCOL_NEGOTIATION`](https://code.claude.com/docs/es/env-vars) en `legacy`, lo que mantiene todos los servidores en él.438Claude Code pide esa revisión a los servidores stdio de forma predeterminada. Para mantener un servidor de canal stdio en el handshake anterior, establece [`MCP_PROTOCOL_NEGOTIATION`](https://code.claude.com/docs/es/env-vars) en `legacy`, lo que mantiene a todos los servidores en él.

439 439 

440> [!TIP]440> [!TIP]

441>441>


443>443>

444> * Usa el flag `-s` o `--scope` para especificar dónde se almacena la configuración:444> * Usa el flag `-s` o `--scope` para especificar dónde se almacena la configuración:

445> * `local` (predeterminado): disponible solo para ti en el proyecto actual445> * `local` (predeterminado): disponible solo para ti en el proyecto actual

446> * `project`: compartido con todos en el proyecto a través del archivo `.mcp.json`446> * `project`: compartido con todos en el proyecto mediante el archivo `.mcp.json`

447> * `user`: disponible para ti en todos los proyectos447> * `user`: disponible para ti en todos los proyectos

448> * Establece variables de entorno con los flags `-e` o `--env` (por ejemplo, `-e KEY=value`)448> * Establece variables de entorno con los flags `-e` o `--env` (por ejemplo, `-e KEY=value`)

449> * Los flags `--transport` y `--header` también aceptan las formas cortas `-t` y `-H`449> * Los flags `--transport` y `--header` también aceptan las formas cortas `-t` y `-H`

450> * Configura 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)450> * Configura el tiempo de espera de inicio del servidor MCP con la variable de entorno `MCP_TIMEOUT` (por ejemplo, `MCP_TIMEOUT=10000 claude` establece un tiempo de espera de 10 segundos)

451> * Establece 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 sobrescribe la variable de entorno `MCP_TOOL_TIMEOUT` solo para ese servidor451> * Establece un tiempo de espera de ejecución de herramientas por servidor agregando un campo `timeout` en milisegundos a la entrada de `.mcp.json` de ese servidor, por ejemplo `"timeout": 600000` para diez minutos. Esto sobrescribe la variable de entorno `MCP_TOOL_TIMEOUT` solo para ese servidor

452> * 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 cambiar el límite de tokens, establece la variable de entorno `MAX_MCP_OUTPUT_TOKENS`, por ejemplo `MAX_MCP_OUTPUT_TOKENS=50000`. El umbral de advertencia es fijo. A menos que el servidor aumente el límite propio de una herramienta, los resultados de texto exitosos de más de 50,000 caracteres se guardan en un archivo independientemente de esta variable. Consulta [MCP output limits and warnings](#mcp-output-limits-and-warnings)452> * Claude Code muestra una advertencia cuando la salida de una herramienta MCP supera los 10,000 tokens y limita la salida a 25,000 tokens de forma predeterminada. Para cambiar el límite de tokens, establece la variable de entorno `MAX_MCP_OUTPUT_TOKENS`, por ejemplo `MAX_MCP_OUTPUT_TOKENS=50000`. El umbral de advertencia es fijo. A menos que el servidor aumente el límite propio de una herramienta, los resultados de texto correctos de más de 50,000 caracteres se guardan en un archivo independientemente de esta variable. Consulta [Límites y advertencias de salida de MCP](#mcp-output-limits-and-warnings)

453> * Usa `/mcp` para autenticarte con servidores remotos que requieren autenticación OAuth 2.0453> * Usa `/mcp` para autenticarte con servidores remotos que requieren autenticación OAuth 2.0

454 454 

455### Límites de tiempo en las llamadas a herramientas MCP455### Límites de tiempo en las llamadas a herramientas MCP

456 456 

457Para limitar cuánto tiempo puede durar una llamada a herramienta MCP:457Para limitar cuánto tiempo puede ejecutarse una llamada a herramienta MCP:

458 458 

459* **Por servidor**: agrega un campo `timeout` en milisegundos a la entrada de configuración de ese servidor459* **Por servidor**: agrega un campo `timeout` en milisegundos a la entrada de configuración de ese servidor

460* **Para todos los servidores**: establece [`MCP_TOOL_TIMEOUT`](https://code.claude.com/docs/es/env-vars)460* **Para todos los servidores**: establece [`MCP_TOOL_TIMEOUT`](https://code.claude.com/docs/es/env-vars)

461 461 

462El `timeout` por servidor es un límite estricto de tiempo real por llamada a herramienta, y las notificaciones de progreso del servidor no lo extienden. Los valores por debajo de 1000 se ignoran y se recurre 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 de [conector de claude.ai](https://code.claude.com/docs/es/mcp.md#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 en el 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.462El `timeout` por servidor es un límite estricto de tiempo real por llamada a herramienta, y las notificaciones de progreso del servidor no lo extienden. Los valores inferiores a 1000 se ignoran y se recurre a `MCP_TOOL_TIMEOUT`, o a su valor predeterminado de unas 28 horas cuando esa variable no está establecida. Para un servidor HTTP, SSE o de [conector de claude.ai](https://code.claude.com/docs/es/mcp.md#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 en el 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 inferior a 60 segundos no acorta el temporizador. Los servidores stdio y WebSocket no tienen temporizador por solicitud.

463 463 

464Un `timeout` por servidor de al menos 1000 también actúa como un mínimo para el tiempo de espera de inactividad descrito a continuación: Claude Code nunca aborta las llamadas a herramientas de ese servidor por inactividad antes del `timeout` por servidor.464Un `timeout` por servidor de al menos 1000 también actúa como mínimo del tiempo de espera por inactividad descrito a continuación: Claude Code nunca aborta las llamadas a herramientas de ese servidor por inactividad antes del `timeout` por servidor.

465 465 

466Una llamada a herramienta a un servidor MCP que no envía respuesta ni notificación de progreso durante la ventana de inactividad se aborta con un error en lugar de esperar el límite de tiempo real. El tiempo de espera de inactividad se aplica a todos los tipos de servidor excepto los servidores IDE y los servidores SDK en proceso. La ventana de inactividad tiene un valor predeterminado de cinco minutos para servidores HTTP, SSE, WebSocket, y de [conector de claude.ai](#use-mcp-servers-from-claude-ai), y de 30 minutos para servidores stdio.466Una llamada a herramienta a un servidor MCP que no envía ninguna respuesta ni notificación de progreso durante la ventana de inactividad se aborta con un error en lugar de esperar al límite de tiempo real. El tiempo de espera por inactividad se aplica a todos los tipos de servidor excepto los servidores de IDE y los servidores en proceso del SDK. La ventana de inactividad es de cinco minutos de forma predeterminada para los servidores HTTP, SSE, WebSocket y de [conectores de claude.ai](#use-mcp-servers-from-claude-ai), y de 30 minutos para los servidores stdio.

467 467 

468Establece la variable de entorno [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](https://code.claude.com/docs/es/env-vars) en milisegundos para cambiar la ventana de inactividad, o establécela en `0` para deshabilitar la verificación.468Establece la variable de entorno [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](https://code.claude.com/docs/es/env-vars) en milisegundos para cambiar la ventana de inactividad, o establécela en `0` para desactivar la comprobación.

469 469 

470Estos tiempos de espera limitan cuánto tiempo puede ejecutarse una llamada, no siempre cuánto tiempo bloquea la sesión: una llamada de la conversación principal que se ejecuta más de dos minutos pasa antes a una tarea en segundo plano. Consulta [Automatic backgrounding of long tool calls](#automatic-backgrounding-of-long-tool-calls).470Estos tiempos de espera limitan cuánto puede ejecutarse una llamada, no siempre cuánto tiempo bloquea la sesión: una llamada de la conversación principal que se ejecuta más de dos minutos pasa primero a una tarea en segundo plano. Consulta [Paso automático a segundo plano de llamadas a herramientas largas](#automatic-backgrounding-of-long-tool-calls).

471 471 

472### Ejecución automática en segundo plano de llamadas a herramientas largas472### Paso automático a segundo plano de llamadas a herramientas largas

473 473 

474Si la vista de detalle de una llamada en segundo plano en [`/tasks`](https://code.claude.com/docs/es/commands#all-commands) muestra `runs on the server; survives exiting this session`, consulta [Tareas MCP que se ejecutan en el servidor](#mcp-tasks-that-run-on-the-server).474Si la vista de detalle de una llamada en segundo plano en [`/tasks`](https://code.claude.com/docs/es/commands#all-commands) muestra `runs on the server; survives exiting this session`, consulta [Tareas MCP que se ejecutan en el servidor](#mcp-tasks-that-run-on-the-server).

475 475 

476Una llamada a herramienta MCP en la conversación principal que aún se está ejecutando después de dos minutos pasa a una tarea en segundo plano en lugar de bloquear la sesión. Claude recibe el ID de la tarea inmediatamente y sigue trabajando, y el resultado llega como una notificación de tarea cuando la llamada termina.476Una llamada a herramienta MCP en la conversación principal que sigue en ejecución después de dos minutos pasa a una tarea en segundo plano en lugar de bloquear la sesión. Claude recibe el ID de la tarea de inmediato y sigue trabajando, y el resultado llega como una notificación de tarea cuando la llamada termina.

477 477 

478La tarea aparece en [`/tasks`](https://code.claude.com/docs/es/commands#all-commands), donde también puedes 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. Si detienes la tarea, Claude Code cancela la llamada y le dice a Claude que no llegará ningún resultado. Detenerla no garantiza que el servidor se detenga: puede que ya haya hecho parte del trabajo, o que aún lo termine.478La tarea aparece en [`/tasks`](https://code.claude.com/docs/es/commands#all-commands), donde también puedes detenerla, y no sobrevive a la salida de la sesión. La entrada de la tarea muestra el último progreso que informó el servidor. Si detienes la tarea, Claude Code cancela la llamada y le dice a Claude que no llegará ningún resultado. Detenerla no garantiza que el servidor se detenga: puede que ya haya hecho parte del trabajo, o que aún lo termine.

479 479 

480Los límites por llamada aún se aplican mientras la llamada se ejecuta en segundo plano: el límite de tiempo real establecido por el `timeout` por servidor o [`MCP_TOOL_TIMEOUT`](https://code.claude.com/docs/es/env-vars), y el tiempo de espera de inactividad establecido por [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](https://code.claude.com/docs/es/env-vars).480Los límites por llamada siguen aplicándose mientras la llamada se ejecuta en segundo plano: el límite de tiempo real establecido por el `timeout` por servidor o por [`MCP_TOOL_TIMEOUT`](https://code.claude.com/docs/es/env-vars), y el tiempo de espera por inactividad establecido por [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](https://code.claude.com/docs/es/env-vars).

481 481 

482Para cambiar o desactivar el paso automático a segundo plano:482Para cambiar o desactivar el paso automático a segundo plano:

483 483 

484* Establece la variable de entorno [`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](https://code.claude.com/docs/es/env-vars) en milisegundos para cambiar el umbral, o establécela en `0` para desactivar el paso automático a segundo plano. Con `0`, Claude también [espera las tareas MCP](#make-claude-wait-for-the-result-of-an-mcp-task) en una sesión interactiva484* Establece la variable de entorno [`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](https://code.claude.com/docs/es/env-vars) en milisegundos para cambiar el umbral, o establécela en `0` para desactivar el paso automático a segundo plano. Con `0`, Claude también [espera a las tareas MCP](#make-claude-wait-for-the-result-of-an-mcp-task) en una sesión interactiva

485* Establece [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](https://code.claude.com/docs/es/env-vars) en `1` para desactivar el paso automático a segundo plano y los [comandos en segundo plano](https://code.claude.com/docs/es/tools-reference.md#background-commands)485* Establece [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](https://code.claude.com/docs/es/env-vars) en `1` para desactivar el paso automático a segundo plano y los [comandos en segundo plano](https://code.claude.com/docs/es/tools-reference.md#background-commands)

486 486 

487Algunas llamadas nunca pasan a segundo plano:487Algunas llamadas nunca pasan a segundo plano:

488 488 

489* Llamadas de [subagentes](https://code.claude.com/docs/es/sub-agents.md); Claude Code solo pasa a segundo plano las llamadas de la conversación principal489* Las llamadas de [subagentes](https://code.claude.com/docs/es/sub-agents.md); Claude Code pasa a segundo plano solo las llamadas de la conversación principal

490* Llamadas a servidores IDE490* Las llamadas a servidores de IDE

491* Llamadas en [modo no interactivo](https://code.claude.com/docs/es/headless.md), 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* Las llamadas en [modo no interactivo](https://code.claude.com/docs/es/headless.md), 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

492 492 

493Una llamada que espera en un [diálogo de elicitación](#respond-to-mcp-elicitation-requests) abierto no pasa a segundo plano mientras el diálogo está abierto; el servidor está bloqueado esperando tu entrada, no es lento, por lo que Claude Code pospone el paso hasta que el diálogo se cierre.493Una llamada que espera un [diálogo de elicitación](#respond-to-mcp-elicitation-requests) abierto no pasa a segundo plano mientras el diálogo está abierto; el servidor está bloqueado esperando tu entrada, no es lento, así que Claude Code pospone el paso hasta que el diálogo se cierra.

494 494 

495### Tareas MCP que se ejecutan en el servidor495### Tareas MCP que se ejecutan en el servidor

496 496 

497Una tarea MCP es un trabajo largo, como una exportación de informe o una compilación, que un servidor MCP ejecuta por sí mismo usando la [extensión de tareas de MCP](https://modelcontextprotocol.io/extensions/tasks/overview). La llamada a herramienta de Claude regresa en cuanto el servidor acepta el trabajo, así que Claude sigue trabajando a menos que [hagas que Claude espere](#make-claude-wait-for-the-result-of-an-mcp-task). Cuando el trabajo termina, la transcripción lo indica y Claude recibe el resultado. Pídeselo a Claude.497Una tarea MCP es un trabajo largo, como una exportación de informe o una compilación, que un servidor MCP ejecuta por sí mismo usando la [extensión de tareas de MCP](https://modelcontextprotocol.io/extensions/tasks/overview). La llamada a herramienta de Claude regresa en cuanto el servidor acepta el trabajo, así que Claude sigue trabajando a menos que [hagas que Claude espere](#make-claude-wait-for-the-result-of-an-mcp-task). Cuando el trabajo termina, la transcripción lo indica y Claude recibe el resultado. Pídeselo a Claude.

498 498 

499Mientras tanto, el pie muestra un recuento como `1 MCP task`, y Claude Code sigue la tarea consultando su estado con el servidor. Una tarea en un servidor remoto sigue ejecutándose después de que sales. Para volver a seguirla, [reanuda la misma sesión](#exit-clear-or-resume-while-an-mcp-task-runs).499Mientras tanto, el pie muestra un recuento como `1 MCP task`, y Claude Code sigue la tarea comprobando su estado con el servidor. Una tarea en un servidor remoto sigue ejecutándose después de que sales. Para volver a seguirla, [reanuda la misma sesión](#exit-clear-or-resume-while-an-mcp-task-runs).

500 500 

501> [!NOTE]501> [!NOTE]

502>502>

503> Las tareas MCP están en beta pública en la CLI de Claude Code y requieren Claude Code v2.1.304 o posterior. [Qué necesita una llamada para convertirse en una tarea MCP](#requirements-for-mcp-tasks) enumera las sesiones y los servidores que las obtienen.503> Las tareas MCP están en beta pública en la CLI de Claude Code y requieren Claude Code v2.1.304 o posterior. [Qué necesita una llamada para convertirse en una tarea MCP](#requirements-for-mcp-tasks) lista las sesiones y los servidores que las obtienen.

504 504 

505#### Detener una tarea MCP u obtener su resultado505#### Detener una tarea MCP u obtener su resultado

506 506 

507Para detener una tarea en ejecución, selecciónala en [`/tasks`](https://code.claude.com/docs/es/commands#all-commands) y presiona `x`, o pídeselo a Claude. Claude Code deja de seguir la tarea y le pide al servidor que la cancele, aunque el servidor puede terminarla de todos modos. Vuelve a conectar primero un servidor desconectado desde `/mcp`, o no se envía ninguna solicitud de cancelación y Claude Code olvida la tarea y no puede volver a seguirla. Presionar `Esc` no detiene una tarea en segundo plano.507Para detener una tarea en ejecución, selecciónala en [`/tasks`](https://code.claude.com/docs/es/commands#all-commands) y presiona `x`, o pídeselo a Claude. Claude Code deja de seguir la tarea y le pide al servidor que la cancele, aunque el servidor podría terminarla de todos modos. Vuelve a conectar primero desde `/mcp` un servidor desconectado; de lo contrario, no se envía ninguna solicitud de cancelación y Claude Code olvida la tarea y no puede volver a seguirla. Presionar `Esc` no detiene una tarea en segundo plano.

508 508 

509Cuando la tarea termina, aparece en la transcripción una línea como esta:509Cuando la tarea termina, aparece en la transcripción una línea como esta:

510 510 


512MCP task <server task id> (<server>/<tool>) completed.512MCP task <server task id> (<server>/<tool>) completed.

513```513```

514 514 

515El resultado va a Claude, no a la transcripción, así que pídeselo a Claude. Si Claude está inactivo cuando llega el resultado, Claude se pone a trabajar con él sin que se lo pidas.515El resultado va a Claude, no a la transcripción, así que pídeselo a Claude. Si Claude está inactivo cuando llega el resultado, Claude empieza a trabajar con él sin que se lo pidas.

516 516 

517#### Responder a una pregunta de una tarea MCP517#### Responder a una pregunta de una tarea MCP

518 518 


524 524 

525Una tarea en un servidor remoto sigue ejecutándose después de que sales. El proceso de un servidor stdio se detiene cuando Claude Code sale, aunque sus tareas muestren `runs on the server; survives exiting this session` en `/tasks`. A menos que la documentación de ese servidor indique que el trabajo sobrevive al proceso, deja que esas tareas terminen o detenlas primero en `/tasks`.525Una tarea en un servidor remoto sigue ejecutándose después de que sales. El proceso de un servidor stdio se detiene cuando Claude Code sale, aunque sus tareas muestren `runs on the server; survives exiting this session` en `/tasks`. A menos que la documentación de ese servidor indique que el trabajo sobrevive al proceso, deja que esas tareas terminen o detenlas primero en `/tasks`.

526 526 

527| Situación | Qué le ocurre a la tarea | Qué puedes hacer |527| Situación | Qué le pasa a la tarea | Qué puedes hacer |

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

529| Ejecutas `/clear` o `/branch`, o usas `/resume` con otra sesión | Mientras Claude Code sigue abierto, el resultado llega a tu conversación actual | Después de salir, usa `claude --resume` con la sesión en la que empezó la tarea |529| Ejecutas `/clear` o `/branch`, o usas `/resume` con otra sesión | Mientras Claude Code siga abierto, el resultado llega a tu conversación actual | Después de salir, usa `claude --resume` con la sesión en la que empezó la tarea |

530| Sales de Claude Code | Ninguna opción de salida cancela la tarea de un servidor remoto, aunque el diálogo de salida la incluya bajo `The following will stop when you exit:` | Detenla primero en `/tasks`, o reanuda la misma sesión más tarde |530| Sales de Claude Code | Ninguna opción de salida cancela la tarea de un servidor remoto, incluso cuando el diálogo de salida la lista bajo `The following will stop when you exit:` | Detenla primero en `/tasks`, o reanuda la misma sesión más tarde |

531| Vuelves a la sesión de la tarea de forma interactiva: `claude --resume`, `claude --continue` o `/resume` | En cuanto el servidor se conecta, Claude Code vuelve a seguir la tarea, y Claude recibe el resultado si terminó mientras tanto y el servidor todavía lo conoce | Mantén sin cambios el nombre y la configuración de conexión del servidor |531| Vuelves a la sesión de la tarea de forma interactiva: `claude --resume`, `claude --continue` o `/resume` | En cuanto el servidor se conecta, Claude Code vuelve a seguir la tarea, y Claude recibe el resultado si terminó mientras tanto y el servidor todavía lo conoce | Mantén sin cambios el nombre y la configuración de conexión del servidor |

532| Reanudas la sesión de la tarea con `--resume` o `--continue` en una ejecución única `claude -p "<prompt>"` | Esa ejecución no sigue la tarea | Reanuda de forma interactiva, o con `--input-format stream-json` |532| Reanudas la sesión de la tarea con `--resume` o `--continue` en una ejecución única `claude -p "<prompt>"` | Esa ejecución no sigue la tarea | Reanuda de forma interactiva, o con `--input-format stream-json` |

533| Inicias una sesión nueva o usas `--fork-session` | La nueva sesión no sigue la tarea | Reanuda la sesión que la inició |533| Inicias una sesión nueva o usas `--fork-session` | La sesión nueva no sigue la tarea | Reanuda la sesión que la inició |

534 534 

535#### Qué necesita una llamada para convertirse en una tarea MCP535#### Qué necesita una llamada para convertirse en una tarea MCP

536 536 


538 538 

539* El servidor admite tareas539* El servidor admite tareas

540* El servidor es un servidor HTTP, stdio o de conector de claude.ai conectado con la [revisión 2026-07-28 del protocolo](#mcp-client-runtimes). Establecer [`MCP_SDK_GENERATION=v1` o `MCP_PROTOCOL_NEGOTIATION=legacy`](https://code.claude.com/docs/es/env-vars) lo descarta540* El servidor es un servidor HTTP, stdio o de conector de claude.ai conectado con la [revisión 2026-07-28 del protocolo](#mcp-client-runtimes). Establecer [`MCP_SDK_GENERATION=v1` o `MCP_PROTOCOL_NEGOTIATION=legacy`](https://code.claude.com/docs/es/env-vars) lo descarta

541* La sesión [obtiene feature flags](https://code.claude.com/docs/es/env-vars.md#features-that-need-feature-flag-fetching), así que no en un proveedor externo como Amazon Bedrock, ni con la telemetría o la obtención de flags desactivadas541* La sesión [obtiene feature flags](https://code.claude.com/docs/es/env-vars.md#features-that-need-feature-flag-fetching), por lo que no está en un proveedor externo como Amazon Bedrock ni tiene desactivadas la telemetría o la obtención de flags

542* Anthropic ha activado las tareas MCP para tu tipo de sesión. En v2.1.304 o posterior eso abarca las sesiones de la CLI en terminal, las sesiones del [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md) y las ejecuciones de [GitHub Actions](https://code.claude.com/docs/es/github-actions.md). Otras superficies, como la [extensión de VS Code](https://code.claude.com/docs/es/vs-code.md) y la [aplicación de escritorio](https://code.claude.com/docs/es/desktop.md), no tienen tareas MCP542* Anthropic activó las tareas MCP para tu tipo de sesión. En v2.1.304 o posterior eso cubre las sesiones de la CLI en la terminal, las sesiones del [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md) y las ejecuciones de [GitHub Actions](https://code.claude.com/docs/es/github-actions.md). Otras superficies, como la [extensión de VS Code](https://code.claude.com/docs/es/vs-code.md) y la [aplicación de escritorio](https://code.claude.com/docs/es/desktop.md), no tienen tareas MCP

543* La llamada proviene de la conversación principal, no de un [subagente](https://code.claude.com/docs/es/sub-agents.md)543* La llamada proviene de la conversación principal, no de un [subagente](https://code.claude.com/docs/es/sub-agents.md)

544* O bien la sesión es interactiva, o bien una sesión del [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md) o una ejecución de `claude -p` que lee `--input-format stream-json` tiene:544* O bien la sesión es interactiva, o bien una sesión del [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md) o una ejecución de `claude -p` que lee `--input-format stream-json` tiene:

545 * [`CLAUDE_AUTO_BACKGROUND_TASKS`](https://code.claude.com/docs/es/env-vars) en `1`545 * [`CLAUDE_AUTO_BACKGROUND_TASKS`](https://code.claude.com/docs/es/env-vars) en `1`

546 * `CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND` distinto de `1`546 * `CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND` distinto de `1`

547 * `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` distinto de `0`547 * `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` distinto de `0`

548 548 

549Cualquier otra llamada es una llamada a herramienta normal, y [Paso automático a segundo plano de las llamadas a herramientas largas](#automatic-backgrounding-of-long-tool-calls) indica cuáles de ellas pasan a segundo plano.549Cualquier otra llamada es una llamada a herramienta simple, y [Paso automático a segundo plano de llamadas a herramientas largas](#automatic-backgrounding-of-long-tool-calls) indica cuáles de ellas pasan a segundo plano.

550 550 

551Mantén abierta la entrada de una sesión del Agent SDK o de stream-json, porque la ejecución [no espera a las tareas MCP](https://code.claude.com/docs/es/headless.md#mcp-work-when-a-non-interactive-run-ends) después de que se cierra la entrada. Una ejecución única `claude -p "<prompt>"` no obtiene tareas MCP.551Mantén abierta la entrada de una sesión del Agent SDK o de stream-json, porque la ejecución [no espera a las tareas MCP](https://code.claude.com/docs/es/headless.md#mcp-work-when-a-non-interactive-run-ends) después de que se cierra la entrada. Una ejecución única `claude -p "<prompt>"` no obtiene tareas MCP.

552 552 

553#### Mensajes de estado de una tarea MCP553#### Mensajes de estado en una tarea MCP

554 554 

555Estos mensajes, en la entrada de una tarea en `/tasks` o en su línea final de la transcripción, significan que Claude Code no puede comunicarse con el servidor o con la tarea. Mientras se muestra uno en `/tasks`, el trabajo puede seguir en ejecución: Claude Code no lo toca y sigue comprobando. Los mensajes de `300s` y de configuración permanecen en la entrada incluso después de que se restablece el contacto.555Estos mensajes, en la entrada de una tarea en `/tasks` o en su línea de cierre de la transcripción, significan que Claude Code no puede comunicarse con el servidor o con la tarea. Mientras uno se muestra en `/tasks`, el trabajo puede seguir ejecutándose: Claude Code no lo toca y sigue comprobando. Los mensajes de `300s` y de configuración permanecen en la entrada incluso después de que se restablece el contacto.

556 556 

557| Mensaje | Qué está ocurriendo | Qué puedes hacer |557| Mensaje | Qué está pasando | Qué puedes hacer |

558| - | - | - |558| - | - | - |

559| `reconnecting…` | El servidor no ha respondido desde una reanudación, o las comprobaciones de estado no obtienen respuesta | Si persiste, vuelve a conectar desde `/mcp` |559| `reconnecting…` | El servidor no ha respondido desde una reanudación, o las comprobaciones de estado no reciben respuesta | Si persiste, vuelve a conectar desde `/mcp` |

560| `needs a sign-in to <server>` | El servidor rechazó una comprobación de estado | Inicia sesión desde `/mcp` |560| `needs a sign-in to <server>` | El servidor rechazó una comprobación de estado | Inicia sesión desde `/mcp` |

561| `status requests come back with errors; retrying…` | El servidor, o un proxy delante de él, responde a las comprobaciones de estado con errores | Espera mientras Claude Code reintenta |561| `status requests come back with errors; retrying…` | El servidor, o un proxy delante de él, responde a las comprobaciones de estado con errores | Espera mientras Claude Code reintenta |

562| `server '<name>' did not reconnect within 300s` | Ninguna comprobación respondida durante cinco minutos, por ejemplo con la conexión caída o el servidor desactivado | Vuelve a conectar desde `/mcp` |562| `server '<name>' did not reconnect within 300s` | Ninguna comprobación respondida durante cinco minutos, por ejemplo con la conexión caída o el servidor desactivado | Vuelve a conectar desde `/mcp` |

563| `server '<name>' asked for a sign-in, and none was accepted within 300s` | Después de cinco minutos, el servidor sigue pidiendo un inicio de sesión | Inicia sesión desde `/mcp` |563| `server '<name>' asked for a sign-in, and none was accepted within 300s` | Después de cinco minutos, el servidor todavía pide un inicio de sesión | Inicia sesión desde `/mcp` |

564| `status requests to server '<name>' came back with errors, and none succeeded in 300s` | Cinco minutos de respuestas con error | Revisa la salud o los registros del propio servidor |564| `status requests to server '<name>' came back with errors, and none succeeded in 300s` | Cinco minutos de respuestas con error | Revisa el estado o los registros del propio servidor |

565| `server '<name>' is not configured in this session; the task may still be running on it` | La sesión no tiene ningún servidor con ese nombre, por ejemplo porque se eliminó, se renombró o se dejó fuera de `--mcp-config`, o porque un conector de claude.ai todavía se está cargando | Restaura el servidor con el mismo nombre y luego vuelve a reanudar la sesión. Para un conector que se está cargando, nada: Claude Code sigue la tarea en cuanto aparece |565| `server '<name>' is not configured in this session; the task may still be running on it` | La sesión no tiene ningún servidor con ese nombre, por ejemplo porque se eliminó, se le cambió el nombre o se omitió de `--mcp-config`, o un conector de claude.ai todavía se está cargando | Restaura el servidor con el mismo nombre y luego reanuda la sesión de nuevo. Para un conector que se está cargando, nada: Claude Code sigue la tarea en cuanto aparece |

566| Un mensaje que empieza con `server '<name>' was reconfigured to a different transport since this task was created` | Existe un servidor con ese nombre cuya configuración de conexión cambió desde que empezó la tarea, como su URL, command, args, env, headers o timeout | Restaura la configuración anterior y luego vuelve a reanudar la sesión |566| Un mensaje que empieza con `server '<name>' was reconfigured to a different transport since this task was created` | Existe un servidor con ese nombre cuya configuración de conexión cambió desde que empezó la tarea, como su URL, comando, args, env, headers o timeout | Restaura la configuración anterior y luego reanuda la sesión de nuevo |

567| `the server rejected this task's id; asking again…` | El servidor dice que no conoce el ID de la tarea. Claude Code sigue preguntando durante hasta cinco minutos | Espera: el mensaje desaparece si el servidor vuelve a reconocer el ID, o le sigue la línea `outcome unknown.` |567| `the server rejected this task's id; asking again…` | El servidor dice que no conoce el ID de la tarea. Claude Code sigue preguntando hasta cinco minutos | Espera: el mensaje desaparece si el servidor vuelve a reconocer el ID, o aparece a continuación la línea `outcome unknown.` |

568| Una línea de la transcripción que termina en `outcome unknown.`, en una de sus formas `expired on the server: outcome unknown.` | El servidor rechazó el ID o se negó con otro error permanente, y Claude Code dejó de seguir la tarea | Una segunda llamada puede repetir el trabajo. Antes de volver a llamar a la herramienta, averigua con el servidor qué se hizo, por ejemplo pidiéndole a Claude que use las demás herramientas del servidor |568| Una línea de la transcripción que termina en `outcome unknown.`, en una de sus formas `expired on the server: outcome unknown.` | El servidor rechazó el ID o se negó con otro error permanente, y Claude Code dejó de seguir la tarea | Una segunda llamada podría repetir el trabajo. Antes de volver a llamar a la herramienta, averigua con el servidor qué se hizo, por ejemplo pidiéndole a Claude que use las otras herramientas del servidor |

569 569 

570#### Límites de tiempo en las tareas MCP570#### Límites de tiempo en las tareas MCP

571 571 


576Para que Claude espere el resultado de una tarea en una sesión interactiva, establece una de dos variables de entorno, por ejemplo en el bloque `env` de [`settings.json`](https://code.claude.com/docs/es/settings):576Para que Claude espere el resultado de una tarea en una sesión interactiva, establece una de dos variables de entorno, por ejemplo en el bloque `env` de [`settings.json`](https://code.claude.com/docs/es/settings):

577 577 

578* **[`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](https://code.claude.com/docs/es/env-vars) establecida en `0`**: Claude espera cada llamada a herramienta MCP hasta que la llamada termina578* **[`CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS`](https://code.claude.com/docs/es/env-vars) establecida en `0`**: Claude espera cada llamada a herramienta MCP hasta que la llamada termina

579* **[`CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND`](https://code.claude.com/docs/es/env-vars) establecida en `1`**: Claude espera el resultado de una tarea. Mientras el [paso automático a segundo plano](#automatic-backgrounding-of-long-tool-calls) está activado, mueve la llamada después de dos minutos de forma predeterminada, así que las tareas cortas terminan en su lugar y las largas no te bloquean. La llamada movida es una llamada normal en segundo plano y no una tarea MCP. No sobrevive a la salida de la sesión579* **[`CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUND`](https://code.claude.com/docs/es/env-vars) establecida en `1`**: Claude espera el resultado de una tarea. Mientras el [paso automático a segundo plano](#automatic-backgrounding-of-long-tool-calls) esté activado, mueve la llamada después de dos minutos de forma predeterminada, así que las tareas cortas terminan en su lugar y las largas no te bloquean. La llamada movida es una llamada en segundo plano simple, no una tarea MCP. No sobrevive a la salida de la sesión

580 580 

581Mientras Claude espera, presionar `Esc` o alcanzar el [límite de tiempo real o el tiempo de espera por inactividad](#time-limits-on-mcp-tasks) termina la llamada, y Claude Code le pide al servidor que cancele la tarea.581Mientras Claude espera, presionar `Esc` o alcanzar el [límite de tiempo real o el tiempo de espera por inactividad](#time-limits-on-mcp-tasks) termina la llamada, y Claude Code le pide al servidor que cancele la tarea.

582 582 

583Si estableces `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` en `1` o inicias en [modo bare](https://code.claude.com/docs/es/headless.md#start-faster-with-bare-mode), eso por sí solo no hace que Claude espere las tareas MCP. Este ejemplo establece `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` en `0`, así que Claude espera cada llamada a herramienta MCP:583Si estableces `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` en `1` o inicias en [modo bare](https://code.claude.com/docs/es/headless.md#start-faster-with-bare-mode), eso por sí solo no hace que Claude espere a las tareas MCP. Este ejemplo establece `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` en `0`, por lo que Claude espera cada llamada a herramienta MCP:

584 584 

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

586{586{


592 592 

593### Tareas MCP para autores de servidores593### Tareas MCP para autores de servidores

594 594 

595Si creas un servidor MCP, puedes responder a un `tools/call` de larga duración con una tarea. La [extensión de tareas de MCP](https://modelcontextprotocol.io/extensions/tasks/overview) define los mensajes que envías. En una conexión con la [revisión 2026-07-28 del protocolo](#mcp-client-runtimes), cada solicitud lleva las capacidades de cliente de Claude Code en `params._meta["io.modelcontextprotocol/clientCapabilities"]`, con `"io.modelcontextprotocol/tasks": {}` bajo `extensions`. Una solicitud `tools/call` que [no puede convertirse en una tarea](#requirements-for-mcp-tasks) omite esa extensión.595Si creas un servidor MCP, puedes responder a un `tools/call` de larga duración con una tarea. La [extensión de tareas de MCP](https://modelcontextprotocol.io/extensions/tasks/overview) define los mensajes que envías. En una conexión con la [revisión 2026-07-28 del protocolo](#mcp-client-runtimes), cada solicitud lleva las capacidades de cliente de Claude Code en `params._meta["io.modelcontextprotocol/clientCapabilities"]`, con `"io.modelcontextprotocol/tasks": {}` bajo `extensions`. Una solicitud `tools/call` que [no puede convertirse en tarea](#requirements-for-mcp-tasks) omite esa extensión.

596 596 

597#### Responder a la llamada con una tarea597#### Responder a la llamada con una tarea

598 598 

599Responde con una tarea solo cuando la solicitud lleve la extensión; de lo contrario, la llamada falla con el error de herramienta `Unsupported result type 'task' for tools/call`. La llamada falla de la misma manera si tu respuesta no tiene `taskId` o no tiene un `status` válido. El objeto de la tarea es el `result` JSON-RPC de tu respuesta a `tools/call`, no necesita un arreglo `content` y aquí incluye los campos opcionales `statusMessage` y `pollIntervalMs`:599Responde con una tarea solo cuando la solicitud lleve la extensión; de lo contrario, la llamada falla con el error de herramienta `Unsupported result type 'task' for tools/call`. La llamada falla de la misma manera si tu respuesta no tiene `taskId` o no tiene un `status` válido. El objeto de tarea es el `result` JSON-RPC de tu respuesta a `tools/call`, no necesita un arreglo `content` y aquí incluye los campos opcionales `statusMessage` y `pollIntervalMs`:

600 600 

601```json theme={null}601```json theme={null}

602{602{


613 613 

614| Campo | Cómo lo maneja Claude Code |614| Campo | Cómo lo maneja Claude Code |

615| - | - |615| - | - |

616| `resultType` | Establécelo en `"task"` para marcar la respuesta como una tarea. Sin él, Claude Code interpreta la respuesta como un resultado normal |616| `resultType` | Establécelo en `"task"` para marcar la respuesta como una tarea. Sin él, Claude Code interpreta la respuesta como un resultado simple |

617| `taskId` | Obligatorio. Como máximo 128 caracteres ASCII imprimibles sin espacios, o Claude recibe un error de herramienta que empieza con `MCP server "<name>" returned a malformed task handle for tool "<tool>"`. Mantén el ID consultable entre conexiones, porque después de una reanudación Claude Code pregunta por él en una conexión nueva |617| `taskId` | Obligatorio. Como máximo 128 caracteres ASCII imprimibles sin espacios; de lo contrario, Claude recibe un error de herramienta que empieza con `MCP server "<name>" returned a malformed task handle for tool "<tool>"`. Mantén el ID respondible entre conexiones, porque después de una reanudación Claude Code pregunta por él en una conexión nueva |

618| `status` | Obligatorio. Uno de `working`, `input_required`, `completed`, `failed` o `cancelled`. Otro valor produce el error `Unsupported result type` |618| `status` | Obligatorio. Uno de `working`, `input_required`, `completed`, `failed` o `cancelled`. Otro valor produce el error `Unsupported result type` |

619| `createdAt`, `lastUpdatedAt`, `ttlMs` | Obligatorios según la extensión de tareas, y `ttlMs` puede ser `null`. Claude Code no descarta una tarea porque haya pasado su `ttlMs` |619| `createdAt`, `lastUpdatedAt`, `ttlMs` | Obligatorios según la extensión de tareas, y `ttlMs` puede ser `null`. Claude Code no descarta una tarea porque su `ttlMs` haya pasado |

620| `pollIntervalMs` | Opcional. Milisegundos entre solicitudes `tasks/get`, limitado a un valor entre 250 y 30000. Claude Code usa 2000 cuando el campo está ausente o es `null`, y vuelve a leer el valor de cada respuesta a `tasks/get` |620| `pollIntervalMs` | Opcional. Milisegundos entre solicitudes `tasks/get`, limitado a un valor entre 250 y 30000. Claude Code usa 2000 cuando el campo está ausente o es `null`, y vuelve a leer el valor de cada respuesta a `tasks/get` |

621| `statusMessage` | Opcional. `/tasks` muestra el valor de tu última respuesta a `tasks/get`, no de esta primera, y una respuesta que omite el campo lo borra. Un [mensaje de estado de Claude Code](#status-messages-on-an-mcp-task) puede ocupar su lugar |621| `statusMessage` | Opcional. `/tasks` muestra el valor de tu respuesta más reciente a `tasks/get`, no el de esta primera, y una respuesta que omite el campo lo borra. Un [mensaje de estado de Claude Code](#status-messages-on-an-mcp-task) puede ocupar su lugar |

622 622 

623Claude Code acepta una respuesta de tarea que omite `createdAt`, `lastUpdatedAt` o `ttlMs`, o que establece `pollIntervalMs` en `null`. Antes de v2.1.317, la llamada fallaba en su lugar con el error `Unsupported result type`. Para que también funcione con esas versiones, envía los tres campos que requiere la extensión de tareas, y envía `pollIntervalMs` como número o no lo envíes.623Claude Code acepta una respuesta de tarea que omite `createdAt`, `lastUpdatedAt` o `ttlMs`, o que establece `pollIntervalMs` en `null`. Antes de v2.1.317, la llamada fallaba en su lugar con el error `Unsupported result type`. Para que también funcione con esas versiones, envía los tres campos que requiere la extensión de tareas, y envía `pollIntervalMs` como número o no lo envíes.

624 624 

625En un servidor HTTP o de conector de claude.ai, la respuesta con la tarea tiene que empezar dentro del [temporizador por solicitud](#time-limits-on-mcp-tool-calls), así que acepta el trabajo y responde primero, y luego haz el trabajo.625En un servidor HTTP o de conector de claude.ai, la respuesta de tarea tiene que empezar dentro del [temporizador por solicitud](#time-limits-on-mcp-tool-calls), así que acepta el trabajo y responde primero, y luego haz el trabajo.

626 626 

627#### Informar estado, resultados y preguntas627#### Informar estado, resultados y preguntas

628 628 

629Justo después de la respuesta con la tarea, Claude Code envía `tasks/get` con `{ "taskId": ... }`, y luego lo repite una vez por intervalo de sondeo. La extensión de tareas exige que tu respuesta lleve `"resultType": "complete"` junto con `taskId`, `status`, `createdAt`, `lastUpdatedAt` y `ttlMs`. `ttlMs` puede ser `null`, y `statusMessage` y `pollIntervalMs` son opcionales. Este ejemplo informa que la compilación terminó:629Justo después de la respuesta de tarea, Claude Code envía `tasks/get` con `{ "taskId": ... }` y luego lo repite una vez por intervalo de sondeo. La extensión de tareas requiere que tu respuesta lleve `"resultType": "complete"` junto con `taskId`, `status`, `createdAt`, `lastUpdatedAt` y `ttlMs`. `ttlMs` puede ser `null`, y `statusMessage` y `pollIntervalMs` son opcionales. Este ejemplo informa que la compilación terminó:

630 630 

631```json theme={null}631```json theme={null}

632{632{


645| Estado, método o respuesta | Cómo lo maneja Claude Code |645| Estado, método o respuesta | Cómo lo maneja Claude Code |

646| - | - |646| - | - |

647| `working` | Sigue sondeando |647| `working` | Sigue sondeando |

648| `completed` | Le entrega a Claude el resultado normal de `tools/call` en el objeto `result` de nivel superior. Un `isError: true` dentro de él se informa como un fallo |648| `completed` | Le da a Claude el resultado normal de `tools/call` en el objeto `result` de nivel superior. Un `isError: true` dentro de él se informa como un fallo |

649| `failed` | Le indica a Claude el `message` del objeto `error` de nivel superior `{ code, message, data }`, que la extensión de tareas exige en una tarea fallida. Sin ese `message`, Claude recibe `statusMessage` en su lugar, o si no, `Task failed` |649| `failed` | Le comunica a Claude el `message` del objeto `error` de nivel superior `{ code, message, data }`, que la extensión de tareas requiere en una tarea fallida. Sin ese `message`, Claude recibe `statusMessage` en su lugar, o en su defecto `Task failed` |

650| `cancelled` | Le indica a Claude `statusMessage`, o si no, `Task was cancelled by the server` |650| `cancelled` | Le comunica a Claude `statusMessage`, o en su defecto `Task was cancelled by the server` |

651| `input_required` | Lee `inputRequests`, un objeto que asigna una clave que tú eliges a `{ method, params }`. Claude Code responde a cada clave una vez mediante `tasks/update` con `{ taskId, inputResponses }`, donde `inputResponses` asigna la misma clave al resultado de esa solicitud. Las claves que superan las 16 por tarea se ignoran |651| `input_required` | Lee `inputRequests`, un objeto que asigna una clave que tú eliges a `{ method, params }`. Claude Code responde a cada clave una vez mediante `tasks/update` con `{ taskId, inputResponses }`, donde `inputResponses` asigna la misma clave al resultado de esa solicitud. Las claves que superan las 16 por tarea se ignoran |

652| Métodos en `inputRequests` | `elicitation/create` solo se atiende en sesiones interactivas de terminal, y `roots/list` en todas partes. Cuando Claude Code no puede atender una solicitud, le pide al servidor que cancele la tarea |652| Métodos en `inputRequests` | `elicitation/create` se atiende solo en sesiones interactivas de la terminal, y `roots/list` en todas partes. Cuando Claude Code no puede atender una solicitud, le pide al servidor que cancele la tarea |

653| Otro valor de `status` | Claude Code le pide al servidor que cancele la tarea y la informa a Claude como fallida |653| Otro valor de `status` | Claude Code le pide al servidor que cancele la tarea y se la informa a Claude como fallida |

654| Error JSON-RPC `-32602` | Se interpreta como un ID de tarea desconocido. Para una tarea en segundo plano, Claude Code sigue preguntando durante hasta cinco minutos y luego informa a Claude que el resultado es desconocido |654| Error JSON-RPC `-32602` | Se interpreta como un ID de tarea desconocido. Para una tarea en segundo plano, Claude Code sigue preguntando hasta cinco minutos y luego le informa a Claude que el resultado es desconocido |

655| `tasks/cancel` | Se envía, por ejemplo, cuando Claude o la persona detiene la tarea mientras el servidor está conectado. No se envía al salir |655| `tasks/cancel` | Se envía, por ejemplo, cuando Claude o la persona detiene la tarea mientras el servidor está conectado. No se envía al salir |

656| `tasks/result`, `tasks/list`, `notifications/tasks` | No se usan, así que incluye el resultado en tus respuestas a `tasks/get` |656| `tasks/result`, `tasks/list`, `notifications/tasks` | No se usan, así que incluye el resultado en tus respuestas a `tasks/get` |

657 657 

658### Servidores MCP proporcionados por plugins658### Servidores MCP proporcionados por plugins

659 659 

660[Los plugins](https://code.claude.com/docs/es/plugins/overview.md) pueden incluir servidores MCP que proporcionan herramientas e integraciones cuando habilitas el plugin.660Los [plugins](https://code.claude.com/docs/es/plugins/overview.md) pueden incluir servidores MCP que proporcionan herramientas e integraciones cuando habilitas el plugin.

661 661 

662**Cómo funcionan los servidores MCP de plugins**:662**Cómo funcionan los servidores MCP de plugins**:

663 663 

664* Los plugins definen servidores MCP en `.mcp.json` en la raíz del plugin o en línea en `plugin.json`664* Los plugins definen servidores MCP en `.mcp.json` en la raíz del plugin o en línea en `plugin.json`

665* Cuando habilitas un plugin, Claude Code inicia sus servidores MCP automáticamente665* Cuando habilitas un plugin, Claude Code inicia sus servidores MCP automáticamente

666* Claude Code ofrece las herramientas MCP de plugins junto con las herramientas MCP configuradas manualmente666* Claude Code ofrece las herramientas MCP de plugins junto con las herramientas MCP configuradas manualmente

667* Agregas y eliminas servidores de plugins instalando o desinstalando el plugin, no con comandos `/mcp`. Aún puedes [desactivar un servidor de plugin instalado](#disable-a-server-without-removing-it) en `/mcp`, lo que hace que Claude Code deje de conectarse a él sin eliminar el plugin667* Agregas y quitas servidores de plugins instalando o desinstalando el plugin, no con comandos `/mcp`. Aun así, puedes [desactivar un servidor de plugin instalado](#disable-a-server-without-removing-it) en `/mcp`, lo que impide que Claude Code se conecte a él sin quitar el plugin

668 668 

669**Ejemplo de configuración MCP de plugin**:669**Ejemplo de configuración MCP de un plugin**:

670 670 

671En `.mcp.json` en la raíz del plugin:671En `.mcp.json` en la raíz del plugin:

672 672 


698}698}

699```699```

700 700 

701**Características MCP de plugins**:701**Características de MCP en plugins**:

702 702 

703* **Ciclo de vida automático**: los servidores se conectan y desconectan en estos momentos:703* **Ciclo de vida automático**: los servidores se conectan y desconectan en estos momentos:

704 * Al inicio de la sesión, Claude Code conecta automáticamente los servidores de los plugins habilitados. En `/mcp`, un servidor de plugin remoto (HTTP o SSE) que hayas usado 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 herramientas. Cuando la conexión de un servidor de plugin stdio falló hace menos de 15 minutos, Claude Code [omite la conexión](https://code.claude.com/docs/es/errors.md#skipping-connection-recent-failure-cached)704 * Al iniciar la sesión, Claude Code conecta automáticamente los servidores de los plugins habilitados. En `/mcp`, un servidor de plugin remoto (HTTP o SSE) que ya hayas usado antes puede mostrar en su lugar el [estado `cached`](#server-status-detail); Claude Code lo conecta cuando Claude llama por primera vez a una de sus herramientas. Cuando la conexión de un servidor de plugin stdio falló hace menos de 15 minutos, Claude Code [omite la conexión](https://code.claude.com/docs/es/errors.md#skipping-connection-recent-failure-cached)

705 * Si habilitas o deshabilitas un plugin durante una sesión, Claude Code conecta o desconecta sus servidores MCP cuando el cambio se aplica. [Apply plugin changes without restarting](https://code.claude.com/docs/es/plugins/cli-reference.md#reload-plugins) describe cuándo sucede eso. En una sesión sin terminal interactiva, `/reload-plugins` no conecta ni desconecta servidores MCP de plugins; esos cambios surten efecto en tu próxima sesión705 * Si habilitas o deshabilitas un plugin durante una sesión, Claude Code conecta o desconecta sus servidores MCP cuando se aplica el cambio. [Aplicar cambios de plugins sin reiniciar](https://code.claude.com/docs/es/plugins/cli-reference.md#reload-plugins) describe cuándo ocurre eso. En una sesión sin una terminal interactiva, `/reload-plugins` no conecta ni desconecta los servidores MCP de plugins; esos cambios surten efecto en tu próxima sesión

706 * Cuando recargas, Claude Code mantiene las conexiones activas de los servidores de plugins cuya configuración no ha cambiado, y hace lo mismo cuando [reemplazas la lista de servidores MCP de la sesión](https://code.claude.com/docs/es/agent-sdk/typescript.md#mcpsetserversresult) desde el Agent SDK sin nombrarlos706 * Cuando recargas, Claude Code mantiene las conexiones activas de los servidores de plugins cuya configuración no ha cambiado, y hace lo mismo cuando [reemplazas la lista de servidores MCP de la sesión](https://code.claude.com/docs/es/agent-sdk/typescript.md#mcpsetserversresult) desde el Agent SDK sin nombrarlos

707 * Cuando [mueves la sesión con `/cd`](https://code.claude.com/docs/es/permissions#move-the-session-to-another-directory) en v2.1.246 o posterior, Claude Code conecta los servidores de los plugins que la configuración del nuevo directorio habilita y desconecta los servidores de los plugins que ya no están habilitados, por lo que no necesitas ejecutar `/reload-plugins` después del cambio707 * Cuando [mueves la sesión con `/cd`](https://code.claude.com/docs/es/permissions#move-the-session-to-another-directory) en la v2.1.246 o posterior, Claude Code conecta los servidores de los plugins que habilita la configuración del nuevo directorio y desconecta los servidores de los plugins que ya no están habilitados, así que no necesitas ejecutar `/reload-plugins` después del cambio

708 * En [sesiones en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), una llamada MCP a un servidor de plugin que aún no está conectado, como justo después de que se reactive una sesión inactiva, inicia el servidor bajo demanda y espera a que se conecte708 * En las [sesiones en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md), una llamada MCP a un servidor de plugin que aún no está conectado, por ejemplo justo después de que se reactive una sesión inactiva, inicia el servidor bajo demanda y espera a que se conecte

709* **Marcadores de posición de ruta**: `${CLAUDE_PLUGIN_ROOT}` se resuelve al directorio de instalación del plugin, `${CLAUDE_PLUGIN_DATA}` a su directorio de [estado persistente](https://code.claude.com/docs/es/plugins/components.md#path-variables-and-persistent-data), y `${CLAUDE_PROJECT_DIR}` a la raíz estable del proyecto. La sustitución se aplica a:709* **Marcadores de ruta**: `${CLAUDE_PLUGIN_ROOT}` se resuelve en el directorio de instalación del plugin, `${CLAUDE_PLUGIN_DATA}` en su directorio de [estado persistente](https://code.claude.com/docs/es/plugins/components.md#path-variables-and-persistent-data), y `${CLAUDE_PROJECT_DIR}` en la raíz estable del proyecto. La sustitución se aplica a:

710 * servidores `stdio`: `command`, `args`, `env`710 * Servidores `stdio`: `command`, `args`, `env`

711 * servidores `http`, `sse`, y `ws`: `url`, `headers`, y `headersHelper`711 * Servidores `http`, `sse` y `ws`: `url`, `headers` y `headersHelper`

712* **Acceso al entorno del usuario**: acceso a las mismas variables de entorno que los servidores configurados manualmente712* **Acceso al entorno del usuario**: acceso a las mismas variables de entorno que los servidores configurados manualmente

713* **Múltiples tipos de transporte**: soporte para transportes stdio, SSE, HTTP, y WebSocket, aunque el soporte de transporte puede variar según el servidor713* **Múltiples tipos de transporte**: compatibilidad con los transportes stdio, SSE, HTTP y WebSocket, aunque la compatibilidad de transporte puede variar según el servidor

714 714 

715Los servidores de plugins aparecen en `/mcp` con indicadores que muestran que provienen de plugins.715Los servidores de plugins aparecen en `/mcp` con indicadores que muestran que provienen de plugins.

716 716 

717`claude mcp get` oculta los valores configurados para el servidor stdio o WebSocket de un plugin, porque pueden contener credenciales:717`claude mcp get` oculta los valores configurados para el servidor stdio o WebSocket de un plugin, porque pueden contener credenciales:

718 718 

719* **Servidor stdio**: imprime `Command: stdio`, una línea `Args:` vacía, y cada variable de entorno como `NAME=[REDACTED]`719* **Servidor stdio**: muestra `Command: stdio`, una línea `Args:` vacía y cada variable de entorno como `NAME=[REDACTED]`

720* **Servidor WebSocket**: imprime `URL: ws` y cada encabezado como `<name>: [REDACTED]`, y `claude mcp list` muestra `ws` en lugar de la URL720* **Servidor WebSocket**: muestra `URL: ws` y cada encabezado como `<name>: [REDACTED]`, y `claude mcp list` muestra `ws` en lugar de la URL

721 721 

722Para ver lo que configuró el plugin, [busca el plugin en el disco](https://code.claude.com/docs/es/plugins/loading.md#find-plugins-on-disk) y lee su `.mcp.json` o `plugin.json`.722Para ver lo que configuró el plugin, [busca el plugin en el disco](https://code.claude.com/docs/es/plugins/loading.md#find-plugins-on-disk) y lee su `.mcp.json` o `plugin.json`.

723 723 

724**Nombres de herramientas MCP de plugins**:724**Nombres de herramientas MCP de plugins**:

725 725 

726Las herramientas de un servidor MCP incluido en un plugin contienen 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` incluido en un plugin llamado `my-plugin`, una herramienta `query` es invocable como:726Las herramientas de un servidor MCP incluido 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 por `_`. Para el servidor `database-tools` incluido en un plugin llamado `my-plugin`, una herramienta `query` se puede invocar como:

727 727 

728```728```

729mcp__plugin_my-plugin_database-tools__query729mcp__plugin_my-plugin_database-tools__query

730```730```

731 731 

732Usa este nombre completo cuando hagas referencia a la herramienta en [reglas de permisos](https://code.claude.com/docs/es/permissions.md), la lista `allowed-tools` de un skill, el [campo `tools` de un subagente](https://code.claude.com/docs/es/sub-agents#available-tools), o un [matcher de hook](https://code.claude.com/docs/es/hooks.md#match-mcp-tools). Un matcher de hook escrito contra la clave del servidor sola, como `mcp__database-tools__.*`, nunca se activa para un servidor incluido en un plugin.732Usa este nombre completo cuando hagas referencia a la herramienta en [reglas de permisos](https://code.claude.com/docs/es/permissions.md), la lista `allowed-tools` de un skill, el [campo `tools` de un subagente](https://code.claude.com/docs/es/sub-agents#available-tools) o un [matcher de hook](https://code.claude.com/docs/es/hooks.md#match-mcp-tools). Un matcher de hook escrito con la clave del servidor sin prefijo, como `mcp__database-tools__.*`, nunca se activa para un servidor incluido en un plugin.

733 733 

734El servidor en sí se registra bajo el nombre con alcance `plugin:<plugin-name>:<server-name>`, como `plugin:my-plugin:database-tools`. Usa ese nombre donde se espera un nombre de servidor configurado, como el [campo `server` de un hook `mcp_tool`](https://code.claude.com/docs/es/hooks#mcp-tool-hook-fields).734El servidor en sí se registra con el nombre con ámbito `plugin:<plugin-name>:<server-name>`, como `plugin:my-plugin:database-tools`. Usa ese nombre donde se espere el nombre de un servidor configurado, como en el [campo `server` de un hook `mcp_tool`](https://code.claude.com/docs/es/hooks#mcp-tool-hook-fields).

735 735 

736Consulta la [referencia de componentes de plugins](https://code.claude.com/docs/es/plugins/components.md#mcp-servers) para obtener detalles sobre cómo incluir servidores MCP en plugins.736Consulta la [referencia de componentes de plugins](https://code.claude.com/docs/es/plugins/components.md#mcp-servers) para obtener detalles sobre cómo incluir servidores MCP en plugins.

737 737 


1800* **Claude Opus 4.5, Sonnet 4.5, Haiku 4.5 y posteriores**: la búsqueda de herramientas está activada de forma predeterminada, igual que en la API de Anthropic.1800* **Claude Opus 4.5, Sonnet 4.5, Haiku 4.5 y posteriores**: la búsqueda de herramientas está activada de forma predeterminada, igual que en la API de Anthropic.

1801* **Modelos anteriores de Agent Platform**: Claude Code carga todas las herramientas MCP por adelantado, porque sus pilas de servicio rechazan el encabezado beta requerido. `ENABLE_TOOL_SEARCH=true` no sobrescribe esto.1801* **Modelos anteriores de Agent Platform**: Claude Code carga todas las herramientas MCP por adelantado, porque sus pilas de servicio rechazan el encabezado beta requerido. `ENABLE_TOOL_SEARCH=true` no sobrescribe esto.

1802 1802 

1803Antes de v2.1.221, Claude Code deshabilitaba la búsqueda de herramientas para todos los modelos en Agent Platform de Google Cloud a menos que configuraras `ENABLE_TOOL_SEARCH=true`.

1804 

1805Controla el comportamiento de la búsqueda de herramientas con la variable de entorno `ENABLE_TOOL_SEARCH`:1803Controla el comportamiento de la búsqueda de herramientas con la variable de entorno `ENABLE_TOOL_SEARCH`:

1806 1804 

1807| Valor | Comportamiento |1805| Valor | Comportamiento |

model-config.md +3 −3

Details

71* **Fable 5.2**: ejecuta `/model fable`, o inicia con `claude --model fable`. En sesiones del [gateway de aplicaciones de Claude](https://code.claude.com/docs/es/claude-apps-gateway), ejecuta `/model claude-fable-5-2` en su lugar.71* **Fable 5.2**: ejecuta `/model fable`, o inicia con `claude --model fable`. En sesiones del [gateway de aplicaciones de Claude](https://code.claude.com/docs/es/claude-apps-gateway), ejecuta `/model claude-fable-5-2` en su lugar.

72* **Fable 5.1 o Fable 5**: selecciónalo por ID de modelo. En la API de Anthropic, ejecuta `/model claude-fable-5-1` o `/model claude-fable-5`, o inicia con `claude --model claude-fable-5-1`. En otros proveedores, usa el ID de modelo de tu proveedor o [fíjalo](#pin-models-for-third-party-deployments) con `ANTHROPIC_DEFAULT_FABLE_MODEL`.72* **Fable 5.1 o Fable 5**: selecciónalo por ID de modelo. En la API de Anthropic, ejecuta `/model claude-fable-5-1` o `/model claude-fable-5`, o inicia con `claude --model claude-fable-5-1`. En otros proveedores, usa el ID de modelo de tu proveedor o [fíjalo](#pin-models-for-third-party-deployments) con `ANTHROPIC_DEFAULT_FABLE_MODEL`.

73 73 

74En los planes Pro, Max, Team y Enterprise, un modelo `claude-fable-5-1` guardado en tu configuración de usuario pasa al alias `fable`:74En los planes Pro, Max, Ultra, Team y Enterprise, un modelo `claude-fable-5-1` guardado en tu configuración de usuario pasa al alias `fable`:

75 75 

76* **Plan Pro o Max**: el cambio ocurre la primera vez que ejecutas v2.1.321 o posterior. En la terminal, la línea de modelo de inicio puede mostrar `(auto-updated)` una vez.76* **Plan Pro, Max o Ultra**: el cambio ocurre la primera vez que ejecutas v2.1.321 o posterior. En la terminal, la línea de modelo de inicio puede mostrar `(auto-updated)` una vez.

77* **Plan Team o Enterprise**: el cambio espera la configuración de tu organización, por lo que puede ocurrir en un inicio posterior, o no ocurrir en absoluto. Se aplica a partir de la siguiente sesión, sin la línea `(auto-updated)`. Para verificar tu modelo, ejecuta `/model`.77* **Plan Team o Enterprise**: el cambio espera la configuración de tu organización, por lo que puede ocurrir en un inicio posterior, o no ocurrir en absoluto. Se aplica a partir de la siguiente sesión, sin la línea `(auto-updated)`. Para verificar tu modelo, ejecuta `/model`.

78 78 

79Después del cambio, las sesiones comienzan con el esfuerzo predeterminado de Fable 5.2 a menos que hayas [establecido un nivel](#adjust-effort-level) para él. Las cuentas de Console, los proveedores de terceros y la configuración de proyecto, local o administrada mantienen `claude-fable-5-1`.79Después del cambio, las sesiones comienzan con el esfuerzo predeterminado de Fable 5.2 a menos que hayas [establecido un nivel](#adjust-effort-level) para él. Las cuentas de Console, los proveedores de terceros y la configuración de proyecto, local o administrada mantienen `claude-fable-5-1`.


97 97 

98Dependiendo de tu plan y nivel de asiento, el uso de Fable puede facturarse a [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) en lugar de consumir los límites incluidos en tu plan. Cuando es así, el selector `/model` muestra "Requiere créditos de uso" en la fila de Fable. Para administrar los créditos de uso, consulta [Agregar créditos de uso a tu suscripción](https://code.claude.com/docs/es/costs.md#add-usage-credits-to-your-subscription).98Dependiendo de tu plan y nivel de asiento, el uso de Fable puede facturarse a [créditos de uso](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) en lugar de consumir los límites incluidos en tu plan. Cuando es así, el selector `/model` muestra "Requiere créditos de uso" en la fila de Fable. Para administrar los créditos de uso, consulta [Agregar créditos de uso a tu suscripción](https://code.claude.com/docs/es/costs.md#add-usage-credits-to-your-subscription).

99 99 

100En sesiones interactivas, Claude Code puede mostrar una solicitud de consentimiento de créditos de uso de Fable. Los miembros de planes Enterprise con facturación de organización no ven esta solicitud de consentimiento. Puedes continuar en Fable usando créditos de uso o cambiar a tu modelo predeterminado. También puedes descartar la solicitud de consentimiento:100En sesiones interactivas, Claude Code puede mostrar una solicitud de consentimiento de créditos de uso de Fable. Puedes continuar en Fable usando créditos de uso o cambiar a tu modelo predeterminado. También puedes descartar la solicitud de consentimiento:

101 101 

102* Cuando seleccionas un modelo Fable con `/model`, mantienes tu modelo actual.102* Cuando seleccionas un modelo Fable con `/model`, mantienes tu modelo actual.

103* A mitad de sesión, Claude Code continúa el turno en tu modelo predeterminado.103* A mitad de sesión, Claude Code continúa el turno en tu modelo predeterminado.

Details

146 146 

147### Control de cardinalidad de métricas147### Control de cardinalidad de métricas

148 148 

149Las siguientes variables de entorno controlan qué atributos se incluyen en las métricas para gestionar la cardinalidad:149Las siguientes variables de entorno controlan qué atributos se incluyen en las métricas y los eventos para gestionar la cardinalidad:

150 150 

151| Variable de entorno | Descripción | Valor predeterminado | Ejemplo para deshabilitar |151| Variable de entorno | Descripción | Valor predeterminado | Ejemplo para deshabilitar |

152| - | - | - | - |152| - | - | - | - |

153| `OTEL_METRICS_INCLUDE_SESSION_ID` | Incluir atributos session.id y, en sesiones en la nube, ccr.session.id en métricas | `true` | `false` |153| `OTEL_METRICS_INCLUDE_SESSION_ID` | Incluir atributos session.id y, en sesiones en la nube, ccr.session.id en métricas y eventos | `true` | `false` |

154| `OTEL_METRICS_INCLUDE_VERSION` | Incluir atributo app.version en métricas | `false` | `true` |154| `OTEL_METRICS_INCLUDE_VERSION` | Incluir atributo app.version en métricas y eventos | `false` | `true` |

155| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | Incluir atributos user.account\_uuid y user.account\_id en métricas | `true` | `false` |155| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | Incluir atributos user.account\_uuid y user.account\_id en métricas y eventos | `true` | `false` |

156| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | Incluir atributo app.entrypoint en métricas | `false` | `true` |156| `OTEL_METRICS_INCLUDE_ENTRYPOINT` | Incluir atributo app.entrypoint en métricas y eventos | `false` | `true` |

157| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | Incluir claves de `OTEL_RESOURCE_ATTRIBUTES` como atributos en puntos de datos de métricas | `true` | `false` |157| `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES` | Incluir claves de `OTEL_RESOURCE_ATTRIBUTES` como atributos en puntos de datos de métricas y eventos | `true` | `false` |

158| `OTEL_METRICS_INCLUDE_REPOSITORY` | Incluir atributos de identidad de repositorio `vcs.*` [repository identity attributes](#repository-attributes) en métricas y eventos. Requiere Claude Code v2.1.269 o posterior | `false` | `true` |158| `OTEL_METRICS_INCLUDE_REPOSITORY` | Incluir atributos de identidad de repositorio `vcs.*` [repository identity attributes](#repository-attributes) en métricas y eventos. Requiere Claude Code v2.1.269 o posterior | `false` | `true` |

159 159 

160Una cardinalidad más baja generalmente significa mejor rendimiento y costos de almacenamiento más bajos, pero datos menos granulares para el análisis.160Una cardinalidad más baja generalmente significa mejor rendimiento y costos de almacenamiento más bajos, pero datos menos granulares para el análisis.


523export OTEL_METRICS_EXPORTER=otlp523export OTEL_METRICS_EXPORTER=otlp

524export OTEL_LOGS_EXPORTER=otlp524export OTEL_LOGS_EXPORTER=otlp

525export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf525export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf

526export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://metrics.example.com:4318526export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://metrics.example.com:4318/v1/metrics

527export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc527export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc

528export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317528export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317

529```529```


571 571 

572Para atribuir telemetría con más detalle, use estas opciones:572Para atribuir telemetría con más detalle, use estas opciones:

573 573 

574* **Identificar sesiones de Claude Tag**: establezca `OTEL_METRICS_INCLUDE_ENTRYPOINT=true`, como se describe en [Control de cardinalidad de métricas](#metrics-cardinality-control). Las métricas entonces llevan `app.entrypoint`, cuyo valor es `claude-in-slack` para sesiones de Claude Tag.574* **Identificar sesiones de Claude Tag**: establece `OTEL_METRICS_INCLUDE_ENTRYPOINT=true`, como se describe en [Control de cardinalidad de métricas](#metrics-cardinality-control). Las métricas y los eventos entonces llevan `app.entrypoint`, cuyo valor es `claude-in-slack` para sesiones de Claude Tag.

575* **Agregar atributos personalizados**: establezca [`OTEL_RESOURCE_ATTRIBUTES`](#multi-team-organization-support) en el mismo lugar donde establece las otras variables `OTEL_*` para esas sesiones. Si lo `export` en el [script de configuración](https://code.claude.com/docs/es/cloud-environments.md#setup-scripts) del entorno en su lugar, el valor no llega a Claude Code: el script de configuración es un script Bash separado que se ejecuta antes de que Claude Code se inicie, y las variables que exporta terminan con él.575* **Agregar atributos personalizados**: establezca [`OTEL_RESOURCE_ATTRIBUTES`](#multi-team-organization-support) en el mismo lugar donde establece las otras variables `OTEL_*` para esas sesiones. Si lo `export` en el [script de configuración](https://code.claude.com/docs/es/cloud-environments.md#setup-scripts) del entorno en su lugar, el valor no llega a Claude Code: el script de configuración es un script Bash separado que se ejecuta antes de que Claude Code se inicie, y las variables que exporta terminan con él.

576 576 

577En las sesiones del canal Claude Tag, Claude funciona como la [identidad compartida](https://code.claude.com/docs/es/cloud-environments.md#set-the-environment-a-claude-tag-channel-uses) de su organización en lugar de como cualquier miembro, así que no confíe en los atributos `user.*` para identificar quién etiquetó a Claude.577En las sesiones del canal Claude Tag, Claude funciona como la [identidad compartida](https://code.claude.com/docs/es/cloud-environments.md#set-the-environment-a-claude-tag-channel-uses) de su organización en lugar de como cualquier miembro, así que no confíe en los atributos `user.*` para identificar quién etiquetó a Claude.


587| `session.id` | ID de sesión propio de Claude Code, que `/clear` reemplaza | `OTEL_METRICS_INCLUDE_SESSION_ID` (predeterminado: true) |587| `session.id` | ID de sesión propio de Claude Code, que `/clear` reemplaza | `OTEL_METRICS_INCLUDE_SESSION_ID` (predeterminado: true) |

588| `ccr.session.id` | Identificador de la sesión en la nube, el valor de `CLAUDE_CODE_REMOTE_SESSION_ID`, en sesiones que se ejecutan en un [entorno en la nube](https://code.claude.com/docs/es/cloud-environments.md) | `OTEL_METRICS_INCLUDE_SESSION_ID` (predeterminado: true) |588| `ccr.session.id` | Identificador de la sesión en la nube, el valor de `CLAUDE_CODE_REMOTE_SESSION_ID`, en sesiones que se ejecutan en un [entorno en la nube](https://code.claude.com/docs/es/cloud-environments.md) | `OTEL_METRICS_INCLUDE_SESSION_ID` (predeterminado: true) |

589| `app.version` | Versión actual de Claude Code | `OTEL_METRICS_INCLUDE_VERSION` (predeterminado: false) |589| `app.version` | Versión actual de Claude Code | `OTEL_METRICS_INCLUDE_VERSION` (predeterminado: false) |

590| `app.entrypoint` | Cómo se inició la sesión, como `cli`, `sdk-cli`, `sdk-ts`, `sdk-py`, `claude-vscode` o `claude-in-slack` para sesiones de Claude Tag | `OTEL_METRICS_INCLUDE_ENTRYPOINT` (predeterminado: false) |590| `app.entrypoint` | Cómo se inició la sesión, por ejemplo `cli`, `sdk-cli`, `sdk-ts`, `sdk-py`, `claude-vscode`, `claude-desktop` para sesiones de la pestaña Code de Claude Desktop fuera de la nube, `claude-desktop-3p` para esas mismas sesiones en un [despliegue de terceros](https://claude.com/docs/third-party/claude-desktop/overview), o `claude-in-slack` para sesiones de Claude Tag. Los valores de las sesiones en la nube incluyen `remote`, además de `remote_desktop` y `remote_mobile` para las sesiones que inicias desde Claude Desktop o la aplicación móvil | `OTEL_METRICS_INCLUDE_ENTRYPOINT` (predeterminado: false) |

591| `organization.id` | UUID de la organización (cuando hay autenticación) | Siempre incluido cuando está disponible |591| `organization.id` | UUID de la organización (cuando hay autenticación) | Siempre incluido cuando está disponible |

592| `user.account_uuid` | UUID de la cuenta (cuando hay autenticación) | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` (predeterminado: true) |592| `user.account_uuid` | UUID de la cuenta (cuando hay autenticación) | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` (predeterminado: true) |

593| `user.account_id` | ID de la cuenta en formato etiquetado que coincide con las API de administración de Anthropic (cuando hay autenticación), como `user_01BWBeN28...` | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` (predeterminado: true) |593| `user.account_id` | ID de la cuenta en formato etiquetado que coincide con las API de administración de Anthropic (cuando hay autenticación), como `user_01BWBeN28...` | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` (predeterminado: true) |


643 643 

644| Nombre de la métrica | Descripción | Unidad |644| Nombre de la métrica | Descripción | Unidad |

645| - | - | - |645| - | - | - |

646| `claude_code.session.count` | Conteo de sesiones de CLI iniciadas | ninguna |646| `claude_code.session.count` | Conteo de sesiones iniciadas | ninguna |

647| `claude_code.lines_of_code.count` | Conteo de líneas de código modificadas | ninguna |647| `claude_code.lines_of_code.count` | Conteo de líneas de código modificadas | ninguna |

648| `claude_code.pull_request.count` | Número de pull requests creados | ninguna |648| `claude_code.pull_request.count` | Número de pull requests creados | ninguna |

649| `claude_code.commit.count` | Número de commits de git creados | ninguna |649| `claude_code.commit.count` | Número de commits de git creados | ninguna |


660 660 

661#### Contador de sesiones661#### Contador de sesiones

662 662 

663Se incrementa al inicio de cada sesión.663Se incrementa al inicio de cada sesión. Para contar personas, consulta [Supervisión del uso](#usage-monitoring).

664 664 

665**Atributos**:665**Atributos**:

666 666 


1458 1458 

1459Como todos los eventos de OTel de esta página, solo se envía al backend de telemetría que configures. Requiere Claude Code v2.1.227 o posterior.1459Como todos los eventos de OTel de esta página, solo se envía al backend de telemetría que configures. Requiere Claude Code v2.1.227 o posterior.

1460 1460 

1461Cuando Claude Code no puede determinar de forma segura el período de retención, pausa el barrido y emite el evento con `result` establecido en `"skipped"` y un `skip_reason`. Cuando la [configuración administrada](https://code.claude.com/docs/es/server-managed-settings.md) establece `cleanupPeriodDays`, el valor administrado fija el período de retención y el barrido se ejecuta incluso cuando un archivo de configuración de un alcance de menor prioridad está dañado o no es válido. Cuando no se puede leer el propio `managed-settings.json`, Claude Code sigue pausando el barrido a menos que el [nivel administrado](https://code.claude.com/docs/es/managed-settings.md#how-claude-code-combines-managed-sources) proporcione `cleanupPeriodDays` desde otro lugar, como la configuración administrada por el servidor o un archivo complementario de `managed-settings.d/` junto al archivo dañado. Los atributos de contadores de eliminación solo están presentes cuando `result` es `"complete"`.1461Lee `result` para ver si el barrido se ejecutó:

1462 

1463* `"complete"`: el barrido se ejecutó y el evento incluye sus recuentos

1464* `"skipped"`: Claude Code no pudo determinar con seguridad el período de retención, así que pausó el barrido y el evento no incluye recuentos. Si `skip_reason` es `"settings_unknowable"` o `"settings_invalid_key_set"`, corrige el error de configuración que reporta `/status` en esa máquina para que una sesión posterior pueda ejecutar el barrido

1465 

1466Cuando la [configuración administrada](https://code.claude.com/docs/es/server-managed-settings.md) define `cleanupPeriodDays`, el valor administrado fija el período de retención y el barrido se ejecuta incluso cuando un archivo de configuración en un alcance de menor prioridad está dañado o no es válido.

1462 1467 

1463**Nombre del evento**: `claude_code.retention_sweep`1468**Nombre del evento**: `claude_code.retention_sweep`

1464 1469 


1469* `event.timestamp`: marca de tiempo ISO 86011474* `event.timestamp`: marca de tiempo ISO 8601

1470* `event.sequence`: contador por proceso para ordenar eventos, descrito en [Atributos de correlación de eventos](#event-correlation-attributes)1475* `event.sequence`: contador por proceso para ordenar eventos, descrito en [Atributos de correlación de eventos](#event-correlation-attributes)

1471* `result`: `"complete"` cuando el barrido se ejecutó, `"skipped"` cuando Claude Code lo pausó1476* `result`: `"complete"` cuando el barrido se ejecutó, `"skipped"` cuando Claude Code lo pausó

1472* `period_days`: el valor de `cleanupPeriodDays` de la configuración combinada, en días, o `30` cuando ninguna fuente lo establece. En los eventos omitidos, el valor que habría usado el barrido, calculado a partir de las fuentes de configuración que Claude Code pudo leer1477* `period_days`: el período de retención con el que comenzó el barrido, en días: `cleanupPeriodDays` de la configuración combinada, con cualquier cambio aplicado por un [hook `settings.read`](https://code.claude.com/docs/es/plugins/mods/events#settings-read-hook). `30` cuando eso deja la clave sin definir. En los eventos omitidos, el valor que el barrido habría usado, calculado a partir de las fuentes de configuración que Claude Code pudo leer

1473* `used_default`: `"true"` cuando ninguna fuente de configuración legible establece `cleanupPeriodDays`, `"false"` en caso contrario. En los eventos completados, `"true"` significa que se aplicó el valor predeterminado de 30 días1478* `used_default`: `"true"` cuando `period_days` recurrió a `30`, `"false"` en caso contrario. En los eventos completados, `"true"` significa que se aplicó el valor predeterminado de 30 días

1474* `skip_reason`: por qué Claude Code pausó el barrido. Presente solo cuando `result` es `"skipped"`:1479* `skip_reason`: por qué Claude Code pausó el barrido. Presente solo cuando `result` es `"skipped"`:

1475 * `"user_source_disabled"`: la configuración del usuario está excluida, por ejemplo mediante el flag [`--setting-sources`](https://code.claude.com/docs/es/cli-reference#cli-flags) o la opción [`settingSources`](https://code.claude.com/docs/es/agent-sdk/typescript#options) del SDK, y ninguna fuente habilitada proporciona `cleanupPeriodDays`1480 * `"user_source_disabled"`: la configuración del usuario está excluida, por ejemplo mediante el flag [`--setting-sources`](https://code.claude.com/docs/es/cli-reference#cli-flags) o la opción [`settingSources`](https://code.claude.com/docs/es/agent-sdk/typescript#options) del SDK, y ninguna fuente habilitada proporciona `cleanupPeriodDays`

1476 * `"settings_unknowable"`: no se pudo leer o analizar un archivo de configuración, por lo que `cleanupPeriodDays` o `desktopSessionCleanupPeriodDays` podrían estar establecidos en un valor que Claude Code no puede ver1481 * `"settings_unknowable"`: no se pudo leer o analizar un archivo de configuración, por lo que `cleanupPeriodDays` o `desktopSessionCleanupPeriodDays` podrían estar establecidos en un valor que Claude Code no puede ver


1549| Métrica | Oportunidad de Análisis |1554| Métrica | Oportunidad de Análisis |

1550| - | - |1555| - | - |

1551| `claude_code.token.usage` | Desglosar por [`type`](#token-counter) de token, usuario, equipo, modelo, `skill.name`, `plugin.name`, o `agent.name` |1556| `claude_code.token.usage` | Desglosar por [`type`](#token-counter) de token, usuario, equipo, modelo, `skill.name`, `plugin.name`, o `agent.name` |

1552| `claude_code.session.count` | Rastrear adopción y compromiso a lo largo del tiempo |

1553| `claude_code.lines_of_code.count` | Medir productividad rastreando adiciones y eliminaciones de código, desglosado por modelo |1557| `claude_code.lines_of_code.count` | Medir productividad rastreando adiciones y eliminaciones de código, desglosado por modelo |

1554| `claude_code.commit.count` & `claude_code.pull_request.count` | Entender el impacto en los flujos de trabajo de desarrollo |1558| `claude_code.commit.count` & `claude_code.pull_request.count` | Entender el impacto en los flujos de trabajo de desarrollo |

1555 1559 

1560Para comparar usuarios activos entre superficies, establece `OTEL_METRICS_INCLUDE_ENTRYPOINT=true` para agregar [`app.entrypoint`](#standard-attributes) a las métricas y eventos. Luego cuenta los valores distintos de `user.account_uuid` por entrypoint en los eventos [`claude_code.user_prompt`](#user-prompt-event), o en `claude_code.token.usage` si solo exportas métricas. Por ejemplo, usa `cli` para las sesiones interactivas de la CLI, y agrupa `claude-desktop`, `claude-desktop-3p` y `remote_desktop` para la pestaña Code de Claude Desktop.

1561 

1562`user.account_uuid` no identifica a las personas en las sesiones de canal de Claude Tag y no aparece en las sesiones sin una cuenta de Claude: consulta [Atribuir acciones a usuarios](#attribute-actions-to-users). Cuando una persona inicia muchas sesiones, o una sesión no recibe ningún prompt, [`claude_code.session.count`](#session-counter) aumenta sin sumar un usuario activo.

1563 

1556### Monitoreo de costos1564### Monitoreo de costos

1557 1565 

1558La métrica `claude_code.cost.usage` ayuda con:1566La métrica `claude_code.cost.usage` ayuda con:


1783## Seguridad y privacidad1791## Seguridad y privacidad

1784 1792 

1785* La exportación de OpenTelemetry a tu backend es opcional y requiere configuración explícita. Para la telemetría operativa separada de Anthropic y cómo deshabilitarla, consulta [Uso de datos](https://code.claude.com/docs/es/data-usage.md#telemetry-services)1793* La exportación de OpenTelemetry a tu backend es opcional y requiere configuración explícita. Para la telemetría operativa separada de Anthropic y cómo deshabilitarla, consulta [Uso de datos](https://code.claude.com/docs/es/data-usage.md#telemetry-services)

1786* Los contenidos de archivos sin procesar y fragmentos de código no se incluyen en métricas o eventos. Las trazas de span son una ruta de datos separada: consulta la viñeta `OTEL_LOG_TOOL_CONTENT` a continuación1794* De forma predeterminada, los contenidos de archivos sin procesar y los fragmentos de código no se incluyen en métricas ni eventos. Si estableces una variable como `OTEL_LOG_TOOL_DETAILS` u `OTEL_LOG_RAW_API_BODIES`, los eventos pueden incluirlos. Las trazas de span son una ruta de datos separada: consulta la viñeta `OTEL_LOG_TOOL_CONTENT` a continuación

1787* Cuando está autenticado a través de OAuth, `user.email` se incluye en atributos de telemetría, enviados solo al punto final de OTel que configures, nunca a Anthropic. Si esto es una preocupación para tu organización, trabaja con tu backend de telemetría para filtrar o redactar este campo1795* Cuando está autenticado a través de OAuth, `user.email` se incluye en atributos de telemetría, enviados solo al punto final de OTel que configures, nunca a Anthropic. Si esto es una preocupación para tu organización, trabaja con tu backend de telemetría para filtrar o redactar este campo

1788* El contenido del prompt del usuario no se recopila por defecto. Solo se registra la longitud del prompt. Para incluir el contenido del prompt, establece `OTEL_LOG_USER_PROMPTS=1`. Cuando está habilitado:1796* El contenido del prompt del usuario no se recopila por defecto. Solo se registra la longitud del prompt. Para incluir el contenido del prompt, establece `OTEL_LOG_USER_PROMPTS=1`. Cuando está habilitado:

1789 * Los eventos `user_prompt` llevan el texto del prompt en dos atributos, `prompt` y [`prompt_text`](#user-prompt-event). Si eliminas o enmascaras el texto del prompt del evento por nombre de atributo en tu recopilador, nombra ambos atributos en la regla1797 * Los eventos `user_prompt` llevan el texto del prompt en dos atributos, `prompt` y [`prompt_text`](#user-prompt-event). Si eliminas o enmascaras el texto del prompt del evento por nombre de atributo en tu recopilador, nombra ambos atributos en la regla

Details

686* **Si acepta**: Claude Code establece `skipDangerousModePermissionPrompt` en `true` en `~/.claude/settings.json`, por lo que las sesiones posteriores omiten el diálogo. Para ver el diálogo nuevamente, elimine la clave de ese archivo o establézcala en `false`. La [referencia `skipDangerousModePermissionPrompt`](https://code.claude.com/docs/es/settings-reference#skipdangerousmodepermissionprompt) enumera los otros archivos de configuración donde usted u su organización pueden establecerla.686* **Si acepta**: Claude Code establece `skipDangerousModePermissionPrompt` en `true` en `~/.claude/settings.json`, por lo que las sesiones posteriores omiten el diálogo. Para ver el diálogo nuevamente, elimine la clave de ese archivo o establézcala en `false`. La [referencia `skipDangerousModePermissionPrompt`](https://code.claude.com/docs/es/settings-reference#skipdangerousmodepermissionprompt) enumera los otros archivos de configuración donde usted u su organización pueden establecerla.

687* **Si rechaza**: Claude Code sale.687* **Si rechaza**: Claude Code sale.

688 688 

689Si pasas [`--setting-sources`](https://code.claude.com/docs/es/cli-reference#cli-flags) sin `user`, el diálogo puede volver a aparecer aunque lo hayas aceptado antes. Para omitirlo, agrega `user`, como en `--setting-sources user,project`.

690 

689En [modo no interactivo](https://code.claude.com/docs/es/headless.md) no se muestra ningún diálogo.691En [modo no interactivo](https://code.claude.com/docs/es/headless.md) no se muestra ningún diálogo.

690 692 

691Una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md) respeta tu aceptación cuando está registrada en la configuración de usuario o en la configuración administrada:693Una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md) respeta tu aceptación cuando está registrada en la configuración de usuario o en la configuración administrada:

permissions.md +5 −3

Details

578* `mcp__puppeteer__*` usa sintaxis de comodín y también coincide con todas las herramientas del servidor `puppeteer`578* `mcp__puppeteer__*` usa sintaxis de comodín y también coincide con todas las herramientas del servidor `puppeteer`

579* `mcp__puppeteer__puppeteer_navigate` coincide con la herramienta `puppeteer_navigate` proporcionada por el servidor `puppeteer`579* `mcp__puppeteer__puppeteer_navigate` coincide con la herramienta `puppeteer_navigate` proporcionada por el servidor `puppeteer`

580 580 

581Escribe las reglas de permiso para herramientas MCP sin un [especificador](#use-specifiers-for-fine-grained-control), que una [actualización de permisos](https://code.claude.com/docs/es/hooks.md#permission-update-entries) llama `ruleContent`. Si agregas uno para permitir solo algunas de las llamadas de una herramienta, la regla no coincide con ninguna llamada. Para bloquear algunas llamadas en su lugar, consulta [Coincidir por parámetro de entrada](#match-by-input-parameter).

582 

581Para `<server>`, escribe el nombre del servidor tal como aparece en los nombres de las herramientas de ese servidor. Estos ejemplos muestran la regla que debes escribir para un nombre con caracteres especiales, un servidor de un plugin y un nombre que contiene `__` o termina en `_`:583Para `<server>`, escribe el nombre del servidor tal como aparece en los nombres de las herramientas de ese servidor. Estos ejemplos muestran la regla que debes escribir para un nombre con caracteres especiales, un servidor de un plugin y un nombre que contiene `__` o termina en `_`:

582 584 

583* **Nombres con caracteres como `.` o espacios**: esos caracteres se convierten en `_`, así que para un servidor que configuraste como `my.server`, escribe `mcp__my_server__*`585* **Nombres con caracteres como `.` o espacios**: esos caracteres se convierten en `_`, así que para un servidor que configuraste como `my.server`, escribe `mcp__my_server__*`


632 634 

633Las 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.635Las 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.

634 636 

635Esa precedencia cubre los hooks en archivos de configuración y en el archivo `hooks/hooks.json` de un plugin. Un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que instales y que maneje el evento [`tool.check`](https://code.claude.com/docs/es/plugins/mods/events#approve-or-refuse-a-tool-call-before-the-user-is-asked) da su respuesta después de que se hayan ejecutado los hooks `PreToolUse`. Con [configuración administrada](https://code.claude.com/docs/es/settings.md#check-what-your-organization-enforces) en la máquina, o un [`/login`](https://code.claude.com/docs/es/authentication#authentication-precedence) de Team o Enterprise como credencial de la sesión, estos resultados se mantienen de forma predeterminada cuando el mod aprueba una llamada:637Esa precedencia cubre los hooks en archivos de configuración y en el archivo `hooks/hooks.json` de un plugin. Un [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que instales y que maneje el evento [`tool.check`](https://code.claude.com/docs/es/plugins/mods/events#approve-or-refuse-a-tool-call-before-the-user-is-asked) da su respuesta después de que se hayan ejecutado los hooks `PreToolUse`. Con [configuración administrada](https://code.claude.com/docs/es/settings.md#check-what-your-organization-enforces) o un [archivo `managed-mcp.json`](https://code.claude.com/docs/es/managed-mcp#deploy-managed-mcp-json), o un [`/login`](https://code.claude.com/docs/es/authentication#authentication-precedence) de Team o Enterprise como credencial de la sesión, estos resultados se mantienen de forma predeterminada cuando el mod aprueba una llamada:

636 638 

637* Una llamada que una regla de negación rechaza sigue rechazada, y tu organización puede cambiar eso.639* Una llamada que una regla de negación rechaza sigue rechazada.

638* Una llamada para la que una regla de solicitud pediría confirmación te sigue pidiendo confirmación.640* Una llamada para la que una regla de solicitud pediría confirmación te sigue pidiendo confirmación.

639* Una llamada para la que un hook `PreToolUse` o [`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/es/settings-reference#permissions-blockreadsoutsideworkingdirectories) pediría confirmación te sigue pidiendo confirmación.641* Una llamada para la que un hook `PreToolUse` o [`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/es/settings-reference#permissions-blockreadsoutsideworkingdirectories) pediría confirmación te sigue pidiendo confirmación.

640* Una llamada que un hook `PreToolUse` bloqueó sigue bloqueada, sin importar de qué archivo de configuración provenga el hook.642* Una llamada que un hook `PreToolUse` bloqueó sigue bloqueada, sin importar de qué archivo de configuración provenga el hook.

641* Una llamada sobre la que se consultaría a tu [`--permission-prompt-tool`](https://code.claude.com/docs/es/cli-reference#cli-flags) o a tu [callback `canUseTool`](https://code.claude.com/docs/es/agent-sdk/user-input#handle-tool-approval-requests) del Agent SDK se sigue sometiendo a esa herramienta o callback.643* Una llamada sobre la que se consultaría a tu [`--permission-prompt-tool`](https://code.claude.com/docs/es/cli-reference#cli-flags) o a tu [callback `canUseTool`](https://code.claude.com/docs/es/agent-sdk/user-input#handle-tool-approval-requests) del Agent SDK se sigue sometiendo a esa herramienta o callback.

642 644 

643Sin configuración administrada ni un `/login` de Team o Enterprise como credencial de la sesión, el mod puede aprobar una llamada que una regla de negación rechaza o que un hook `PreToolUse` bloqueó. Una sesión que se ejecuta con una clave de API o con un [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/es/authentication#generate-a-long-lived-token) de larga duración no está usando ese inicio de sesión, incluso cuando ese inicio de sesión está almacenado.645Es posible que tu configuración no tenga configuración administrada, un archivo `managed-mcp.json` ni un `/login` de Team o Enterprise como credencial de la sesión. En esa configuración, el mod puede aprobar una llamada que una regla de negación rechaza o que un hook `PreToolUse` bloqueó. Una sesión que se ejecuta con una clave de API o con un [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/es/authentication#generate-a-long-lived-token) de larga duración no está usando ese inicio de sesión, incluso cuando ese inicio de sesión está almacenado.

644 646 

645En esa configuración no se te pide confirmación cuando el mod aprueba una llamada para la que una regla de solicitud, un hook `PreToolUse` o `permissions.blockReadsOutsideWorkingDirectories` pedirían confirmación. Tampoco se consulta a tu `--permission-prompt-tool` ni a tu callback `canUseTool` sobre una llamada que el mod aprueba. El modo automático, el modo plan y el modo `dontAsk` agregan cada uno un resultado propio en cualquier configuración:647En esa configuración no se te pide confirmación cuando el mod aprueba una llamada para la que una regla de solicitud, un hook `PreToolUse` o `permissions.blockReadsOutsideWorkingDirectories` pedirían confirmación. Tampoco se consulta a tu `--permission-prompt-tool` ni a tu callback `canUseTool` sobre una llamada que el mod aprueba. El modo automático, el modo plan y el modo `dontAsk` agregan cada uno un resultado propio en cualquier configuración:

646 648 

Details

94* **stdin o stdout no es un TTY, y no pasas ni `-y` ni `--accept-command`**: la instalación se rechaza. La salida dice que el comando solo se mostró, y el código de salida es `1`94* **stdin o stdout no es un TTY, y no pasas ni `-y` ni `--accept-command`**: la instalación se rechaza. La salida dice que el comando solo se mostró, y el código de salida es `1`

95* **Claude ejecuta el comando a través de su herramienta Bash**: `-y` se ignora. Ejecuta el comando desde tu propia terminal en su lugar95* **Claude ejecuta el comando a través de su herramienta Bash**: `-y` se ignora. Ejecuta el comando desde tu propia terminal en su lugar

96 96 

97Instala un plugin para todos los que clonan el proyecto:97Para compartir un plugin con todos los que clonan el proyecto, ejecuta `claude plugin install` con `--scope project` y haz commit de `.claude/settings.json`. Luego pide a cada persona que [añada el marketplace](https://code.claude.com/docs/es/plugins/install.md#add-a-marketplace) y [ejecute el mismo comando](https://code.claude.com/docs/es/plugins/loading.md#enabled-in-project-settings-but-not-installed) en su propio clon:

98 98 

99```bash theme={null}99```bash theme={null}

100claude plugin install formatter@my-marketplace --scope project100claude plugin install formatter@my-marketplace --scope project


333| `notes` | array of strings | Advertencias que no son errores de carga, como problemas de autoría o [paquetes que no están instalados](https://code.claude.com/docs/es/plugins/loading.md#when-the-dependency-install-fails-or-is-skipped) |333| `notes` | array of strings | Advertencias que no son errores de carga, como problemas de autoría o [paquetes que no están instalados](https://code.claude.com/docs/es/plugins/loading.md#when-the-dependency-install-fails-or-is-skipped) |

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

335| `noteDetails` | array of objects | Los mismos objetos de detalle para cada entrada de `notes`. Requiere Claude Code v2.1.268 o posterior |335| `noteDetails` | array of objects | Los mismos objetos de detalle para cada entrada de `notes`. Requiere Claude Code v2.1.268 o posterior |

336| `hasUserConfig` | boolean | Presente y `true` cuando el plugin cargó y su manifiesto declara opciones [`userConfig`](https://code.claude.com/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 |336| `hasUserConfig` | boolean | Presente y `true` cuando el plugin cargó y su manifiesto declara opciones [`userConfig`](https://code.claude.com/docs/es/plugins/manifest-reference#user-configuration). Ausente para un plugin que falló al cargar, sin importar lo que su manifiesto declare. Requiere Claude Code v2.1.285 o posterior |

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

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

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

Details

169 169 

170### Cargar un plugin para una sesión170### Cargar un plugin para una sesión

171 171 

172Puede cargar un plugin para una sola sesión de tres formas: desde un directorio o archivo `.zip` en el disco con `--plugin-dir`, desde una URL con `--plugin-url`, o desde una variable de entorno cuando no puede agregar una bandera. Cada plugin se carga solo para esa sesión, y nada se escribe en su configuración para él. Cuando edita los archivos del plugin durante la sesión, ejecute `/reload-plugins` para cargar los cambios.172Puedes cargar un plugin para una sola sesión de tres formas:

173 

174* Desde un directorio o archivo `.zip` en el disco con `--plugin-dir`

175* Desde una URL con `--plugin-url`

176* Desde una variable de entorno cuando no puedes agregar una bandera

177 

178Cuando edites los archivos del plugin durante la sesión, ejecuta `/reload-plugins` para cargar los cambios.

173 179 

174#### Cargar un plugin desde un directorio o `.zip`180#### Cargar un plugin desde un directorio o `.zip`

175 181 

Details

63{63{

64 "name": "backend-standard",64 "name": "backend-standard",

65 "version": "1.0.0",65 "version": "1.0.0",

66 "description": "Conjunto de plugins estándar para ingenieros de backend",66 "description": "Standard plugin set for backend engineers",

67 "dependencies": [67 "dependencies": [

68 "secrets-vault",68 "secrets-vault",

69 "deploy-kit",69 "deploy-kit",

Details

123 123 

124Estas fuentes de entrada no necesitan una cuenta de git:124Estas fuentes de entrada no necesitan una cuenta de git:

125 125 

126* **`archive`**: un zip descargado sobre HTTPS. Los usuarios no necesitan ni `git` ni una cuenta, solo acceso de red a la URL. Requiere Claude Code v2.1.224 o posterior. Fije cada archivo con `sha256` para que Claude Code rechace una descarga cambiada. Para enviar credenciales con la descarga, consulte [Authenticate archive downloads](#authenticate-archive-downloads).126* **`archive`**: un zip descargado sobre HTTPS. Los usuarios no necesitan ni `git` ni una cuenta, solo acceso de red a la URL. Fija cada archivo con `sha256` para que Claude Code rechace una descarga cambiada. Para enviar credenciales con la descarga, consulta [Authenticate archive downloads](#authenticate-archive-downloads).

127* **Un repositorio de git público**: Claude Code clona un source `url` o `git-subdir` público sobre HTTPS sin credenciales cuando la entrada proporciona una URL `https://`. Para un source `github`, o un source `git-subdir` escrito como `owner/repo`, indica a los usuarios sin una clave SSH de GitHub que establezcan `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`.127* **Un repositorio de git público**: Claude Code clona un source `url` o `git-subdir` público sobre HTTPS sin credenciales cuando la entrada proporciona una URL `https://`. Para un source `github`, o un source `git-subdir` escrito como `owner/repo`, indica a los usuarios sin una clave SSH de GitHub que establezcan `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`.

128 128 

129Mantén `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1` en tus instrucciones aunque `claude plugin install` tenga éxito sin ella desde el shell en una máquina sin clave SSH. Para un source `github`, ese comando puede recurrir a HTTPS por sí solo e imprimir `SSH not configured, cloning via HTTPS`. Las instalaciones desde `/plugin` dentro de una sesión y las actualizaciones de plugins no recurren a HTTPS, así que sin la variable fallan para los usuarios que no tienen una clave SSH de GitHub.129Mantén `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1` en tus instrucciones aunque `claude plugin install` tenga éxito sin ella desde el shell en una máquina sin clave SSH. Para un source `github`, ese comando puede recurrir a HTTPS por sí solo e imprimir `SSH not configured, cloning via HTTPS`. Las instalaciones desde `/plugin` dentro de una sesión y las actualizaciones de plugins no recurren a HTTPS, así que sin la variable fallan para los usuarios que no tienen una clave SSH de GitHub.

Details

132El alcance de instalación de un plugin decide quién obtiene el plugin y qué archivo de configuración lo registra como habilitado:132El alcance de instalación de un plugin decide quién obtiene el plugin y qué archivo de configuración lo registra como habilitado:

133 133 

134* **User scope**: el plugin está habilitado para usted en cada proyecto en esta máquina. La entrada va en `enabledPlugins` en `~/.claude/settings.json`.134* **User scope**: el plugin está habilitado para usted en cada proyecto en esta máquina. La entrada va en `enabledPlugins` en `~/.claude/settings.json`.

135* **Project scope**: el plugin está habilitado para todos los que trabajan en este repositorio. La entrada va en `.claude/settings.json`, que usted confirma. Confirmar esa entrada activa el plugin para sus colaboradores pero no lo descarga en sus máquinas, así que cada colaborador también ejecuta `claude plugin install <name>@<marketplace> --scope project` una vez; consulte [Enabled in project settings but not installed](https://code.claude.com/docs/es/plugins/loading.md#enabled-in-project-settings-but-not-installed).135* **Alcance de proyecto**: el plugin está habilitado para todos los que trabajan en este repositorio. La entrada va en `.claude/settings.json`, al que haces commit. Hacer commit de esa entrada activa el plugin para tus colaboradores, pero no lo descarga en sus máquinas. Cada colaborador también ejecuta `claude plugin install <name>@<marketplace> --scope project` una vez por clon; consulta [Habilitado en la configuración del proyecto pero no instalado](https://code.claude.com/docs/es/plugins/loading.md#enabled-in-project-settings-but-not-installed).

136* **Local scope**: el plugin está habilitado para usted en este repositorio solamente. La entrada va en `.claude/settings.local.json`.136* **Local scope**: el plugin está habilitado para usted en este repositorio solamente. La entrada va en `.claude/settings.local.json`.

137 137 

138Algunos plugins están configurados por su autor para comenzar desactivados, a través del campo [`defaultEnabled`](https://code.claude.com/docs/es/plugins/manifest-reference#defaultenabled). Tal plugin se instala pero permanece desactivado hasta que lo active con `claude plugin enable <name>` en su shell, o desde la pestaña **Installed** de `/plugin` en una sesión.138Algunos plugins están configurados por su autor para comenzar desactivados, a través del campo [`defaultEnabled`](https://code.claude.com/docs/es/plugins/manifest-reference#defaultenabled). Tal plugin se instala pero permanece desactivado hasta que lo active con `claude plugin enable <name>` en su shell, o desde la pestaña **Installed** de `/plugin` en una sesión.

Details

173 173 

174Para optar por no participar en un plugin habilitado por proyecto en su máquina, establezca el id en `false` en `.claude/settings.local.json`, que tiene mayor precedencia que el archivo del proyecto.174Para optar por no participar en un plugin habilitado por proyecto en su máquina, establezca el id en `false` en `.claude/settings.local.json`, que tiene mayor precedencia que el archivo del proyecto.

175 175 

176### Habilitado en un directorio de `--add-dir` pero no cargado

177 

178Claude Code lee una entrada `enabledPlugins` con valor `true` en uno de los archivos del directorio agregado solo cuando las fuentes de configuración de ese archivo están activadas:

179 

180* **`.claude/settings.json`**: `project`

181* **`.claude/settings.local.json`**: `project` y `local`

182 

183Comprueba qué fuentes de configuración carga la sesión. Las estableces con [`--setting-sources`](https://code.claude.com/docs/es/cli-reference#cli-flags). En la CLI, `user`, `project` y `local` están todas activadas de forma predeterminada.

184 

185Por ejemplo, si ejecutas `claude --setting-sources user --add-dir ./shared` en tu shell, Claude Code no lee ninguno de los dos archivos en `./shared`. Pasa el flag correspondiente al archivo que contiene el `true`:

186 

187* **`settings.json`**: `--setting-sources user,project`

188* **`settings.local.json`**: `--setting-sources user,project,local`

189 

176### Habilitado en configuración del proyecto pero no instalado190### Habilitado en configuración del proyecto pero no instalado

177 191 

178Cuando el único `true` de un plugin está en el `.claude/settings.json` del proyecto, Claude Code no lo obtiene en una máquina donde no está instalado, a menos que su entrada de mercado tenga una [fuente de ruta relativa](https://code.claude.com/docs/es/plugins/marketplace-reference.md#plugin-sources) o un [directorio semilla](https://code.claude.com/docs/es/plugins/org.md#seed-containers-and-ci) ya lo contenga. En su lugar, la pestaña **Errors** de `/plugin` muestra `Plugin "<name>" is enabled in project settings but isn't installed here`.192De forma predeterminada, un plugin habilitado solo en el `.claude/settings.json` de tu proyecto no se carga al inicio de la sesión hasta que lo instales en tu máquina. Con el marketplace en tu máquina, la pestaña **Errors** de `/plugin` muestra [`Plugin "<name>" is enabled in project settings but isn't installed here`](https://code.claude.com/docs/es/plugins/troubleshooting#plugin-is-enabled-in-project-settings-but-isnt-installed-here) o [`Plugin "<name>" not cached at <path>`](https://code.claude.com/docs/es/plugins/troubleshooting#plugin-not-cached-at).

193 

194> [!NOTE]

195>

196> Si la pestaña no muestra ninguno de los dos mensajes, [agrega el marketplace](https://code.claude.com/docs/es/plugins/install.md#add-a-marketplace) antes de instalar. Encuentra su fuente en el ajuste `extraKnownMarketplaces` de `.claude/settings.json`, o pregúntale a tu responsable de mantenimiento.

197 

198Para instalarlo, ejecuta esto en un shell desde el proyecto, usando la clave del plugin en `enabledPlugins`:

199 

200```shell theme={null}

201claude plugin install <name>@<marketplace> --scope project

202```

203 

204Para cargar el plugin, ejecuta `/reload-plugins` en tu sesión o inicia una nueva sesión. Repite la instalación en cada uno de tus clones, o usa `--scope user` para cubrir todos tus proyectos.

205 

206Puedes cargar un plugin sin instalarlo en estos casos:

179 207 

180Un plugin de ruta relativa no necesita un registro de instalación porque se carga desde el mercado en sí.208* **En un [directorio semilla](https://code.claude.com/docs/es/plugins/org.md#seed-containers-and-ci)**: no tienes nada que ejecutar

209* **Listado mediante una [ruta relativa](https://code.claude.com/docs/es/plugins/marketplace-reference.md#plugin-sources) en un marketplace que agregaste desde una ruta local**: no tienes nada que ejecutar, porque el plugin se carga al inicio de la sesión

210* **Listado mediante una ruta relativa, como `./plugins/formatter`, en el `marketplace.json` de un marketplace de git que agregaste**: ejecuta `/reload-plugins` para cargarlo solo en la sesión actual. Para cargarlo en una [ejecución no interactiva con `-p`](https://code.claude.com/docs/es/headless), establece [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL=1`](https://code.claude.com/docs/es/env-vars).

181 211 

182Claude Code obtiene un plugin con una fuente externa solo cuando una de estas fuentes lo establece en `true`:212Claude Code obtiene un plugin con una fuente externa solo cuando una de estas fuentes establece el plugin en `true`:

183 213 

184* Su configuración de usuario214* Su configuración de usuario

185* Un `.claude/settings.local.json` que git no rastrea215* Un `.claude/settings.local.json` que git no rastrea

Details

189 189 

190### `metadata`190### `metadata`

191 191 

192Un objeto de forma libre para sus propios datos, como campos de catálogo o derechos. Claude Code no lo lee. Requiere Claude Code v2.1.222 o posterior.192Un objeto de forma libre para tus propios datos, como campos de catálogo o derechos. Claude Code no lo lee.

193 193 

194### Campos de listado del directorio194### Campos de listado del directorio

195 195 


394 394 

395Cada ruta de componente en un manifiesto es relativa a la raíz del plugin y debe comenzar con `./`. Una ruta como `commands/foo.md` falla la validación. `skills` y `mcpServers` cada uno aceptan una forma fuera de esa regla:395Cada ruta de componente en un manifiesto es relativa a la raíz del plugin y debe comenzar con `./`. Una ruta como `commands/foo.md` falla la validación. `skills` y `mcpServers` cada uno aceptan una forma fuera de esa regla:

396 396 

397* **`skills`**: también acepta `"."`. Tanto `"."` como `"./"` denotan la raíz del plugin. Antes de v2.1.221, `"."` fallaba la validación del manifiesto, así que use `"./"` cuando el plugin deba cargarse en versiones anteriores397* **`skills`**: también acepta `"."`. Tanto `"."` como `"./"` denotan la raíz del plugin

398* **`mcpServers`**: también acepta una URL de bundle `https://`398* **`mcpServers`**: también acepta una URL de bundle `https://`

399 399 

400`experimental.evals` no es una ruta de componente, así que las reglas de esta sección no la cubren, y en su lugar `claude plugin eval` verifica el valor cuando se ejecuta. Nombra un directorio debajo de la raíz del plugin, como `"quality/evals"`, con o sin el prefijo `./`. Con un array, solo se usa la primera entrada. Para ver qué acepta el valor y qué sucede con uno inutilizable, consulta [Usar un directorio de evals diferente](https://code.claude.com/docs/es/plugin-evals.md#use-a-different-eval-directory).400`experimental.evals` no es una ruta de componente, así que las reglas de esta sección no la cubren, y en su lugar `claude plugin eval` verifica el valor cuando se ejecuta. Nombra un directorio debajo de la raíz del plugin, como `"quality/evals"`, con o sin el prefijo `./`. Con un array, solo se usa la primera entrada. Para ver qué acepta el valor y qué sucede con uno inutilizable, consulta [Usar un directorio de evals diferente](https://code.claude.com/docs/es/plugin-evals.md#use-a-different-eval-directory).


403 403 

404Cada ruta de componente debe resolverse dentro de la raíz del plugin y debe existir. `claude plugin validate` verifica las rutas bajo cada clave de componente:404Cada ruta de componente debe resolverse dentro de la raíz del plugin y debe existir. `claude plugin validate` verifica las rutas bajo cada clave de componente:

405 405 

406* **Contención**: una ruta que se resuelve fuera de la raíz del plugin no se carga, y la pestaña **Errors** de `/plugin` muestra `<component> path escapes plugin directory: <path>`. Una ruta que contiene `..` es el caso usual, y `claude plugin validate` reporta el error `Path contains ".." which could be a path traversal attempt`406* **Contención**: una ruta que se resuelve fuera de la raíz del plugin no se carga, y la pestaña **Errors** de `/plugin` muestra `<component> path escapes plugin directory: <path>`. Una ruta que contiene `..` es el caso usual, y `claude plugin validate` reporta el error `Path contains ".." which could be a path traversal attempt`. Para un archivo de `mcpServers` o `lspServers`, un mensaje [`path not read`](https://code.claude.com/docs/es/errors#server-file-path-not-read) significa que la ruta es absoluta o contiene `..`

407* **Existencia**: una ruta que no existe no se carga, y la pestaña **Errors** de `/plugin` muestra `<component> path not found: <path>`. `claude plugin validate` reporta el error `Path not found`407* **Existencia**: una ruta que no existe no se carga, y la pestaña **Errors** de `/plugin` muestra `<component> path not found: <path>`. `claude plugin validate` reporta el error `Path not found`

408 408 

409Para rutas de `outputStyles`, `lspServers`, `monitors` y `themes`, la verificación de `claude plugin validate` requiere Claude Code v2.1.283 o posterior.409Para rutas de `outputStyles`, `lspServers`, `monitors` y `themes`, la verificación de `claude plugin validate` requiere Claude Code v2.1.283 o posterior.

Details

94| `dependencies` | array | Plugins que deben estar habilitados para que este funcione. Cada elemento es `"name"`, `"name@marketplace"` o un objeto. Consulta [Dependencias de plugins](https://code.claude.com/docs/es/plugins/dependencies.md) |94| `dependencies` | array | Plugins que deben estar habilitados para que este funcione. Cada elemento es `"name"`, `"name@marketplace"` o un objeto. Consulta [Dependencias de plugins](https://code.claude.com/docs/es/plugins/dependencies.md) |

95| `defaultEnabled` | boolean | Por defecto `true`. Si el plugin comienza habilitado cuando el usuario no lo ha establecido en [`enabledPlugins`](https://code.claude.com/docs/es/settings-reference#enabledplugins). El valor de la entrada tiene precedencia sobre `plugin.json` |95| `defaultEnabled` | boolean | Por defecto `true`. Si el plugin comienza habilitado cuando el usuario no lo ha establecido en [`enabledPlugins`](https://code.claude.com/docs/es/settings-reference#enabledplugins). El valor de la entrada tiene precedencia sobre `plugin.json` |

96| `displayName` | string | Nombre legible por humanos mostrado en la interfaz de usuario. Cuando ni la entrada ni el `plugin.json` del plugin establece uno, los usuarios ven el `name` del plugin |96| `displayName` | string | Nombre legible por humanos mostrado en la interfaz de usuario. Cuando ni la entrada ni el `plugin.json` del plugin establece uno, los usuarios ven el `name` del plugin |

97| `metadata` | object | Objeto de forma libre para tus propios campos. Claude Code no lo lee. Requiere Claude Code v2.1.222 o posterior |97| `metadata` | object | Objeto de forma libre para tus propios campos. Claude Code no lo lee |

98| `headers` | object | Encabezados HTTP que Claude Code envía cuando descarga el [archivo](#archive-plugin-source) de esta entrada. Un encabezado establecido aquí reemplaza un encabezado del mismo nombre de los [`headers`](#fields-by-type) de la fuente del marketplace. Requiere Claude Code v2.1.238 o posterior |98| `headers` | object | Encabezados HTTP que Claude Code envía cuando descarga el [archivo](#archive-plugin-source) de esta entrada. Un encabezado establecido aquí reemplaza un encabezado del mismo nombre de los [`headers`](#fields-by-type) de la fuente del marketplace. Requiere Claude Code v2.1.238 o posterior |

99| `headersHelper` | string | Comando que imprime los encabezados de descarga de archivo de esta entrada como un objeto JSON, para una credencial que expira. La entrada también debe establecer [`"strict": false`](#strict-mode). Requiere Claude Code v2.1.238 o posterior. Consulta [Autenticar descargas de archivos](https://code.claude.com/docs/es/plugins/host-marketplace.md#authenticate-archive-downloads) |99| `headersHelper` | string | Comando que imprime los encabezados de descarga de archivo de esta entrada como un objeto JSON, para una credencial que expira. La entrada también debe establecer [`"strict": false`](#strict-mode). Requiere Claude Code v2.1.238 o posterior. Consulta [Autenticar descargas de archivos](https://code.claude.com/docs/es/plugins/host-marketplace.md#authenticate-archive-downloads) |

100 100 


142| `url` | `url`, `ref`, `sha` | Cualquier repositorio git por URL |142| `url` | `url`, `ref`, `sha` | Cualquier repositorio git por URL |

143| `git-subdir` | `url`, `path`, `ref`, `sha` | Un subdirectorio de un repositorio git, obtenido con un sparse checkout |143| `git-subdir` | `url`, `path`, `ref`, `sha` | Un subdirectorio de un repositorio git, obtenido con un sparse checkout |

144| `npm` | `package`, `version`, `registry` | Paquete del registro de npm o enlace a un tarball, obtenido con tu cliente de npm y desempaquetado sin ejecutar scripts de instalación |144| `npm` | `package`, `version`, `registry` | Paquete del registro de npm o enlace a un tarball, obtenido con tu cliente de npm y desempaquetado sin ejecutar scripts de instalación |

145| `archive` | `url`, `sha256` | Archivo zip a través de HTTPS. Requiere Claude Code v2.1.224 o posterior |145| `archive` | `url`, `sha256` | Archivo zip a través de HTTPS |

146| `command` | `command`, `timeout`, `mode` | Directorio impreso por un comando que Claude Code ejecuta en la máquina del usuario. Requiere Claude Code v2.1.229 o posterior |146| `command` | `command`, `timeout`, `mode` | Directorio impreso por un comando que Claude Code ejecuta en la máquina del usuario. Requiere Claude Code v2.1.229 o posterior |

147 147 

148Los nombres `url` y `github` también son tipos de [origen de marketplace](#marketplace-sources), donde `url` significa un enlace directo a un archivo `marketplace.json` en lugar de a un repositorio git. `git` existe solo como origen de marketplace, y `npm` existe como ambos. `git-subdir`, `archive` y `command` existen solo como orígenes de plugin.148Los nombres `url` y `github` también son tipos de [origen de marketplace](#marketplace-sources), donde `url` significa un enlace directo a un archivo `marketplace.json` en lugar de a un repositorio git. `git` existe solo como origen de marketplace, y `npm` existe como ambos. `git-subdir`, `archive` y `command` existen solo como orígenes de plugin.

Details

57* **Los mods están activados.** Un usuario puede instalar un plugin que contenga un mod desde cualquier marketplace que permita tu configuración de plugins, o cargar uno desde un directorio con `--plugin-dir`.57* **Los mods están activados.** Un usuario puede instalar un plugin que contenga un mod desde cualquier marketplace que permita tu configuración de plugins, o cargar uno desde un directorio con `--plugin-dir`.

58* **Una protección integrada 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 muestran como `cc-plugin-sec-default`. La protección se carga cuando se cumple cualquiera de estas condiciones:58* **Una protección integrada 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 muestran como `cc-plugin-sec-default`. La protección se carga cuando se cumple cualquiera de estas condiciones:

59 59 

60 * La máquina tiene configuración administrada60 * La máquina tiene configuración administrada o un archivo [`managed-mcp.json`](https://code.claude.com/docs/es/managed-mcp#deploy-managed-mcp-json)

61 * La sesión se ejecuta con [credenciales de `/login`](https://code.claude.com/docs/es/authentication#authentication-precedence) de un plan Team o Enterprise61 * La sesión se ejecuta con [credenciales de `/login`](https://code.claude.com/docs/es/authentication#authentication-precedence) de un plan Team o Enterprise

62 62 

63 Un usuario que se autentica con una clave de API, o mediante Amazon Bedrock, Agent Platform de Google Cloud o Microsoft Foundry, obtiene la protección solo en una máquina que tenga configuración administrada. Una sesión que se ejecuta con un [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/es/authentication#generate-a-long-lived-token) de larga duración tampoco cuenta como ese inicio de sesión, incluso cuando hay un inicio de sesión de Team o Enterprise almacenado en la máquina.63 Un usuario que se autentica con una clave de API, o mediante Amazon Bedrock, Agent Platform de Google Cloud o Microsoft Foundry, obtiene la protección solo en una máquina que tenga configuración administrada o `managed-mcp.json`. Una sesión que se ejecuta con un [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/es/authentication#generate-a-long-lived-token) de larga duración tampoco cuenta como ese inicio de sesión, incluso cuando hay un inicio de sesión de Team o Enterprise almacenado en la máquina.

64* **La protección resguarda lo que administras.** El mod de un usuario no puede cambiar lo que reciben o deciden tus hooks administrados, el prompt del sistema, tu `CLAUDE.md` administrado y otras instrucciones administradas, lo que cualquier mod lee como configuración, ni las herramientas y descripciones de tus servidores MCP administrados.64* **La protección resguarda lo que administras.** El mod de un usuario no puede cambiar lo que reciben o deciden tus hooks administrados, el prompt del sistema, tu `CLAUDE.md` administrado y otras instrucciones administradas, lo que cualquier mod lee como configuración, ni las herramientas y descripciones de tus servidores MCP administrados.

65* **Fuera de lo que administras, el mod de un usuario actúa como ese usuario.** El mod conserva los permisos de ese usuario: aún puede leer y escribir archivos, iniciar procesos y hacer solicitudes de red. También puede reescribir llamadas a herramientas y prompts, denegar una llamada a herramienta y dibujar en la interfaz.65* **Fuera de lo que administras, el mod de un usuario actúa como ese usuario.** El mod conserva los permisos de ese usuario: aún puede leer y escribir archivos, iniciar procesos y hacer solicitudes de red. También puede reescribir llamadas a herramientas y prompts, denegar una llamada a herramienta y dibujar en la interfaz.

66* **Las reglas de permisos y los hooks `PreToolUse` tienen precedencia sobre el mod de un usuario.** Con la protección cargada, de forma predeterminada el mod de un usuario no puede aprobar una llamada que rechaza una regla `deny` o para la que una regla `ask` pide confirmación, sin importar qué archivo de configuración contenga la regla. El mod tampoco puede aprobar una llamada que haya bloqueado cualquier hook `PreToolUse`.66* **Las reglas de permisos y los hooks `PreToolUse` tienen precedencia sobre el mod de un usuario.** Con la protección cargada, de forma predeterminada el mod de un usuario no puede aprobar una llamada que rechaza una regla `deny` o para la que una regla `ask` pide confirmación, sin importar qué archivo de configuración contenga la regla. El mod tampoco puede aprobar una llamada que haya bloqueado cualquier hook `PreToolUse`.


76 76 

77* **Los hooks de configuración siguen funcionando.** Los hooks de comando, HTTP, prompt y agente en los archivos de configuración y en el `hooks/hooks.json` de los plugins se ejecutan como antes, junto con los mods.77* **Los hooks de configuración siguen funcionando.** Los hooks de comando, HTTP, prompt y agente en los archivos de configuración y en el `hooks/hooks.json` de los plugins se ejecutan como antes, junto con los mods.

78* **Las reglas de denegación tienen precedencia donde se carga la protección.** El mod de un usuario no puede aprobar una llamada que rechaza una regla `deny`, a menos que configures [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard).78* **Las reglas de denegación tienen precedencia donde se carga la protección.** El mod de un usuario no puede aprobar una llamada que rechaza una regla `deny`, a menos que configures [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard).

79* **Los hooks administrados se ejecutan primero.** Un hook `PreToolUse` en la configuración administrada se ejecuta antes que el hook [`tool.call`](https://code.claude.com/docs/es/plugins/mods/reference#tools) de cualquier mod, y cuando ese hook administrado bloquea una llamada a herramienta, no se ejecuta el hook `tool.call` de ningún mod para esa llamada. Si la llamada sigue adelante y un mod la reescribe, tus hooks administrados se ejecutan de nuevo sobre la llamada reescrita, por lo que aún pueden bloquearla.79* **Los hooks administrados se ejecutan primero.** Un hook `PreToolUse` en la configuración administrada se ejecuta antes que el hook [`tool.call`](https://code.claude.com/docs/es/plugins/mods/reference#tools) de cualquier mod, y cuando ese hook administrado bloquea una llamada a herramienta, no se ejecuta el hook `tool.call` de ningún mod para esa llamada. Si la llamada sigue adelante y un mod la reescribe, tus hooks administrados se ejecutan de nuevo sobre la llamada reescrita, por lo que, de forma predeterminada, aún pueden bloquearla.

80 80 

81 Los hooks `PreToolUse` de otros archivos de configuración y de plugins se ejecutan después del último mod. Si un mod responde él mismo a la llamada a herramienta, la herramienta nunca se ejecuta y esos hooks tampoco. Consulta [El orden en que se ejecutan los mods](https://code.claude.com/docs/es/plugins/mods/events.md#the-order-mods-run-in).81 Los hooks `PreToolUse` de otros archivos de configuración y de plugins se ejecutan después del último mod. Si un mod responde él mismo a la llamada a herramienta, la herramienta nunca se ejecuta y esos hooks tampoco. Consulta [El orden en que se ejecutan los mods](https://code.claude.com/docs/es/plugins/mods/events.md#the-order-mods-run-in).

82* **La política de red cubre `$.http.fetch`.**82* **La política de red cubre `$.http.fetch`.**


260| Opción | Sin configurar | `true` |260| Opción | Sin configurar | `true` |

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

262| `allowManagedModsOnly` | Se ejecutan los mods propios de los usuarios | Solo [los mods de tu organización](#install-your-organizations-mods) y los mods integrados en Claude Code ejecutan sus hooks. Claude Code rechaza cualquier otro mod, incluido uno que un usuario instaló o indicó con `--plugin-dir`. |262| `allowManagedModsOnly` | Se ejecutan los mods propios de los usuarios | Solo [los mods de tu organización](#install-your-organizations-mods) y los mods integrados en Claude Code ejecutan sus hooks. Claude Code rechaza cualquier otro mod, incluido uno que un usuario instaló o indicó con `--plugin-dir`. |

263| `allowModsToOverrideDenyRules` | Las reglas de denegación tienen precedencia sobre los mods de los usuarios | Un mod de un usuario que aprueba llamadas a herramientas puede aprobar una llamada que una regla `deny` rechaza |263| `allowModsToOverrideDenyRules` | Las reglas de denegación tienen precedencia sobre los mods de los usuarios | Un mod de un usuario que aprueba llamadas a herramientas puede aprobar una llamada por encima de la mayoría de [los resultados que se mantienen de forma predeterminada](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods), incluida una regla `deny` |

264 264 

265Estas reglas deciden si una opción surte efecto:265Estas reglas deciden si una opción surte efecto:

266 266 


350 350 

351* **La lista reemplaza el valor predeterminado**: cuando estableces `prependPlugins` en la configuración administrada, nombra `sec-default@builtin` en ella para conservar la protección integrada. La protección está integrada y no necesita una entrada en `enabledPlugins`.351* **La lista reemplaza el valor predeterminado**: cuando estableces `prependPlugins` en la configuración administrada, nombra `sec-default@builtin` en ella para conservar la protección integrada. La protección está integrada y no necesita una entrada en `enabledPlugins`.

352* **Tus propios ids deben contar como tuyos**: en la configuración administrada, Claude Code omite un id cuyo plugin no cumple las condiciones de un mod de organización352* **Tus propios ids deben contar como tuyos**: en la configuración administrada, Claude Code omite un id cuyo plugin no cumple las condiciones de un mod de organización

353* **Los repositorios no pueden establecerlos**: Claude Code lee ambos ajustes de la configuración administrada y nunca del archivo de configuración de un repositorio. Un usuario puede establecerlos en `~/.claude/settings.json` para ordenar sus propios mods solo en una máquina sin configuración administrada, y solo cuando la credencial de la sesión no es un `/login` de Team o Enterprise. En cualquier otro caso, Claude Code ignora ambas claves en la configuración de usuario. Una lista allí ni agrega ni quita la protección integrada.353* **Los repositorios no pueden establecer ninguna de las dos listas**: Claude Code ignora ambas en el archivo de configuración de un repositorio, así que establécelas en la configuración administrada.

354* **Un usuario puede establecerlas para ordenar sus propios mods**: en `~/.claude/settings.json`, solo en una máquina sin configuración administrada ni archivo `managed-mcp.json`, y solo cuando la credencial de la sesión no es un `/login` de Team o Enterprise. En cualquier otro caso, Claude Code ignora ambas claves en la configuración de usuario. Una lista allí ni agrega ni quita la protección integrada.

354 355 

355### Aplica una política con un mod propio356### Aplica una política con un mod propio

356 357 

Details

21 21 

22Describe el mod que quieres en una sesión interactiva de Claude Code y Claude lo escribe. Claude trabaja a partir de un [skill](https://code.claude.com/docs/es/skills.md) integrado llamado `plugin-authoring`, que le indica dónde escribir el mod, qué eventos y métodos tiene tu versión y cómo se carga el mod. Claude puede cargar el skill cuando pides un mod, o puedes cargarlo tú mismo ejecutando `/plugin-authoring` en el prompt de Claude Code.22Describe el mod que quieres en una sesión interactiva de Claude Code y Claude lo escribe. Claude trabaja a partir de un [skill](https://code.claude.com/docs/es/skills.md) integrado llamado `plugin-authoring`, que le indica dónde escribir el mod, qué eventos y métodos tiene tu versión y cómo se carga el mod. Claude puede cargar el skill cuando pides un mod, o puedes cargarlo tú mismo ejecutando `/plugin-authoring` en el prompt de Claude Code.

23 23 

24El mod se ejecuta una vez que lo apruebas, excepto en [sesiones donde un mod que escribe Claude no puede cargarse](#sessions-that-skip-the-approval).24En los [modos de permisos](https://code.claude.com/docs/es/permission-modes.md) `auto` y `bypassPermissions`, el mod puede ejecutarse cuando termina el turno. En los demás casos, se ejecuta una vez que lo apruebas, excepto en [sesiones donde un mod que escribe Claude no puede cargarse](#sessions-that-skip-the-approval).

25 25 

26**1. Describe el mod**26**1. Describe el mod**

27 27 


33 33 

34**2. Aprueba el mod**34**2. Aprueba el mod**

35 35 

36Cuando Claude guarda el primer archivo, Claude Code pregunta si quieres habilitar la recarga en caliente para la sesión. La recarga en caliente ejecuta los mods que Claude escribe en esta sesión y aplica cada cambio posterior.36Cuando Claude guarda el primer archivo, Claude Code pregunta si quieres habilitar la recarga en caliente para la sesión. La recarga en caliente ejecuta los mods que Claude escribe en esta sesión y aplica cada cambio posterior. Si no aparece ninguna pregunta, omite este paso.

37 37 

38Elige una de estas respuestas:38Elige una de estas respuestas:

39 39 

40* **Enable for this session**: los mods de la carpeta de mods de la sesión se cargan cuando termina el turno y se recargan al final de cada turno que los modifique. Tu respuesta dura toda la sesión, incluso después de reanudarla.40* **Turn them on**: los mods de la carpeta de mods de la sesión se cargan cuando termina el turno y se recargan al final de cada turno que los modifique. Tu respuesta dura toda la sesión, incluso después de reanudarla.

41* **Not now**: por ahora no se carga nada. Los archivos permanecen donde Claude los escribió y los mods se cargan la próxima vez que se inicie esa sesión. Para evitar que un mod se cargue alguna vez, elimina su directorio.41* **Not now**: por ahora no se carga nada. Los archivos permanecen donde Claude los escribió y los mods se cargan la próxima vez que se inicie esa sesión. Para evitar que un mod se cargue alguna vez, elimina su directorio.

42 42 

43**3. Comprueba que el mod se cargó**43**3. Comprueba que el mod se cargó**


59 59 

60### Sesiones donde un mod que escribe Claude no puede cargarse60### Sesiones donde un mod que escribe Claude no puede cargarse

61 61 

62Un mod que escribe Claude solo se carga después de que lo apruebas, en un espacio de trabajo de confianza donde se permite ejecutar mods. En estas sesiones no se carga:62Un mod que escribe Claude se carga en un espacio de trabajo de confianza donde se permite ejecutar mods, después de que lo apruebas en los modos que lo solicitan. En estas sesiones no se carga:

63 63 

64* **No hay nadie para aprobarlo**: la sesión no puede mostrarte una solicitud, como en una ejecución de `claude -p` o en el [modo `dontAsk`](https://code.claude.com/docs/es/permission-modes)64* **No hay nadie para aprobarlo**: la sesión no puede mostrarte una solicitud, como en una ejecución de `claude -p` fuera de los modos `auto` y `bypassPermissions`, o en el [modo `dontAsk`](https://code.claude.com/docs/es/permission-modes)

65* **El espacio de trabajo no es de confianza**: no has aceptado la solicitud de confianza para el directorio65* **El espacio de trabajo no es de confianza**: no has aceptado la solicitud de confianza para el directorio

66* **Los mods están deshabilitados**: iniciaste con `--safe-mode` o `--bare`, configuraste `disableAllHooks`, o la [configuración administrada de tu organización lo bloquea](https://code.claude.com/docs/es/plugins/mods/admin.md#choose-how-much-to-allow)66* **Los mods están deshabilitados**: iniciaste con `--safe-mode` o `--bare`, configuraste `disableAllHooks`, o la [configuración administrada de tu organización lo bloquea](https://code.claude.com/docs/es/plugins/mods/admin.md#choose-how-much-to-allow)

67 67 

Details

328 328 

329Comprueba qué mods reciben este evento y tu versión de Claude Code:329Comprueba qué mods reciben este evento y tu versión de Claude Code:

330 330 

331* **La protección integrada**: con configuración administrada, o con un [`/login`](https://code.claude.com/docs/es/authentication#authentication-precedence) de Team o Enterprise como credencial de la sesión, la [protección integrada](https://code.claude.com/docs/es/plugins/mods/admin.md#know-what-happens-by-default) puede omitir este hook en un mod que instalas o cargas con `--plugin-dir`. Para comprobarlo, busca `settings.read bypassed by cc-plugin-sec-default` en el [registro de depuración](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#read-the-debug-log). Si una línea con ese texto nombra tu mod, pídele al administrador de tu organización que [instale el mod como uno de los mods de la organización](https://code.claude.com/docs/es/plugins/mods/admin.md#install-your-organizations-mods).331* **La protección integrada**: donde se carga la [protección integrada](https://code.claude.com/docs/es/plugins/mods/admin.md#know-what-happens-by-default), esta puede omitir este hook en un mod que instalas o cargas con `--plugin-dir`. Para comprobarlo, busca `settings.read bypassed by cc-plugin-sec-default` en el [registro de depuración](https://code.claude.com/docs/es/plugins/mods/troubleshoot.md#read-the-debug-log). Si una línea con ese texto nombra tu mod, pídele al administrador de tu organización que [instale el mod como uno de los mods de la organización](https://code.claude.com/docs/es/plugins/mods/admin.md#install-your-organizations-mods).

332* **La versión**: que el evento se dispare en la propia lectura de Claude Code, y el campo `e.layers`, requieren Claude Code v2.1.304 o posterior.332* **La versión**: que el evento se dispare en la propia lectura de Claude Code, y el campo `e.layers`, requieren Claude Code v2.1.304 o posterior.

333 333 

334#### Qué recibe un hook `settings.read`334#### Qué recibe un hook `settings.read`

Details

78 78 

79Los mods no se ejecutan en un sandbox. Si activas el [sandboxing](https://code.claude.com/docs/es/sandboxing.md), el sandbox aísla los comandos de Bash que ejecuta Claude, y un proceso que inicia un mod se ejecuta fuera de él.79Los mods no se ejecutan en un sandbox. Si activas el [sandboxing](https://code.claude.com/docs/es/sandboxing.md), el sandbox aísla los comandos de Bash que ejecuta Claude, y un proceso que inicia un mod se ejecuta fuera de él.

80 80 

81Con [configuración administrada](https://code.claude.com/docs/es/settings.md#check-what-your-organization-enforces) o con un [`/login`](https://code.claude.com/docs/es/authentication#authentication-precedence) de Team o Enterprise como credencial de la sesión, de forma predeterminada la aprobación de un mod no permite que una llamada eluda tus reglas `ask` ni tus hooks `PreToolUse`. Sin ninguno de los dos, un mod puede aprobar una llamada para la que una regla `ask` te pediría confirmación, o que tu hook `PreToolUse` bloqueó. Para comprobar cuándo un mod también puede aprobar una llamada que una regla `deny` rechaza, consulta [Extender permisos con hooks](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods).81Un mod puede aprobar [muchas llamadas a herramientas](https://code.claude.com/docs/es/permissions.md#precedence-among-rules-hooks-and-mods) que tus reglas `deny` o `ask` o tus hooks `PreToolUse` detendrían, a menos que la [protección integrada](https://code.claude.com/docs/es/plugins/mods/admin.md#know-what-happens-by-default) lo impida. Con la protección cargada, de forma predeterminada el mod de un usuario no puede hacer esto. En una sesión de terminal local, `cc-plugin-sec-default` en la pestaña **Installed** de `/plugin` significa que la protección está cargada.

82 82 

83Un mod puede cambiar el estilo de gran parte de la interfaz de Claude Code, pero no de la solicitud de permiso. No puede cambiar lo que te muestra una solicitud.83Un mod puede cambiar el estilo de gran parte de la interfaz de Claude Code, pero no de la solicitud de permiso. No puede cambiar lo que te muestra una solicitud.

84 84 

Details

39| `next.origin` | `{ plugin, tier }` de quien disparó el evento. El propio Claude Code es `{ plugin: 'engine', tier: 'core' }`. El `tier` de un mod es su grupo de prioridad en el [orden en que se ejecutan los mods](https://code.claude.com/docs/es/plugins/mods/events.md#the-order-mods-run-in): `prepend`, `user`, `append` o `builtin`. |39| `next.origin` | `{ plugin, tier }` de quien disparó el evento. El propio Claude Code es `{ plugin: 'engine', tier: 'core' }`. El `tier` de un mod es su grupo de prioridad en el [orden en que se ejecutan los mods](https://code.claude.com/docs/es/plugins/mods/events.md#the-order-mods-run-in): `prepend`, `user`, `append` o `builtin`. |

40| `next.budget` | El límite de tiempo del hook en milisegundos: `next.budget.ms` es el límite completo y `next.budget.remainingMs` es lo que queda en este momento |40| `next.budget` | El límite de tiempo del hook en milisegundos: `next.budget.ms` es el límite completo y `next.budget.remainingMs` es lo que queda en este momento |

41| `next.to(e, tier)` | Salta a un tier posterior, que es `append`, `builtin` o `core`. `next.to(e, 'append')` omite los mods que instaló un usuario. Solo un mod en `prependPlugins` o `appendPlugins` puede llamarlo. |41| `next.to(e, tier)` | Salta a un tier posterior, que es `append`, `builtin` o `core`. `next.to(e, 'append')` omite los mods que instaló un usuario. Solo un mod en `prependPlugins` o `appendPlugins` puede llamarlo. |

42| `next.error` | Solo en un controlador `.catch`. `kind` es `throw` o `timeout` cuando el hook falló, y `message` es el texto del error. `kind` es `re-entry` cuando el hook se omitió porque el evento provino de una llamada a la API de mods hecha por ese hook o por el código de tu mod fuera de sus hooks. `re-entry` requiere Claude Code v2.1.292 o posterior. |42| `next.error` | Solo en un controlador `.catch`. `kind` es `throw` o `timeout`, y `message` es el texto del error. |

43| `next.error.cause` | Solo se establece cuando `kind` es `re-entry`. `rewritten` si un hook `tool.call` o [`PreToolUse`](https://code.claude.com/docs/es/hooks#pretooluse) cambió la llamada a la API de mods de la que provino el evento, o si un hook `agent.spawn` cambió un agente iniciado por esa llamada. `lent` cuando un método que otro mod agrega a la API de mods disparó ese evento, a menos que también aplique `rewritten`. `lent` requiere Claude Code v2.1.292 o posterior y `rewritten`, v2.1.300 o posterior. |

44| `next.called` | Solo en un controlador `.catch`. `true` cuando el hook había llamado a `next`. |43| `next.called` | Solo en un controlador `.catch`. `true` cuando el hook había llamado a `next`. |

45 44 

46## Eventos45## Eventos


252| [`AbovePrompt`](https://code.claude.com/docs/es/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`, `isWorking`, `maxRows`, `bodyColumns`, `scroll`, `view` | Una instancia | Terminal, Desktop |251| [`AbovePrompt`](https://code.claude.com/docs/es/plugins/mods/interface#pick-where-to-draw) | `hasSurvey`, `isWorking`, `maxRows`, `bodyColumns`, `scroll`, `view` | Una instancia | Terminal, Desktop |

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

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

255| `UserMessage` | `text`, `origin`, `isExpanded`, y `task` o `from` según el origen | El id del mensaje | Terminal, Desktop, VS Code |254| `UserMessage` | `text`, `origin`, `isExpanded`, y `task` o `from` según el origen | El id de la fila dibujada | Terminal, Desktop, VS Code |

256| `AssistantMessage` | El texto de la respuesta | El id del mensaje | Terminal, Desktop, VS Code |255| `AssistantMessage` | El texto de la respuesta | El id de la fila dibujada | Terminal, Desktop, VS Code |

257| `ToolUse`, `ToolResult`, `ToolGroup` | El nombre, la entrada y el resultado de la herramienta | El id de la llamada a herramienta | Terminal, Desktop, VS Code |256| `ToolUse`, `ToolResult`, `ToolGroup` | El nombre, la entrada y el resultado de la herramienta | El id de la llamada a herramienta | Terminal, Desktop, VS Code |

258| `CommandOutput` | `command`, `text` | El id del mensaje | Terminal, Desktop |257| `CommandOutput` | `command`, `text` | El id de la fila dibujada | Terminal, Desktop |

259| [`AskUserQuestion`](https://code.claude.com/docs/es/plugins/mods/interface#change-what-claude-code-already-draws) | La pregunta y las opciones | El id de la llamada a herramienta | Terminal, Desktop, VS Code |258| [`AskUserQuestion`](https://code.claude.com/docs/es/plugins/mods/interface#change-what-claude-code-already-draws) | La pregunta y las opciones | El id de la llamada a herramienta | Terminal, Desktop, VS Code |

260| `ToolProgress` | `kind` | El id de la llamada a herramienta | Terminal |259| `ToolProgress` | `kind` | El id de la llamada a herramienta | Terminal |

261| [`Spinner`](https://code.claude.com/docs/es/plugins/mods/interface#change-what-claude-code-already-draws) | `word`, `message`, `suffix`, `mode` | El id del agente | Terminal, Desktop, VS Code |260| [`Spinner`](https://code.claude.com/docs/es/plugins/mods/interface#change-what-claude-code-already-draws) | `word`, `message`, `suffix`, `mode` | El id del agente | Terminal, Desktop, VS Code |

262| `TurnDuration` | `word`, `durationMs` | El id del mensaje | Terminal |261| `TurnDuration` | `word`, `durationMs` | El id de la fila dibujada | Terminal |

263| `InfoNotice` | `text`, `command` | El id del mensaje | Terminal |262| `InfoNotice` | `text`, `command` | El `text` del aviso con el prefijo `notice:` | Terminal |

264| `SessionMode` | `modes` | Una instancia | Terminal, Desktop |263| `SessionMode` | `modes` | Una instancia | Terminal, Desktop |

265| `PromptHint` | `isDraft`, `isWorking`, `hint` | Una instancia | Terminal, Desktop |264| `PromptHint` | `isDraft`, `isWorking`, `hint` | Una instancia | Terminal, Desktop |

266 265 


424| :- | :- | :- |423| :- | :- | :- |

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

426| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | Entorno | `1` hace que una sesión no interactiva de larga duración recargue los mods de `--plugin-dir` al guardar |425| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | Entorno | `1` hace que una sesión no interactiva de larga duración recargue los mods de `--plugin-dir` al guardar |

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

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

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

430| `allowManagedHooksOnly` | Configuración administrada | Bloquea los hooks y los mods instalados que no son de tu organización. Consulta [qué sigue ejecutándose](https://code.claude.com/docs/es/settings-reference.md#what-runs-under-allowmanagedhooksonly). |429| `allowManagedHooksOnly` | Configuración administrada | Bloquea los hooks y los mods instalados que no son de tu organización. Consulta [qué sigue ejecutándose](https://code.claude.com/docs/es/settings-reference.md#what-runs-under-allowmanagedhooksonly). |

431| `disableAllHooks` | Cualquier archivo de configuración | En la configuración administrada, no se ejecuta ningún mod ni hook de un plugin instalado. En tu propia configuración, lo que administra tu organización sigue ejecutándose. Consulta [`disableAllHooks`](https://code.claude.com/docs/es/settings-reference#disableallhooks). |430| `disableAllHooks` | Cualquier archivo de configuración | En la configuración administrada, no se ejecuta ningún mod ni hook de un plugin instalado. En tu propia configuración, lo que administra tu organización sigue ejecutándose. Consulta [`disableAllHooks`](https://code.claude.com/docs/es/settings-reference#disableallhooks). |

432| `disableSideloadFlags` | Configuración administrada | Rechaza `--plugin-dir` y `--plugin-url` al inicio |431| `disableSideloadFlags` | Configuración administrada | Rechaza `--plugin-dir` y `--plugin-url` al inicio |

433| `pluginConfigs` | Configuración de usuario o administrada | Contiene los valores de `userConfig` de un mod, indexados por el id del plugin, como `acme-guard@acme-tools`, o por su nombre y `@inline`, como `first-mod@inline`, para uno cargado con `--plugin-dir` |432| `pluginConfigs` | Configuración de usuario o administrada | Contiene los valores de `userConfig` de un mod, indexados por el id del plugin, como `acme-guard@acme-tools`, o por su nombre y `@inline`, como `first-mod@inline`, para uno cargado con `--plugin-dir` |

434 433 

435`sec-default@builtin` es una protección integrada en Claude Code, que aparece como `cc-plugin-sec-default` en `/plugin` y en el registro de depuración. Se carga antes de cada mod que una persona instala en una máquina con configuración administrada, o en una sesión cuya credencial sea un [`/login`](https://code.claude.com/docs/es/authentication#authentication-precedence) de Team o Enterprise. Si se establece `prependPlugins` en la configuración administrada, la protección solo se carga cuando esa lista la nombra, en la posición indicada.434`sec-default@builtin` es una protección integrada en Claude Code, que aparece como `cc-plugin-sec-default` en `/plugin` y en el registro de depuración. [Donde se carga](https://code.claude.com/docs/es/plugins/mods/admin.md#know-what-happens-by-default), se ejecuta antes de cada mod que una persona instala. Si se establece `prependPlugins` en la configuración administrada, la protección solo se carga cuando esa lista la nombra, en la posición indicada.

436 435 

437Su código fuente está en el [directorio `mods/sec-default` del repositorio de Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).436Su código fuente está en el [directorio `mods/sec-default` del repositorio de Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).

438 437 

Details

14 14 

15Cuando un módulo no se carga, se omite un hook u 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:15Cuando un módulo no se carga, se omite un hook u 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:

16 16 

17* **Una sesión que recarga en caliente un directorio de plugin**: una línea atenuada en la transcripción. Es una sesión interactiva que iniciaste con `--plugin-dir`, o una en la que [habilitaste la recarga en caliente](https://code.claude.com/docs/es/plugins/mods/create.md#ask-claude-for-a-mod) para los mods que escribió Claude.17* **Una sesión que recarga en caliente un directorio de plugin**: una línea atenuada en la transcripción. Es una sesión interactiva que iniciaste con `--plugin-dir`, o una en la que [la recarga en caliente está activada](https://code.claude.com/docs/es/plugins/mods/create.md#ask-claude-for-a-mod) para los mods que escribió Claude.

18* **Cualquier otra sesión interactiva, como una que ejecuta un mod que instalaste desde un marketplace**: solo el [registro de depuración](#read-the-debug-log). Para obtenerlo, inicia la sesión con `claude --debug`.18* **Cualquier otra sesión interactiva, como una que ejecuta un mod que instalaste desde un marketplace**: solo el [registro de depuración](#read-the-debug-log). Para obtenerlo, inicia la sesión con `claude --debug`.

19* **Una ejecución de `claude -p` con `--plugin-dir`**: stderr, en el formato de salida de texto predeterminado. Un rechazo por parte de otro mod va solo al registro de depuración.19* **Una ejecución de `claude -p` con `--plugin-dir`**: stderr, en el formato de salida de texto predeterminado. Un rechazo por parte de otro mod va solo al registro de depuración.

20 20 


68 68 

69### Mensajes de la protección integrada69### Mensajes de la protección integrada

70 70 

71En una máquina con configuración administrada, o en una sesión cuya credencial es un `/login` de Team o Enterprise, la [protección integrada](https://code.claude.com/docs/es/plugins/mods/admin.md#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.71Donde se carga la [protección integrada](https://code.claude.com/docs/es/plugins/mods/admin.md#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.

72 72 

73| El mensaje contiene | Qué significa | Dónde aparece |73| El mensaje contiene | Qué significa | Dónde aparece |

74| :- | :- | :- |74| :- | :- | :- |

plugins/org.md +1 −1

Details

89* **Sesiones interactivas**: Claude Code registra el marketplace solo después de que el colaborador acepta el [workspace trust dialog](https://code.claude.com/docs/es/permissions.md#what-runs-before-you-trust-a-folder) para esa carpeta.89* **Sesiones interactivas**: Claude Code registra el marketplace solo después de que el colaborador acepta el [workspace trust dialog](https://code.claude.com/docs/es/permissions.md#what-runs-before-you-trust-a-folder) para esa carpeta.

90* **[Ejecuciones no interactivas `-p`](https://code.claude.com/docs/es/headless)**: las entradas se aplican solo en una carpeta cuya confianza el usuario ya aceptó interactivamente, o cuya bandera `hasTrustDialogAccepted` establece en `~/.claude.json`.90* **[Ejecuciones no interactivas `-p`](https://code.claude.com/docs/es/headless)**: las entradas se aplican solo en una carpeta cuya confianza el usuario ya aceptó interactivamente, o cuya bandera `hasTrustDialogAccepted` establece en `~/.claude.json`.

91 91 

92Un plugin que el marketplace enumera por una ruta relativa se carga desde la copia del marketplace una vez que se aplican las entradas `extraKnownMarketplaces` del repositorio. Un plugin cuya entrada de marketplace apunta a una fuente externa en su lugar, como el repositorio de GitHub del plugin, no se instala solo desde la configuración del repositorio. Cada colaborador ve `Plugin "<name>" is enabled in project settings but isn't installed` hasta que ejecuta `claude plugin install <name>@<marketplace> --scope project`, como [Install plugins](https://code.claude.com/docs/es/plugins/install.md) describe.92Establecer `enabledPlugins` en el repositorio no instala el plugin. Una vez registrado el marketplace, pide a cada colaborador que ejecute `claude plugin install <name>@<marketplace> --scope project`. Hasta que lo haga, la pestaña **Errors** de `/plugin` puede mostrar `Plugin "<name>" is enabled in project settings but isn't installed here` o [`not cached`](https://code.claude.com/docs/es/plugins/troubleshooting#plugin-not-cached-at). Los colaboradores no necesitan la instalación cuando un marketplace local de tipo `directory` o `file` enumera el plugin con una [`source` de ruta relativa](https://code.claude.com/docs/es/plugins/marketplace-reference#plugin-sources).

93 93 

94Si usa una fuente `directory` o `file` local con una ruta relativa, la ruta se resuelve contra el checkout principal de su repositorio. Cuando ejecuta Claude Code desde un git worktree, la ruta aún apunta al checkout principal, por lo que todos los worktrees comparten la misma ubicación de marketplace.94Si usa una fuente `directory` o `file` local con una ruta relativa, la ruta se resuelve contra el checkout principal de su repositorio. Cuando ejecuta Claude Code desde un git worktree, la ruta aún apunta al checkout principal, por lo que todos los worktrees comparten la misma ubicación de marketplace.

95 95 

Details

322 322 

323### Marketplace updates keep failing offline323### Marketplace updates keep failing offline

324 324 

325Trabaja en un entorno donde el host git del mercado es inaccesible, y cada sesión repite una actualización fallida en segundo plano. Su checkout existente del mercado permanece en su lugar y el inicio no se retrasa.325Trabajas en un entorno donde el host git del marketplace es inaccesible, y cada sesión repite una actualización fallida en segundo plano. Tu checkout existente del marketplace se mantiene en su lugar.

326 326 

327Cada sesión, para un mercado con [auto-update on](https://code.claude.com/docs/es/plugins/loading.md#which-marketplaces-and-plugins-auto-update), Claude Code verifica el host git del mercado para nuevos commits en segundo plano. Cuando esa verificación no puede alcanzar el host, intenta clonar el mercado nuevamente, y sin conexión ese clonado también falla.327Cada sesión, para un mercado con [auto-update on](https://code.claude.com/docs/es/plugins/loading.md#which-marketplaces-and-plugins-auto-update), Claude Code verifica el host git del mercado para nuevos commits en segundo plano. Cuando esa verificación no puede alcanzar el host, intenta clonar el mercado nuevamente, y sin conexión ese clonado también falla.

328 328 


675 675 

676### `Plugin "<name>" not cached at <path>`676### `Plugin "<name>" not cached at <path>`

677 677 

678La pestaña **Errors** muestra esta línea con la orientación `Run /plugin to refresh the plugin cache`. Claude Code tiene un registro de instalación para el plugin, pero el directorio al que apunta el registro falta, por ejemplo después de que limpió la caché.678La pestaña **Errors** muestra esta línea con la orientación `Run /plugin to refresh the plugin cache`. Significa que Claude Code no encontró ninguna copia utilizable del plugin. Por ejemplo, limpiaste la caché, así que falta el directorio al que apunta su registro de instalación. O abriste un repositorio cuya configuración habilita el plugin y no lo has instalado.

679 679 

680Reinstale el plugin desde su shell. `claude plugin install <name>@<marketplace>` descarga nuevamente un plugin cuyo directorio de instalación falta aunque su registro exista:680Instala el plugin desde tu shell. Si abriste un repositorio cuyo `.claude/settings.json` habilita el plugin, ejecuta esto desde el proyecto con la clave del plugin que aparece en `enabledPlugins`, como se describe en [Habilitado en la configuración del proyecto pero no instalado](https://code.claude.com/docs/es/plugins/loading.md#enabled-in-project-settings-but-not-installed):

681 

682```shell theme={null}

683claude plugin install <name>@<marketplace> --scope project

684```

685 

686De lo contrario, ejecuta esto, que vuelve a descargar un plugin cuyo directorio de instalación falta aunque su registro exista:

681 687 

682```shell theme={null}688```shell theme={null}

683claude plugin install <name>@<marketplace>689claude plugin install <name>@<marketplace>

684```690```

685 691 

686Luego ejecute `/reload-plugins` en su sesión. La entrada de la pestaña **Errors** desaparece y el plugin está de vuelta bajo **Installed**.692Luego ejecuta `/reload-plugins` en tu sesión. La entrada de la pestaña **Errors** desaparece y el plugin aparece bajo **Installed**.

687 693 

688### `installed_plugins.json holds a record under "<id>" that this version of Claude Code cannot read`694### `installed_plugins.json holds a record under "<id>" that this version of Claude Code cannot read`

689 695 

Details

103El [modo rápido](https://code.claude.com/docs/es/fast-mode.md) y la velocidad estándar mantienen cachés separadas, por lo que después de activar o desactivar el modo rápido, la siguiente solicitud no puede usar lo que la otra velocidad almacenó en caché. La primera vez que activas el modo rápido en una conversación, la siguiente solicitud lee toda la conversación hasta ese momento sin caché a [tarifas de modo rápido](https://code.claude.com/docs/es/fast-mode.md#understand-the-cost-tradeoff). Para mantener ese costo bajo, actívalo al inicio de una sesión.103El [modo rápido](https://code.claude.com/docs/es/fast-mode.md) y la velocidad estándar mantienen cachés separadas, por lo que después de activar o desactivar el modo rápido, la siguiente solicitud no puede usar lo que la otra velocidad almacenó en caché. La primera vez que activas el modo rápido en una conversación, la siguiente solicitud lee toda la conversación hasta ese momento sin caché a [tarifas de modo rápido](https://code.claude.com/docs/es/fast-mode.md#understand-the-cost-tradeoff). Para mantener ese costo bajo, actívalo al inicio de una sesión.

104 104 

105* Si lo activas mientras Claude está trabajando, ese turno termina a velocidad estándar, y pagas cualquier lectura sin caché en la primera solicitud de tu siguiente turno.105* Si lo activas mientras Claude está trabajando, ese turno termina a velocidad estándar, y pagas cualquier lectura sin caché en la primera solicitud de tu siguiente turno.

106* Si tu modelo actual no admite el modo rápido, ejecutar `/fast` también [te cambia a Opus](https://code.claude.com/docs/es/fast-mode.md#toggle-fast-mode). Ese [cambio de modelo](#switching-models) inicia una caché nueva por sí solo desde la siguiente solicitud en el turno en ejecución.106* Si tu modelo actual no admite el modo rápido, ejecutar `/fast` también [cambia tu modelo](https://code.claude.com/docs/es/fast-mode.md#toggle-fast-mode). Ese [cambio de modelo](#switching-models) inicia una caché nueva por sí solo desde la siguiente solicitud en el turno en ejecución.

107 107 

108Cada activación o desactivación posterior lee sin caché todo lo que la velocidad a la que cambias no tenga almacenado en caché. Los cambios de velocidad que Claude Code hace por su cuenta, como el [cambio automático a velocidad estándar](https://code.claude.com/docs/es/fast-mode.md#handle-rate-limits) después de un rate limit y el regreso al modo rápido más tarde, también cuentan como activaciones o desactivaciones.108Cada activación o desactivación posterior lee sin caché todo lo que la velocidad a la que cambias no tenga almacenado en caché. Los cambios de velocidad que Claude Code hace por su cuenta, como el [cambio automático a velocidad estándar](https://code.claude.com/docs/es/fast-mode.md#handle-rate-limits) después de un rate limit y el regreso al modo rápido más tarde, también cuentan como activaciones o desactivaciones.

109 109 

Details

185* **Nivel de esfuerzo**: cuando establece el [nivel de esfuerzo](https://code.claude.com/docs/es/model-config.md#adjust-effort-level) desde un dispositivo conectado, con `/effort` o el control de esfuerzo del dispositivo, Claude Code lo aplica a la sesión en su máquina. Si fijó un nivel con `CLAUDE_CODE_EFFORT_LEVEL`, la sesión mantiene ese nivel, y Claude Code rechaza una selección diferente desde el control de esfuerzo. Seleccionar un nivel desde el control de esfuerzo requiere Claude Code v2.1.234 o posterior en su máquina.185* **Nivel de esfuerzo**: cuando establece el [nivel de esfuerzo](https://code.claude.com/docs/es/model-config.md#adjust-effort-level) desde un dispositivo conectado, con `/effort` o el control de esfuerzo del dispositivo, Claude Code lo aplica a la sesión en su máquina. Si fijó un nivel con `CLAUDE_CODE_EFFORT_LEVEL`, la sesión mantiene ese nivel, y Claude Code rechaza una selección diferente desde el control de esfuerzo. Seleccionar un nivel desde el control de esfuerzo requiere Claude Code v2.1.234 o posterior en su máquina.

186* **Reconexión después de un fallo de conexión**: ejecuta `/remote-control` para reconectarte. Si la compactación reescribió la conversación o cambiaste de conversación con `/resume` mientras tanto, Claude Code archiva la sesión del servidor que estaba usando en lugar de dejarla en la lista de sesiones. Aún puedes encontrar esa sesión entre tus [sesiones archivadas](https://code.claude.com/docs/es/claude-code-on-the-web.md#find-an-archived-session) en claude.ai/code. Cambiar de conversación mientras un dispositivo sigue conectado no archiva la sesión.186* **Reconexión después de un fallo de conexión**: ejecuta `/remote-control` para reconectarte. Si la compactación reescribió la conversación o cambiaste de conversación con `/resume` mientras tanto, Claude Code archiva la sesión del servidor que estaba usando en lugar de dejarla en la lista de sesiones. Aún puedes encontrar esa sesión entre tus [sesiones archivadas](https://code.claude.com/docs/es/claude-code-on-the-web.md#find-an-archived-session) en claude.ai/code. Cambiar de conversación mientras un dispositivo sigue conectado no archiva la sesión.

187 187 

188### Bifurca una sesión desde tu navegador

189 

190Para probar una dirección diferente sin interrumpir una sesión, ábrela en [claude.ai/code](https://claude.ai/code) y selecciona **Fork** en el menú de la sesión, o bifúrcala desde un mensaje anterior de la transcripción. La bifurcación se abre como una nueva sesión en tu lista de sesiones y continúa la conversación desde ese punto mientras la original sigue ejecutándose. Bifurcar requiere Claude Code v2.1.277 o posterior en tu máquina.

191 

192Un servidor `claude remote-control` iniciado con `--spawn session` solo tiene espacio para su única sesión, por lo que no puede ejecutar una bifurcación.

193 

194Claude Code rechaza la bifurcación en casos como estos:

195 

196* La sesión está ocupada. Bifúrcala cuando esté inactiva.

197* La sesión está alojada en la extensión de VS Code u otra aplicación creada con el [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md).

198 

188### Habilite Remote Control para todas las sesiones199### Habilite Remote Control para todas las sesiones

189 200 

190Remote Control solo se activa cuando ejecuta explícitamente `claude remote-control`, `claude --remote-control`, o `/remote-control`, a menos que la conexión automática esté activada. Para activar la conexión automática para cada sesión interactiva, ejecute `/config` dentro de Claude Code y establezca **Enable Remote Control for all sessions**. El botón de alternancia toma tres valores:201Remote Control solo se activa cuando ejecuta explícitamente `claude remote-control`, `claude --remote-control`, o `/remote-control`, a menos que la conexión automática esté activada. Para activar la conexión automática para cada sesión interactiva, ejecute `/config` dentro de Claude Code y establezca **Enable Remote Control for all sessions**. El botón de alternancia toma tres valores:

191 202 

192* **`true`**: conectarse automáticamente cuando comienza una sesión interactiva.203* **`true`**: conectarse automáticamente cuando comienza una sesión interactiva.

193* **`false`**: desactivar la conexión automática, aunque un `true` de [configuración administrada](https://code.claude.com/docs/es/managed-settings.md) lo supera, porque Claude Code guarda la opción en su configuración de usuario. Un `false` en configuración de proyecto o local (`.claude/settings.json`, `.claude/settings.local.json`) desactiva la conexión automática incluso sobre un `true` administrado.204* **`false`**: desactivar la conexión automática, aunque un `true` de la [configuración administrada](https://code.claude.com/docs/es/managed-settings.md) tiene prioridad sobre él, porque Claude Code guarda la elección en tu configuración de usuario. Un `false` en la configuración de proyecto o local (`.claude/settings.json`, `.claude/settings.local.json`) desactiva la conexión automática incluso sobre un `true` administrado.

194* **`default`**: borrar tu elección y seguir el valor predeterminado del administrador de tu organización si hay uno establecido; de lo contrario, el valor predeterminado actual de Claude Code. Si estableciste `DISABLE_TELEMETRY` o `DO_NOT_TRACK`, consulta [Conexión automática con `DISABLE_TELEMETRY` o `DO_NOT_TRACK` establecidos](#auto-connect-with-disable-telemetry-or-do-not-track).205* **`default`**: borrar tu elección y seguir el valor predeterminado del administrador de tu organización si hay uno establecido; de lo contrario, el valor predeterminado actual de Claude Code. Si estableciste `DISABLE_TELEMETRY` o `DO_NOT_TRACK`, consulta [Conexión automática con `DISABLE_TELEMETRY` o `DO_NOT_TRACK` establecidos](#auto-connect-with-disable-telemetry-or-do-not-track).

195 206 

196La extensión de VS Code y la aplicación de escritorio también tienen un interruptor de conexión automática:207La extensión de VS Code y la aplicación de escritorio también tienen un interruptor de conexión automática:


198* **Extensión de VS Code**: **Enable Remote Control for all sessions** en la sección Configuración del [menú de comandos](https://code.claude.com/docs/es/vs-code.md#use-the-prompt-box).209* **Extensión de VS Code**: **Enable Remote Control for all sessions** en la sección Configuración del [menú de comandos](https://code.claude.com/docs/es/vs-code.md#use-the-prompt-box).

199* **Aplicación de escritorio**: **Connect new sessions to Remote Control** en **Settings > Code** o **Settings > Claude Code**. Consulta [Controla qué sesiones aparecen en tus otros dispositivos](https://code.claude.com/docs/es/desktop.md#control-which-sessions-appear-on-your-other-devices).210* **Aplicación de escritorio**: **Connect new sessions to Remote Control** en **Settings > Code** o **Settings > Claude Code**. Consulta [Controla qué sesiones aparecen en tus otros dispositivos](https://code.claude.com/docs/es/desktop.md#control-which-sessions-appear-on-your-other-devices).

200 211 

201Para activar la conexión automática desde un archivo de configuración en su lugar, establezca [`remoteControlAtStartup`](https://code.claude.com/docs/es/settings-reference#remotecontrolatstartup) en `true` en su usuario `~/.claude/settings.json` o en [configuración administrada](https://code.claude.com/docs/es/managed-settings.md). En configuración de proyecto o local (`.claude/settings.json`, `.claude/settings.local.json`), Claude Code honra un `false` y desactiva la conexión automática para ese repositorio, pero ignora un `true`, por lo que un archivo registrado no puede activar Remote Control para todos los que abren el repositorio.212Para activar la conexión automática desde un archivo de configuración en su lugar, establece [`remoteControlAtStartup`](https://code.claude.com/docs/es/settings-reference#remotecontrolatstartup) en `true` en tu `~/.claude/settings.json` de usuario o en la [configuración administrada](https://code.claude.com/docs/es/managed-settings.md). En la configuración de proyecto o local (`.claude/settings.json`, `.claude/settings.local.json`), Claude Code respeta un `false` y desactiva la conexión automática para ese repositorio. Ignora un `true`, así que no puedes usar un archivo incluido en el repositorio para activar Remote Control para todos los que abren el repositorio.

202 213 

203La conexión automática inicia sesión con su propia cuenta de claude.ai, por lo que una sesión que inicia aparece solo en sus propias aplicaciones Claude y no otorga acceso a nadie más.214La conexión automática inicia sesión con su propia cuenta de claude.ai, por lo que una sesión que inicia aparece solo en sus propias aplicaciones Claude y no otorga acceso a nadie más.

204 215 


340 351 

341**4. Habilitar push en Claude Code**352**4. Habilitar push en Claude Code**

342 353 

343En su terminal, ejecute `/config` y habilite **Push cuando Claude decide** para notificaciones proactivas, **Push cuando se requieren acciones** para avisos de permisos y preguntas, o ambas.354En su terminal, ejecute `/config` y habilite **Push when Claude decides** para notificaciones proactivas, **Push when actions required** para avisos de permisos y preguntas, o ambas.

344 355 

345Si las notificaciones no llegan:356Si las notificaciones no llegan:

346 357 

routines.md +1 −1

Details

528* [`/loop` y programación dentro de la sesión](https://code.claude.com/docs/es/scheduled-tasks): programa tareas locales dentro de una sesión de CLI abierta528* [`/loop` y programación dentro de la sesión](https://code.claude.com/docs/es/scheduled-tasks): programa tareas locales dentro de una sesión de CLI abierta

529* [Tareas programadas de escritorio](https://code.claude.com/docs/es/desktop-scheduled-tasks.md): tareas programadas locales que se ejecutan en tu máquina con acceso a archivos locales529* [Tareas programadas de escritorio](https://code.claude.com/docs/es/desktop-scheduled-tasks.md): tareas programadas locales que se ejecutan en tu máquina con acceso a archivos locales

530* [Entornos en la nube](https://code.claude.com/docs/es/cloud-environments.md): configura el acceso a la red, las variables de entorno y los scripts de configuración para sesiones en la nube530* [Entornos en la nube](https://code.claude.com/docs/es/cloud-environments.md): configura el acceso a la red, las variables de entorno y los scripts de configuración para sesiones en la nube

531* [Proyectos](https://code.claude.com/docs/es/claude-projects.md): trabajo continuo que Claude coordina entre sesiones en la nube paralelas; las tareas programadas creadas desde un proyecto aparecen en su pestaña **Scheduled tasks**531* [Proyectos](https://code.claude.com/docs/es/claude-projects.md): trabajo continuo que Claude coordina entre sesiones en la nube paralelas; las tareas programadas creadas desde un proyecto aparecen en su vista **Scheduled tasks**

532* [Conectores MCP](https://code.claude.com/docs/es/mcp.md): conecta servicios externos como Slack, Linear y Google Drive532* [Conectores MCP](https://code.claude.com/docs/es/mcp.md): conecta servicios externos como Slack, Linear y Google Drive

533* [GitHub Actions](https://code.claude.com/docs/es/github-actions.md): ejecuta Claude en tu pipeline de CI ante eventos del repositorio533* [GitHub Actions](https://code.claude.com/docs/es/github-actions.md): ejecuta Claude en tu pipeline de CI ante eventos del repositorio

sandboxing.md +4 −0

Details

903 903 

904Después de la falla, Claude puede [ofrecer ejecutar nuevamente el comando fuera del sandbox](#the-unsandboxed-retry-escape-hatch). Aprueba ese reintento o ejecuta el comando git tú mismo en otra terminal. Si has establecido `allowUnsandboxedCommands` en `false`, Claude no puede ofrecer el reintento, así que ejecuta el comando tú mismo.904Después de la falla, Claude puede [ofrecer ejecutar nuevamente el comando fuera del sandbox](#the-unsandboxed-retry-escape-hatch). Aprueba ese reintento o ejecuta el comando git tú mismo en otra terminal. Si has establecido `allowUnsandboxedCommands` en `false`, Claude no puede ofrecer el reintento, así que ejecuta el comando tú mismo.

905 905 

906### Un comando git falla con `Unable to create '…/index.lock'`

907 

908Si iniciaste Claude Code en un subdirectorio de un repositorio, este error puede significar que `.git` está fuera de [lo que los comandos aislados pueden escribir](#filesystem-isolation). En su lugar, inicia Claude Code desde la raíz del repositorio, o desde la raíz del worktree en un [worktree vinculado](https://code.claude.com/docs/es/worktrees.md).

909 

906### Una carpeta llamada `objects` o `refs` desaparece después de un comando910### Una carpeta llamada `objects` o `refs` desaparece después de un comando

907 911 

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

Details

54}54}

55```55```

56 56 

57Además, cada compañero de equipo [ejecuta `claude plugin install security-guidance@claude-plugins-official --scope project`](https://code.claude.com/docs/es/plugins/loading#enabled-in-project-settings-but-not-installed) una vez por cada clon.

58 

57Los administradores pueden habilitar el plugin en toda la organización configurando [`enabledPlugins`](https://code.claude.com/docs/es/settings-reference#enabledplugins) en [configuración administrada](https://code.claude.com/docs/es/admin-setup.md).59Los administradores pueden habilitar el plugin en toda la organización configurando [`enabledPlugins`](https://code.claude.com/docs/es/settings-reference#enabledplugins) en [configuración administrada](https://code.claude.com/docs/es/admin-setup.md).

58 60 

59## Lo que el plugin verifica61## Lo que el plugin verifica

Details

235set -u235set -u

236export GIT_ALLOW_PROTOCOL=${GIT_ALLOW_PROTOCOL:-https:http:ssh}236export GIT_ALLOW_PROTOCOL=${GIT_ALLOW_PROTOCOL:-https:http:ssh}

237IFS=':'237IFS=':'

238rc=0 # becomes 1 when a step fails; a non-zero exit makes the runner log it

238# -c overrides beat repo-local settings, blocking session-written fsmonitor,239# -c overrides beat repo-local settings, blocking session-written fsmonitor,

239# hook-path, and gpg-program config from executing code with the hook's240# hook-path, and gpg-program config from executing code with the hook's

240# privileges. -c commit.gpgsign=false also leaves these rescue commits241# privileges. -c commit.gpgsign=false also leaves these rescue commits


245g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \246g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \

246 -c commit.gpgsign=false "$@"; }247 -c commit.gpgsign=false "$@"; }

247for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do248for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do

248 cd "$ws" 2>/dev/null || continue249 cd "$ws" || { rc=1; continue; }

249 [ -z "$(g status --porcelain 2>/dev/null)" ] && continue250 g add -A || rc=1

250 g add -A251 g diff-index --cached --quiet HEAD && continue # nothing to save

251 g commit -q -m "runner snapshot: $CLAUDE_RUNNER_SESSION_ID ($CLAUDE_RUNNER_EXIT_REASON)" || continue252 g commit -q -m "runner snapshot: $CLAUDE_RUNNER_SESSION_ID ($CLAUDE_RUNNER_EXIT_REASON)" || { rc=1; continue; }

252 g push -q origin "HEAD:refs/heads/rescue/$CLAUDE_RUNNER_SESSION_ID" || true253 g push -q origin "HEAD:refs/heads/rescue/$CLAUDE_RUNNER_SESSION_ID" || rc=1

253done254done

255exit "$rc"

254```256```

255 257 

256La línea `GIT_ALLOW_PROTOCOL` del script limita git a remotos HTTPS, HTTP y SSH. Si el entorno del ejecutor ya establece su propia lista `GIT_ALLOW_PROTOCOL` no vacía, el script conserva esa lista.258La línea `GIT_ALLOW_PROTOCOL` del script limita git a remotos HTTPS, HTTP y SSH. Si el entorno del ejecutor ya establece su propia lista `GIT_ALLOW_PROTOCOL` no vacía, el script conserva esa lista.

Details

23 * **Con [git administrado por Anthropic](#use-the-anthropic-git-proxy)**: con una credencial así, Claude llega a GitHub directamente en lugar de hacerlo a través del git administrado por Anthropic.23 * **Con [git administrado por Anthropic](#use-the-anthropic-git-proxy)**: con una credencial así, Claude llega a GitHub directamente en lugar de hacerlo a través del git administrado por Anthropic.

24 * **Sin git administrado por Anthropic**: una credencial de clonación puede permanecer en la imagen si limitas su alcance tan estrictamente como describe [Incluir la configuración de git en tu imagen](#ship-git-config-in-your-image).24 * **Sin git administrado por Anthropic**: una credencial de clonación puede permanecer en la imagen si limitas su alcance tan estrictamente como describe [Incluir la configuración de git en tu imagen](#ship-git-config-in-your-image).

25* **Mantén el secreto del entorno fuera de los hosts que ejecutan sesiones**: el secreto del entorno puede registrar runners y recoger cualquier sesión en cola en el entorno. En una flota fija vive en cada host de runner, donde el código de cualquier sesión puede leer el archivo secreto. Prefiere [runners bajo demanda](https://code.claude.com/docs/es/self-hosted-environments-configuration.md#on-demand-runners), donde el secreto permanece en el host del orquestador, que nunca ejecuta código de usuario, y cada runner recibe una orden de trabajo de un solo uso que registra exactamente un runner. En una flota fija, trata el archivo de secreto del entorno como legible por cada sesión y rota el secreto después de cualquier compromiso de sesión sospechoso.25* **Mantén el secreto del entorno fuera de los hosts que ejecutan sesiones**: el secreto del entorno puede registrar runners y recoger cualquier sesión en cola en el entorno. En una flota fija vive en cada host de runner, donde el código de cualquier sesión puede leer el archivo secreto. Prefiere [runners bajo demanda](https://code.claude.com/docs/es/self-hosted-environments-configuration.md#on-demand-runners), donde el secreto permanece en el host del orquestador, que nunca ejecuta código de usuario, y cada runner recibe una orden de trabajo de un solo uso que registra exactamente un runner. En una flota fija, trata el archivo de secreto del entorno como legible por cada sesión y rota el secreto después de cualquier compromiso de sesión sospechoso.

26 * **Después de un compromiso sospechoso**: pide a un [Propietario](https://code.claude.com/docs/es/cloud-environments.md#organization-shared-environments) que cree un nuevo secreto y revoque el anterior desde la pestaña **Configuración** del entorno, y luego despliega el nuevo. Anthropic rechaza todos los orquestadores y runners que usen el secreto anterior, incluidos los runners bajo demanda creados a partir de sus órdenes de trabajo. Tus runners salen, lo que interrumpe sus sesiones.26 * **Después de un compromiso sospechoso, primero revoca la sesión sospechosa**: antes de detener su runner o revocar el secreto, selecciona **Revoke token** en el menú de la sesión en la pestaña **Activity**. Así, ningún runner puede reanudarla.

27 * **Luego reemplaza el secreto**: pide a un [Propietario](https://code.claude.com/docs/es/cloud-environments.md#organization-shared-environments) que cree un nuevo secreto y revoque el anterior desde la pestaña **Configuración** del entorno, y luego despliega el nuevo. Anthropic rechaza todos los orquestadores y runners que usen el secreto anterior, incluidos los runners bajo demanda creados a partir de sus órdenes de trabajo. Tus runners salen, lo que interrumpe sus sesiones.

27* **Salida de red de negación predeterminada**: restrinja el tráfico saliente del contenedor de runner y sesión en su propio límite de red en cada entorno; [Salida de negación predeterminada](#default-deny-egress) cubre qué permitir y por qué.28* **Salida de red de negación predeterminada**: restrinja el tráfico saliente del contenedor de runner y sesión en su propio límite de red en cada entorno; [Salida de negación predeterminada](#default-deny-egress) cubre qué permitir y por qué.

28* **IAM de host con privilegios mínimos**: la identidad de cálculo adjunta al host del runner, como un perfil de instancia o una cuenta de servicio de nodo, debe otorgar solo lo que el runner en sí necesita. Las sesiones deben obtener sus propias credenciales a través de su script de envoltura en lugar de heredar las del host.29* **IAM de host con privilegios mínimos**: la identidad de cálculo adjunta al host del runner, como un perfil de instancia o una cuenta de servicio de nodo, debe otorgar solo lo que el runner en sí necesita. Las sesiones deben obtener sus propias credenciales a través de su script de envoltura en lugar de heredar las del host.

29* **Bloquee el punto final de metadatos en la nube desde las sesiones**: mantener las sesiones fuera de la identidad del host requiere bloquear su acceso al punto final de metadatos en la nube, y las políticas de salida a nivel de subred no interceptan el tráfico de metadatos de enlace local, así que bloquéelo en el contenedor en sí:30* **Bloquee el punto final de metadatos en la nube desde las sesiones**: mantener las sesiones fuera de la identidad del host requiere bloquear su acceso al punto final de metadatos en la nube, y las políticas de salida a nivel de subred no interceptan el tráfico de metadatos de enlace local, así que bloquéelo en el contenedor en sí:


243 244 

244Para cada sesión, un runner con Claude Code v2.1.267 o posterior también registra una línea `[runner:session]` que contiene `governed git ACTIVE` cuando Anthropic atiende el git de la sesión, o una línea `[runner:warn]` que contiene `the server withheld Anthropic-managed git for this session` cuando no lo hace. Busca la línea que ves entre estos casos:245Para cada sesión, un runner con Claude Code v2.1.267 o posterior también registra una línea `[runner:session]` que contiene `governed git ACTIVE` cuando Anthropic atiende el git de la sesión, o una línea `[runner:warn]` que contiene `the server withheld Anthropic-managed git for this session` cuando no lo hace. Busca la línea que ves entre estos casos:

245 246 

246* **Ni `governed git ACTIVE` ni la línea `withheld`**: un runner anterior a Claude Code v2.1.267 no registra ninguna de las dos líneas, y Anthropic no atiende sus sesiones. Actualiza el runner a v2.1.267 o posterior siguiendo [Fija la versión](#pin-the-version).247* **Ni `governed git ACTIVE` ni la línea `withheld`**: si el runner es anterior a Claude Code v2.1.267, Anthropic no atiende sus sesiones. Actualiza el runner a v2.1.267 o posterior siguiendo [Fija la versión](#pin-the-version).

247* **La línea `withheld`**: Anthropic no atendió la sesión. Un runner que antes funcionaba con el proxy de git puede fallar así sin ningún cambio de tu parte.248* **La línea `withheld`**: Anthropic no atendió la sesión. Un runner que antes funcionaba con el proxy de git puede fallar así sin ningún cambio de tu parte.

248 * **Un repositorio no está en github.com**: una sesión con aunque sea un repositorio en otro host de git, como GitHub Enterprise Server, no se atiende, incluidos sus repositorios de github.com. [Desactiva el proxy de git de Anthropic](#turn-the-anthropic-git-proxy-off) para los runners de ese entorno.249 * **Un repositorio no está en github.com**: una sesión con aunque sea un repositorio en otro host de git, como GitHub Enterprise Server, no se atiende, incluidos sus repositorios de github.com. [Desactiva el proxy de git de Anthropic](#turn-the-anthropic-git-proxy-off) para los runners de ese entorno.

249 * **Todos los repositorios están en github.com**: reporta el fallo a [tu equipo de cuenta de Anthropic](#report-an-issue) con el ID de sesión de la línea `withheld`. Anthropic registra el motivo de su lado.250 * **Todos los repositorios están en github.com**: reporta el fallo a [tu equipo de cuenta de Anthropic](#report-an-issue) con el ID de sesión de la línea `withheld`. Anthropic registra el motivo de su lado.


396Intercambia `linux-x64` por `linux-arm64` si tus nodos son ARM, o por `linux-x64-musl` o `linux-arm64-musl` en una imagen basada en musl como Alpine; consulta [Configuración de Alpine Linux](https://code.claude.com/docs/es/setup.md#alpine-linux-and-musl-based-distributions) para los paquetes adicionales que las imágenes musl necesitan. La URL es la ubicación de lanzamiento estándar de Claude Code, por lo que puedes verificar el binario descargado contra el manifiesto firmado del lanzamiento como se describe en [Integridad binaria y firma de código](https://code.claude.com/docs/es/setup.md#binary-integrity-and-code-signing). El runner requiere la versión 2.1.224 de Claude Code o posterior, o la 2.1.229 o posterior para servir sesiones de Claude Tag. Crea la imagen, luego súbela a tu registro y haz referencia a ella en las recetas a continuación:397Intercambia `linux-x64` por `linux-arm64` si tus nodos son ARM, o por `linux-x64-musl` o `linux-arm64-musl` en una imagen basada en musl como Alpine; consulta [Configuración de Alpine Linux](https://code.claude.com/docs/es/setup.md#alpine-linux-and-musl-based-distributions) para los paquetes adicionales que las imágenes musl necesitan. La URL es la ubicación de lanzamiento estándar de Claude Code, por lo que puedes verificar el binario descargado contra el manifiesto firmado del lanzamiento como se describe en [Integridad binaria y firma de código](https://code.claude.com/docs/es/setup.md#binary-integrity-and-code-signing). El runner requiere la versión 2.1.224 de Claude Code o posterior, o la 2.1.229 o posterior para servir sesiones de Claude Tag. Crea la imagen, luego súbela a tu registro y haz referencia a ella en las recetas a continuación:

397 398 

398```bash theme={null}399```bash theme={null}

400# If your model needs a newer release, change stable to latest in the URL

399docker build \401docker build \

400 --build-arg CLAUDE_CODE_VERSION="$(curl -fsSL https://downloads.claude.ai/claude-code-releases/stable)" \402 --build-arg CLAUDE_CODE_VERSION="$(curl -fsSL https://downloads.claude.ai/claude-code-releases/stable)" \

401 -t <your-registry>/claude-runner:latest .403 -t <your-registry>/claude-runner:latest .


429El runner usa `--capacity` para limitar cuántas sesiones ejecuta a la vez. No divide CPU ni memoria entre ellas, por lo que las sesiones en un runner comparten la CPU y la memoria del contenedor. Para evitar que el uso de memoria de una sesión termine las demás, ejecuta una sesión por runner con [su propio límite de memoria](#give-each-session-its-own-memory-limit).431El runner usa `--capacity` para limitar cuántas sesiones ejecuta a la vez. No divide CPU ni memoria entre ellas, por lo que las sesiones en un runner comparten la CPU y la memoria del contenedor. Para evitar que el uso de memoria de una sesión termine las demás, ejecuta una sesión por runner con [su propio límite de memoria](#give-each-session-its-own-memory-limit).

430 432 

431* **Una sesión por runner**: dé a cada contenedor los valores de una sesión. Use este dimensionamiento en `--capacity 1`, que la [sección de endurecimiento](#harden-your-deployment) recomienda, y para [runners bajo demanda](https://code.claude.com/docs/es/self-hosted-environments-configuration.md#on-demand-runners), donde establece los valores en la carga de trabajo que su [hook `spawn-runner`](https://code.claude.com/docs/es/self-hosted-environments-configuration#the-spawn-runner-hook) envía, como la plantilla de pod de un Job de Kubernetes.433* **Una sesión por runner**: dé a cada contenedor los valores de una sesión. Use este dimensionamiento en `--capacity 1`, que la [sección de endurecimiento](#harden-your-deployment) recomienda, y para [runners bajo demanda](https://code.claude.com/docs/es/self-hosted-environments-configuration.md#on-demand-runners), donde establece los valores en la carga de trabajo que su [hook `spawn-runner`](https://code.claude.com/docs/es/self-hosted-environments-configuration#the-spawn-runner-hook) envía, como la plantilla de pod de un Job de Kubernetes.

432* **Varias sesiones por runner**: en un `--capacity` por encima de uno, multiplique los valores de una sesión por la capacidad, porque hasta esa cantidad de sesiones pueden ejecutarse en el contenedor a la vez. Las recetas de [Kubernetes](#kubernetes) y [Docker Compose](#docker-compose) ejecutan `--capacity 4` sin límites de CPU o memoria, así que agregue límites dimensionados para la capacidad que ejecuta.434* **Varias sesiones por runner**: en un `--capacity` por encima de uno, multiplica los valores de una sesión por la capacidad, porque hasta esa cantidad de sesiones pueden ejecutarse en el contenedor a la vez, [incluidas las inactivas](#release-idle-sessions-on-a-fixed-fleet). Las recetas de [Kubernetes](#kubernetes) y [Docker Compose](#docker-compose) ejecutan `--capacity 4` sin límites de CPU o memoria, así que agrega límites dimensionados para la capacidad que ejecutas.

433* **Varios contenedores de runner en un host**: dimensiona el host para la suma de las capacidades de los runners, porque cada runner cuenta solo sus propias sesiones contra `--capacity`:435* **Varios contenedores de runner en un host**: dimensiona el host para la suma de las capacidades de los runners, porque cada runner cuenta solo sus propias sesiones contra `--capacity`:

434 436 

435 * **Memoria**: multiplica la memoria de una sesión por la suma y luego agrega lo que usan los propios procesos del host437 * **Memoria**: multiplica la memoria de una sesión por la suma y luego agrega lo que usan los propios procesos del host

Details

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

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

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

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

60 60 

61La mayoría de los flags de duración tienen un máximo, elegido para mantener cada timeout dentro del techo del temporizador de 32 bits del runtime de aproximadamente 24,85 días. Los flags `--*-min` se limitan a 10080 minutos, 7 días; `--drain-grace-sec` a 604800 segundos, también 7 días; y `--drain-wait-sec` a 86400 segundos, 24 horas. `--session-stop-grace-sec` y `--post-session-hook-timeout-sec` no tienen límite. Exceder un límite se comporta diferente por superficie:61La mayoría de los flags de duración tienen un máximo, elegido para mantener cada timeout dentro del techo del temporizador de 32 bits del runtime de aproximadamente 24,85 días. Los flags `--*-min` se limitan a 10080 minutos, 7 días; `--drain-grace-sec` a 604800 segundos, también 7 días; y `--drain-wait-sec` a 86400 segundos, 24 horas. `--session-stop-grace-sec` y `--post-session-hook-timeout-sec` no tienen límite. Exceder un límite se comporta diferente por superficie:

62 62 

Details

12 12 

13En un [entorno autohospedado](https://code.claude.com/docs/es/self-hosted-environments), las [sesiones en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md) de Claude Code se ejecutan en una imagen de ejecutor que usted crea y mantiene. Antes de implementar una nueva imagen en su entorno de producción, ejecute una sesión completa contra un entorno de prueba desde un script: cree una sesión, lea la respuesta de Claude, envíe un seguimiento y lea esa respuesta también. Esta es la forma de una prueba de humo de CI que verifica su imagen de ejecutor, acceso a git y cualquier herramienta personalizada antes de que promueva un cambio.13En un [entorno autohospedado](https://code.claude.com/docs/es/self-hosted-environments), las [sesiones en la nube](https://code.claude.com/docs/es/claude-code-on-the-web.md) de Claude Code se ejecutan en una imagen de ejecutor que usted crea y mantiene. Antes de implementar una nueva imagen en su entorno de producción, ejecute una sesión completa contra un entorno de prueba desde un script: cree una sesión, lea la respuesta de Claude, envíe un seguimiento y lea esa respuesta también. Esta es la forma de una prueba de humo de CI que verifica su imagen de ejecutor, acceso a git y cualquier herramienta personalizada antes de que promueva un cambio.

14 14 

15Esta receta asume que ya ha [configurado un entorno y un ejecutor](https://code.claude.com/docs/es/self-hosted-environments-quickstart.md#set-up-an-environment-and-runner), y que su trabajo de CI inicia el proceso del ejecutor en el mismo host que el script de prueba, la configuración natural para probar una nueva imagen de ejecutor. Un hook Stop que instala en el ejecutor escribe la respuesta final de cada turno en un archivo local, y el script la lee desde allí, por lo que las únicas llamadas a la API de Anthropic son los dos envíos en sí. Si sus ejecutores de prueba están en infraestructura separada, consulte [Ejecutores de prueba remotos](#remote-test-runners).15Esta receta asume que ya has [configurado un entorno y un ejecutor](https://code.claude.com/docs/es/self-hosted-environments-quickstart.md#set-up-an-environment-and-runner), y que tu trabajo de CI inicia el proceso del ejecutor en el mismo host que el script de prueba. Un hook Stop que instalas en el ejecutor escribe la respuesta final de cada turno en un archivo local, y el script la lee desde allí. Si tus ejecutores de prueba están en infraestructura separada, consulta [Ejecutores de prueba remotos](#remote-test-runners).

16 16 

17## Instale el hook de captura en su ejecutor de prueba17## Instale el hook de captura en su ejecutor de prueba

18 18 

Details

62 62 

63Los hooks utilizan el mismo formato que en `settings.json`.63Los hooks utilizan el mismo formato que en `settings.json`.

64 64 

65Este ejemplo ejecuta un script de auditoría después de cada edición de archivo en toda la organización:65Este ejemplo ejecuta un script de auditoría después de las llamadas a las herramientas `Edit` y `Write` en toda la organización:

66 66 

67```json theme={null}67```json theme={null}

68{68{


95 95 

96Para confirmar que la configuración se está aplicando, pida a un usuario que reinicie Claude Code. Si la configuración incluye configuraciones que activan el [diálogo de aprobación de seguridad](#security-approval-dialogs), el usuario ve un mensaje que describe la configuración administrada la próxima vez que Claude Code la obtiene: en el próximo inicio o dentro de una hora en una sesión interactiva en ejecución. También puede verificar que las reglas de permisos administrados estén activas haciendo que un usuario ejecute `/permissions` para ver sus reglas de permisos efectivas.96Para confirmar que la configuración se está aplicando, pida a un usuario que reinicie Claude Code. Si la configuración incluye configuraciones que activan el [diálogo de aprobación de seguridad](#security-approval-dialogs), el usuario ve un mensaje que describe la configuración administrada la próxima vez que Claude Code la obtiene: en el próximo inicio o dentro de una hora en una sesión interactiva en ejecución. También puede verificar que las reglas de permisos administrados estén activas haciendo que un usuario ejecute `/permissions` para ver sus reglas de permisos efectivas.

97 97 

98En una sesión, haz que el usuario ejecute `/status`. La [línea `Setting sources`](https://code.claude.com/docs/es/managed-settings#read-the-source-in-/status) muestra `Enterprise managed settings` con `remote` entre paréntesis cuando se aplica la configuración administrada por servidor.

99 

98Para verificar el resultado de la obtención en una máquina específica, haga que el usuario ejecute `claude doctor` y lea la línea `Managed settings (remote)`. Requiere Claude Code v2.1.248 o posterior. La línea informa uno de cuatro resultados:100Para verificar el resultado de la obtención en una máquina específica, haga que el usuario ejecute `claude doctor` y lea la línea `Managed settings (remote)`. Requiere Claude Code v2.1.248 o posterior. La línea informa uno de cuatro resultados:

99 101 

100* La configuración entregada se cargó102* La configuración entregada se cargó


247* Si la puerta de enlace responde a un lanzamiento interactivo asistido con un `401` y esta configuración está desactivada, la puerta de enlace ha terminado ese inicio de sesión. Claude Code imprime [`Cloud gateway session expired — run /login to reconnect.`](https://code.claude.com/docs/es/errors#cloud-gateway-session-expired) y abre la sesión sin iniciar sesión en la puerta de enlace hasta que el usuario ejecute `/login`.249* Si la puerta de enlace responde a un lanzamiento interactivo asistido con un `401` y esta configuración está desactivada, la puerta de enlace ha terminado ese inicio de sesión. Claude Code imprime [`Cloud gateway session expired — run /login to reconnect.`](https://code.claude.com/docs/es/errors#cloud-gateway-session-expired) y abre la sesión sin iniciar sesión en la puerta de enlace hasta que el usuario ejecute `/login`.

248* Cuando la búsqueda falla de cualquier otra forma, o en cualquier otro tipo de lanzamiento excepto un subcomando `claude auth`, el cliente sale con un error.250* Cuando la búsqueda falla de cualquier otra forma, o en cualquier otro tipo de lanzamiento excepto un subcomando `claude auth`, el cliente sale con un error.

249 251 

250Cuando esta configuración está activa en una sesión que obtiene configuración administrada por servidor, la CLI se bloquea al inicio hasta que la configuración remota se obtenga recientemente. Si la búsqueda falla, la CLI sale en lugar de continuar sin la política. Esta configuración se perpetúa a sí misma: una vez entregada desde el servidor, también se almacena en caché localmente para que los inicios posteriores apliquen el mismo comportamiento incluso antes de la primera búsqueda exitosa de una nueva sesión. Una sesión que [no obtiene configuración administrada por servidor](#platform-availability) comienza sin esperar.252Cuando este ajuste está activo en una sesión que obtiene configuración administrada por servidor, la CLI se bloquea al inicio hasta que la configuración remota se obtenga de nuevo. Si la búsqueda falla, la CLI sale en lugar de continuar sin la política. Una sesión que [no obtiene configuración administrada por servidor](#platform-availability) comienza sin esperar.

251 253 

252Para habilitar esto, agregue la clave a su configuración de configuración administrada:254Para habilitar esto, agregue la clave a su configuración de configuración administrada:

253 255 


259 261 

260También puede establecer esta clave en un perfil MDM [administrado por endpoint](https://code.claude.com/docs/es/managed-settings.md#delivery-mechanisms) o archivo `managed-settings.json` del sistema para aplicar comportamiento de cierre por error en el primer lanzamiento, antes de que llegue cualquier carga útil de servidor. Esta bandera es una excepción a la [regla de precedencia](#settings-precedence) anterior: Claude Code la honra cuando cualquier fuente administrada controlada por administrador la establece, incluso si también está presente una carga útil administrada por servidor en caché, por lo que no ignora un valor entregado por MDM cuando existe configuración administrada por servidor.262También puede establecer esta clave en un perfil MDM [administrado por endpoint](https://code.claude.com/docs/es/managed-settings.md#delivery-mechanisms) o archivo `managed-settings.json` del sistema para aplicar comportamiento de cierre por error en el primer lanzamiento, antes de que llegue cualquier carga útil de servidor. Esta bandera es una excepción a la [regla de precedencia](#settings-precedence) anterior: Claude Code la honra cuando cualquier fuente administrada controlada por administrador la establece, incluso si también está presente una carga útil administrada por servidor en caché, por lo que no ignora un valor entregado por MDM cuando existe configuración administrada por servidor.

261 263 

264En inicios posteriores, Claude Code lee un valor entregado por el servidor desde la configuración en caché, por lo que el ajuste está activo antes de la primera búsqueda de la nueva sesión. Para mantener el ajuste activo sin depender de la copia en caché, establece también la clave en una fuente administrada por endpoint.

265 

262Cuando un [`policyHelper`](https://code.claude.com/docs/es/settings-reference#policyhelper) proporciona configuración administrada, su salida reemplaza todas las demás fuentes administradas para las claves que Claude Code lee después del inicio. Para las fuentes de las que Claude Code lee esta clave, consulte [su entrada de configuración](https://code.claude.com/docs/es/settings-reference.md#forceremotesettingsrefresh). La entrada `policyHelper` dice de qué fuentes Claude Code lee el asistente y cuándo se ejecuta.266Cuando un [`policyHelper`](https://code.claude.com/docs/es/settings-reference#policyhelper) proporciona configuración administrada, su salida reemplaza todas las demás fuentes administradas para las claves que Claude Code lee después del inicio. Para las fuentes de las que Claude Code lee esta clave, consulte [su entrada de configuración](https://code.claude.com/docs/es/settings-reference.md#forceremotesettingsrefresh). La entrada `policyHelper` dice de qué fuentes Claude Code lee el asistente y cuándo se ejecuta.

263 267 

264La búsqueda de configuración también envía un encabezado `Cache-Control: no-cache` para que los proxies HTTP intermedios no sirvan una respuesta obsoleta.268La búsqueda de configuración también envía un encabezado `Cache-Control: no-cache` para que los proxies HTTP intermedios no sirvan una respuesta obsoleta.

settings.md +2 −2

Details

66 66 

67### Comparte la configuración con tu equipo67### Comparte la configuración con tu equipo

68 68 

69Haz commit de `.claude/settings.json` para que todos los que clonen el repositorio obtengan los mismos permisos, hooks y plugins. Cada compañero de equipo aún puede sobrescribirlo para sí mismo en su propio `.claude/settings.local.json`, por lo que las excepciones personales no necesitan un commit. Para un archivo de equipo completo, consulta [la configuración compartida de un equipo](https://code.claude.com/docs/es/settings-example.md#a-teams-shared-settings).69Haz commit de `.claude/settings.json` para que todos los que clonen el repositorio obtengan los mismos permisos, hooks y configuración de plugins. Cada compañero de equipo aún puede sobrescribirlo para sí mismo en su propio `.claude/settings.local.json`, por lo que las excepciones personales no necesitan un commit. Para un archivo de equipo completo, consulta [la configuración compartida de un equipo](https://code.claude.com/docs/es/settings-example.md#a-teams-shared-settings).

70 70 

71Parte de lo que incluyes en el commit espera hasta que cada compañero de equipo [confíe en la carpeta](https://code.claude.com/docs/es/permissions.md#project-allow-rules-and-workspace-trust), y algunas claves nunca surten efecto desde un archivo del repositorio; [Solucionar un ajuste que no se aplica](#common-cases) cubre ambos casos.71Parte de lo que incluyes en el commit espera hasta que cada compañero de equipo [confíe en la carpeta](https://code.claude.com/docs/es/permissions.md#project-allow-rules-and-workspace-trust), y algunas claves nunca surten efecto desde un archivo del repositorio; [Solucionar un ajuste que no se aplica](#common-cases) cubre ambos casos.

72 72 


199* **Error de configuración**: un archivo de usuario, proyecto o local tiene JSON inválido o un valor que el esquema rechaza. Al inicio de una sesión interactiva Claude Code muestra un diálogo que le permite corregir el archivo con la ayuda de Claude, salir o continuar sin las configuraciones rotas.199* **Error de configuración**: un archivo de usuario, proyecto o local tiene JSON inválido o un valor que el esquema rechaza. Al inicio de una sesión interactiva Claude Code muestra un diálogo que le permite corregir el archivo con la ayuda de Claude, salir o continuar sin las configuraciones rotas.

200* **Advertencia de configuración**: solo entradas individuales fallan, como una regla de permiso malformada o un nombre de evento de hook desconocido. Claude Code omite esos valores y mantiene el resto del archivo en vigor.200* **Advertencia de configuración**: solo entradas individuales fallan, como una regla de permiso malformada o un nombre de evento de hook desconocido. Claude Code omite esos valores y mantiene el resto del archivo en vigor.

201* **Configuraciones administradas**: Claude Code continúa aplicando el resto del archivo. [Entradas inválidas en configuraciones administradas](https://code.claude.com/docs/es/managed-settings.md#invalid-entries-in-managed-settings) dice qué descarta y qué claves recurren a un valor más estricto hasta que las corrija. Para un documento de configuraciones administradas que no es JSON válido, vea [No se pudo analizar el documento de configuraciones administradas](https://code.claude.com/docs/es/errors.md#managed-settings-document-could-not-be-parsed).201* **Configuraciones administradas**: Claude Code continúa aplicando el resto del archivo. [Entradas inválidas en configuraciones administradas](https://code.claude.com/docs/es/managed-settings.md#invalid-entries-in-managed-settings) dice qué descarta y qué claves recurren a un valor más estricto hasta que las corrija. Para un documento de configuraciones administradas que no es JSON válido, vea [No se pudo analizar el documento de configuraciones administradas](https://code.claude.com/docs/es/errors.md#managed-settings-document-could-not-be-parsed).

202* **Configuration error**: [`~/.claude.json`](https://code.claude.com/docs/es/claude-directory#ce-claude-json) no se puede analizar. Una ejecución de `claude -p` termina y tu archivo no se modifica. Consulta [Configuration error in \~/.claude.json](https://code.claude.com/docs/es/errors.md#configuration-error-in-claude-json) para restaurar una copia anterior. Claude Code copia el archivo roto a `~/.claude/backups/.claude.json.corrupted.<timestamp>` y, en una sesión interactiva, pregunta si quieres salir y corregirlo o restablecer la configuración predeterminada. Cuando el archivo está en blanco y no hay ninguna copia de seguridad que restaurar, Claude Code se inicia con la configuración predeterminada.202* **Configuration error**: [`~/.claude.json`](https://code.claude.com/docs/es/claude-directory#ce-claude-json) no se puede analizar. Una ejecución de `claude -p` termina. Consulta [Configuration error in \~/.claude.json](https://code.claude.com/docs/es/errors.md#configuration-error-in-claude-json) para restaurar una copia anterior. Claude Code copia el archivo roto a `~/.claude/backups/.claude.json.corrupted.<timestamp>` y, en una sesión interactiva, pregunta si quieres salir y corregirlo o restablecer la configuración predeterminada. Cuando el archivo está en blanco y no hay ninguna copia de seguridad que restaurar, Claude Code se inicia con la configuración predeterminada.

203 203 

204Después de continuar, ejecute `/status` para ver los archivos afectados y `claude doctor` para los detalles de cada error.204Después de continuar, ejecute `/status` para ver los archivos afectados y `claude doctor` para los detalles de cada error.

205 205 

skills.md +1 −1

Details

22 22 

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

24 24 

25Usted invoca una skill incluida de la misma manera que cualquier otra skill, escribiendo `/` seguido del nombre de la skill. Claude invoca algunas skills incluidas automáticamente cuando es relevante; otras, incluyendo `/verify`, se ejecutan solo cuando usted las invoca, lo que le mantiene en control de cuándo estas comprobaciones de ejecución más larga gastan tiempo y tokens.25Para invocar un skill incluido, escribe `/` seguido del nombre del skill. Claude invoca algunos skills incluidos automáticamente cuando es relevante; otros, incluido [`/verify`](#run-and-verify-your-app), se ejecutan solo cuando tú los invocas.

26 26 

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

28 28 

Details

346 346 

347Claude Code guarda el contenido detrás de cada marcador `[Pasted text #N]` en `~/.claude/paste-cache/`, de modo que cuando recuperas un prompt del [historial de comandos](https://code.claude.com/docs/es/interactive-mode.md#command-history) y lo vuelves a enviar, el contenido pegado completo se envía de nuevo, incluso en una sesión posterior.347Claude Code guarda el contenido detrás de cada marcador `[Pasted text #N]` en `~/.claude/paste-cache/`, de modo que cuando recuperas un prompt del [historial de comandos](https://code.claude.com/docs/es/interactive-mode.md#command-history) y lo vuelves a enviar, el contenido pegado completo se envía de nuevo, incluso en una sesión posterior.

348 348 

349Los archivos de caché con una antigüedad mayor que [`cleanupPeriodDays`](https://code.claude.com/docs/es/settings-reference#cleanupperioddays) se eliminan según las [reglas de limpieza por retención](https://code.claude.com/docs/es/claude-directory.md#cleaned-up-automatically), por lo que un prompt recuperado puede hacer referencia a texto pegado que ya no existe. Cuando envías un prompt así, Claude Code nunca envía la cadena literal `[Pasted text #N]` y muestra una notificación que nombra el pegado faltante:349Los archivos de caché con una antigüedad mayor que [`cleanupPeriodDays`](https://code.claude.com/docs/es/settings-reference#cleanupperioddays) se eliminan según las [reglas de limpieza por retención](https://code.claude.com/docs/es/claude-directory.md#cleaned-up-automatically), por lo que un prompt recuperado puede hacer referencia a texto pegado que ya no existe. Cuando envías un prompt así, Claude Code no envía la cadena literal `[Pasted text #N]` y muestra una notificación que nombra el pegado faltante:

350 350 

351* En un prompt simple en el que queda texto, Claude Code elimina el marcador y envía el texto restante.351* En un prompt simple en el que queda texto, Claude Code elimina el marcador y envía el texto restante.

352* En un comando de [modo shell](https://code.claude.com/docs/es/interactive-mode.md#shell-mode-with-prefix) o un comando `/`, donde la eliminación cambiaría lo que se ejecuta, y en cualquier prompt que la eliminación deje vacío, Claude Code cancela el envío y conserva el texto original en la entrada, con el marcador todavía en él. Elimina el marcador o edita el comando y luego vuelve a enviarlo.352* En un comando de [modo shell](https://code.claude.com/docs/es/interactive-mode.md#shell-mode-with-prefix) o un comando `/`, donde la eliminación cambiaría lo que se ejecuta, y en cualquier prompt que la eliminación deje vacío, Claude Code cancela el envío y conserva el texto original en la entrada, con el marcador todavía en él. Elimina el marcador o edita el comando y luego vuelve a enviarlo.

Details

29| `EACCES: permission denied` durante la instalación | [Corrige los permisos del directorio de instalación](#permission-errors-during-installation) |29| `EACCES: permission denied` durante la instalación | [Corrige los permisos del directorio de instalación](#permission-errors-during-installation) |

30| `TLS connect error` o `SSL/TLS secure channel` | [Actualiza los certificados CA](#tls-or-ssl-connection-errors) |30| `TLS connect error` o `SSL/TLS secure channel` | [Actualiza los certificados CA](#tls-or-ssl-connection-errors) |

31| `CRYPT_E_NO_REVOCATION_CHECK` o `CRYPT_E_REVOCATION_OFFLINE` | [Soluciona las verificaciones de revocación bloqueadas](#tls-or-ssl-connection-errors) |31| `CRYPT_E_NO_REVOCATION_CHECK` o `CRYPT_E_REVOCATION_OFFLINE` | [Soluciona las verificaciones de revocación bloqueadas](#tls-or-ssl-connection-errors) |

32| `Failed to fetch version` o no puedes alcanzar el servidor de descarga | [Verifica la configuración de red y proxy](#check-network-connectivity) |32| `Failed to fetch version` o no puedes alcanzar el servidor de descarga | [Verifica la configuración de red y proxy](#check-network-connectivity) o, si se trata de un error de certificado, [configura certificados CA corporativos](#tls-or-ssl-connection-errors) |

33| `The connection dropped while downloading the update` o `Download timed out: exceeded the total deadline` | [Vuelve a ejecutar la actualización o configura tu proxy](#the-connection-dropped-while-downloading-the-update) |33| `The connection dropped while downloading the update` o `Download timed out: exceeded the total deadline` | [Vuelve a ejecutar la actualización o configura tu proxy](#the-connection-dropped-while-downloading-the-update) |

34| `Release verification failed for Claude Code` | [Vuelve a ejecutar `claude update` o `claude install`](#release-verification-failed) |34| `Release verification failed for Claude Code` | [Vuelve a ejecutar `claude update` o `claude install`](#release-verification-failed) |

35| `Auto-update failed · Run claude doctor` en rojo en el pie de la sesión | [Ejecuta `claude update` desde tu shell](#auto-update-failed) |35| `Auto-update failed · Run claude doctor` en rojo en el pie de la sesión | [Ejecuta `claude update` desde tu shell](#auto-update-failed) |


94* `403`: generalmente un proxy o filtro de red bloqueando el host, o Claude Code [no está disponible en tu región](https://www.anthropic.com/supported-countries)94* `403`: generalmente un proxy o filtro de red bloqueando el host, o Claude Code [no está disponible en tu región](https://www.anthropic.com/supported-countries)

95* `5xx`: generalmente un problema temporal del servicio; espera unos minutos y vuelve a intentarlo95* `5xx`: generalmente un problema temporal del servicio; espera unos minutos y vuelve a intentarlo

96 96 

97Si no ves salida, `Could not resolve host`, o se agota el tiempo de espera de la conexión, tu red está bloqueando la conexión. Las causas comunes incluyen:97Si no ves salida, o el instalador muestra `Could not resolve host` o se agota el tiempo de espera de la conexión, la conexión falló, así que revisa estas causas:

98 98 

99* Firewalls corporativos o proxies bloqueando `downloads.claude.ai`99* Firewalls corporativos o proxies bloqueando `downloads.claude.ai`

100* Restricciones de red regional: intenta una VPN o una red alternativa100* Restricciones de red regional: intenta una VPN o una red alternativa

101* Problemas de TLS/SSL: actualiza los certificados CA de tu sistema, o verifica si `HTTPS_PROXY` está configurado101* Problemas de TLS/SSL: consulta [Errores de conexión TLS o SSL](#tls-or-ssl-connection-errors)

102 102 

103Si estás detrás de un proxy corporativo, establece `HTTPS_PROXY` y `HTTP_PROXY` en la dirección de tu proxy antes de instalar. Pregunta a tu equipo de TI por la URL del proxy si no la conoces, o verifica la configuración del proxy de tu navegador.103Si estás detrás de un proxy corporativo, establece `HTTPS_PROXY` y `HTTP_PROXY` en la dirección de tu proxy antes de instalar. Pregunta a tu equipo de TI por la URL del proxy si no la conoces, o verifica la configuración del proxy de tu navegador.

104 104 


566 irm https://claude.ai/install.ps1 | iex566 irm https://claude.ai/install.ps1 | iex

567 ```567 ```

568 568 

5693. **Verifica si hay interferencia de un proxy o firewall**: los proxies corporativos que realizan inspección TLS pueden causar estos errores, incluidos `unable to get local issuer certificate` y `SELF_SIGNED_CERT_IN_CHAIN`. Para el paso de instalación, haz que la descarga de instalación confíe en la CA de tu proxy corporativo:5693. **Verifica si hay interferencia de un proxy o firewall**: los proxies corporativos que realizan inspección TLS pueden causar estos errores, incluidos `unable to get local issuer certificate`, `unable to verify the first certificate` y `SELF_SIGNED_CERT_IN_CHAIN`. Haz que la descarga de instalación confíe en la CA de tu proxy corporativo:

570 570 

571 > [tab] macOS/Linux571 > [tab] macOS/Linux

572 >572 >

573 > Establece `CURL_CA_BUNDLE` para las descargas con `curl` del script de instalación, y [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/es/network-config#custom-ca-certificates) para el comando `claude install` que el script ejecuta después. Pide a tu equipo de TI un archivo PEM con el certificado CA raíz de tu proxy si no lo tienes. Este ejemplo establece ambas variables en el archivo CA de tu proxy y ejecuta el script en la misma terminal:

574 >

573 > ```bash theme={null}575 > ```bash theme={null}

574 > curl --cacert /path/to/corporate-ca.pem -fsSL https://claude.ai/install.sh | bash576 > export CURL_CA_BUNDLE=/path/to/corporate-ca.pem

577 > export NODE_EXTRA_CA_CERTS=/path/to/corporate-ca.pem

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

575 > ```579 > ```

580 >

581 > Si la instalación aún falla con uno de esos errores de certificado, pide a tu equipo de TI un archivo que contenga tanto los certificados raíz públicos como la cadena CA completa de tu proxy. Luego establece ambas variables en ese archivo.

576 582 

577 > [tab] Windows PowerShell583 > [tab] Windows PowerShell

578 >584 >


596 > $env:NODE_EXTRA_CA_CERTS = 'C:\path\to\corporate-ca.pem'602 > $env:NODE_EXTRA_CA_CERTS = 'C:\path\to\corporate-ca.pem'

597 > ```603 > ```

598 604 

599 Pide a tu equipo de TI el archivo de certificado si no lo tienes. También puedes intentar en una conexión directa para confirmar que el proxy es la causa.

600 

6014. **En Windows, evita las verificaciones de revocación bloqueadas**. Los errores `CRYPT_E_NO_REVOCATION_CHECK (0x80092012)` y `CRYPT_E_REVOCATION_OFFLINE (0x80092013)` significan que curl accedió al servidor pero tu red bloquea la consulta de revocación de certificados, algo común detrás de firewalls corporativos. Si el comando que falla es el `curl` que descarga `install.cmd`, ejecútalo nuevamente desde CMD agregando `--ssl-revoke-best-effort`:6054. **En Windows, evita las verificaciones de revocación bloqueadas**. Los errores `CRYPT_E_NO_REVOCATION_CHECK (0x80092012)` y `CRYPT_E_REVOCATION_OFFLINE (0x80092013)` significan que curl accedió al servidor pero tu red bloquea la consulta de revocación de certificados, algo común detrás de firewalls corporativos. Si el comando que falla es el `curl` que descarga `install.cmd`, ejecútalo nuevamente desde CMD agregando `--ssl-revoke-best-effort`:

602 ```batch theme={null}606 ```batch theme={null}

603 curl --ssl-revoke-best-effort -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd607 curl --ssl-revoke-best-effort -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd


610 614 

611### `Failed to fetch version from downloads.claude.ai`615### `Failed to fetch version from downloads.claude.ai`

612 616 

613El instalador no pudo acceder al servidor de descarga. Esto normalmente significa que `downloads.claude.ai` está bloqueado en tu red. Consulta [Verifica la conectividad de red](#check-network-connectivity).617El final del mensaje indica el motivo. Si es un error de certificado como `unable to verify the first certificate`, consulta [Errores de conexión TLS o SSL](#tls-or-ssl-connection-errors). Para cualquier otro motivo, consulta [Verifica la conectividad de red](#check-network-connectivity).

614 618 

615### La conexión se interrumpió mientras se descargaba la actualización619### La conexión se interrumpió mientras se descargaba la actualización

616 620 

workflows.md +10 −4

Details

375 375 

376 Antes de v2.1.305, los agentes completados también podían ejecutarse de nuevo cuando relanzabas un script sin editar cuyos elementos de `pipeline()` o tareas de `parallel()` ejecutaban más de un agente cada uno. Para evitar esas reejecuciones en las nuevas ejecuciones, actualiza Claude Code.376 Antes de v2.1.305, los agentes completados también podían ejecutarse de nuevo cuando relanzabas un script sin editar cuyos elementos de `pipeline()` o tareas de `parallel()` ejecutaban más de un agente cada uno. Para evitar esas reejecuciones en las nuevas ejecuciones, actualiza Claude Code.

377* **Aún en ejecución cuando detuvo**: comienza de nuevo. Detener toda la ejecución no cuenta ningún agente como fallido.377* **Aún en ejecución cuando detuvo**: comienza de nuevo. Detener toda la ejecución no cuenta ningún agente como fallido.

378* **[Falló por un límite de uso](#when-a-run-hits-your-usage-limit) en v2.1.318 o posterior**: se ejecuta de nuevo, y los agentes que se completaron devuelven sus resultados guardados. Si tu script llamó a otro agente después de la falla y ese agente devolvió un resultado, cada agente que el script inicia después del que falló también se ejecuta de nuevo.

378* **Fallido**: se ejecuta de nuevo, y también lo hace cada agente que el script inicia después de él, incluso los que se completaron. Detener un solo agente, seleccionándolo en [`/workflows`](#watch-the-run) y presionando `x`, cuenta como fallido.379* **Fallido**: se ejecuta de nuevo, y también lo hace cada agente que el script inicia después de él, incluso los que se completaron. Detener un solo agente, seleccionándolo en [`/workflows`](#watch-the-run) y presionando `x`, cuenta como fallido.

379 380 

380Ese último caso significa que una falla en el medio de un fan-out reejecutará trabajo que ya se completó. Si un script inicia A, B, C y D en ese orden y B falla, relanzar devuelve A del caché y ejecuta B, C y D de nuevo.381Ese último caso significa que un agente **Fallido** en medio de un fan-out reejecuta trabajo que ya terminó. Si un script inicia A, B, C y D en ese orden y B queda como **Fallido**, relanzar devuelve A de la caché y ejecuta B, C y D de nuevo.

381 382 

382Si editas un script que iniciaba A, B, C y D para que inicie A, C, B y D, el segundo agente en iniciarse ahora es C, donde la ejecución anterior iniciaba B. Relanzar devuelve A de la caché y ejecuta C, B y D de nuevo.383Si editas un script que iniciaba A, B, C y D para que inicie A, C, B y D, el segundo agente en iniciarse ahora es C, donde la ejecución anterior iniciaba B. Relanzar devuelve A de la caché y ejecuta C, B y D de nuevo.

383 384 


395 396 

396### Cuando una ejecución alcanza su límite de uso397### Cuando una ejecución alcanza su límite de uso

397 398 

398Cuando un agente alcanza su límite de uso de [claude.ai](https://code.claude.com/docs/es/interactive-mode.md#wait-for-a-usage-limit-to-reset), la ejecución se pausa en lugar de fallar ese agente: los agentes que alcanzan el límite esperan el reinicio, y no comienzan nuevos agentes. Poco después de que se reinicia el límite, los agentes en espera se ejecutan de nuevo y la ejecución continúa por su cuenta. Requiere Claude Code v2.1.271 o posterior; en versiones anteriores, los agentes afectados fallan.399Cuando un agente alcanza tu [límite de uso](https://code.claude.com/docs/es/interactive-mode.md#wait-for-a-usage-limit-to-reset) de claude.ai, la ejecución se pausa en lugar de hacer fallar a ese agente. Los agentes que alcanzaron el límite esperan el reinicio, y no se inician nuevos agentes. Poco después de que se reinicia el límite, los agentes en espera se ejecutan de nuevo y la ejecución continúa por su cuenta. Requiere Claude Code v2.1.271 o posterior, o [v2.1.319 o posterior](https://code.claude.com/docs/es/desktop.md#claude-code-version-in-the-code-tab) en la [pestaña Code](https://code.claude.com/docs/es/desktop.md) de Desktop. En versiones anteriores, los agentes afectados fallan.

399 400 

400Mientras la ejecución espera, su línea de progreso en el panel de tareas y el encabezado [`/workflows`](#watch-the-run) muestran cuándo se reinicia el límite.401Mientras la ejecución espera, su línea de progreso en el panel de tareas y el encabezado de [`/workflows`](#watch-the-run) muestran cuándo se reinicia el límite. En la pestaña Code, la ejecución muestra una línea como `Paused at usage limit · continues after 3:45 PM if the app stays open`. Mantén la aplicación abierta.

401 402 

402La ejecución se pausa solo cuando se cumplen todas estas condiciones; cuando una no se cumple, el agente afectado falla en su lugar:403La ejecución se pausa solo cuando se cumplen todas estas condiciones; cuando una no se cumple, el agente afectado falla en su lugar:

403 404 

404* La sesión es interactiva e inició sesión con una suscripción de claude.ai. Una ejecución no se pausa en [modo no interactivo](https://code.claude.com/docs/es/headless.md) con `claude -p` o el [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md), en una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md), o en una sesión de compañero de [Remote Control](https://code.claude.com/docs/es/remote-control.md) o [equipo de agentes](https://code.claude.com/docs/es/agent-teams.md).405* La sesión está autenticada con una suscripción de claude.ai sin [facturación basada en uso](https://code.claude.com/docs/es/interactive-mode.md#start-a-wait-yourself), y es uno de estos tipos de sesión:

406 * Una sesión interactiva de terminal. Una ejecución no se pausa en [modo no interactivo](https://code.claude.com/docs/es/headless.md) con `claude -p` o el [Agent SDK](https://code.claude.com/docs/es/agent-sdk/overview.md), en una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md), ni en una sesión de compañero de [Remote Control](https://code.claude.com/docs/es/remote-control.md) o de [equipo de agentes](https://code.claude.com/docs/es/agent-teams.md).

407 * Una sesión local que iniciaste en la pestaña Code. Una ejecución no se pausa en una sesión de SSH, WSL, [Dispatch](https://code.claude.com/docs/es/desktop.md#sessions-from-dispatch) o [tarea programada](https://code.claude.com/docs/es/desktop-scheduled-tasks.md), en una iniciada desde Remote Control o a través de un [lanzador corporativo](https://code.claude.com/docs/es/corporate-launcher.md), ni mientras [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/es/env-vars#variables) esté establecida.

405* [`autoContinueAtUsageLimit`](https://code.claude.com/docs/es/settings-reference#autocontinueatusagelimit) está activado, la misma configuración que permite que la sesión misma [espere a que se reinicie un límite de uso](https://code.claude.com/docs/es/interactive-mode.md#wait-for-a-usage-limit-to-reset). Si lo desactiva durante una espera, la espera termina y los agentes en espera fallan.408* [`autoContinueAtUsageLimit`](https://code.claude.com/docs/es/settings-reference#autocontinueatusagelimit) está activado, la misma configuración que permite que la sesión misma [espere a que se reinicie un límite de uso](https://code.claude.com/docs/es/interactive-mode.md#wait-for-a-usage-limit-to-reset). Si lo desactiva durante una espera, la espera termina y los agentes en espera fallan.

409* En la pestaña Code, la casilla **Auto-continue when limits reset** de una [tarjeta de límite de sesión](https://code.claude.com/docs/es/errors.md#youve-hit-your-session-limit) está marcada, como lo está de forma predeterminada. Si la desmarcas, las ejecuciones en tus sesiones de la pestaña Code dejan de pausarse, a menos que la configuración administrada establezca `autoContinueAtUsageLimit` en `true`.

406* El límite se reinicia dentro de 24 horas. Un límite semanal puede reiniciarse más adelante.410* El límite se reinicia dentro de 24 horas. Un límite semanal puede reiniciarse más adelante.

407* La ejecución aún no ha esperado dos veces. Cuando alcanza el límite por tercera vez, el agente falla.411* La ejecución aún no ha esperado dos veces. Cuando alcanza el límite por tercera vez, el agente falla.

408 412 

413Para terminar una ejecución cuyos agentes fallaron por el límite, pide a Claude que [relance el workflow](#which-agents-run-again) después de que se reinicie el límite.

414 

409### Cuando un agente se estanca y se reinicia415### Cuando un agente se estanca y se reinicia

410 416 

411Un agente cuya salida deja de llegar durante suficiente tiempo comienza de nuevo desde el mismo prompt. En [`/workflows`](#watch-the-run), su nombre recibe un sufijo `(retry 1)` y su detalle muestra `attempt 2 (stalled)`. El reinicio es automático, así que no necesitas hacer nada.417Un agente cuya salida deja de llegar durante suficiente tiempo comienza de nuevo desde el mismo prompt. En [`/workflows`](#watch-the-run), su nombre recibe un sufijo `(retry 1)` y su detalle muestra `attempt 2 (stalled)`. El reinicio es automático, así que no necesitas hacer nada.

worktrees.md +1 −1

Details

253 253 

254Un worktree obtiene sus propios archivos y rama, pero comparte lo siguiente con el checkout principal:254Un worktree obtiene sus propios archivos y rama, pero comparte lo siguiente con el checkout principal:

255 255 

256* **El directorio `.git` del repositorio**: los comandos de git en un worktree escriben en el directorio `.git` compartido del repositorio principal, y el [sandboxing](https://code.claude.com/docs/es/sandboxing.md#filesystem-isolation) permite esas escrituras, por lo que comandos como `git commit` funcionan desde dentro de un worktree con el sandbox habilitado.256* **El directorio `.git` del repositorio**: los comandos de git en un worktree escriben en el directorio `.git` compartido del repositorio principal. Con el [sandbox](https://code.claude.com/docs/es/sandboxing.md#filesystem-isolation) habilitado, comandos como `git commit` funcionan en una sesión ubicada en la raíz del worktree, que es donde `--worktree` la inicia. De forma predeterminada, [fallan con un error de `index.lock` si ejecutas `claude` en un subdirectorio del worktree](https://code.claude.com/docs/es/sandboxing#git-index-lock).

257* **Plugins**: los plugins instalados con [alcance de proyecto](https://code.claude.com/docs/es/plugins/loading.md#find-where-a-plugin-is-enabled) desde el checkout principal también se cargan en worktrees del mismo repositorio, por lo que no necesitas reinstalarlos por worktree.257* **Plugins**: los plugins instalados con [alcance de proyecto](https://code.claude.com/docs/es/plugins/loading.md#find-where-a-plugin-is-enabled) desde el checkout principal también se cargan en worktrees del mismo repositorio, por lo que no necesitas reinstalarlos por worktree.

258* **Aprobaciones de permisos**: elegir "Sí, y no preguntar de nuevo" para un comando Bash en una sesión de worktree guarda la regla en el `.claude/settings.local.json` del checkout principal. La regla se aplica en el checkout principal y en cada otro worktree del repositorio, y sobrevive a la eliminación del worktree.258* **Aprobaciones de permisos**: elegir "Sí, y no preguntar de nuevo" para un comando Bash en una sesión de worktree guarda la regla en el `.claude/settings.local.json` del checkout principal. La regla se aplica en el checkout principal y en cada otro worktree del repositorio, y sobrevive a la eliminación del worktree.

259 259 

Details

41 41 

42### Qué no cubre ZDR42### Qué no cubre ZDR

43 43 

44ZDR no se extiende a lo siguiente, incluso para organizaciones con ZDR habilitado. Estas características siguen [políticas estándar de retención de datos](https://code.claude.com/docs/es/data-usage.md#data-retention):44ZDR no se extiende a lo siguiente, incluso para organizaciones con ZDR habilitado. Salvo que una fila indique lo contrario, estas características siguen [políticas estándar de retención de datos](https://code.claude.com/docs/es/data-usage.md#data-retention):

45 45 

46| Característica | Detalles |46| Característica | Detalles |

47| - | - |47| - | - |

48| Chat en claude.ai | Las conversaciones de chat a través de la interfaz web de Claude for Enterprise no están cubiertas por ZDR. |48| Chat en claude.ai | Las conversaciones de chat a través de la interfaz web de Claude for Enterprise no están cubiertas por ZDR. |

49| Cowork | Las sesiones de Cowork no están cubiertas por ZDR. |49| Cowork | Las sesiones de Cowork no están cubiertas por ZDR. |

50| Artefactos | Los artefactos en conversaciones de chat y sesiones de Cowork no están cubiertos por ZDR, y se conservan hasta que se eliminan, a menos que tu organización establezca un período de retención para ellos. Los artefactos no están disponibles en Claude Code con ZDR. |

50| Claude Code Analytics | No almacena prompts o respuestas del modelo, pero recopila metadatos de productividad como correos electrónicos de cuenta y estadísticas de uso. Las métricas de contribución no están disponibles para organizaciones ZDR; el [panel de analytics](https://code.claude.com/docs/es/analytics.md) muestra solo métricas de uso. |51| Claude Code Analytics | No almacena prompts o respuestas del modelo, pero recopila metadatos de productividad como correos electrónicos de cuenta y estadísticas de uso. Las métricas de contribución no están disponibles para organizaciones ZDR; el [panel de analytics](https://code.claude.com/docs/es/analytics.md) muestra solo métricas de uso. |

51| Gestión de usuarios y asientos | Los datos administrativos como correos electrónicos de cuenta y asignaciones de asientos se retienen bajo políticas estándar. |52| Gestión de usuarios y asientos | Los datos administrativos como correos electrónicos de cuenta y asignaciones de asientos se retienen bajo políticas estándar. |

52| Integraciones de terceros | Los datos procesados por herramientas de terceros, MCP servers u otras integraciones externas no están cubiertos por ZDR. Revise las prácticas de manejo de datos de esos servicios de forma independiente. |53| Integraciones de terceros | Los datos procesados por herramientas de terceros, MCP servers u otras integraciones externas no están cubiertos por ZDR. Revise las prácticas de manejo de datos de esos servicios de forma independiente. |


60| [Cloud sessions](https://code.claude.com/docs/es/claude-code-on-the-web.md), incluidas las iniciadas desde la [aplicación Desktop](https://code.claude.com/docs/es/desktop.md#cloud-sessions) | Requiere almacenamiento del lado del servidor de datos de sesión, incluido el historial de conversaciones con prompts y completaciones. |61| [Cloud sessions](https://code.claude.com/docs/es/claude-code-on-the-web.md), incluidas las iniciadas desde la [aplicación Desktop](https://code.claude.com/docs/es/desktop.md#cloud-sessions) | Requiere almacenamiento del lado del servidor de datos de sesión, incluido el historial de conversaciones con prompts y completaciones. |

61| [Chat y Cowork unificados](https://support.claude.com/en/articles/17444462-set-up-and-manage-the-new-unified-claude-experience-for-your-enterprise-organization) | Requiere sesiones en la nube. |62| [Chat y Cowork unificados](https://support.claude.com/en/articles/17444462-set-up-and-manage-the-new-unified-claude-experience-for-your-enterprise-organization) | Requiere sesiones en la nube. |

62| [Claude Tag](https://claude.com/docs/claude-tag) | Retiene la memoria del canal y las transcripciones de sesión. |63| [Claude Tag](https://claude.com/docs/claude-tag) | Retiene la memoria del canal y las transcripciones de sesión. |

63| [Artefactos](https://code.claude.com/docs/es/artifacts.md) | Requiere almacenar contenido de página publicado en infraestructura operada por Anthropic. |64| [Artefactos](https://code.claude.com/docs/es/artifacts.md) en Claude Code | Requiere almacenar contenido de página publicado en infraestructura operada por Anthropic. |

65| [Claude Docs](https://support.claude.com/en/articles/16923645-get-started-with-claude-docs) | Requiere almacenar contenido de documentos en infraestructura operada por Anthropic. |

64| Envío de comentarios (`/feedback`, `/bug`, `/share`) | Enviar comentarios envía datos de conversación a Anthropic. |66| Envío de comentarios (`/feedback`, `/bug`, `/share`) | Enviar comentarios envía datos de conversación a Anthropic. |

65| [Control remoto](https://code.claude.com/docs/es/remote-control.md) | Almacena la transcripción de la sesión en servidores de Anthropic para sincronizar la conversación entre dispositivos. |67| [Control remoto](https://code.claude.com/docs/es/remote-control.md) | Almacena la transcripción de la sesión en servidores de Anthropic para sincronizar la conversación entre dispositivos. |

66 68