El problema fundamental que aborda Code Mode es la limitación del tamaño de la ventana de contexto (context window) en los Large Language Models (LLMs) cuando se utilizan para interactuar con herramientas externas a través de protocolos como el Model Context Protocol (MCP). A medida que los agentes de IA requieren acceso a un número creciente de herramientas y APIs para realizar tareas complejas, la descripción de cada herramienta consume una cantidad significativa de tokens, lo que reduce el espacio disponible para la lógica de la tarea principal y limita la escalabilidad. Esta tensión entre la necesidad de funcionalidad y la restricción de contexto se agrava con APIs de gran escala, donde la descripción de miles de endpoints puede exceder la capacidad de cualquier LLM moderno.
Code Mode resuelve esto transformando la interacción con herramientas de una descripción explícita de cada operación a un modelo donde el agente genera código contra un SDK tipado. Este código actúa como un plan compacto, permitiendo al agente explorar, componer y ejecutar operaciones de forma eficiente. La ejecución segura del código en un entorno aislado es clave para habilitar esta abstracción, permitiendo que la complejidad de la API se gestione fuera del contexto del modelo, manteniendo así un footprint de tokens constante y mínimo, independientemente del tamaño de la API subyacente.
Arquitectura del Sistema
La arquitectura del sistema se centra en un servidor MCP que expone solo dos herramientas genéricas al agente de IA: search() y execute(). Ambas herramientas aceptan código JavaScript como entrada. La herramienta search() permite al agente explorar la especificación OpenAPI de Cloudflare, que está pre-resuelta y disponible como un objeto spec tipado dentro del entorno de ejecución del código. El agente puede escribir JavaScript para filtrar endpoints por producto, ruta, tags o cualquier otro metadato, sin que la especificación completa (que podría ser de 1.17 millones de tokens) entre en su ventana de contexto. Esto se ejecuta en un Dynamic Worker isolate.
Una vez que el agente ha identificado las operaciones necesarias, utiliza la herramienta execute(). Esta herramienta también acepta código JavaScript, el cual se ejecuta en un Dynamic Worker isolate. Dentro de este sandbox, el código tiene acceso a un cliente cloudflare.request() autenticado que puede realizar llamadas a la API de Cloudflare. Esto permite al agente encadenar operaciones, manejar paginación y verificar respuestas dentro de una única ejecución. Los Dynamic Worker isolates son entornos V8 ligeros y seguros, sin sistema de archivos ni variables de entorno accesibles, y con solicitudes salientes controladas explícitamente, lo que mitiga riesgos de inyección de prompt y acceso no autorizado. El servidor MCP es compatible con OAuth 2.1, utilizando Workers OAuth Provider para restringir los permisos del token a los aprobados por el usuario, garantizando un control de acceso granular.
Flujo de Interacción del Agente con Code Mode
- 1 Agente de IA Recibe una instrucción de usuario (ej. 'proteger mi origen de ataques DDoS').
- 2 Agente de IA Genera código JavaScript para la herramienta search() para explorar la API.
- 3 Servidor MCP Ejecuta el código search() en un Dynamic Worker isolate (sandbox V8).
- 4 Servidor MCP Devuelve resultados filtrados de la especificación OpenAPI al agente.
- 5 Agente de IA Genera código JavaScript para la herramienta execute() con lógica de API.
- 6 Servidor MCP Ejecuta el código execute() en un Dynamic Worker isolate.
- 7 Dynamic Worker Realiza llamadas autenticadas a la API de Cloudflare vía cloudflare.request().
- 8 Servidor MCP Devuelve el resultado de la ejecución de la API al agente.
| Capa | Tecnología | Justificación |
|---|---|---|
| messaging | Model Context Protocol (MCP) | Protocolo estándar para que los agentes de IA interactúen con herramientas externas, sirviendo como interfaz entre el LLM y los servicios. |
| compute | Dynamic Worker isolate (V8 sandbox) | Entorno de ejecución seguro y ligero para el código JavaScript generado por el agente, proporcionando aislamiento y control de recursos. Sin sistema de archivos, sin variables de entorno, fetches externos deshabilitados por defecto. |
| security | OAuth 2.1 | Protocolo de autorización para asegurar el acceso a la API de Cloudflare, permitiendo a los usuarios conceder permisos específicos a los agentes. Uso de Workers OAuth Provider para downscope de tokens. |
| data-processing | OpenAPI Specification | Descripción estandarizada de la API de Cloudflare, utilizada por la herramienta search() para permitir la exploración programática de endpoints. Todos los $refs pre-resueltos inline para facilitar la exploración. |
Trade-offs
Ganancias
- ▲▲ Reducción del consumo de tokens de contexto
- ▲ Escalabilidad con el número de endpoints de API
- ▲ Seguridad de ejecución del código generado
- ▲ Descubrimiento progresivo de capacidades de API
Costes
- △ Complejidad en la generación de código por parte del agente
- △ Overhead de ejecución del sandbox V8
async () => {
const results = [];
for (const [path, methods] of Object.entries(spec.paths)) {
if (path.includes('/zones/') &&
(path.includes('firewall/waf') || path.includes('rulesets'))) {
for (const [method, op] of Object.entries(methods)) {
results.push({ method: method.toUpperCase(), path, summary: op.summary });
}
}
}
return results;
}async () => {
const op = spec.paths['/zones/{zone_id}/rulesets']?.get;
const items = op?.responses?.['200']?.content?.['application/json']?.schema;
const props = items?.allOf?.[1]?.properties?.result?.items?.allOf?.[1]?.properties;
return { phases: props?.phase?.enum };
}async () => {
const ddos = await cloudflare.request({
method: "GET",
path: `/zones/${zoneId}/rulesets/phases/ddos_l7/entrypoint`
});
const waf = await cloudflare.request({
method: "GET",
path: `/zones/${zoneId}/rulesets/phases/http_request_firewall_managed/entrypoint`
});
}Fundamentos Teóricos
El desafío de gestionar la complejidad y el tamaño de las descripciones de interfaces en sistemas distribuidos no es nuevo. Conceptos como la 'reflexión' o 'metaprogramación' en lenguajes de programación, donde el código puede inspeccionar o modificar su propia estructura o la de otros componentes, resuenan con la capacidad de search() para explorar la especificación de la API. La idea de un 'plan' o 'programa' generado por un sistema para interactuar con otro se relaciona con trabajos en planificación automatizada e inteligencia artificial simbólica de décadas pasadas, donde un agente construye una secuencia de acciones para alcanzar un objetivo.
La ejecución segura de código generado en un entorno aislado se alinea con principios de seguridad de sistemas operativos y máquinas virtuales, donde la virtualización y el sandboxing (como en los V8 isolates) son técnicas estándar para aislar procesos y limitar su superficie de ataque. La minimización de la información expuesta al 'cerebro' del agente (el LLM) y la delegación de la lógica de interacción a un 'cuerpo' (el código ejecutado en el sandbox) es una aplicación práctica del principio de separación de preocupaciones y de la interfaz mínima, conceptos fundamentales en el diseño de software y sistemas distribuidos. Aunque no hay un paper único que prediga Code Mode, la combinación de estos principios clásicos de computación es lo que lo hace una solución robusta.