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
| Campo | Propósito |
|---|---|
| Code | El 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 permitidas | Las 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 salida | Dónde colocar el resultado en el contexto. Los nodos aguas abajo leen esta clave. |
| Presupuesto de ejecución | Techo 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
- Sí: lógica determinista que puedes describir con precisión, pero que supera las operaciones
computeintegradas (reconciliar varias listas, reglas de negocio compuestas, formatos propietarios). - No: un simple filtro, agregación o proyección → un operador
computees suficiente. - No: una tarea que requiere juicio o escritura abierta → eso es un agente, no código.