---
title: "TypeScript SDK"
description: "Generated types and a thin fetch-based client."
---
The TypeScript SDK is generated from the OpenAPI spec produced by the Rust server.
## Generate types
```bash
pnpm --filter sandbox-agent generate
```
This runs:
- `cargo run -p sandbox-agent-openapi-gen -- --out docs/openapi.json` to emit OpenAPI JSON
- `openapi-typescript` to generate types
## Usage
```ts
import { SandboxDaemonClient } from "sandbox-agent";
const client = new SandboxDaemonClient({
baseUrl: "http://127.0.0.1:2468",
token: process.env.SANDBOX_TOKEN,
});
await client.createSession("my-session", { agent: "claude" });
await client.postMessage("my-session", { message: "Hello" });
const events = await client.getEvents("my-session", { offset: 0, limit: 50 });
```
## Autospawn (Node only)
```ts
import { connectSandboxDaemonClient } from "sandbox-agent";
const client = await connectSandboxDaemonClient({
spawn: { enabled: true },
});
await client.createSession("my-session", { agent: "claude" });
await client.postMessage("my-session", { message: "Hello" });
await client.dispose();
```
Autospawn uses the local `sandbox-agent` binary. Install `@sandbox-agent/cli` (recommended), or
set `SANDBOX_AGENT_BIN` to the binary path.
## Endpoint mapping
client.listAgents()
Maps to `GET /v1/agents`.
client.installAgent(agentId, body)
Maps to `POST /v1/agents/{agentId}/install`.
client.getAgentModes(agentId)
Maps to `GET /v1/agents/{agentId}/modes`.
client.createSession(sessionId, body)
Maps to `POST /v1/sessions/{sessionId}`.
client.postMessage(sessionId, body)
Maps to `POST /v1/sessions/{sessionId}/messages`.
client.getEvents(sessionId, params)
Maps to `GET /v1/sessions/{sessionId}/events`.
client.getEventsSse(sessionId, params)
Maps to `GET /v1/sessions/{sessionId}/events/sse` (raw SSE response).
client.streamEvents(sessionId, params)
Helper that parses SSE into `UniversalEvent` objects.
client.replyQuestion(sessionId, questionId, body)
Maps to `POST /v1/sessions/{sessionId}/questions/{questionId}/reply`.
client.rejectQuestion(sessionId, questionId)
Maps to `POST /v1/sessions/{sessionId}/questions/{questionId}/reject`.
client.replyPermission(sessionId, permissionId, body)
Maps to `POST /v1/sessions/{sessionId}/permissions/{permissionId}/reply`.