Documentación

Code Steps

El nodo code_step ejecuta lógica personalizada en un sandbox Starlark — editable libremente, acotado por una lista de herramientas permitidas.

Code Steps (code_step)

Cierta lógica es demasiado específica para un operador compute, y sin embargo demasiado determinista como para justificar un agente LLM: reconciliaciones multi-fuente, cálculos de negocio a medida, normalizaciones exóticas. Para estos casos, el nodo code_step ejecuta código dentro de un sandbox, sin llamada a un LLM y con una salida predecible.

El código se edita directamente, como cualquier otro campo de configuración, y se ejecuta en cuanto se guarda.

El modelo de ejecución

code_step ejecuta Starlark — un dialecto de Python diseñado para el aislamiento: sin acceso al sistema de archivos, sin red, sin importaciones arbitrarias, determinista, acotado por un presupuesto de tiempo. El código solo ve:

  • Las entradas que le mapeas explícitamente (input_paths).
  • Las herramientas que autorizas a llamar (allowed_tools).

Todo lo demás está fuera de alcance. Un code step no puede acceder a un recurso que no le hayas entregado.

Configuración

CampoPropósito
CodeEl código fuente Starlark que se ejecuta, editado directamente.
Inputs (input_paths)Mapeo variable → selector. Solo estas claves de contexto se exponen al código. Las claves internas (_*) se rechazan.
Lista de herramientas permitidasLas herramientas llamables vía tool(name, args). Cada llamada hereda las propias salvaguardas de la herramienta (protección SSRF, facturación, auditoría, killswitch).
Clave de salidaDónde colocar el resultado en el contexto. Los nodos aguas abajo leen esta clave.
Presupuesto de ejecuciónTecho de tiempo (ms), limitado del lado del servidor. Un step que lo supera se interrumpe.

Dónde está el límite de seguridad

El lenguaje no es la amenaza: Starlark está aislado por diseño — por sí solo no puede ni leer un archivo, ni alcanzar la red, ni entrar en un bucle infinito. El cálculo puro es inofensivo.

La única capacidad real es el puente tool(), y está acotado por la lista de permitidas aplicada en tiempo de ejecución: el código solo puede llamar a las herramientas que hayas enumerado, y cada una lleva sus propias salvaguardas (protección SSRF, facturación, auditoría, killswitch). Eso — la elección de las herramientas — es donde delimitas lo que un step tiene permitido hacer.

Una lista de permitidas vacía = ninguna capacidad de efecto secundario: el step simplemente calcula sobre sus entradas y produce una salida.

Cuándo usarlo

  • : lógica determinista que puedes describir con precisión, pero que supera las operaciones compute integradas (reconciliar varias listas, reglas de negocio compuestas, formatos propietarios).
  • No: un simple filtro, agregación o proyección → un operador compute es suficiente.
  • No: una tarea que requiere juicio o escritura abierta → eso es un agente, no código.