Golem 1.6 is out: see what's new

The durable runtime for AI agents

Golem runs AI agents, their tools and their artifacts. Each agent runs in a lightweight WebAssembly VM that resumes mid-function after node restarts, rescaling, long waits and crashes. Tool calls run exactly once, under permissions agents can't bypass.

Built on Golem

Ziverge
Golem Social
WarpMind
Seeta AI Assistant
JournAI
Johnethel LMS
The core of Golem

A lightweight, durable VM with permissions agents can't bypass

Golem runs every agent, every tool call and every artifact in its own WebAssembly VM. Every call out of a VM goes through Golem, which checks it against your permissions and records it, so the VM can resume anywhere.

You don't write save or checkpoint code, design state tables or run a workflow engine.

Lightweight

WebAssembly, not Linux: each VM has private memory, files and environment, with no guest OS. Code can be tens of kilobytes; a VM starts in under 1 ms in the best case scenario.

Durable

A waiting VM is suspended, using no CPU or memory, for minutes or months. After a crash or node restart it's restored where it left off, without repeating completed calls.

Secure

A VM can't reach files, the network, secrets or other VMs directly. Every call out goes through Golem's permission checks, which no code, including AI-generated code, can bypass.

10,000+
Active agents per node
2 ms
Agent cold start
1 MB
Min memory per agent
0 CPU/RAM
While waiting
Agents

Agents are your own arbitrary code, not prompts

Each agent's VM keeps its whole execution durable.

support-agent.ts
export const SupportImpl = Support.implement({
  init: () => ({ history: [] as Message[] }),
  methods: {
    async handle({ message, orderId }) {
      this.history.push({ role: 'user', content: message })
      // Golem lets lookupOrder reach only the orders API:
      const reply = await llm.run(this.history, [lookupOrder])
      if (reply.refundRequested) {
        const approval = createWebhook()
        await notifyReviewer(approval.getUrl(), reply)
        // waits here for days if needed, using no CPU or memory:
        const { approved } = (await approval).json<Approval>()
        // refunded once if the payment API honors idempotency keys:
        if (approved) await refundOrder(orderId, reply.amount)
      }
      return reply.text
    },
  },
})
  • Your language Write agents as ordinary, typed code in TypeScript, Effect, Rust, Scala, MoonBit or Go, with the same guarantees and primitives in each.
  • Awaitable webhooks, timers and schedules Approvals and payment callbacks become promises your code awaits. Sleeps, timers and scheduled calls fire on time across restarts, with no idle cost.
  • Agents working together Typed calls between agents, across languages, right away or scheduled for later. Agents can discover what other agents and tools offer.
  • Any model, with your libraries Call any model through common LLM SDKs. Keep using the OpenAI and Anthropic SDKs, Vercel AI SDK, TanStack AI, Effect AI, Zod and more.
  • Embedded SQLite TypeScript, Effect and Rust agents can each have their own SQLite database, embedded in the agent, with no database server to run or connect to.
Tools

Every tool call in its own VM, executed exactly once

After a node restart or crash, restoring a tool call's state replays its code using recorded results, without repeating completed effects.

refund-tool.ts
export const refund = toolDefinition('refund')
  .version('1.0.0')
  .body((body) =>
    body
      .positional('charge', z.string())
      .positional('amount', z.number().int())
      .returns(z.object({ id: z.string(), status: z.string() })),
  )

refund.implement({
  // each call runs in a fresh WebAssembly VM:
  refund: async ({ charge, amount }) => {
    // Golem checks this request against the caller's permissions
    // and adds an idempotency key, so a retry refunds once:
    const res = await fetch('https://api.stripe.com/v1/refunds', {
      method: 'POST',
      body: new URLSearchParams({ charge, amount: String(amount) }),
    })
    return ok(await res.json())
  },
})
  • Bundled and custom tools Shell, Git, Node.js, npm and TypeScript come bundled. Build your own tools with any Golem SDK; no separate sandbox service needed.
  • External requests Interrupted external requests retry with idempotency keys Golem adds, taking effect once if the service honors them, as Stripe does.
  • Permissions you can scope and share Give agents or tools narrower permissions, such as the orders API only, for one hour. Revoking a permission revokes every permission delegated from it.
  • Secrets Agents pass API keys to tools as opaque handles. Revealing a value takes a grant and is recorded, and a binding can stop a tool from revealing any.
  • Tool publishing, plus MCP Publish tools as immutable, versioned releases for other accounts. Expose agents and tools over MCP, and call MCP servers with the same guarantees.
Artifacts

Securely expose artifacts your agents build and deploy

Pages, files and live output, with each artifact in its own WebAssembly VM.

site-agent.ts
export const SiteAgent = defineAgent({
  name: 'SiteAgent',
  id: { project: z.string() },
  // serve this agent's /public directory at /sites/{project}/:
  http: http.mount('/sites/{project}', {
    exposeFiles: [{ route: '/*', path: '/public/$1' }],
  }),
  methods: { publish: method({ input: {}, returns: z.void() }) },
})

export const SiteAgentImpl = SiteAgent.implement({
  init: () => ({}),
  methods: {
    publish() {
      // copy in the site the agent built; its URLs serve it at once:
      fs.cpSync('/workspace/dist', '/public', { recursive: true })
    },
  },
})
  • Routes and files Agents deploy front-ends and back ends under the permissions you grant. HTTP routes are declared in agent code; static files are served directly from storage.
  • Durable streaming Streaming methods become resumable streams: clients that reload or reconnect pick up an agent's output where it left off, even after a crash.
  • Front-end login Single-page front-ends sign users in with OAuth2 and PKCE, using short-lived tokens Golem issues. A mount can turn away callers without a valid login.
  • Read-only methods Methods marked read-only can't change state; the runtime enforces it. Responses are cached until the agent next writes, served without waking it.

From developers building on Golem

"Tried Temporal, Dapr, Restate, and Fermyon Spin. Golem gives me what I'd given up on finding: code-level customizability with no-code-level operational simplicity."

Samuel Iyeh
Samuel Iyeh
AI Software Engineer
Building Johnethel LMS

"I tried Akka event sourcing and Step Functions first. What I love about Golem is clean code — durable state and automatic retry built in."

Peter Kotula
Peter Kotula
Software Engineer
Building Golem Social

"I crashed a running agent mid-test — its .schedule() reminder still fired on time. Golem's durability isn't bolted on; it's the runtime."

Rahul Joshi
Rahul Joshi
Full-Stack AI Developer
Building WarpMind

"Like AWS Lambda, but the function has memory across invocations and durable reminders. Durability is invisible — exactly how infrastructure should feel."

Seeta Ramayya Vadali
Seeta Vadali
Senior Consultant
Building Seeta AI

"For JournAI, I modeled log analysis as durable agents. Golem's guarantees around state, retries, and recovery let me focus on the logic, not the infrastructure."

Daniele Torelli
Daniele Torelli
Senior Software Engineer
Building JournAI
Operations

Run it locally, self-hosted or managed

Local

One binary runs the whole platform on your laptop. Stop it, restart it, and your agents are still there.

Self-hosted

Run the full open source platform in production, on your own Docker or Kubernetes infrastructure.

Golem Cloud

Deploy to the managed service and let us run it, with no servers of your own. Free during the Developer Preview.

In every deployment
  • Observability and audit OpenTelemetry traces and metrics. Each agent's oplog records its external interactions and permission decisions for audit.
  • Live updates and rollback Update running agents after a compatibility check. Roll an agent back to an earlier point, or clone it to try another approach.
  • Quotas Rate, capacity and concurrency limits throttle, reject or stop runaway agents and tools, and can change without a redeploy.

Questions developers ask

Do I still need my database?

Probably not. Each agent's whole execution is durable, and each agent has its own file system and can have its own database. Golem Social, a whole social network, runs on Golem with no external database. The same holds for your agents and tools, and for the artifacts your agents deploy. Keep existing databases where other systems share the data.

Can I keep my agent framework?

Yes. A framework shapes the agent loop and usually saves the conversation between turns. It runs inside a Golem agent, which keeps the agent's whole execution durable, in-progress tool calls included, and enforces permissions in the runtime.

How is this different from an actor platform?

Actor platforms persist each entity's state. Golem keeps the agent's whole execution durable, including its call stack, files and environment, so it continues in the middle of a call. Tool calls run exactly once, and the runtime enforces permissions.

How does it compare with a workflow engine?

Workflow engines usually ask you to split work into activities they record. In Golem, ordinary code is durable as it runs, with no restructuring, and each agent also gets its own VM and runtime-checked permissions.

Is Golem open source?

Yes. Golem has a BSL license that converts to Apache 2.0, and is available for self-hosting for production workloads.

What happens to running agents when I deploy?

They stay on their current version until you update them. Golem checks that the new code is compatible before it moves a running agent over. Read the docs →

Build your first durable agent

Install one binary and run the platform locally.