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

# Composición de Tools

> Anida lógica reutilizable con el nodo Tool: salvaguardas anti-recursión y trazabilidad completa.

Puedes usar el nodo **Tool** dentro de otras Tools. Así armas bloques reutilizables (validar identidad, cobrar, consultar stock) y los combinas sin duplicar el canvas.

Disponible para todas las compañías.

## Cómo usarla

<Steps>
  <Step title="Abre el canvas">
    En Brain Studio, ve a la pestaña **Tools** y abre la que quieres componer (o crea una nueva).
  </Step>

  <Step title="Arrastra otra desde el buscador">
    En el canvas aparece el buscador de Tools. Arrastra la que necesites; se inserta como nodo con su `toolId`.

    La Tool que estás editando **no aparece** en la lista: no puedes referenciarte a ti misma.
  </Step>

  <Step title="Configura inputs y outputs">
    Mapea los inputs de la Tool hija (variables de memoria, `$input`, o valores fijos). Los tipos declarados (**NUMBER**, **BOOLEAN**, **OBJECT**, **ARRAY**) se preservan al invocarla; no llegan como string.
  </Step>

  <Step title="Publica">
    Publica la Tool padre. Al guardar y publicar, la plataforma rechaza autorreferencias y detecta ciclos (por ejemplo, A → B → A).
  </Step>
</Steps>

<Frame caption="Buscador en el canvas">
  <img src="https://mintcdn.com/jelouai/ULgwEHLikEppkuDq/assets/images/nodos/tool-composition-picker-es.png?fit=max&auto=format&n=ULgwEHLikEppkuDq&q=85&s=6e9b0eecd6535ea13b477ad9dc39366c" alt="Canvas mostrando el buscador para arrastrar otra Tool" width="1571" height="902" data-path="assets/images/nodos/tool-composition-picker-es.png" />
</Frame>

## Salvaguardas anti-recursión

Para evitar bucles infinitos:

* **Sin autorreferencia**: la Tool actual no aparece en el buscador y el guardado bloquea si intentas referenciarla.
* **Límite de anidamiento**: en tiempo de ejecución hay un tope de profundidad (por defecto **5** niveles). Si se supera, la ejecución falla de forma controlada.
* **Detección de ciclos**: al publicar, un analizador detecta ciclos entre Tools.

<Warning>
  Diseña Tools pequeñas y con una sola responsabilidad. Anidar en exceso dificulta depurar y acerca el límite de profundidad.
</Warning>

## Trazabilidad y depuración

Cada ejecución de una Tool hija genera un `executionId` que queda registrado en la Tool padre, aunque la ejecución termine en **timeout**, error o éxito.

Desde el [Tester](/guides/getting-started/tester), en el nodo usa **Debuggear Tool** para inspeccionar la ejecución interna de la hija (nodos, inputs, outputs y errores) sin abrir el canvas por separado.

## Timeout

El despacho de la Tool hija tiene un timeout de **30 segundos**. Como la ejecución es asíncrona, ese límite cubre solo el despacho —el momento en que la plataforma crea la ejecución hija—, no lo que la hija tarde en completarse: una hija que corre varios minutos no agota este timeout.

Si el despacho falla por timeout, la Tool padre toma la ruta de error y su estado final incluye el `executionId` de la hija y `status: TIMEOUT`, para que puedas depurarla igual que en un error normal.

## Tipos de inputs

Al mapear inputs hacia una Tool hija, el builder persiste el tipo junto con el valor. El motor convierte según el tipo declarado:

| Tipo declarado | Comportamiento |
| - | - |
| `NUMBER` | Se envía como número (no como `"15"`) |
| `BOOLEAN` | Se envía como booleano |
| `OBJECT` / `ARRAY` | Se envía como estructura, no como string serializado |
| `STRING` | Se envía como texto |

Así evitas bugs silenciosos cuando la Tool hija espera un ID numérico o un objeto.

## Buenas prácticas

* Prefiere Tools genéricas y reutilizables como piezas de composición.
* Documenta inputs y outputs de cada Tool hija para que el mapeo en la padre sea claro.
* Prueba la composición en el Tester y usa **Debuggear Tool** en cada nivel anidado.
* Mantén la profundidad baja; si necesitas más de unos pocos niveles, revisa si puedes aplanar el diseño.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.