Cloud infrastructure for production AI agents

Give every agentthe right compute.

Your agent — LangGraph, Claude Agent SDK, CrewAI, or a plain script — on its own machine with the exact CPU, memory, GPU, and tools it needs.

Read the docs
# A Claude agent that fixes bugs end to end —
# clones the repo, edits code, runs the tests,
# opens a PR. No Nullspace imports.
import asyncio, json, subprocess, sys
from claude_agent_sdk import query, ClaudeAgentOptions


async def main():
    job = json.load(sys.stdin)   # {"repo", "task"}
    subprocess.run(
        ["git", "clone", job["repo"], "/workspace/repo"],
        check=True,
    )
    async for msg in query(
        prompt=job["task"],
        options=ClaudeAgentOptions(
            cwd="/workspace/repo",
            allowed_tools=["Read", "Edit", "Bash"],
            permission_mode="acceptEdits",
        ),
    ):
        print(msg)


if __name__ == "__main__":
    asyncio.run(main())

bug-fixer · code-agent · 8 vCPU · 16 GiB · on demand

Functions + Machines

An agent, and the machine it runs on.

A Function is your agent as a callable endpoint. A Machine is the isolated computer it runs on — sized per task, started on demand.

Your agent, deployed

Push your code; get a versioned, callable endpoint. No servers to run.

Its own machine, every run

Each call runs on an isolated machine with the CPU, memory, and GPU it needs.

On demand, gone when done

Machines start on a call and stop when finished, so idle capacity stays explicit.

Bring your own framework

Your framework, unchanged.

LangGraph, Claude Agent SDK, OpenAI Agents, CrewAI, coding CLIs like Codex, Claude Code, Amp, or opencode, or a custom loop — the agent code stays exactly as you wrote it.

# function.py — your LangGraph graph runs
# unchanged; just say how to deploy it.
from nullspace import Function, Machine

research_agent = Function(
    name="research-agent",
    entrypoint="python -m app.graph",
    install="pip install -e .",
    machine=Machine(template="python3.12", cpu=4, memory="8GiB"),
    secrets=["OPENAI_API_KEY"],
)

Many machine shapes

Different agents need different machines.

Pick the machine per agent — from a small data box to a multi-GPU node.

from nullspace import Machine

# SQL + Python data stack on a small box.
data = Machine(
    template="python-data",   # pandas, duckdb, sql
    cpu=4,
    memory="8GiB",
)

Invoke it

From one call to ten thousand.

Call it synchronously, fan it out across machines, fire-and-forget, or run it on a schedule.

from nullspace import Function

agent = Function.from_name("research-agent")

# Run it once — stream logs, get the outputs back.
result = agent.run(input={"topic": "fusion startups"})
print(result.outputs)

Observability

See every run, step, and token.

Every run traces the machine, model and tool calls, logs, artifacts, and outputs.

Run   research-agent
  ├─ input
  ├─ machine   python3.12 · 4 vCPU · 8 GiB
  ├─ agent steps
  │   ├─ model calls + tokens
  │   ├─ tool / command calls
  │   ├─ logs
  │   └─ artifacts
  ├─ outputs
  └─ duration

Safety

Contain what your agent can touch.

Scope secrets, allowlist the network, cap resources, or cut the internet — all declared with the agent.

from nullspace import Function, Machine

Function(
    name="research-agent",
    entrypoint="python agent.py",
    machine=Machine(template="python3.12", cpu=4, memory="8GiB"),
    # Only these credentials, injected at run time.
    secrets=["OPENAI_API_KEY"],
    # Only these hosts — everything else is blocked.
    network={"allow": ["api.openai.com", "data.sec.gov"]},
    # Hard caps the platform enforces.
    limits={"timeout": "20m", "max_concurrency": 50},
)

Every client

Call it from anywhere.

Python, TypeScript, the CLI, or plain HTTPS — same agent, same endpoint.

nullspace init research-agent   # scaffold function.py
nullspace dev                   # run locally
nullspace deploy                # deploy to the cloud
nullspace run research-agent --input '{"topic": "fusion"}'
nullspace logs research-agent --follow

Open source to cloud

From your laptop to the cloud.

Build and run locally with the open-source SDK and CLI, then ship the same project hosted.

Terminal
pip install nullspace
nullspace init research-agent
nullspace dev
nullspace deploy

Give every agent the right compute

Ship your first agent in minutes.

Bring the agent you already built, give it the machine it needs, and run it in production.

Read the docs