SpyBara
Go Premium

Documentation 2026-10-08 22:58 UTC to 2026-10-09 01:00 UTC

17 files changed +138 −37. View all changes and history on the product overview
2026
Fri 9 02:00 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

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

147 147 

148<Warning>148<Warning>

149 **Herencia de subagentes:** Un subagente se ejecuta en el modo de permisos de la sesión principal a menos que establezca `permissionMode` en su [`AgentDefinition`](/docs/es/agent-sdk/typescript#agentdefinition) y la sesión principal esté en modo `default`, `dontAsk` o `plan`. Incluso entonces, Claude Code nunca aplica un valor `"bypassPermissions"`. Un subagente se ejecuta en modo `bypassPermissions` solo cuando la sesión principal lo hace. La excepción `bypassPermissions` requiere Claude Code v2.1.267 o posterior.149 **Herencia de subagentes:** Un subagente se ejecuta en el modo de permisos de la sesión principal a menos que establezcas `permissionMode` en su [`AgentDefinition`](/docs/es/agent-sdk/typescript#agentdefinition) y la sesión principal esté en modo `default`, `dontAsk` o `plan`. Incluso entonces, Claude Code nunca aplica un valor `"bypassPermissions"`, y aplica un valor `"auto"` solo cuando el [modo automático está disponible](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) para ese subagente. Un subagente se ejecuta en modo `bypassPermissions` solo cuando la propia sesión principal está en ese modo. La excepción `bypassPermissions` requiere Claude Code v2.1.267 o posterior.

150 150 

151 Los subagentes pueden tener indicaciones del sistema diferentes y un comportamiento menos restringido que su agente principal, por lo que heredar `bypassPermissions` les otorga acceso completo y autónomo al sistema. Las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves) aún se aplican.151 Los subagentes pueden tener indicaciones del sistema diferentes y un comportamiento menos restringido que su agente principal, por lo que heredar `bypassPermissions` les otorga acceso completo y autónomo al sistema. Las [acciones que ningún modo aprueba automáticamente](/docs/es/permission-modes#actions-no-mode-auto-approves) aún se aplican.

152</Warning>152</Warning>

Details

323 Detectar invocación de subagente323 Detectar invocación de subagente

324</h2>324</h2>

325 325 

326Claude invoca subagentes a través de la herramienta Agent. Para detectar cuándo se invoca un subagente, busque bloques `tool_use` donde `name` sea `"Agent"`. Los mensajes desde dentro del contexto de un subagente incluyen un campo `parent_tool_use_id`.326Claude invoca subagentes a través de la herramienta Agent. Para detectar cuándo se invoca un subagente, busca bloques `tool_use` donde `name` sea `"Agent"`.

327 

328Los mensajes desde dentro del contexto de un subagente incluyen un campo `parent_tool_use_id`. En TypeScript, cada mensaje de asistente y de usuario que produce un subagente también incluye [`agent_id`](/docs/es/agent-sdk/typescript#sdkassistantmessage): el `task_id` de los [eventos de tarea](/docs/es/agent-sdk/typescript#sdktaskstartedmessage) de ese subagente. `agent_id` requiere TypeScript Agent SDK v0.3.292 o posterior.

327 329 

328<Note>330<Note>

329 La herramienta aparece como `"Agent"` en bloques `tool_use` pero como `"Task"` en la lista de herramientas `system:init`. Antes de Claude Code v2.1.63, los bloques `tool_use` también la nombraban `"Task"`. Para mantener la detección funcionando en todas las versiones del SDK, haga coincidir ambos valores en `block.name`.331 La herramienta aparece como `"Agent"` en bloques `tool_use` pero como `"Task"` en la lista de herramientas `system:init`. Antes de Claude Code v2.1.63, los bloques `tool_use` también la nombraban `"Task"`. Para mantener la detección funcionando en todas las versiones del SDK, haga coincidir ambos valores en `block.name`.


331 333 

332La estructura del mensaje difiere entre SDKs. En Python, accede a los bloques de contenido directamente a través de `message.content`. En TypeScript, `SDKAssistantMessage` envuelve el mensaje de la API de Claude, por lo que accede al contenido a través de `message.message.content`.334La estructura del mensaje difiere entre SDKs. En Python, accede a los bloques de contenido directamente a través de `message.content`. En TypeScript, `SDKAssistantMessage` envuelve el mensaje de la API de Claude, por lo que accede al contenido a través de `message.message.content`.

333 335 

334Este ejemplo itera a través de mensajes transmitidos, registrando cuándo se invoca un subagente y cuándo los mensajes posteriores se originan desde dentro del contexto de ejecución de ese subagente.336Este ejemplo itera a través de mensajes transmitidos, registrando cuándo se invoca un subagente y cuándo los mensajes posteriores se originan desde dentro del contexto de ejecución de ese subagente. La versión de TypeScript también registra el `agent_id` de cada mensaje de subagente que lo incluye.

335 337 

336<CodeGroup>338<CodeGroup>

337 ```python Python theme={null}339 ```python Python theme={null}


403 // Check if this message is from within a subagent's context405 // Check if this message is from within a subagent's context

404 if (msg.parent_tool_use_id) {406 if (msg.parent_tool_use_id) {

405 console.log(" (running inside subagent)");407 console.log(" (running inside subagent)");

408 // On assistant and user messages, agent_id matches the task_id

409 // on that subagent's task_started and other task events

410 if (msg.agent_id) {

411 console.log(` agent_id: ${msg.agent_id}`);

412 }

406 }413 }

407 414 

408 if ("result" in message) {415 if ("result" in message) {

Details

1561 parent_tool_use_id: string | null;1561 parent_tool_use_id: string | null;

1562 error?: SDKAssistantMessageError;1562 error?: SDKAssistantMessageError;

1563 aborted?: true;1563 aborted?: true;

1564 agent_id?: string;

1564 timestamp?: string;1565 timestamp?: string;

1565 context_usage?: SDKContextUsage;1566 context_usage?: SDKContextUsage;

1566 user_message_uuid?: string;1567 user_message_uuid?: string;


1580 1581 

1581`aborted` es `true` cuando una interrupción o cancelación truncó el mensaje del asistente antes de que el stream se completara: el mensaje no tiene `stop_reason` y el contenido puede terminar a mitad de una palabra. El campo está ausente en los mensajes que se completaron normalmente. Requiere Agent SDK v0.3.214 o posterior.1582`aborted` es `true` cuando una interrupción o cancelación truncó el mensaje del asistente antes de que el stream se completara: el mensaje no tiene `stop_reason` y el contenido puede terminar a mitad de una palabra. El campo está ausente en los mensajes que se completaron normalmente. Requiere Agent SDK v0.3.214 o posterior.

1582 1583 

1584`agent_id` identifica el subagente que produjo el mensaje y está ausente en los mensajes del hilo principal. El valor es igual al `task_id` del evento [`task_started`](#sdktaskstartedmessage) de ese subagente y de sus demás eventos de tarea, y no cambia cuando el subagente se [reanuda](/docs/es/agent-sdk/subagents#resume-subagents). El campo requiere Agent SDK v0.3.292 o posterior.

1585 

1586Asocia los mensajes de un subagente con sus eventos de tarea mediante `agent_id`, en lugar de emparejar el `parent_tool_use_id` de un mensaje con el `tool_use_id` de un evento de tarea. Cuando una llamada a herramienta reanuda el subagente, los eventos de tarea llevan el `tool_use_id` de esa llamada, mientras que los mensajes conservan el `parent_tool_use_id` de la llamada a herramienta que inició el subagente por primera vez, así que ambos ya no coinciden.

1587 

1583Claude Code establece `user_message_uuid` y `user_message_uuids` en el primer mensaje del asistente del turno, bajo las condiciones descritas en [`user_message_uuid`](#user_message_uuid). Cuando Claude Code vuelve a ejecutar un turno que un reinicio interrumpió, los mensajes del asistente de la nueva ejecución que llevan esos campos también llevan [`resume_reason`](#resume_reason).1588Claude Code establece `user_message_uuid` y `user_message_uuids` en el primer mensaje del asistente del turno, bajo las condiciones descritas en [`user_message_uuid`](#user_message_uuid). Cuando Claude Code vuelve a ejecutar un turno que un reinicio interrumpió, los mensajes del asistente de la nueva ejecución que llevan esos campos también llevan [`resume_reason`](#resume_reason).

1584 1589 

1585`timestamp` es la hora ISO 8601 en que el contenido del mensaje terminó de generarse en el proceso que lo produjo. El valor proviene del reloj de esa máquina, así que úsalo solo para mostrarlo y no ordenes los mensajes según él. Un turno de API puede producir varios mensajes del asistente que comparten un `message.id`, cada uno con su propio `timestamp`. Cuando el campo está ausente, recurre a la hora en que recibiste el mensaje.1590`timestamp` es la hora ISO 8601 en que el contenido del mensaje terminó de generarse en el proceso que lo produjo. El valor proviene del reloj de esa máquina, así que úsalo solo para mostrarlo y no ordenes los mensajes según él. Un turno de API puede producir varios mensajes del asistente que comparten un `message.id`, cada uno con su propio `timestamp`. Cuando el campo está ausente, recurre a la hora en que recibiste el mensaje.


1597 type: "user";1602 type: "user";

1598 uuid?: UUID;1603 uuid?: UUID;

1599 session_id?: string;1604 session_id?: string;

1605 agent_id?: string;

1600 message: MessageParam; // From Anthropic SDK1606 message: MessageParam; // From Anthropic SDK

1601 pasted_content?: MessageParam["content"][];1607 pasted_content?: MessageParam["content"][];

1602 parent_tool_use_id: string | null;1608 parent_tool_use_id: string | null;


1636};1642};

1637```1643```

1638 1644 

1645Un mensaje de usuario que produce un subagente, como el `tool_result` de una de sus propias llamadas a herramientas, lleva `agent_id`. Consulta [`SDKAssistantMessage`](#sdkassistantmessage), que define el campo y su requisito de versión.

1646 

1639En un mensaje que lleva un bloque `tool_result`, `tool_use_result` es el objeto de salida estructurada de la herramienta y no el texto enviado al modelo. Su forma depende de la herramienta nombrada por el bloque `tool_use` correspondiente, por lo que el campo tiene el tipo `unknown`; las formas integradas se enumeran en [Tipos de salida de herramientas](#tool-output-types). Estos resultados requieren un manejo más allá de su forma listada:1647En un mensaje que lleva un bloque `tool_result`, `tool_use_result` es el objeto de salida estructurada de la herramienta y no el texto enviado al modelo. Su forma depende de la herramienta nombrada por el bloque `tool_use` correspondiente, por lo que el campo tiene el tipo `unknown`; las formas integradas se enumeran en [Tipos de salida de herramientas](#tool-output-types). Estos resultados requieren un manejo más allá de su forma listada:

1640 1648 

1641* La herramienta `Agent`: `tool_use_result` es [`AgentOutput`](#agent-2). Renderiza a partir de él en lugar de analizar el texto de `tool_result`. El `content` de un resultado `completed` contiene el informe del subagente o, para un subagente cuyo informe pasa por una llamada a la herramienta `SubagentHandback`, una nota breve sobre esa entrega en lugar del informe. En [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) en Claude Code v2.1.271 o posterior, todo subagente que produce un resultado `completed` informa de esa manera a menos que sea un [fork](/docs/es/sub-agents#fork-the-current-conversation), y Claude recibe el informe como un mensaje separado del subagente.1649* La herramienta `Agent`: `tool_use_result` es [`AgentOutput`](#agent-2). Renderiza a partir de él en lugar de analizar el texto de `tool_result`. El `content` de un resultado `completed` contiene el informe del subagente o, para un subagente cuyo informe pasa por una llamada a la herramienta `SubagentHandback`, una nota breve sobre esa entrega en lugar del informe. En [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) en Claude Code v2.1.271 o posterior, todo subagente que produce un resultado `completed` informa de esa manera a menos que sea un [fork](/docs/es/sub-agents#fork-the-current-conversation), y Claude recibe el informe como un mensaje separado del subagente.


1992 `SDKPartialAssistantMessage`2000 `SDKPartialAssistantMessage`

1993</h3>2001</h3>

1994 2002 

1995Mensaje parcial en streaming (solo cuando `includePartialMessages` es true). El campo `parent_tool_use_id` siempre es `null`: los eventos de streaming se emiten solo para la sesión principal. Para atribuir contenido a subagentes, usa los mensajes completos, que llevan `parent_tool_use_id`, o habilita [`forwardSubagentText`](#options) para recibir el texto y el pensamiento de los subagentes como mensajes completos.2003Mensaje parcial en streaming (solo cuando `includePartialMessages` es true).

2004 

2005El campo `parent_tool_use_id` siempre es `null`: los eventos de stream se emiten solo para la sesión principal. Para atribuir a subagentes, usa los mensajes completos, que llevan [`agent_id`](#sdkassistantmessage) y `parent_tool_use_id`, o habilita [`forwardSubagentText`](#options) para recibir el texto y el pensamiento de los subagentes como mensajes completos.

1996 2006 

1997```typescript theme={null}2007```typescript theme={null}

1998type SDKPartialAssistantMessage = {2008type SDKPartialAssistantMessage = {


5774 task_type?: string;5784 task_type?: string;

5775 is_backgrounded?: boolean;5785 is_backgrounded?: boolean;

5776 spawn_depth?: number;5786 spawn_depth?: number;

5787 parent_task_id?: string;

5777 ambient?: boolean;5788 ambient?: boolean;

5778 uuid: UUID;5789 uuid: UUID;

5779 session_id: string;5790 session_id: string;


5791 5802 

5792Un [subagente reanudado](/docs/es/agent-sdk/subagents#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`.5803Un [subagente reanudado](/docs/es/agent-sdk/subagents#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`.

5793 5804 

5805`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:

5806 

5807* El hilo principal lanzó la tarea

5808* Claude Code ya no rastrea la tarea padre

5809* Un [compañero de equipo](/docs/es/agent-teams) o un agente dentro de un flujo de trabajo lanzó la tarea

5810 

5811La 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.

5812 

5794<h3 id="sdktaskprogressmessage">5813<h3 id="sdktaskprogressmessage">

5795 `SDKTaskProgressMessage`5814 `SDKTaskProgressMessage`

5796</h3>5815</h3>


5847 `SDKBackgroundTasksChangedMessage`5866 `SDKBackgroundTasksChangedMessage`

5848</h3>5867</h3>

5849 5868 

5850Se 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` o `ambient` de una tarea.5869Se 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 el campo `parent_task_id` de cada entrada, consulta [`SDKTaskStartedMessage`](#sdktaskstartedmessage), que lo define junto con su requisito de versión.

5851 5870 

5852El 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.5871El 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.

5853 5872 

5854El orden relativo a esos eventos por tarea no está especificado, así que no correlaciones los dos flujos.5873Cuando 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.

5855 5874 

5856No 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.5875No 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.

5857 5876 


5868 task_type: string;5887 task_type: string;

5869 subagent_type?: string;5888 subagent_type?: string;

5870 description: string;5889 description: string;

5890 parent_task_id?: string;

5871 ambient?: boolean;5891 ambient?: boolean;

5872 }[];5892 }[];

5873 uuid: UUID;5893 uuid: UUID;

artifacts.md +38 −10

Details

51Build a dashboard artifact of last week's deploy failures by service and keep it updated as you investigate.51Build a dashboard artifact of last week's deploy failures by service and keep it updated as you investigate.

52```52```

53 53 

54A menos que nombre una ubicación, Claude escribe la página en un archivo HTML o Markdown en un directorio temporal fuera de su proyecto y luego la publica. Fuera del [modo de plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode), un nuevo artefacto que Claude publica en respuesta a un prompt que escribe pasa sin un prompt de permiso o revisión del clasificador, a menos que esa publicación declare 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). En modo de plan, Claude Code le solicita permiso antes de la primera publicación de cada artefacto.54A menos que nombres una ubicación, Claude escribe la página en un archivo HTML o Markdown en un directorio temporal fuera de tu proyecto y luego la publica. El artefacto permanece privado para ti hasta que lo [compartas](#share-an-artifact).

55 55 

56El artefacto permanece privado para usted hasta que lo [comparta](#share-an-artifact). Después de compartirlo públicamente, Claude Code solicita su aprobación una vez por conversación antes de cambiarlo, o en [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) hace que el clasificador revise el cambio.56Después de la primera publicación, Claude imprime la URL y tu navegador se abre en la nueva página.

57 57 

58Si desactivó la [obtención de banderas de características](/docs/es/env-vars#features-that-need-feature-flag-fetching), Claude Code solicita permiso antes de la primera publicación de cada artefacto, o en modo automático hace que el clasificador lo revise.58* **Reabrir la página**: presiona `Ctrl+]` en cualquier momento para reabrir el artefacto más reciente de la sesión

59* **Ver los artefactos de esta sesión**: una etiqueta `⧉` debajo del prompt muestra el nombre del artefacto, o un recuento cuando la sesión tiene varios. En el [renderizado de pantalla completa](/docs/es/fullscreen), haz clic en ella para abrir la lista de [`/artifacts`](#find-an-artifact-again)

60* **Evitar que se abra el navegador**: establece `CLAUDE_CODE_ARTIFACT_AUTO_OPEN=0` en tu entorno

61* **Remote Control**: si enviaste el prompt a través de [Remote Control](/docs/es/remote-control) desde claude.ai, Claude Desktop o la aplicación móvil de Claude, no se abre ninguna pestaña en la máquina que ejecuta la sesión. El navegador se abre allí la próxima vez que Claude publica el artefacto desde un prompt que escribes en la terminal

59 62 

60Después de la primera publicación, Claude imprime la URL y su navegador se abre a la nueva página. Si envió el prompt a través de [Remote Control](/docs/es/remote-control) desde claude.ai, Claude Desktop o la aplicación móvil de Claude, no se abre ninguna pestaña en la máquina que ejecuta la sesión. El navegador se abre allí la próxima vez que Claude publica el artefacto desde un prompt que escribe en la terminal. Presione `Ctrl+]` en cualquier momento para reabrir el artefacto más reciente de la sesión.63Claude elige el título del artefacto y un icono de pestaña del navegador que coincida con lo que es la página, como un gráfico o un calendario. El título aparece en tu [galería de artefactos](#share-an-artifact) en claude.ai y en los enlaces compartidos. Pide a Claude un título o icono de pestaña específico si deseas uno.

61 64 

62Claude elige el título del artefacto y un emoji, y ambos aparecen en su [galería de artefactos](#share-an-artifact) en claude.ai y en enlaces compartidos. Claude también puede elegir un icono de pestaña del navegador que coincida con lo que es la página, como un gráfico o un calendario. Pida a Claude un título, emoji o icono de pestaña específico si desea uno.65Si Claude responde que no puede publicar, o escribe un archivo HTML local sin un enlace, los artefactos no están habilitados para tu sesión. Verifica los requisitos de [Disponibilidad](#availability). Si la terminal muestra `Artifacts need a claude.ai login`, consulta [la entrada de ese error](/docs/es/errors#artifacts-need-a-claude-ai-login) para saber cómo iniciar sesión.

63 66 

64Para evitar que el navegador se abra automáticamente cuando se publica un nuevo artefacto, establezca `CLAUDE_CODE_ARTIFACT_AUTO_OPEN=0` en su entorno.67<h3 id="when-claude-code-asks-before-publishing">

68 Cuándo Claude Code pregunta antes de publicar

69</h3>

70 

71Un nuevo artefacto que Claude publica en respuesta a un prompt que escribes pasa sin una solicitud de permiso ni revisión del clasificador. En estos casos, Claude Code te pregunta primero o, en [modo automático](/docs/es/permission-modes#eliminate-prompts-with-auto-mode), hace que el clasificador revise la publicación:

65 72 

66Si Claude responde que no puede publicar, o escribe un archivo HTML local sin un enlace, la herramienta no está habilitada para su sesión. Verifique los requisitos de [Disponibilidad](#availability).73| Cuándo | Qué hace Claude Code |

74| :- | :- |

75| La sesión está en [modo plan](/docs/es/permission-modes#analyze-before-you-edit-with-plan-mode) | Pregunta antes de la primera publicación de cada artefacto |

76| 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 |

77| Compartiste el artefacto públicamente | Pregunta una vez por conversación antes de cambiarlo |

78| Desactivaste la [obtención de banderas de características](/docs/es/env-vars#features-that-need-feature-flag-fetching) | Pregunta antes de la primera publicación de cada artefacto |

79| Claude publica en un turno que inició una [tarea programada](/docs/es/scheduled-tasks) ejecutada en tu sesión, en lugar de un prompt que escribiste | Pregunta antes de la primera publicación de cada artefacto |

80| 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 |

81 

82Claude lee archivos en los [directorios de trabajo](/docs/es/permissions#working-directories) de tu sesión, y en el directorio temporal donde escribe las páginas, sin preguntar. Para permitir que Claude publique desde otra carpeta sin la solicitud, agrega la carpeta como directorio de trabajo con [`--add-dir`](/docs/es/cli-reference#cli-flags) al iniciar o con `/add-dir` durante la sesión.

67 83 

68<h2 id="update-an-artifact">84<h2 id="update-an-artifact">

69 Actualizar un artefacto85 Actualizar un artefacto


87 Encontrar un artefacto nuevamente103 Encontrar un artefacto nuevamente

88</h2>104</h2>

89 105 

90Ejecute `/artifacts` en Claude Code para enumerar todos los artefactos que posee y todos los artefactos compartidos con usted. Seleccione uno y presione `o` para abrirlo en su navegador o `c` para copiar su enlace. Presione `Enter` para adjuntarlo a la sesión actual; antes de v2.1.216, `Enter` lo abría en su navegador. Claude Code lee la lista de su cuenta claude.ai, por lo que funciona en una nueva sesión y después de `/clear`, cuando el enlace se ha desplazado fuera de la terminal. Requiere Claude Code v2.1.208 o posterior.106Ejecuta `/artifacts` en Claude Code para enumerar los artefactos que posees y los que se compartieron contigo. Los artefactos de la sesión actual aparecen primero, bajo **This session**. Requiere Claude Code v2.1.208 o posterior.

107 

108Selecciona un artefacto y luego presiona una de estas teclas:

109 

110* **`Enter`**: lo abre en tu navegador cuando ya está adjunto a la sesión actual, y lo adjunta cuando no lo está. Antes de v2.1.216, `Enter` lo abría en tu navegador

111* **`o`**: lo abre en tu navegador

112* **`c`**: copia su enlace

113 

114Claude Code lee la lista de tu cuenta de claude.ai, por lo que funciona en una nueva sesión y después de `/clear`, cuando el enlace se ha desplazado fuera de la terminal.

91 115 

92<h2 id="share-an-artifact">116<h2 id="share-an-artifact">

93 Compartir un artefacto117 Compartir un artefacto


110 134 

111Un editor publica nuevas versiones de la misma manera que usted [actualiza el artefacto desde otra sesión](#update-an-artifact): le proporciona a Claude la URL del artefacto, o lo adjunta desde [`/artifacts`](#find-an-artifact-again), y Claude extrae el contenido actual y lo republica con sus cambios. Todos los que tengan la página abierta ven cada actualización en vivo.135Un editor publica nuevas versiones de la misma manera que usted [actualiza el artefacto desde otra sesión](#update-an-artifact): le proporciona a Claude la URL del artefacto, o lo adjunta desde [`/artifacts`](#find-an-artifact-again), y Claude extrae el contenido actual y lo republica con sus cambios. Todos los que tengan la página abierta ven cada actualización en vivo.

112 136 

137Si un editor publica mientras Claude tiene una copia anterior de la página, Claude Code rechaza una publicación basada en esa copia. Claude entonces fusiona sus cambios sobre la versión más reciente y vuelve a publicar.

138 

113<h2 id="read-an-artifact-shared-with-you">139<h2 id="read-an-artifact-shared-with-you">

114 Leer un artefacto compartido con usted140 Leer un artefacto compartido con usted

115</h2>141</h2>


168 194 

169Claude 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.195Claude 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.

170 196 

171Ejecute `/tasks` para ver cada artefacto que su sesión está observando, listado como una tarea de actualizaciones en vivo. Puede evitar que Claude responda por su cuenta de cualquiera de estas maneras:197Ejecuta `/tasks` para ver los artefactos que tu sesión está observando. `/tasks` agrupa las observaciones que Claude Code inició por su cuenta en la fila **System tasks**. Presiona `Enter` en esa fila para listarlas. Una observación que le pediste a Claude que iniciara aparece en **Monitors**.

198 

199Puedes evitar que Claude responda por su cuenta de cualquiera de estas maneras:

172 200 

173* **Presione Ctrl+C una vez en un símbolo del sistema inactivo**: Claude pausa la respuesta en cada artefacto que su sesión está observando. Las respuestas comienzan de nuevo después de que envíe su siguiente mensaje.201* **Presione Ctrl+C una vez en un símbolo del sistema inactivo**: Claude pausa la respuesta en cada artefacto que su sesión está observando. Las respuestas comienzan de nuevo después de que envíe su siguiente mensaje.

174* **Detenga la tarea en `/tasks`**: Claude deja de responder en ese artefacto hasta que le pida que reanude las respuestas allí. Publicar el artefacto de nuevo no inicia las respuestas de nuevo, y la parada aún se aplica cuando reanuda la sesión más tarde.202* **Detenga la tarea en `/tasks`**: Claude deja de responder en ese artefacto hasta que le pida que reanude las respuestas allí. Publicar el artefacto de nuevo no inicia las respuestas de nuevo, y la parada aún se aplica cuando reanuda la sesión más tarde.


391| Autenticación | La sesión está respaldada por una cuenta de claude.ai: inicie sesión con `/login` en la CLI o la aplicación de escritorio. Las sesiones de Claude Tag están autenticadas a través de la identidad del agente, por lo que no se requiere ningún paso. Las sesiones que usan una clave API, [token de puerta de enlace](/docs/es/llm-gateway) o credencial de proveedor de nube no pueden publicar. |419| Autenticación | La sesión está respaldada por una cuenta de claude.ai: inicie sesión con `/login` en la CLI o la aplicación de escritorio. Las sesiones de Claude Tag están autenticadas a través de la identidad del agente, por lo que no se requiere ningún paso. Las sesiones que usan una clave API, [token de puerta de enlace](/docs/es/llm-gateway) o credencial de proveedor de nube no pueden publicar. |

392| Proveedor de modelo | API de Anthropic. No disponible en [Amazon Bedrock](/docs/es/amazon-bedrock), [Google Cloud's Agent Platform](/docs/es/google-vertex-ai) o [Microsoft Foundry](/docs/es/microsoft-foundry). |420| Proveedor de modelo | API de Anthropic. No disponible en [Amazon Bedrock](/docs/es/amazon-bedrock), [Google Cloud's Agent Platform](/docs/es/google-vertex-ai) o [Microsoft Foundry](/docs/es/microsoft-foundry). |

393| Política de organización | Las claves de cifrado administradas por el cliente (CMEK), HIPAA y [Retención de datos cero](/docs/es/zero-data-retention) no están habilitadas para la organización. |421| Política de organización | Las claves de cifrado administradas por el cliente (CMEK), HIPAA y [Retención de datos cero](/docs/es/zero-data-retention) no están habilitadas para la organización. |

394| Superficie | CLI de Claude Code, o la aplicación de escritorio Claude versión 1.13576.0 o posterior. Las sesiones de [Claude Tag](https://claude.com/docs/claude-tag/overview) también pueden publicar artefactos cuando tanto Claude Tag como los artefactos están habilitados para la organización. Deshabilitado de forma predeterminada en el [Agent SDK](/docs/es/agent-sdk/overview), la GitHub Action y contextos de servidor MCP, cuando ejecutas Claude Code con [`-p`](/docs/es/headless) desde tu propia terminal o tus scripts, y cuando [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/es/env-vars) está establecido. |422| Superficie | CLI de Claude Code, o la aplicación de escritorio Claude versión 1.13576.0 o posterior. Las sesiones de [Claude Tag](https://claude.com/docs/claude-tag/overview) también pueden publicar artefactos cuando tanto Claude Tag como los artefactos están habilitados para la organización. Las sesiones servidas por [`claude remote-control`](/docs/es/remote-control) pueden publicar artefactos cuando tú mismo iniciaste la sesión. Requiere Claude Code v2.1.281 o posterior. Deshabilitado de forma predeterminada en el [Agent SDK](/docs/es/agent-sdk/overview), la GitHub Action y contextos de servidor MCP, cuando ejecutas Claude Code con [`-p`](/docs/es/headless) desde tu propia terminal o tus scripts, y cuando [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/es/env-vars) está establecido. |

395 423 

396Si los artefactos están permitidos para su organización proviene de la política de su organización, que Claude Code carga desde `api.anthropic.com`. Cuando Claude Code no puede cargar la política, los artefactos no están disponibles. Cuando usted solicita uno, Claude explica por qué.424Si los artefactos están permitidos para su organización proviene de la política de su organización, que Claude Code carga desde `api.anthropic.com`. Cuando Claude Code no puede cargar la política, los artefactos no están disponibles. Cuando usted solicita uno, Claude explica por qué.

397 425 

errors.md +1 −1

Details

4064 Marketplace is already added from a different source4064 Marketplace is already added from a different source

4065</h3>4065</h3>

4066 4066 

4067Confirmó agregar un marketplace a través de [`/plugin install <plugin> --marketplace <source>`](/docs/es/plugins/install#add-a-marketplace-and-install-in-one-command), y el catálogo que Claude Code obtuvo de esa fuente se llama a sí mismo igual que un marketplace que ya agregó desde una fuente diferente. Claude Code mantiene el marketplace existente en lugar de reemplazarlo, y el plugin no se instala.4067Indicaste una nueva fuente de marketplace con [`--marketplace <source>` en el comando de instalación](/docs/es/plugins/install#add-a-marketplace-and-install-in-one-command), en una sesión o desde tu shell. El catálogo que Claude Code obtuvo de esa fuente tiene el mismo nombre que un marketplace que ya agregaste desde una fuente diferente. Claude Code mantiene el marketplace existente en lugar de reemplazarlo, y el plugin no se instala.

4068 4068 

4069```text theme={null}4069```text theme={null}

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

hooks.md +17 −7

Details

1237 Control de decisiones de SessionStart1237 Control de decisiones de SessionStart

1238</h4>1238</h4>

1239 1239 

1240Claude Code agrega al contexto de Claude la stdout que [trata como texto plano](#exit-code-0). Además de los [campos de salida JSON](#json-output) disponibles para todos los hooks, puedes devolver estos campos específicos del evento:1240Un hook SessionStart puede agregar contexto para Claude, proporcionar el primer mensaje del usuario, establecer el título de la sesión, vigilar archivos y recargar skills. Devuelve el campo correspondiente a cada uno, además de los [campos de salida JSON](#json-output) disponibles para todos los hooks:

1241 1241 

1242| Campo | Descripción |1242| Campo | Descripción |

1243| :- | :- |1243| :- | :- |

1244| `additionalContext` | Cadena agregada al contexto de Claude al inicio de la conversación, antes del primer prompt. Consulta [Agregar contexto para Claude](#add-context-for-claude) para saber cómo se entrega el texto y qué incluir en él |1244| `additionalContext` | Cadena agregada al contexto de Claude al inicio de la conversación, antes del primer prompt. Consulta [Agregar contexto para Claude](#add-context-for-claude) para saber cómo se entrega el texto y qué incluir en él |

1245| `initialUserMessage` | Cadena usada como el primer mensaje del usuario de la sesión. Se aplica en el [modo no interactivo](/docs/es/headless) con el flag `-p`, donde se convierte en el primer turno aunque no se proporcione ningún prompt. Si se proporciona un prompt, este sigue como el siguiente turno. A diferencia de `additionalContext`, que se adjunta a un turno existente, este crea el turno |1245| `initialUserMessage` | Cadena que se usa como primer mensaje del usuario de la sesión, en [modo no interactivo](/docs/es/headless) con el flag `-p`. Se convierte en el primer turno aunque no pases ningún prompt. Un prompt que sí pases va a continuación como el siguiente turno |

1246| `sessionTitle` | Establece el título de la sesión, con el mismo efecto que `/rename`. Úsalo para nombrar sesiones automáticamente a partir de la carpeta de inicio, la rama de git o el nombre del worktree. Se aplica cuando `source` es `"startup"`, `"resume"` o `"fork"`; se ignora en `"clear"` y `"compact"` |1246| `sessionTitle` | Establece el título de la sesión, con el mismo efecto que `/rename`. Se aplica cuando `source` es `"startup"`, `"resume"` o `"fork"` |

1247| `watchPaths` | Array de rutas absolutas que se vigilarán para eventos [FileChanged](#filechanged) durante esta sesión |1247| `watchPaths` | Array de rutas absolutas que se vigilarán para eventos [FileChanged](#filechanged) durante esta sesión |

1248| `reloadSkills` | Booleano. Cuando es `true`, Claude Code vuelve a escanear los directorios de [skills](/docs/es/skills) y de comandos después de que terminan los hooks SessionStart, de modo que los skills que instaló el hook estén disponibles en la misma sesión, a partir del primer prompt |1248| `reloadSkills` | Booleano. Cuando es `true`, Claude Code vuelve a examinar los directorios de [skills](/docs/es/skills) y comandos después de que terminan los hooks SessionStart. Consulta [Recargar los skills que instala un hook](#reload-skills-that-a-hook-installs) |

1249 

1250Esta salida agrega contexto y le pone nombre a la sesión:

1249 1251 

1250```json theme={null}1252```json theme={null}

1251{1253{


1257}1259}

1258```1260```

1259 1261 

1260Como la stdout en texto plano ya llega a Claude en este evento, un hook que solo carga contexto puede imprimir directamente en stdout sin construir JSON. Usa el formato JSON cuando necesites combinar contexto con otros campos como `sessionTitle`.1262Un hook que solo agrega contexto puede imprimirlo sin construir JSON, porque Claude Code agrega al contexto de Claude la [stdout en texto plano](#exit-code-0) de un hook SessionStart.

1263 

1264Si el hook SessionStart de tu plugin proporciona `initialUserMessage` o `sessionTitle`, instala el plugin antes de que se inicie la sesión. Claude Code ignora ambos campos de un plugin que termina de instalarse después de que se hayan ejecutado los hooks SessionStart.

1265 

1266<h4 id="reload-skills-that-a-hook-installs">

1267 Recargar los skills que instala un hook

1268</h4>

1269 

1270Para que los skills que instala un hook SessionStart estén disponibles en la misma sesión, devuelve `reloadSkills`. La detección de skills normalmente se ejecuta antes de que terminen los hooks SessionStart, así que, sin él, los archivos que un hook escribe en `~/.claude/skills/` o `.claude/skills/` pueden faltar cuando se ejecuta el primer prompt.

1261 1271 

1262Usa `reloadSkills` cuando un hook SessionStart instala o actualiza skills. El descubrimiento de skills normalmente se ejecuta antes de que terminen los hooks SessionStart, así que los archivos que el hook escribe en `~/.claude/skills/` o `.claude/skills/` de otro modo solo aparecerían en la siguiente sesión. Este ejemplo sincroniza un repositorio compartido de skills y solicita el nuevo escaneo:1272Este ejemplo sincroniza un repositorio compartido de skills y solicita el nuevo examen:

1263 1273 

1264```bash theme={null}1274```bash theme={null}

1265#!/bin/bash1275#!/bin/bash


1270echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'1280echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'

1271```1281```

1272 1282 

1273La URL del repositorio es un marcador de posición; reemplázala por tu propio repositorio de skills. Con el marcador de posición, la clonación falla e imprime un mensaje `fatal:` en stderr. La stderr de un hook SessionStart que termina con 0 es solo informativa, así que la solicitud `reloadSkills` se aplica de todos modos.1283La URL del repositorio es un marcador de posición. Reemplázala por tu propio repositorio de skills.

1274 1284 

1275<h4 id="persist-environment-variables">1285<h4 id="persist-environment-variables">

1276 Persistir variables de entorno1286 Persistir variables de entorno

Details

91| `-y, --yes` | Acepta el comando de instalación mostrado sin la solicitud `Run this command now?`. Se ignora cuando el comando se ejecuta dentro de una sesión de Claude Code, como desde la herramienta Bash o un hook. Requiere Claude Code v2.1.229 o posterior |91| `-y, --yes` | Acepta el comando de instalación mostrado sin la solicitud `Run this command now?`. Se ignora cuando el comando se ejecuta dentro de una sesión de Claude Code, como desde la herramienta Bash o un hook. Requiere Claude Code v2.1.229 o posterior |

92| `--accept-command <sha256>` | Acepta el comando de instalación mostrado cuyo `sha256` una ejecución anterior de [`--json`](#plugin-json-result) reportó en `shownCommand`, en lugar de `-y`. No se puede combinar con `-y`. Consulta [Aceptar un comando de instalación mostrado](#accept-a-displayed-install-command). Requiere Claude Code v2.1.271 o posterior |92| `--accept-command <sha256>` | Acepta el comando de instalación mostrado cuyo `sha256` una ejecución anterior de [`--json`](#plugin-json-result) reportó en `shownCommand`, en lugar de `-y`. No se puede combinar con `-y`. Consulta [Aceptar un comando de instalación mostrado](#accept-a-displayed-install-command). Requiere Claude Code v2.1.271 o posterior |

93| `--json` | Imprime el resultado como un objeto JSON en la última línea de stdout en lugar del mensaje legible por humanos, para usar en scripts. Consulta [Formato de resultado JSON](#plugin-json-result). Requiere Claude Code v2.1.268 o posterior |93| `--json` | Imprime el resultado como un objeto JSON en la última línea de stdout en lugar del mensaje legible por humanos, para usar en scripts. Consulta [Formato de resultado JSON](#plugin-json-result). Requiere Claude Code v2.1.268 o posterior |

94| `--marketplace <source>` | Instala `<plugin>`, indicado por su nombre simple, desde el marketplace en `<source>`, añadiendo primero el marketplace si aún no lo has añadido. Consulta [Añadir un marketplace e instalar en un solo comando](/docs/es/plugins/install#add-a-marketplace-and-install-in-one-command). Requiere Claude Code v2.1.292 o posterior |

94 95 

95Ejecuta `claude plugin install --help` en tu shell para ver todas las opciones que tu versión soporta.96Ejecuta `claude plugin install --help` en tu shell para ver todas las opciones que tu versión soporta.

96 97 

Details

189 189 

190* **Scope**: alcance de usuario por defecto. Pase `--scope project` o `--scope local` para cambiarlo.190* **Scope**: alcance de usuario por defecto. Pase `--scope project` o `--scope local` para cambiarlo.

191* **When the plugins load**: los plugins que instala se cargan la próxima vez que inicia Claude Code, o cuando ejecuta `/reload-plugins` en una sesión que ya está abierta.191* **When the plugins load**: los plugins que instala se cargan la próxima vez que inicia Claude Code, o cuando ejecuta `/reload-plugins` en una sesión que ya está abierta.

192* **The marketplace must be added first**: en una máquina donde nadie ha abierto una sesión interactiva de Claude Code aún, el marketplace oficial no está registrado, así que un script que instala desde él ejecuta `claude plugin marketplace add anthropics/claude-plugins-official` antes de la instalación.192* **El marketplace en una máquina nueva**: en una máquina donde nadie ha abierto aún una sesión interactiva de Claude Code, el marketplace oficial no está registrado, así que un script que instala desde él ejecuta `claude plugin marketplace add anthropics/claude-plugins-official` antes de la instalación. Consulta [Agregar e instalar desde tu shell](#add-and-install-from-your-shell).

193 193 

194```bash theme={null}194```bash theme={null}

195claude plugin install formatter@your-org --scope project195claude plugin install formatter@your-org --scope project


232 Agregue un marketplace e instale en un comando232 Agregue un marketplace e instale en un comando

233</h3>233</h3>

234 234 

235Para instalar un plugin desde un marketplace que aún no ha agregado, ejecute `/plugin install` en una sesión de Claude Code y nombre la fuente del marketplace con `--marketplace`. Requiere Claude Code v2.1.275 o posterior.235Para instalar un plugin desde un marketplace que aún no has agregado, indica la fuente del marketplace con `--marketplace` en el comando de instalación, en una sesión o desde tu shell. La fuente acepta [las mismas formas que `/plugin marketplace add`](#add-a-marketplace), como GitHub `owner/repo`, una URL git o una ruta local. Da el nombre del plugin por sí solo, sin un sufijo `@marketplace`.

236 

237<h4 id="add-and-install-in-a-session">

238 Agrega e instala en una sesión

239</h4>

240 

241Ejecuta `/plugin install` en una sesión de Claude Code con el plugin y la fuente. Requiere Claude Code v2.1.275 o posterior. En una sesión, la fuente no puede contener espacios.

236 242 

237```text theme={null}243```text theme={null}

238/plugin install deploy-helper --marketplace your-org/plugins244/plugin install deploy-helper --marketplace your-org/plugins

239```245```

240 246 

241La fuente toma [las mismas formas que `/plugin marketplace add`](#add-a-marketplace), como GitHub `owner/repo`, una URL git, o una ruta local, excepto que no puede contener espacios. Dé el nombre del plugin por sí solo, sin un sufijo `@marketplace`.

242 

243Si aún no ha agregado ese marketplace, Claude Code muestra la fuente que resolvió y le pide que confirme antes de agregarlo. Una vez que se agrega el marketplace, los detalles del plugin se abren y elige un [alcance de instalación](#install-a-plugin). Si la fuente coincide con un marketplace que ya ha agregado, Claude Code omite la confirmación y abre los detalles del plugin en ese marketplace.247Si aún no ha agregado ese marketplace, Claude Code muestra la fuente que resolvió y le pide que confirme antes de agregarlo. Una vez que se agrega el marketplace, los detalles del plugin se abren y elige un [alcance de instalación](#install-a-plugin). Si la fuente coincide con un marketplace que ya ha agregado, Claude Code omite la confirmación y abre los detalles del plugin en ese marketplace.

244 248 

249<h4 id="add-and-install-from-your-shell">

250 Agrega e instala desde tu shell

251</h4>

252 

253En tu shell, sin iniciar una sesión, ejecuta `claude plugin install` con el plugin y la fuente. Requiere Claude Code v2.1.292 o posterior.

254 

255```bash theme={null}

256claude plugin install deploy-helper --marketplace your-org/plugins

257```

258 

259El comando de shell agrega el marketplace sin un paso de confirmación. Un marketplace que ya has agregado desde esa fuente se reutiliza. Uno nuevo se agrega bajo las mismas [verificaciones de políticas de la organización](/docs/es/plugins/org#restrict-what-users-can-install) que `claude plugin marketplace add`, y se declara en tu configuración de usuario incluso cuando pasas `--scope project`.

260 

245<h3 id="add-a-private-marketplace">261<h3 id="add-a-private-marketplace">

246 Agregue un marketplace privado262 Agregue un marketplace privado

247</h3>263</h3>

Details

138| `$.mcp.call` | Llama a una herramienta en un servidor MCP conectado, según las reglas de permisos de la sesión |138| `$.mcp.call` | Llama a una herramienta en un servidor MCP conectado, según las reglas de permisos de la sesión |

139| `$.model.complete` | Usa el plan o la clave de API del usuario para llamadas al modelo |139| `$.model.complete` | Usa el plan o la clave de API del usuario para llamadas al modelo |

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

141| `$.session.send` | Envía un mensaje que lee el Claude de otra sesión o de un subagente |141| `$.session.send` | Envía un mensaje que lee el Claude de otra sesión, de un subagente o de un [compañero de equipo](/docs/es/agent-teams) |

142 142 

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

144 144 

Details

159 Enviar y recibir mensajes entre sesiones159 Enviar y recibir mensajes entre sesiones

160</h2>160</h2>

161 161 

162Un mod puede enviar un mensaje de texto sin formato a otra de tus sesiones o a uno de los subagentes de esta sesión, y observar los mensajes que llegan y salen. `$.session.send({ to, text })` envía uno, con la misma entrega que realiza la herramienta SendMessage. `to` es `{ sessionId }` para una sesión, `{ agentId }` para un subagente de `$.agent.list()`, o la dirección en forma de cadena de la que provino un mensaje recibido. La llamada se resuelve en cuanto el mensaje queda en cola, con `{ isDelivered: true }`. Cuando no se entregó nada, se resuelve con `{ isDelivered: false, reason }`, y `reason` indica el motivo.162Un mod puede enviar un mensaje de texto sin formato a otra de tus sesiones, a uno de los subagentes de esta sesión o a un compañero de su [equipo de agentes](/docs/es/agent-teams). También puede observar los mensajes que llegan y salen.

163 

164Para enviar uno, llama a `$.session.send({ to, text })`, que realiza la misma entrega que la herramienta SendMessage. Define `to` según quién recibe el mensaje:

165 

166* **Otra de tus sesiones**: `{ sessionId }`

167* **Un subagente o compañero**: `{ agentId }`, con un id de `$.agent.list()`

168* **El remitente de un mensaje que recibiste**: la dirección en forma de cadena de la que provino ese mensaje

169 

170La llamada se resuelve en cuanto el mensaje queda en cola, con `{ isDelivered: true }`. Cuando no se entregó nada, se resuelve con `{ isDelivered: false, reason }`, y `reason` indica el motivo.

163 171 

164Este hook responde a un comando `/ping`, [registrado como comando](#add-a-command), pidiéndole un estado a la sesión cuyo id escribes después:172Este hook responde a un comando `/ping`, [registrado como comando](#add-a-command), pidiéndole un estado a la sesión cuyo id escribes después:

165 173 

Details

281 281 

282`result.usage` contiene los recuentos de tokens que la API de Claude informa para una solicitud, además del `model` que respondió: `input_tokens`, `output_tokens`, `cache_read_input_tokens` y `cache_creation_input_tokens`. El hook también se ejecuta para las solicitudes de los subagentes, así que comprueba `e.agentId` cuando solo quieras la conversación principal.282`result.usage` contiene los recuentos de tokens que la API de Claude informa para una solicitud, además del `model` que respondió: `input_tokens`, `output_tokens`, `cache_read_input_tokens` y `cache_creation_input_tokens`. El hook también se ejecuta para las solicitudes de los subagentes, así que comprueba `e.agentId` cuando solo quieras la conversación principal.

283 283 

284Para ver las llamadas a herramientas que la propia API ejecutó durante la solicitud, como las llamadas a la [herramienta advisor](/docs/es/advisor), lee `result.serverToolUses`. Claude Code no ejecuta estas llamadas, así que ningún hook `tool.call` o `tool.check` se dispara para ellas. El campo no está presente cuando la respuesta no tiene ese tipo de llamadas, y requiere Claude Code v2.1.290 o posterior.

285 

284<h3 id="hook-the-settings-hook-events">286<h3 id="hook-the-settings-hook-events">

285 Manejar los eventos de los hooks de configuración287 Manejar los eventos de los hooks de configuración

286</h3>288</h3>

Details

209| [`$.ui`](/docs/es/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |209| [`$.ui`](/docs/es/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |

210| [`$.command`](/docs/es/plugins/mods/api#add-a-command) | `register`, `run`, `list` |210| [`$.command`](/docs/es/plugins/mods/api#add-a-command) | `register`, `run`, `list` |

211| [`$.tool`](/docs/es/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |211| [`$.tool`](/docs/es/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |

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

213| [`$.model`](/docs/es/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |213| [`$.model`](/docs/es/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |

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

215| `$.turn` | `abort` |215| `$.turn` | `abort` |


317| Tiempo de espera de `$.process.run` | 30 segundos de forma predeterminada, 10 minutos como máximo |317| Tiempo de espera de `$.process.run` | 30 segundos de forma predeterminada, 10 minutos como máximo |

318| `maxTokens` de `$.model.complete` | 1024 de forma predeterminada, hasta 64,000 o el límite de salida del modelo |318| `maxTokens` de `$.model.complete` | 1024 de forma predeterminada, hasta 64,000 o el límite de salida del modelo |

319| `$.fs.read` y `$.fs.write` | 4 MiB por archivo |319| `$.fs.read` y `$.fs.write` | 4 MiB por archivo |

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

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

321| El `language` o `path` de un `Code`, el `value` de una opción de `Select` o el `module` de un `Client` | 10,000 caracteres. Si alguno es más largo, Claude Code [dibuja su propia versión del sitio](/docs/es/plugins/mods/interface#build-a-tree-from-elements). |322| El `language` o `path` de un `Code`, el `value` de una opción de `Select` o el `module` de un `Client` | 10,000 caracteres. Si alguno es más largo, Claude Code [dibuja su propia versión del sitio](/docs/es/plugins/mods/interface#build-a-tree-from-elements). |

322| El `href` de un `Link` | 2,048 caracteres. Un `href` más largo impide que se dibuje todo el árbol. |323| El `href` de un `Link` | 2,048 caracteres. Un `href` más largo impide que se dibuje todo el árbol. |

Details

110* `returned neither { value } nor { deny }`: un stub para una llamada a la API de mods devolvió un valor sin envolver, lo que hace fallar la prueba110* `returned neither { value } nor { deny }`: un stub para una llamada a la API de mods devolvió un valor sin envolver, lo que hace fallar la prueba

111* `no implementation for` seguido de un nombre: tu mod hizo esa llamada y ningún stub la responde111* `no implementation for` seguido de un nombre: tu mod hizo esa llamada y ningún stub la responde

112 112 

113El kit también exporta mocks en memoria que responden a un espacio de nombres completo por ti. `mock.clock(on)` responde a [`$.clock`](/docs/es/plugins/mods/api#run-work-in-the-background), `mock.store(on, { count: 7 })` responde a `$.store` desde un almacén que empieza con esas entradas, y `mock.env(on, { CI: 'true' })` responde a `$.env.get` desde esas variables. `mock.clock` devuelve un reloj simulado que tu prueba hace avanzar, así que una prueba de un temporizador no espera. `mock.store` no devuelve nada, así que para comprobar lo que guardó tu mod, escribe tú mismo los dos stubs de `store` como lo hace la [prueba de dibujo](#test-a-drawing).113El kit también exporta mocks listos para usar para el reloj, el almacén, las variables de entorno y las filas que se agregan a la conversación:

114 

115* **`mock.clock(on)`**: responde a [`$.clock`](/docs/es/plugins/mods/api#run-work-in-the-background) y devuelve un reloj simulado que tu prueba hace avanzar, así que una prueba de un temporizador no espera.

116* **`mock.store(on, { count: 7 })`**: responde a `$.store` desde un almacén que empieza con esas entradas. No devuelve nada, así que para comprobar lo que guardó tu mod, escribe tú mismo los dos stubs de `store` como lo hace la [prueba de dibujo](#test-a-drawing).

117* **`mock.env(on, { CI: 'true' })`**: responde a `$.env.get` desde esas variables.

118* **`mock.session(on)`**: devuelve una sesión simulada cuyo método `appended()` enumera las filas que tu mod agregó con [`$.session.append`](/docs/es/plugins/mods/reference#session), de la más antigua a la más reciente; requiere Claude Code v2.1.293 o posterior.

114 119 

115<h3 id="follow-the-test-kit’s-rules">120<h3 id="follow-the-test-kit’s-rules">

116 Seguir las reglas del kit de pruebas121 Seguir las reglas del kit de pruebas


168 Consultar lo que devuelve un stub173 Consultar lo que devuelve un stub

169</h3>174</h3>

170 175 

171Cada llamada a la API de mods que hace tu mod en una prueba necesita un stub que responda en lugar de Claude Code, excepto las pocas que el kit responde por sí mismo: las llamadas a [`$.ui.invalidate`](/docs/es/plugins/mods/interface#redraw-when-something-changes) y [`$.state`](/docs/es/plugins/mods/interface#keep-state). Para las llamadas a `$.clock`, usa `mock.clock(on)`, o el `$.clock.now()` de tu mod falla con `no implementation for clock.now`.176Cada llamada a la API de mods que hace tu mod en una prueba necesita un stub que responda en lugar de Claude Code, excepto las pocas que el kit responde por sí mismo: las llamadas a [`$.ui.invalidate`](/docs/es/plugins/mods/interface#redraw-when-something-changes), [`$.state`](/docs/es/plugins/mods/interface#keep-state) y `$.session.append`. Para las llamadas a `$.clock`, usa `mock.clock(on)`, o el `$.clock.now()` de tu mod falla con `no implementation for clock.now`.

172 177 

173Esta tabla enumera las que más usan los mods. La primera columna es la llamada que hace tu mod o el evento que pasa con `next(e)`. La segunda es la función que se pasa a `on` con ese nombre, así que la fila de `$.store.get` se convierte en `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. Un `'...'` en un stub marca texto que debes completar tú:178Esta tabla enumera las que más usan los mods. La primera columna es la llamada que hace tu mod o el evento que pasa con `next(e)`. La segunda es la función que se pasa a `on` con ese nombre, así que la fila de `$.store.get` se convierte en `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. Un `'...'` en un stub marca texto que debes completar tú:

174 179 

Details

129* Agregue el marketplace una vez: `claude plugin marketplace add your-org/your-marketplace`, donde el argumento es un atajo de GitHub `owner/repo`, una URL o una ruta129* Agregue el marketplace una vez: `claude plugin marketplace add your-org/your-marketplace`, donde el argumento es un atajo de GitHub `owner/repo`, una URL o una ruta

130* Instale el plugin: `claude plugin install deploy-helper@your-marketplace`130* Instale el plugin: `claude plugin install deploy-helper@your-marketplace`

131* O haga ambos desde dentro de una sesión: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Requiere Claude Code v2.1.275 o posterior. Consulte [Agregar un marketplace e instalar en un comando](/docs/es/plugins/install#add-a-marketplace-and-install-in-one-command)131* O haga ambos desde dentro de una sesión: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Requiere Claude Code v2.1.275 o posterior. Consulte [Agregar un marketplace e instalar en un comando](/docs/es/plugins/install#add-a-marketplace-and-install-in-one-command)

132* O haz ambos desde el shell en un solo comando: `claude plugin install deploy-helper --marketplace your-org/your-marketplace`. Requiere Claude Code v2.1.292 o posterior

132 133 

133<h3 id="ship-updates-to-users">134<h3 id="ship-updates-to-users">

134 Enviar actualizaciones a los usuarios135 Enviar actualizaciones a los usuarios

Details

163 `Invalid marketplace source format`163 `Invalid marketplace source format`

164</h3>164</h3>

165 165 

166Ejecutó `/plugin marketplace add <source>` o `claude plugin marketplace add <source>`, y Claude Code respondió `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`.166Ejecutaste `/plugin marketplace add <source>`, `claude plugin marketplace add <source>` o `claude plugin install <plugin> --marketplace <source>`, y Claude Code respondió `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`.

167 167 

168Claude Code acepta una fuente en una de estas formas:168Claude Code acepta una fuente en una de estas formas:

169 169 


568 `Marketplace "<name>" is already added from a different source`568 `Marketplace "<name>" is already added from a different source`

569</h3>569</h3>

570 570 

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

572 572 

573El mensaje completo se ve así:573El mensaje completo se ve así:

574 574 

sub-agents.md +3 −1

Details

609El modo de permiso de la conversación principal decide si Claude Code usa el valor que establece:609El modo de permiso de la conversación principal decide si Claude Code usa el valor que establece:

610 610 

611* Cuando la conversación principal está en `bypassPermissions`, `acceptEdits`, o [modo auto](/docs/es/permission-modes#eliminate-prompts-with-auto-mode), el subagente se ejecuta en ese mismo modo y Claude Code ignora el `permissionMode` que establece. Bajo modo auto, el clasificador evalúa las llamadas de herramientas del subagente con las reglas de bloqueo y permiso de la conversación principal. Cuando el subagente termina, el clasificador también revisa su trabajo y su informe final antes de que el informe se entregue, como [Cómo el modo auto maneja subagentes](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) describe.611* Cuando la conversación principal está en `bypassPermissions`, `acceptEdits`, o [modo auto](/docs/es/permission-modes#eliminate-prompts-with-auto-mode), el subagente se ejecuta en ese mismo modo y Claude Code ignora el `permissionMode` que establece. Bajo modo auto, el clasificador evalúa las llamadas de herramientas del subagente con las reglas de bloqueo y permiso de la conversación principal. Cuando el subagente termina, el clasificador también revisa su trabajo y su informe final antes de que el informe se entregue, como [Cómo el modo auto maneja subagentes](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) describe.

612* Cuando la conversación principal está en modo `default`, `dontAsk`, o `plan`, el subagente se ejecuta en el modo de permiso que establece, excepto `bypassPermissions`. Un subagente que declara `bypassPermissions` mantiene el modo de la conversación principal en su lugar. La excepción `bypassPermissions` requiere Claude Code v2.1.267 o posterior.612* Cuando la conversación principal está en modo `default`, `dontAsk` o `plan`, el subagente se ejecuta en el modo de permisos que estableces. En su lugar, mantiene el modo de permisos de la conversación principal en estos casos:

613 * Estableces `bypassPermissions`. La excepción de `bypassPermissions` requiere Claude Code v2.1.267 o posterior.

614 * Estableces `auto` y el [modo automático no está disponible](/docs/es/permission-modes#eliminate-prompts-with-auto-mode) para el subagente, por ejemplo cuando un archivo de configuración establece [`disableAutoMode`](/docs/es/settings-reference#disableautomode) o el modelo del subagente no soporta el modo automático.

613 615 

614`permissionMode` acepta estos valores, y `manual` como alias para `default`:616`permissionMode` acepta estos valores, y `manual` como alias para `default`:

615 617 

vs-code.md +1 −1

Details

596| `attachOpenFile` | `true` | Agregue el archivo que está abierto en el editor a sus mensajes y muéstrelo en el cuadro de mensaje. Cuando está desactivado, solo se agrega el texto seleccionado. Requiere Claude Code v2.1.271 o posterior |596| `attachOpenFile` | `true` | Agregue el archivo que está abierto en el editor a sus mensajes y muéstrelo en el cuadro de mensaje. Cuando está desactivado, solo se agrega el texto seleccionado. Requiere Claude Code v2.1.271 o posterior |

597| `useCtrlEnterToSend` | `false` | Usar Ctrl/Cmd+Enter en lugar de Enter para enviar mensajes |597| `useCtrlEnterToSend` | `false` | Usar Ctrl/Cmd+Enter en lugar de Enter para enviar mensajes |

598| `scrollToBottomOnSend` | `true` | Desplazarse a la conversación hacia el final cuando envía un mensaje. Cuando está desactivado, la conversación permanece donde la dejó. Requiere Claude Code v2.1.275 o posterior |598| `scrollToBottomOnSend` | `true` | Desplazarse a la conversación hacia el final cuando envía un mensaje. Cuando está desactivado, la conversación permanece donde la dejó. Requiere Claude Code v2.1.275 o posterior |

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

600| `enableNewConversationShortcut` | `false` | Habilitar Cmd/Ctrl+N para iniciar una nueva conversación |600| `enableNewConversationShortcut` | `false` | Habilitar Cmd/Ctrl+N para iniciar una nueva conversación |

601| `enableReopenClosedSessionShortcut` | `true` | Usar Cmd/Ctrl+Shift+T para reabrir la pestaña de sesión de Claude cerrada más recientemente. Cuando la última pestaña cerrada no era una sesión de Claude, el atajo ejecuta el comando normal de reapertura de editor cerrado de VS Code en su lugar. |601| `enableReopenClosedSessionShortcut` | `true` | Usar Cmd/Ctrl+Shift+T para reabrir la pestaña de sesión de Claude cerrada más recientemente. Cuando la última pestaña cerrada no era una sesión de Claude, el atajo ejecuta el comando normal de reapertura de editor cerrado de VS Code en su lugar. |

602| `archiveInactiveSessions` | `14` | [Archivar una sesión automáticamente](#resume-past-conversations) después de estos muchos días sin actividad: `1`, `2`, `7` o `14`. Establezca `0` para desactivarlo. Requiere Claude Code v2.1.265 o posterior |602| `archiveInactiveSessions` | `14` | [Archivar una sesión automáticamente](#resume-past-conversations) después de estos muchos días sin actividad: `1`, `2`, `7` o `14`. Establezca `0` para desactivarlo. Requiere Claude Code v2.1.265 o posterior |