Tu agente necesita una computadora, no un contenedor: te presentamos @cloudflare/computer
Esta publicación también está disponible en English, Deutsch, Español, Français, 日本語, 한국어, 繁體中文 y 简体中文.

Los agentes más capacitados tienen algo simple en común: se les asigna su propia computadora para trabajar.
Así funcionan los agentes de codificación. Les proporcionas un sistema de archivos, un intérprete de comandos, herramientas, paquetes y la capacidad de ejecutar el código. Inspeccionan el entorno, hacen cambios, realizan pruebas de su trabajo y continúan. La computadora ofrece al modelo una forma familiar de interactuar con el mundo. En Cloudflare, trabajamos arduamente para ofrecer las primitivas adecuadas como base para construir los agentes más capacitados.
Hoy presentamos una vista previa de @cloudflare/computer. El paquete de @cloudflare/computer proporciona al agente un entorno de ejecución donde la plataforma se encarga de los detalles y la mecánica de qué código se ejecuta en un entorno aislado y qué código se ejecuta en un entorno aislado de contenedor. Cada agente recibe una computadora, el tiempo de ejecución se optimiza para la eficiencia y escalabilidad.
Creemos que, para satisfacer la creciente demanda de gestión informática requerida por los sistemas agénticos, necesitamos buscar soluciones que superen la idea de los contenedores tradicionales.
Cómo se construyen los agentes
Hemos visto una evolución sutil de esta historia en los últimos seis meses. Al comienzo del año, iniciar un contenedor y ejecutar un agente dentro de él era la norma. En los últimos meses, hemos visto una rápida evolución en la forma en que los sistemas de agentes permiten la ejecución de código en entornos aislados mediante herramientas. Esto separa las manos (el entorno aislado donde se realiza el trabajo) del cerebro (el bucle del agente).

Independientemente de dónde se ejecute el sistema, proporcionar un contenedor a cada agente supone un desafío: en todas las nubes, en todos los proveedores de servicios en la nube a gran escala, no existe ni de lejos suficiente capacidad de procesamiento en el mundo para que cada empresa pueda proporcionar a los agentes de cada uno de sus usuarios su propio entorno de procesamiento en contenedores. Esto no será escalable a cientos de millones, y luego a miles de millones, de agentes concurrentes. Por eso hay una demanda desesperada e inquieta en la industria de de la informática de CPU, no solo de GPU.
Hemos estado trabajando en este problema durante mucho tiempo en Cloudflare, creando una primitiva de cómputo más eficiente: los procesos aislados. Hicimos esa apuesta fuera de consenso hace casi 10 años cuando introdujimos Cloudflare Workers. Lo hicimos de nuevo cuando introdujimos Durable Objects hace casi seis años. Hicimos esta apuesta porque los procesos aislados son infinitamente escalables horizontalmente. Se inician y se desarticulan increíblemente rápido. Pueden hibernar cuando el agente está inactivo, almacenar el propio estado del agente e incluso iniciar sus propios procesos aislados para ejecutar código no confiable. Los aislamientos son la mejor manera de escalar horizontalmente, y la escala horizontal es lo que demandan los agentes.

El año pasado, dimos a los procesos aislados la capacidad de iniciar sus propios contenedores de sandboxing. Desde el primer día, la arquitectura de Cloudflare ha sido diseñada para ejecutar el agente en el entorno aislado (en un Durable Object) y llamar a un contenedor adjunto bajo demanda como herramienta. Esto te permite utilizar primitivas de cómputo más complejas solo cuando sea necesario, optimizando el rendimiento y el costo. Durable Objects se escala infinitamente de forma horizontal, y el contenedor adjunto le permite escalar de forma vertical para realizar cualquier tarea. Así es como construimos agentes nosotros mismos, y también estamos viendo a clientes crear cosas increíbles de esta manera.

Pero cuando consideramos esta necesidad de tener múltiples primitivas de cómputo subyacentes para construir agentes (procesos aislados y contenedores) y la necesidad de que nuestros clientes y desarrolladores los combinen ellos mismos en el espacio del usuario, creemos que podemos hacerlo mejor. Creemos que podemos proporcionar una idea más simple.
Es por eso que comenzamos este experimento lanzando @cloudflare/computer como una biblioteca de código abierto, para aprender junto con nuestros clientes que están llevando al límite la ejecución de agentes a escala.
Un sistema de archivos compartido entre procesos aislados y contenedores
El paquete @cloudflare/computer comienza con una premisa simple: ¿qué pasaría si proporcionamos a un agente un sistema de archivos preparado, definido de manera declarativa, que contenga todo lo necesario para la tarea en cuestión y una selección de entornos de ejecución para operar sobre esos archivos, cada uno con sus propias ventajas y desventajas respecto a velocidad, capacidad y costo?
Resulta que los agentes de hoy son sorprendentemente capaces de seleccionar el entorno adecuado para la tarea en cuestión. Un trabajo que solo necesita manipular archivos, procesar datos o gestionar un repositorio git puede ejecutarse dentro de un procesos aislado. Un comando que necesita Linux, npm o un binario nativo puede ejecutarse dentro de un contenedor. Ambos trabajan con los mismos archivos que se mantienen sincronizados con el sistema de archivos fuente.

El paquete @cloudflare/computer proporciona un sistema de archivos duradero que puedes usar con repositorios git, contenedores de almacenamiento o cualquier archivo que elijas. Proporciona herramientas que te permiten leer, escribir y editar archivos usando Code Mode o comandos bash. Todas las operaciones están protegidas, auditadas y observadas, lo que te da un control detallado sobre los cambios que el agente tiene permitido realizar, además de un registro claro que muestra qué hizo el agente.
Cómo usas la IA
Se puede instanciar una instancia de un espacio de trabajo @cloudflare/computer en cualquier Durable Object para proporcionar un sistema de archivos virtual y un entorno de ejecución.
Se instala a través de npm:
npm install @cloudflare/computerEl caso de uso principal es proporcionar ese sistema de archivos y herramientas a un agente. Por ejemplo, a continuación se muestra cómo instanciar el espacio de trabajo en un agente impulsado por @cloudflare/think destinado a clasificar informes de errores.
import { Think } from "@cloudflare/think";
import { Workspace, type DurableObjectStorageLike } from "@cloudflare/computer";
import { createWorkersAI } from "workers-ai-provider";
export class Agent extends Think {
override workspaceBash = false;
override workspace = new Workspace({
storage: this.ctx.storage,
useThink: true, // soon will not be needed
});
override getModel() {
return createWorkersAI({ binding: this.env.AI })("@cf/zai-org/glm-5.2");
}
override getSystemPrompt() {
return `
You are a bug triage agent.
Use the project in /workspace/repo to reproduce the bug, inspect the
code, make a focused fix when it is safe, and run verification. In your
final answer, include what you changed, which commands you ran, and
whether verification passed.`;
}
}Se proporcionan varios backends de ejecución como parte del paquete @cloudflare/computer o puedes crear los tuyos propios. Aquí conectamos un contenedor de Cloudflare.
import { Think } from "@cloudflare/think";
import { Workspace, WorkspaceProxy } from "@cloudflare/computer";
import {
CloudflareContainerBackend,
withWorkspaceContainer,
} from "@cloudflare/computer/backends/container";
export { WorkspaceProxy };
export class Agent extends withWorkspaceContainer(Think) {
override workspaceBash = false;
override workspace = new Workspace({
storage: this.ctx.storage,
useThink: true, // soon will not be needed
backends: [
new CloudflareContainerBackend({
container: () => this,
workspace: {
binding: "Agent",
id: this.ctx.id.toString(),
},
}),
],
});
/* Example code truncated for readability... */
}Expone las herramientas de archivo, git y shell junto con herramientas específicas del producto para responder a los problemas reportados.
import { createAITools } from "@cloudflare/computer/tools";
import type { ToolSet } from "ai";
import { replyToIssue } from "./tools/github";
export class Agent extends withWorkspaceContainer(Think) {
override workspaceBash = false;
/* Example code truncated for readability... */
override getTools(): ToolSet {
return {
...createAITools({
workspace: this.workspace,
shell: {
defaultBackend: "container",
backends: {
container: {
description:
"Cloudflare Container with a full Linux userland: " +
"npm, node, package managers, test runners, and real " +
"binaries on $PATH. Use it when a task needs more than " +
"file manipulation.",
},
},
},
}),
replyToIssue,
};
}
}El modelo puede usar herramientas durante el ciclo del agente, pero también puedes usar la API del espacio de trabajo directamente, por ejemplo, para preparar el entorno antes de activar el agente.
export class Agent extends withWorkspaceContainer(Think) {
override workspaceBash = false;
/* Example code truncated for readability... */
async startTriage(report: { title: string; body: string; repoUrl: string }) {
await this.workspace.fs.mkdir("/workspace", { recursive: true });
await this.workspace.fs.writeFile(
"/workspace/BUG_REPORT.md",
`# ${report.title}\n\n${report.body}\n`,
);
await this.workspace.git.clone({
url: report.repoUrl,
dir: "/workspace/repo",
});
return this.submitMessages([
{
id: crypto.randomUUID(),
role: "user",
parts: [
{
type: "text",
text: [
`Triage this bug: ${report.title}`,
"The bug report is in /workspace/BUG_REPORT.md.",
"The repository is checked out at /workspace/repo.",
].join("\n"),
},
],
},
]);
}
}Consulta el repositorio del espacio de trabajo para más ejemplos de cómo usar los diferentes backends y herramientas, incluyendo un tutorial paso a paso que ofrece una guía en la construcción de un agente desde cero.
Cómo funciona
La pieza central de @cloudflare/computer es el espacio de trabajo. Un sistema de archivos virtual respaldado por SQLite que se puede poblar desde varias fuentes, incluidas el almacenamiento en la nube y el control de versiones.

El espacio de trabajo admite tiempos de ejecución opcionales que permiten que el código se ejecute contra el sistema de archivos. Todos los entornos de ejecución admiten la misma interfaz exec(string, options) y actualmente se proporcionan dos de forma predeterminada (pero puedes crear la tuya propia):
- Un entorno de ejecución basado en un procesos aislado que utiliza just-bash para traducir código shell a JavaScript se ejecuta en un Worker dinámico. Aquí, el sistema de archivos está disponible directamente a través de los enlaces del Worker.
- Un entorno de ejecución de contenedores que utiliza Cloudflare Containers para proporcionar un entorno completo de Linux. Aquí, el sistema de archivos se proporciona a través de un montaje de Filesystem in Userspace (FUSE), lo que garantiza que los archivos estén disponibles para el contenedor y que los cambios se sincronicen de regreso.
La clase Workspace proporciona una interfaz API para manipular directamente el sistema de archivos, así como un contenedor compatible con node:fs para que pueda ser utilizado fácilmente con bibliotecas de JavaScript de terceros.

Para uso con agentes, proporcionamos un conjunto de herramientas compatible con AI SDK que incluye las herramientas más comunes: leer, escribir, editar, ls y exec. La herramienta exec es un poco especial ya que funciona en todos los entornos de ejecución tomando un argumento backend. La descripción de la herramienta guía al agente para elegir el entorno adecuado para la tarea en cuestión: ya sea un backend de Worker rápido y económico o el contenedor completamente equipado. En nuestras pruebas, los modelos perimetrales son muy buenos para tomar la decisión correcta y recurrir al uso de contenedores solo cuando es necesario.
PRÓXIMOS PASOS
Aquí en Cloudflare ya estamos viendo agentes que utilizan exclusivamente procesos aislados para construir, realizar pruebas y desplegar aplicaciones JavaScript con herramientas modernas, generar documentación a medida para cada uno de nuestros clientes y utilizar navegadores web para realizar tareas complejas.
Nuestro objetivo con @cloudflare/computer es proporcionar un agente con un entorno de ejecución donde un contenedor sea necesario para menos del 10 % de su trabajo, y que las tareas de codificación, la manipulación de audio/video y la creación de documentos puedan ser manejadas por procesos aislados.
Accede a una vista previa hoy: estamos ansiosos por conocer tu opinión.

