# BoxRouter > Run sandboxes, coding agents, and GitHub Actions jobs on any provider through one API. The Python, TypeScript, and CLI clients read the API key from `BOXROUTER_API_KEY`. Errors carry `error.code` and `error.outcome`. Add `.md` to any page address for its Markdown. [skill.md](https://boxrouter.ai/docs/skill.md) is a one-page task sheet. Install the CLI, the `boxrouter` command, with `curl -fsSL https://boxrouter.ai/install | sh` on macOS and Linux or `irm https://boxrouter.ai/install.ps1 | iex` in Windows PowerShell ([Use the CLI](https://boxrouter.ai/docs/cli.md)). For a request shape, run `boxrouter --help` or open the operation line in [llms-reference.md](https://boxrouter.ai/docs/llms-reference.md). ## Start Here - [Sandboxes: Run Your First Sandbox](https://boxrouter.ai/docs/quickstart.md): Create a sandbox, run echo hello in it, and destroy it, from Python, TypeScript, the CLI, or HTTP. - [Agents: Launch an Agent](https://boxrouter.ai/docs/launch/quickstart.md): Launch a catalog coding agent in a sandbox from the CLI, work in its terminal, and confirm the sandbox is destroyed. - [GitHub Actions: Run Your First GitHub Job](https://boxrouter.ai/docs/actions/quickstart.md): Connect GitHub, turn on a private repository, change one runs-on line, and watch the job run in a BoxRouter sandbox. ## Get Started - [BoxRouter Documentation](https://boxrouter.ai/docs/index.md): One API for agent sandboxes, coding agents, and GitHub Actions jobs on any provider. - [Run Your First Sandbox](https://boxrouter.ai/docs/quickstart.md): Create a sandbox, run echo hello in it, and destroy it, from Python, TypeScript, the CLI, or HTTP. - [Set Up Your Account](https://boxrouter.ai/docs/setup.md): Create a BoxRouter API key, decide whether your own provider account or Credits pays for compute, and set up your terminal. ## Sandboxes - [Create a Sandbox](https://boxrouter.ai/docs/sandboxes.md): Create a sandbox with the size and lifetime your job needs, reuse it by ID from any process, and destroy it. - [How a Sandbox Runs and Ends](https://boxrouter.ai/docs/lifecycle.md): See the states a sandbox moves through, what each keeps and bills, and the four clocks that can stop work in it. - [Run Commands](https://boxrouter.ai/docs/commands.md): Run a shell command in a sandbox, read its output and exit code, and know what happens when it runs too long. - [Run a Background Process](https://boxrouter.ai/docs/processes.md): Start a long command or a server, read its output by offset, reconnect from another process, and cancel it. - [Work with Files](https://boxrouter.ai/docs/files.md): Write a file into a sandbox, run a command against it, and read the result back. - [Keep Files Across Sandboxes](https://boxrouter.ai/docs/volumes.md): Write files in one sandbox, destroy it, and read them in the next, on the same provider or another. - [Choose a Sandbox Image](https://boxrouter.ai/docs/images.md): Pick the image a sandbox starts from, check the shell tools it needs, and prepare it ahead so first starts are fast. - [Image Contents](https://boxrouter.ai/docs/image-contents.md): Look up what the standard image, the agents image, and the Actions runner image contain, which runs when, and how each is selected. - [Pause, Resume, and Extend](https://boxrouter.ai/docs/pause-resume.md): Pause a sandbox to stop its compute and keep its files, resume it, extend its lifetime, or let idle shutdown do it for you. - [Connect to a Sandbox](https://boxrouter.ai/docs/connect.md): Open an interactive terminal or a preview URL for a running sandbox, and see why SSH is not offered. ## Routing and Providers - [How Routing Works](https://boxrouter.ai/docs/routing.md): BoxRouter skips any route that can't do what you asked, orders the rest by your preferences, and tries the next only if creating the sandbox fails. - [Set Workspace Routing](https://boxrouter.ai/docs/routing-settings.md): Choose how your workspace orders providers, which providers it never uses, and whether a key or Credits pays first. - [Capabilities and Isolation](https://boxrouter.ai/docs/provider-support.md): See which parts of the Sandbox Provider Spec BoxRouter supports, what every provider does the same, and how to check which routes fit your workload. ## Errors and Limits - [Recover from Errors](https://boxrouter.ai/docs/errors.md): Use an error's outcome to tell whether your work started, then recover by symptom without creating duplicates. - [Check Your Limits](https://boxrouter.ai/docs/limits.md): Find which limits are fixed, which come from your route, workspace, or provider account, and what to do when you hit one. ## Cost and Billing - [How Sandbox Cost Works](https://boxrouter.ai/docs/cost.md): See who bills a sandbox, read its cost and the evidence behind it, and find your usage totals. - [Connect a Provider Key](https://boxrouter.ai/docs/provider-keys.md): Connect your own provider key for BYOK, know where BoxRouter keeps it, and rotate or remove it. - [Buy and Manage Credits](https://boxrouter.ai/docs/credits.md): Buy credits, find invoices and receipts, request a refund, and top up automatically. - [Run While Funded](https://boxrouter.ai/docs/run-while-funded.md): Create a sandbox with credits and no fixed lifetime, so it keeps running while your balance covers it, and read how far it is funded. - [Cap Your Spend](https://boxrouter.ai/docs/spend-limits.md): Cap what a workspace can spend on BoxRouter-billed sandboxes. ## Security and Privacy - [What BoxRouter Keeps](https://boxrouter.ai/docs/data-retention.md): See what BoxRouter keeps, for how long, and what deleting a sandbox, a volume, or your account removes. ## Clients - [Use the Python SDK](https://boxrouter.ai/docs/python.md): Install the BoxRouter Python SDK, configure it, choose sync or async, and handle its errors. - [Use the TypeScript SDK](https://boxrouter.ai/docs/typescript.md): Install the BoxRouter TypeScript SDK, configure it, close it, and handle its errors. - [Use the CLI](https://boxrouter.ai/docs/cli.md): Create, use, and destroy sandboxes from your terminal or a shell script, and call any API operation by name. - [Find an SDK or CLI Call](https://boxrouter.ai/docs/sdk.md): Find the Python, TypeScript, or CLI call for a sandbox task. ## Agents: Launch an Agent - [Launch an Agent](https://boxrouter.ai/docs/launch/quickstart.md): Launch a catalog coding agent in a sandbox from the CLI, work in its terminal, and confirm the sandbox is destroyed. - [Choose a Catalog Agent](https://boxrouter.ai/docs/launch/agents.md): List the agents your workspace can launch, inspect what one runs, and choose how it gets model access. - [Launch Your Own Agent](https://boxrouter.ai/docs/launch/your-own-agent.md): Launch a GitHub repository, a manifest, or a container image in a BoxRouter sandbox, from the CLI or the launch API. - [Launch a Private Repository](https://boxrouter.ai/docs/launch/private-repositories.md): Check that your workspace can read a private repository, then launch from a pinned commit. - [Supply an Agent's Secrets](https://boxrouter.ai/docs/launch/secrets.md): Save encrypted workspace secrets once and let each launch resolve them by name. - [Run Copies of an Agent](https://boxrouter.ai/docs/launch/copies.md): Start N copies of one unattended manifest, watch the run, read what each wrote, and stop it. - [Configure a Launch Manifest](https://boxrouter.ai/docs/launch/manifest.md): Look up every manifest field, the order launch prepares them in, and the time limits that bound preparation. ## Agents: Integrations - [Choose an Agent Integration](https://boxrouter.ai/docs/integrations/overview.md): Pick the BoxRouter integration that fits your agent stack, and see how the two OpenAI ones differ. - [Use the OpenAI Agents SDK](https://boxrouter.ai/docs/integrations/openai-agents-sdk.md): Give an OpenAI Agents SDK agent a BoxRouter sandbox to run shell commands in. - [Use the Vercel AI SDK](https://boxrouter.ai/docs/integrations/vercel-ai-sdk.md): Use a BoxRouter sandbox as the sandbox provider for a Vercel AI SDK harness. - [Run Claude Managed Agents](https://boxrouter.ai/docs/integrations/claude-managed-agents.md): Run Anthropic's self-hosted environment worker in a BoxRouter sandbox, so Claude's tool calls execute there. - [Use the OpenAI Agents API](https://boxrouter.ai/docs/integrations/openai-agents-api.md): Connect an OpenAI Agents API session to an executor running in a BoxRouter sandbox. ## GitHub Actions: Get Started - [Run Your First GitHub Job](https://boxrouter.ai/docs/actions/quickstart.md): Connect GitHub, turn on a private repository, change one runs-on line, and watch the job run in a BoxRouter sandbox. - [Connect GitHub](https://boxrouter.ai/docs/github/connect.md): Install or link the BoxRouter GitHub App, choose which repositories it can reach, and see what each permission is for. - [Move a Workflow](https://boxrouter.ai/docs/actions/migrate.md): Change the runs-on line of the jobs that fit, check the result, and revert the line to roll back. ## GitHub Actions: Run Jobs - [How Actions Works](https://boxrouter.ai/docs/actions/how-it-works.md): Follow a GitHub job from queued to finished, see who pays for it, and learn what does and does not persist. - [Find a Run](https://boxrouter.ai/docs/actions/runs.md): Find a GitHub Actions run in BoxRouter, follow its sandbox and cost, and cancel or re-run it. - [Troubleshoot Actions](https://boxrouter.ai/docs/actions/troubleshooting.md): Fix a repository that is not ready, a job that stays queued, or a refused run, starting from the status or reason code you see. - [How Actions Security Works](https://boxrouter.ai/docs/actions/security.md): See which jobs BoxRouter runs, what a job can reach, and why your secrets stay in GitHub. ## GitHub Actions: Reference - [Choose a Runner](https://boxrouter.ai/docs/actions/runners.md): Look up the labels, sizes, preinstalled tools, and time limits of a BoxRouter Actions runner. ## API Reference - [Call the BoxRouter API](https://boxrouter.ai/docs/api-overview.md): Authenticate a BoxRouter API request, follow the sandbox workflow, retry a mutation safely, and find the endpoint you need. - [Error Codes](https://boxrouter.ai/docs/error-codes.md): Look up an API error code to see its HTTP status, whether your work started, whether to retry, and what to do next. - [Operation Index](https://boxrouter.ai/docs/llms-reference.md): One line per API operation with its request fields, and a link to its reference page. - [OpenAPI JSON](https://boxrouter.ai/docs/openapi.json): The full contract, about 1 MB. Do not load it whole; use the operation index. - [OpenAPI YAML](https://boxrouter.ai/docs/openapi.yaml): The same contract in YAML.