The runtime for AI-native applications.

Build agents, workflows and the full app around them on one open-source runtime you host yourself.

your infrastructure cluster: authenticated nodes policy: every call checked sandbox: lua, wasm, containers agents your app sqlqueueshttpllm one set of functions, one trace

No tool sprawl.

Your app and its agents share one runtime.

The routes, queues, workflows, and storage your app uses are the same functions agents call as tools.

Typical agent stackWippy
ToolsA connector server per serviceFunctions in the runtime
KeysCopied into every connectorDeclared once, read under policy
NetworkEach finds its own way outChecked per process
AccessWhatever each token allowsOne policy layer, every call

Boundaries, built in.

Deny by default

Every call is checked. No matching policy, no access.

Code stays in its box

Lua and WASM import only what their entry declares. Agent containers run locked down.

Network per process

Every dial and request is checked. Route each process direct, through a proxy, or over a tailnet.

Nodes prove who they are

Signed handshakes on every connection; gossip is encrypted.

Agents that ship, safely.

Claude Code or Codex change the running system through a scoped surface.

Every change is versioned. Roll back in one call.

build session

Every agent is an actor.

Each agent owns its state and talks only by message.

Agents never lock or race each other. A crash stays contained and a supervisor restarts it.

The same actor runs on one node or across the cluster.

local funcs = require("funcs")

local function main()
    local asks = process.listen("ask", { message = true })
    local history = {}  -- private state, no locks

    while true do
        local msg = asks:receive()
        table.insert(history, msg:payload():data())
        local answer = funcs.call("app:think", history)
        process.send(msg:from(), "reply", answer)
    end
end

Scale your way.

Same code, one node or many.

  • ClusterAdd a node, it joins. Processes are addressed by name.
  • QueuesIn-memory, RabbitMQ, or SQS behind one consumer API.
  • TemporalDispatch workflows to your Temporal cluster.
  • MeshReach across networks over Tailscale or SOCKS5.
send by name → routed to the owner noderaft proc noderaft proc node proc gossip membership

The whole stack, built in.

Cluster
multi-node, gossip and Raft
Processes
supervised and isolated
Workflows
durable DAGs, Temporal dispatch
Registry
typed and versioned, with rollback
Storage
SQL, vector, S3, files
Real-time
WebSocket, SSE, queues
Security
capabilities and policies
Observability
OpenTelemetry tracing
Lua + WASM
typed, with LSP and tests
Networking
per-process egress
LLMs & agents
memory, tools, RAG, MCP
Live edit
change it running, roll back

Your control plane.

Keeper dashboard
Keeper dashboard
Keeper system monitor
Keeper system monitor
Dataflow replay
Keeper dataflow replay

Run it on your infrastructure.

One open-source binary under MPL-2.0. Your agents and data stay on hardware you control.