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.
# 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.
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.