Skip to content

One API. Any agent. Your infrastructure.

The self-hosted Managed Agents API. Run Claude Code with your Max subscription, OpenCode, or Codex on your own containers — zero per-token fees, zero vendor lock-in.

4Backends
3Runtimes
~2sCold Start
$0Per Session

Self-hosted. Multi-provider. No lock-in.

Same API as Anthropic’s Managed Agents — running on your infrastructure, with your choice of model provider.

Zero vendor lock-in

Run Claude today, swap to Codex tomorrow — one config change. Mix providers on the same project. Your application code never moves.

Your infra, your uptime

sprites.dev for cloud (~2s). Docker for local (~3s). Apple Containers for macOS 26+ (~1s). Self-hosted means your reliability, not theirs.

Use your Claude Max sub

Run agents with your flat-rate Claude Max subscription via Claude Code CLI. No per-token billing, no $0.08/session-hour fees. Unlimited agent sessions at zero marginal cost.

Gate dangerous actions

Confirmation mode lets humans approve tool calls before execution. Agents propose, you dispose. Partial answer to the governance-of-output problem.

Mix models per task

Use Claude for complex reasoning, Codex for code generation, OpenCode for quick edits — different agents, different backends, same session API.

Full UI out of the box

Chat for conversations. Admin for managing agents. Playground for raw event streams. Evaluate before you integrate.

One surface, clean layers

Your app talks to one API. Managed Agents handles the rest.

system architecture
  ┌─────────────────────────────────────────────────────┐
  │  Web UI (Chat / Admin / Playground)                 │
  ├─────────────────────────────────────────────────────┤
  │  /v1/* REST API (Managed Agents spec)               │
  ├─────────────────────────────────────────────────────┤
  │  Driver (turn orchestration, SSE, event bus)        │
  ├──────────┬──────────┬──────────┬────────────────────┤
  │ claudeopencodecodexanthropic (proxy) │
  │ backend  │ backend  │ backend  │                    │
  ├──────────┴──────────┴──────────┼────────────────────┤
  │  ContainerProvider interface   │  HTTP proxy to     │
  ├──────────┬──────────┬──────────┤  api.anthropic.com │
  │ spritesdockerapple    │                    │
  │ .dev     │          │container │                    │
  └──────────┴──────────┴──────────┴────────────────────┘

Four backends, one event protocol

Models change. Providers change. Your integration shouldn’t.

claude -p Max / API key

Use your Max subscription or API key. Session resume, permission hooks

opencode run multi-provider

Non-interactive JSON mode, routes via model prefix

codex exec gpt-5.4

Full-auto JSON, seven-second install, zero config

proxy api.anthropic.com

Transparent pass-through, your key, their infra

From npm install to running agent

Five minutes. One API key. That’s it.

import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "http://localhost:3000",
apiKey: "ck_...",
});
// Pick a backend. Pick a runtime. Go.
const agent = await client.beta.agents.create({
name: "Coder",
model: "claude-sonnet-4-6",
backend: "claude",
tools: [{ type: "agent_toolset_20260401" }],
});
const env = await client.beta.environments.create({
name: "dev",
config: { type: "cloud", provider: "sprites" },
});
const session = await client.beta.sessions.create({
agent: agent.id,
environment_id: env.id,
});
// Send a message, stream the response
const stream = await client.beta.sessions.events.stream(session.id);
await client.beta.sessions.events.send(session.id, {
events: [{
type: "user.message",
content: [{ type: "text", text: "Build a REST API" }],
}],
});
for await (const event of stream) {
console.log(event.type, event);
if (event.type === "session.status_idle") break;
}

Your Max subscription. Unlimited agents.

Use your Claude Max flat rate instead of per-token API billing. Self-hosted, multi-provider, from npm install to running agent in 5 minutes.