> ## Documentation Index
> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Ejecuta llamadas a herramientas desde código con Code Mode

> Prueba Code Mode, una función experimental en la que Claude escribe JavaScript que realiza varias llamadas a herramientas en un solo paso.

Code Mode cambia la forma en que Claude usa sus [herramientas](https://code.claude.com/docs/es/tools-reference.md). Sin Code Mode, Claude solicita llamadas a herramientas como Bash, Read o Edit directamente y lee cada resultado antes de decidir qué hacer a continuación. Con Code Mode, Claude escribe un fragmento de JavaScript que realiza las llamadas a herramientas, y Claude Code ejecuta ese código en tu sesión.

> [!NOTE]
>
> Code Mode es experimental y está desactivado de forma predeterminada. Puede cambiar o eliminarse en cualquier versión. Para compartir comentarios, ejecuta `/feedback`.

## Cómo funciona Code Mode

En una sesión de Code Mode, sigues describiendo tu tarea en un prompt, y Claude escribe JavaScript para llevarla a cabo. Un solo fragmento de código puede ejecutar comandos en paralelo, usar un resultado en la siguiente llamada y devolver la parte de la salida que Claude necesita leer.

Por ejemplo, si le pides a Claude que aumente un límite de reintentos, Claude podría escribir este código para encontrar el archivo, editarlo y ejecutar las pruebas. La última línea devuelve a Claude la ruta del archivo y la salida de las pruebas:

```javascript theme={null}
const files = await $`rg -l "function retryPolicy" src`.text();
const target = files.trim().split("\n")[0];
await edit(target, "maxAttempts: 3", "maxAttempts: 5");
({ edited: target, tests: $`npm test -- retryPolicy`.nothrow() });
```

En la conversación, ves las llamadas a herramientas, como el diff de la edición, y no el código. Para leer el código, presiona `Ctrl+O` para abrir el [visor de transcripciones](https://code.claude.com/docs/es/interactive-mode.md#transcript-viewer). Cada fragmento de código aparece ahí como una fila **Code** contraída, con una indicación de cómo expandirla.

### Cuándo usar Code Mode

Prueba Code Mode en tareas que requieren muchas llamadas a herramientas relacionadas, como:

* Un cambio que se repite en muchos archivos
* Una búsqueda cuyos resultados necesitan filtrarse antes de que Claude los lea
* Varios comandos independientes que pueden ejecutarse al mismo tiempo

### Limitaciones de Code Mode

Antes de activar Code Mode, comprueba que puedes aceptar estas limitaciones:

* **Reanudación**: solo puedes reanudar una sesión de Code Mode en la terminal, con Code Mode activado
* **Modo automático**: el clasificador del modo automático [revisa el código, no cada llamada a herramienta](#permission-checks)
* **Código de larga duración**: a menos que [el código pueda ejecutarse en segundo plano](#long-running-code), esperas a que termine, y se detiene después de diez minutos
* **Hooks**: puedes ver [llamadas a herramientas rechazadas](#tool-call-refused-by-a-hook) cuando un hook `PreToolUse` no puede ejecutarse o se agota su tiempo de espera, y [salida de código bloqueada](#code-output-withheld-by-a-hook) por un hook `UserPromptSubmit`
* **Funciones no disponibles**: no puedes usar [Remote Control](https://code.claude.com/docs/es/remote-control.md), [Claude in Chrome](https://code.claude.com/docs/es/chrome.md) ni [computer use](https://code.claude.com/docs/es/computer-use.md)
* **Mover la sesión**: no puedes mover la sesión a la aplicación de escritorio ni convertirla en una [sesión en segundo plano](https://code.claude.com/docs/es/agent-view.md), y `/fork` no puede iniciar una copia en segundo plano

## Requisitos

* **Versión**: Claude Code v2.1.323 o posterior, en cualquiera de los dos [canales de versiones](https://code.claude.com/docs/es/setup.md#configure-release-channel). Una versión anterior se inicia sin Code Mode, con o sin el motivo `it isn't open to your account yet`
* **Cuenta**: una suscripción a Claude o una cuenta de Console. No puedes usar Code Mode a través de un gateway, Amazon Bedrock, Claude Platform on AWS, Agent Platform de Google Cloud ni Microsoft Foundry
* **Organización**: tu organización no usa la [configuración HIPAA](https://code.claude.com/docs/es/hipaa-setup.md) ni la [retención cero de datos](https://code.claude.com/docs/es/zero-data-retention.md)
* **Modelo**: Claude Opus 5.5, Sonnet 5.5, Haiku 5.5 o Fable 5.2
* **Superficie**: una sesión interactiva de `claude` en una terminal. Code Mode no funciona con `-p`, el Agent SDK, el panel de VS Code, la aplicación de escritorio ni las sesiones en la nube
* **Instalación**: la [compilación nativa](https://code.claude.com/docs/es/setup.md) de Claude Code
* **Windows**: [Git for Windows](https://git-scm.com/downloads/win) está instalado

Tampoco puedes iniciar Code Mode con algunos ajustes activados, como un asistente de clave de API, equipos de agentes, exportación de OpenTelemetry o `DISABLE_TELEMETRY`. Para ver la solución de cada uno, consulta [Code Mode no se inicia](#code-mode-doesnt-start).

## Prueba Code Mode

Activa Code Mode, dale una tarea a Claude y revisa el código que Claude escribió.

**1. Comprueba tu versión**

Ejecuta `claude --version`. Si la versión es anterior a v2.1.323, ejecuta `claude update`. Si estás en el canal `stable` y la actualización no llega a v2.1.323, espera a que `stable` se ponga al día o [cambia a `latest`](https://code.claude.com/docs/es/setup#configure-release-channel).

**2. Inicia Claude Code con Code Mode activado**

Establece la variable de entorno [`CLAUDE_CODE_EXPERIMENTAL_CODE_MODE`](https://code.claude.com/docs/es/env-vars#variables) en `1`. Para probar Code Mode, establécela en tu shell. Para activar Code Mode en cada sesión nueva, establécela en tu configuración de usuario.

> [tab] macOS, Linux, WSL
>
> ```bash theme={null}
> CLAUDE_CODE_EXPERIMENTAL_CODE_MODE=1 claude
> ```

> [tab] Windows PowerShell
>
> ```powershell theme={null}
> $env:CLAUDE_CODE_EXPERIMENTAL_CODE_MODE = "1"
> claude
> ```

> [tab] settings.json
>
> Guarda este bloque `env` en `~/.claude/settings.json` e inicia `claude`:
>
> ```json theme={null}
> {
>   "env": {
>     "CLAUDE_CODE_EXPERIMENTAL_CODE_MODE": "1"
>   }
> }
> ```
>
> Claude Code [ignora esta variable en los archivos de configuración de un proyecto](https://code.claude.com/docs/es/settings-reference.md#variables-claude-code-ignores-in-env), por lo que un repositorio que clones no puede activar Code Mode por ti.

**3. Confirma que quieres Code Mode**

Claude Code te pide que confirmes antes de tu primera sesión de Code Mode. Selecciona **Yes, turn on Code Mode**. Claude Code se reinicia y muestra esta línea cerca de la parte superior de la sesión:

```text theme={null}
Code Mode (experimental) is on · this session can be resumed only with Code Mode on
```

Si ves una línea diferente o ninguna, consulta [Code Mode no se inicia](#code-mode-doesnt-start).

**4. Dale a Claude una tarea con muchas llamadas a herramientas**

En un proyecto que conozcas, envía un prompt como este:

```text theme={null}
Read every Markdown file in this project and list the links that point to local files that don't exist.
```

**5. Lee el código que escribió Claude**

Presiona `Ctrl+O` y expande una fila **Code** para ver el JavaScript detrás de las llamadas a herramientas. Presiona `Ctrl+O` de nuevo para volver a la conversación.

> [!WARNING]
>
> Para reanudar una sesión de Code Mode más tarde, mantén `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` establecida en `1` cuando ejecutes `claude --continue` o `claude --resume`. Con Code Mode desactivado, Claude Code se niega a reanudar la sesión. Las sesiones que iniciaste sin Code Mode se reanudan sin Code Mode, incluso con la variable establecida.

### Desactiva Code Mode

Elimina `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` de tu shell y de `~/.claude/settings.json`, y luego inicia una sesión nueva. También puedes conservar la variable y cambiar su valor a `0` en cualquiera de los dos lugares. Con un `0` en un lugar, Code Mode permanece desactivado aunque establezcas `1` en el otro.

### Bloquea Code Mode para tu organización

Agrega `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` con el valor `0` a tu [configuración administrada](https://code.claude.com/docs/es/managed-settings.md) para que nadie en tu organización pueda usar Code Mode:

```json theme={null}
{
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_CODE_MODE": "0"
  }
}
```

Los usuarios que estén en una sesión de Code Mode permanecen en ella hasta que salgan o reinicien Claude Code. Después de eso, tus usuarios inician sin Code Mode y no pueden reanudar sus sesiones de Code Mode mientras el `0` esté establecido. No puedes activar Code Mode para tus usuarios desde la configuración administrada.

## Permisos y código de larga duración

Tu modo de permisos decide cómo se revisa el código de Claude y si puedes hablar con Claude mientras el código se ejecuta.

### Comprobaciones de permisos

Cada llamada a herramienta que realiza el código de Claude pasa por tus [reglas de permisos](https://code.claude.com/docs/es/permissions.md) `deny` y `ask` y tus [hooks `PreToolUse`](https://code.claude.com/docs/es/hooks#pretooluse). No necesitas cambiar una regla ni un matcher para una herramienta como `Bash`. Además de las reglas y los hooks, un clasificador revisa el código en el modo automático, y tú respondes a las solicitudes en los modos que preguntan:

* **[Modo automático](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode)**: el clasificador revisa cada fragmento de código antes de que se ejecute, no cada llamada a herramienta. No ve los valores calculados en tiempo de ejecución, como una ruta tomada de la salida de una búsqueda, así que mantén reglas o hooks para las llamadas que debas controlar. Aun así, se te puede [pedir confirmación cuando se inicia código nuevo mientras se ejecuta código anterior](#permission-prompt-with-a-countdown)
* **Otros [modos de permisos](https://code.claude.com/docs/es/permission-modes.md)**: el código se inicia sin revisión, y se te pide confirmación para cada llamada a herramienta que te la pediría en ese modo

Para revisar el código en sí, escribe un hook `PreToolUse` que coincida con `REPL`, la herramienta que ejecuta el código de Claude, y lee el JavaScript de `tool_input.code`.

> [!WARNING]
>
> Las reglas de Bash coinciden con el texto del comando, por lo que Claude puede ejecutar un comando denegado [en una forma que la regla no detecta](https://code.claude.com/docs/es/permissions.md#bash-rule-limits), con o sin Code Mode. Para límites que no dependen del texto del comando, consulta [sandboxing](https://code.claude.com/docs/es/sandboxing.md).

### Código de larga duración

Mientras el código ejecuta una compilación o una prueba larga, Claude espera a que termine o lo deja continuar en segundo plano:

* **Esperando**: Claude responde después de que el código termina, y el código se detiene después de diez minutos, incluido el tiempo que pasas en las solicitudes de permiso
* **Segundo plano**: puedes seguir hablando con Claude, y el código puede ejecutarse hasta dos horas

Para código en segundo plano, inicia tu sesión en el modo automático o en el modo `bypassPermissions`. Si Claude sigue esperando, comprueba tu modo actual y cómo iniciaste la sesión:

* **Cambiaste a otro modo**: presiona `Shift+Tab` hasta volver al modo en el que iniciaste
* **Iniciaste en otro modo, o elegiste la sesión de la lista de `claude --resume`**: si [el modo automático está disponible](https://code.claude.com/docs/es/permission-modes.md#eliminate-prompts-with-auto-mode) para ti, sal y luego ejecuta `claude --continue --permission-mode auto` con Code Mode activado
* **Pasaste nombres de herramientas a `--tools`**: vuelve a iniciar en el modo automático sin ese flag

## Solución de problemas

### Code Mode no se inicia

`Code Mode (experimental) isn't available` cerca de la parte superior de la sesión significa que Claude Code se inició sin Code Mode. El motivo aparece en la misma línea, y `/status` también lo muestra. Busca el motivo en esta tabla, haz el cambio e inicia una sesión nueva. Para un motivo que no aparezca en la lista, revisa los [requisitos](#requirements).

| El motivo incluye | Qué hacer |
| :- | :- |
| `it isn't open to your account yet` | Si tu versión es anterior a v2.1.323, [actualiza](#try-code-mode). De lo contrario, comprueba tu conexión de red y vuelve a iniciar. Si el motivo persiste, vuelve a intentarlo otro día |
| `it only works with the Anthropic API` | Elimina los ajustes que enrutan las solicitudes a través de un proveedor de nube, un gateway o un `ANTHROPIC_BASE_URL` personalizado |
| `it doesn't work with an API key helper` | Elimina `apiKeyHelper`, `ANTHROPIC_AUTH_TOKEN` y cualquier encabezado `Authorization` o `X-Api-Key` en `ANTHROPIC_CUSTOM_HEADERS`. Luego inicia sesión o establece `ANTHROPIC_API_KEY` |
| `it only works with Opus 5.5, Sonnet 5.5 and later models` | Inicia con un [modelo compatible](#requirements), por ejemplo con `--model opus`. Haiku 5.5 y Fable 5.2 también funcionan |
| `it doesn't work in background jobs` | Inicia en primer plano, sin `--remote-control` |
| `it needs settings that Claude Code downloads from Anthropic` | Elimina la variable que [desactiva la obtención de feature flags](https://code.claude.com/docs/es/env-vars.md#features-that-need-feature-flag-fetching), como `DISABLE_TELEMETRY` |
| `OpenTelemetry is on` | Elimina `CLAUDE_CODE_ENABLE_TELEMETRY` y `ENABLE_BETA_TRACING_DETAILED` si puedes trabajar sin la [exportación de OpenTelemetry](https://code.claude.com/docs/es/monitoring-usage.md) |
| `it doesn't yet work with an installed mod` | Desactiva el [mod](https://code.claude.com/docs/es/plugins/mods/overview.md) que revisa las llamadas a herramientas |
| `it can't be used together with agent teams yet` | Elimina `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` |
| `this launch's tool options` | Inicia sin `--restricted`, agrega `REPL` a `--tools` y elimina `REPL` de `--disallowedTools` y de tus reglas `deny` |
| `couldn't save your answer` | Haz que `~/.claude.json` tenga permisos de escritura |
| `your organization's settings don't allow it` | Pregunta a tu administrador por el [ajuste administrado](#block-code-mode-for-your-organization) |

Si no ves ninguna línea sobre Code Mode, ejecuta `claude --version`. Si tu versión es anterior a v2.1.323, actualiza. Luego comprueba que `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` sea `1` en tu shell o en tu configuración de usuario, y elimina cualquier `0` de ahí y de cualquier archivo de `--settings`.

### Solicitud de permiso con cuenta regresiva

Cuando Claude inicia más código en el modo automático mientras el código anterior aún se está ejecutando, el código anterior pierde la revisión del clasificador. Claude Code entonces te pregunta por las llamadas restantes del código anterior que necesitarían una revisión. Sin un IDE conectado, la solicitud muestra una cuenta regresiva:

```text theme={null}
Claude Code will automatically block this request in 1:59, to avoid holding up an unattended session
```

Responde antes de que termine la cuenta regresiva. De lo contrario, esa llamada se rechaza, y las llamadas posteriores que mostrarían una cuenta regresiva se rechazan sin solicitud. Para volver a ver las solicitudes, envía un mensaje a Claude.

### Llamada a herramienta rechazada por un hook

Si Claude informa de una llamada a herramienta rechazada, pídele el texto del error. Estos errores significan que un hook `PreToolUse` no dio una decisión, lo que rechaza la llamada incluso cuando [`onFailure`](https://code.claude.com/docs/es/hooks#block-the-action-when-a-hook-fails) no está establecido:

* **`the hook failed`**: en una llamada desde el código de Claude, tu hook no pudo iniciarse, fue terminado, salió con 126, 127 o un código superior a 128, o devolvió un error HTTP o una salida no válida. Corrige el hook
* **`the hook did not finish`**: se agotó el tiempo de espera de tu hook en una llamada desde el código de Claude, o en cualquier otra llamada a herramienta una vez que Claude ha ejecutado código en la sesión. Aumenta el [`timeout`](https://code.claude.com/docs/es/hooks#common-fields) del hook

Para permitir que las llamadas continúen cuando un hook `command` o `http` falla o se agota su tiempo de espera, establece `"onFailure": "continue"` en él. Si un hook `command` sale con un código común como 1, la llamada continúa, a menos que establezcas `"onFailure": "block"`.

### Salida de código retenida por un hook

Si Claude informa del motivo de bloqueo de un hook donde esperabas la salida del código de Claude, revisa tus hooks [`UserPromptSubmit`](https://code.claude.com/docs/es/hooks#userpromptsubmit). Cuando [el código puede ejecutarse en segundo plano](#long-running-code), los hooks `command`, `http` y `mcp_tool` en ese evento también se ejecutan sobre la salida del código. Para dejar pasar la salida, cambia el hook para que no bloquee cuando `source` en su entrada sea `poll_event`.

## Recursos relacionados

* [Modos de permisos](https://code.claude.com/docs/es/permission-modes.md): compara el modo automático con los modos que te piden confirmación
* [Referencia de hooks](https://code.claude.com/docs/es/hooks.md): escribe hooks `PreToolUse` y `UserPromptSubmit`
* [Configuración administrada](https://code.claude.com/docs/es/managed-settings.md): aplica una configuración en toda una organización
