# bhatti

Your metal. Machines on demand.

Source: https://wheredoirunthis.com/products/bhatti · JSON: https://wheredoirunthis.com/api/products/bhatti · Read on 2026-10-14

## At a glance

- Type: Sandbox
- Kind: Open source tool
- Isolation: Virtual machine
- Free tier: Not documented
- Starting price: Not disclosed
- GPU: No
- Regions: Not disclosed
- Coverage: 18 of 61 assessed capabilities supported
- Agent readiness: read 7 of 10 signals, drive 6 of 10 signals

## Links

- Homepage: https://bhatti.sh/
- Docs: https://bhatti.sh/docs/quickstart/
- Repository: https://github.com/sahil-shubham/bhatti

## Website design

Desktop public website · assessed 2026-10-14

Complete assessment.

Dark developer-facing website with restrained orange accents, a terminal-led two-column landing page and dense, three-column documentation. Landing and docs captured; hosted pricing not applicable.

- Styles: Retro-computing
- Landing page: captured
- Pricing: not applicable
- Docs: captured

## Runtime

- **GPU & accelerators**: No — "No GPU-backed workload offering found in current README or docs." [source](https://bhatti.sh/llms-full.txt) (confidence: high)
- **BYOC (Bring your own cloud)**: Not documented — "BYOC (a managed control plane deploying into the customer's cloud account) does not apply — bhatti IS self-hosted on the operator's own metal; there is no managed control plane." (source: n/a (self-host tool)) (confidence: high)
- **Secrets management**: Yes — "age-encrypted per-user values injected into guest environment; real values are in RAM and unencrypted memory snapshots." [source](https://bhatti.sh/docs/managing/secrets/) (confidence: high)
- **Storage options**: qcow2 root disks + named volumes; optional backups to external S3-compatible storage — "v2 qcow2 removes btrfs requirement. Backups require operator-provided S3 bucket." [source](https://bhatti.sh/llms-full.txt) (confidence: high)
- **Supported workloads**: ai-agent-sandboxes, pr-preview-environments, dev-environments, general-linux-vms — "Homepage: one sandbox per AI agent; preview environment per PR with public URL + scale-to-zero; 'Postgres, browser automation, full desktops — it all just works' (anything you can put in a rootfs)." [source](https://bhatti.sh/) (confidence: high)
- **Persistence**: persistent — "qcow2 per-sandbox disks, named volumes, saved images and memory snapshots." [source](https://bhatti.sh/llms-full.txt) (confidence: high)
- **Data jurisdiction**: Not documented — "Data residency / jurisdiction is the operator's choice (you run it on your own hardware) — not a product facet." (source: n/a (self-host tool)) (confidence: high)
- **Resource limits & quotas**: Operator-sized single host; per-user sandbox/CPU/memory/storage quotas; file writes capped at 100 MB — "API documents quota errors 403/429 and 100 MB file-write cap; no hosted capacity guarantee." [source](https://bhatti.sh/llms-full.txt) (confidence: high)
- **SDK languages**: Not documented — "Official CLI and hand-curated HTTP API; no official client SDK found." [source](https://bhatti.sh/llms-full.txt) (confidence: high)
- **Network & egress controls**: Default public-internet-only gateway; private ranges blocked unless explicit allow-CIDR; host/metadata always blocked — "Public internet allowed. Private ranges denied unless explicit allow-CIDR. Loopback/link-local/host/multicast/cloud metadata never allowable. No general per-sandbox destination allowlist documented." [source](https://bhatti.sh/docs/under-the-hood/networking/) (confidence: high)
- **Snapshots & forks**: Yes — "VM memory/process snapshots restore into a fresh krucible VM; snapshots and forks documented." [source](https://bhatti.sh/llms-full.txt) (confidence: high)
- **Deployment methods**: cli, api, container-image — "bhatti create via CLI/HTTP API; OCI pull and Docker import." [source](https://bhatti.sh/llms-full.txt) (confidence: high)
- **Isolation**: Virtual machine — "Current v2 uses krucible, a libkrun fork: own-kernel microVMs via KVM on Linux and HVF on macOS. vm is the existing general VM token; not Firecracker or gVisor compute isolation. gVisor is only the network stack." [source](https://raw.githubusercontent.com/sahil-shubham/bhatti/main/README.md) (confidence: high)

## Capabilities

### AI & agents

| Capability | Status | Evidence |
| --- | --- | --- |
| Agent skills | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: agent-skills. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| AI app builder | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: app-builder. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Autonomous QA agent | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: autonomous-qa-agent. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Built-in coding agent | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: built-in-agent. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| BYOK for LLMs | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: byok-llm. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Credential-injection proxy | Not supported | "From that moment on, the secret lives as bytes in guest RAM and is captured into the memory image (`memory.img`) on snapshot. [Real keys enter the workload; no credential proxy evidenced.]" [source](https://bhatti.sh/docs/managing/secrets/) |
| LLM gateway | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: llm-gateway. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| MCP client | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: mcp-client. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| MCP-server hosting | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: mcp-hosting. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| MCP server | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: mcp-server. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Model inference API (first-party) | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: model-inference-api. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Preinstalled coding agent | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: preinstalled-coding-agent. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |

### Networking & delivery

| Capability | Status | Evidence |
| --- | --- | --- |
| Automatic HTTPS | Supported | "bhatti can issue individual certificates via Let’s Encrypt" [source](https://bhatti.sh/docs/managing/custom-domain/) |
| Custom domains | Supported | "With a custom domain, published sandboxes get proper URLs like `my-app.yourdomain.com` with TLS." [source](https://bhatti.sh/docs/managing/custom-domain/) |
| Direct public IPv6 | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: direct-ipv6. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Edge KV store | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: edge-kv. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Egress controls | Partially supported | "Private ranges (RFC-1918, ULA, CGNAT) — denied unless an explicit allow-CIDR opts them back in. [Default guard, not a documented general per-sandbox allowlist.]" [source](https://bhatti.sh/docs/under-the-hood/networking/) |
| Email send / receive | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: email-send-receive. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Public preview URLs | Supported | "bhatti publish desktop -p 6080" [source](https://raw.githubusercontent.com/sahil-shubham/bhatti/main/README.md) |
| Private networking | Supported | "Same-owner sandboxes can reach each other" [source](https://bhatti.sh/docs/under-the-hood/networking/) |
| Built-in reverse proxy | Supported | "Public proxy" [source](https://bhatti.sh/_llms-txt/api-reference.txt) |

### Organisation & security

| Capability | Status | Evidence |
| --- | --- | --- |
| Built-in auth | Partially supported | "Every authenticated endpoint requires a Bearer token [control-plane IAM, not an application auth SDK]." [source](https://bhatti.sh/_llms-txt/api-reference.txt) |
| BYOC | Not applicable | "No managed control plane; the entire product is self-hosted." [source](https://bhatti.sh/llms-full.txt) |
| Deploy into customers' VPCs | Not applicable | "Self-host utility, no vendor-managed nested customer deployment service." [source](https://bhatti.sh/llms-full.txt) |
| Secrets management | Supported | "bhatti stores them encrypted, scoped per user, and injects them as environment variables when a sandbox boots." [source](https://bhatti.sh/docs/managing/secrets/) |
| Self-host / OSS core | Supported | "Self-host on any Linux box with KVM" [source](https://raw.githubusercontent.com/sahil-shubham/bhatti/main/README.md) |
| Sharing | Supported | "Only one share link is active at a time per sandbox." [source](https://bhatti.sh/llms-full.txt) |
| SSO / SAML | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: sso-saml. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Teams | Supported | "bhatti user create" [source](https://bhatti.sh/_llms-txt/cli-reference.txt) |
| Workload identity | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: workload-identity. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |

### Developer access

| Capability | Status | Evidence |
| --- | --- | --- |
| CLI | Supported | "bhatti create --name dev --cpus 2 --memory 1024" [source](https://raw.githubusercontent.com/sahil-shubham/bhatti/main/README.md) |
| E2B-compatible API | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: e2b-compatible-api. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Filesystem API | Supported | "GET /sandboxes/:id/files" [source](https://bhatti.sh/_llms-txt/api-reference.txt) |
| Git deploy | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: git-deploy. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| HTTP data API | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: http-query-api. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| OpenAPI spec | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: openapi-spec. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Private container registry | Not supported | "For real private registries with rotating credentials, prefer `image import` after a local `docker pull`. [Import support does not provide a hosted private registry.]" [source](https://bhatti.sh/_llms-txt/api-reference.txt) |
| Public API | Supported | "The bhatti server exposes a REST API over HTTP." [source](https://bhatti.sh/_llms-txt/api-reference.txt) |
| SDK | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: sdk. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| SSH access | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: ssh-access. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |

### Compute & storage

| Capability | Status | Evidence |
| --- | --- | --- |
| Cloud-init / ignition config | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: cloud-init-config. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Desktop / computer-use sandbox | Supported | "Full desktop: XFCE, KasmVNC, Chromium" [source](https://raw.githubusercontent.com/sahil-shubham/bhatti/main/README.md) |
| GPU compute | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: gpu. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Live-state (memory) snapshots | Supported | "It restores the memory image into a fresh krucible VM and resumes. The env vars are already in the guest’s process memory." [source](https://bhatti.sh/docs/managing/secrets/) |
| Multi-region | Not applicable | "Placement is operator-owned; no first-party region service." [source](https://bhatti.sh/llms-full.txt) |
| Object storage | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: object-storage. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Persistent disk | Supported | "storage onto host-independent qcow2 (no more btrfs requirement)" [source](https://raw.githubusercontent.com/sahil-shubham/bhatti/main/README.md) |
| Sandbox templates / custom images | Supported | "Each tier is a pre-built Ubuntu 24.04 image" [source](https://raw.githubusercontent.com/sahil-shubham/bhatti/main/README.md) |
| Scale to zero | Supported | "A paused sandbox wakes and serves an HTTP request in **under 4ms**." [source](https://raw.githubusercontent.com/sahil-shubham/bhatti/main/README.md) |
| Selectable isolation runtime | Not supported | "main is bhatti v2. It replaces Firecracker with krucible [v1 is a frozen separate branch, not a per-workload runtime choice]." [source](https://raw.githubusercontent.com/sahil-shubham/bhatti/main/README.md) |
| Snapshots / forking | Supported | "snapshot / restore" [source](https://bhatti.sh/llms-full.txt) |

### Data

| Capability | Status | Evidence |
| --- | --- | --- |
| Database branching | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: database-branching. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Ephemeral instant DB (no-signup) | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: ephemeral-instant-db. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| First-party database | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: first-party-db. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Vector search | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: vector-search. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |

### Platform & operations

| Capability | Status | Evidence |
| --- | --- | --- |
| Managed CI/CD runners | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: managed-ci-runners. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Built-in observability | Partially supported | "bhatti ps [CLI process diagnostics and admin events, not a full metrics/tracing stack.]" [source](https://bhatti.sh/_llms-txt/cli-reference.txt) |
| Preview environments | Partially supported | "One sandbox per pull request. [Documented CLI workflow, not a managed Git lifecycle integration.]" [source](https://bhatti.sh/) |
| Scheduled tasks | Partially supported | "Optional. Array of automatic backup schedules. Each entry has `volume`, `cron` [backup scheduling only; no general workload cron found]." [source](https://bhatti.sh/llms-full.txt) |
| Project template marketplace | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: template-marketplace. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |
| Durable workflows | Not supported | "Not found in the freshly reviewed current README, CLI/API references, and full docs: workflows-durable. Absence from reviewed documentation, not an execution test." [source](https://bhatti.sh/llms-full.txt) |

## Agent readiness

### Read: 7 of 10 signals present

7/10 signals (5 full, 2 partial)

- Llms txt: pass — "Rich current index links CLI/API/complete docs and agents.md: https://bhatti.sh/llms.txt"
- Llms full txt: pass — "Fresh comprehensive 898589-character rendered docs, including v2 and historical v1: https://bhatti.sh/llms-full.txt; retained POINTER."
- Robots AI policy: partial — "Fresh https://bhatti.sh/robots.txt contains content-signal preamble only, no operative AI User-agent rule."
- JSON LD: fail — "Fresh rendered https://bhatti.sh/ HTML checked for application/ld+json."
- Sitemap: fail — "Fresh browser-like HTTP https://bhatti.sh/sitemap.xml returns 404; robots has no Sitemap pointer. Earlier foxcrawl empty-response failure recovered."
- Meta quality: pass — "https://bhatti.sh/ has title, description and Open Graph metadata."
- Markdown negotiation: fail — "Fresh GET https://bhatti.sh/ with Accept: text/markdown returns HTTP 200 text/html; /index.md returns 404. Evidence retained."
- Content efficiency: pass — "Fresh anonymous Chromium DOM: 9548 UTF-8 visible-text bytes / 104359 HTML bytes = 9.15%, above 5%; https://bhatti.sh/."
- Docs discoverable: pass — "https://bhatti.sh/ nav links Docs directly to /docs/quickstart/."
- Pricing machine readable: na — "Self-host only — free under Apache-2.0, no hosted pricing surface to be machine-readable"
- Anti bot: partial — "Python urllib blocked by Cloudflare 1010 on public paths; foxcrawl and anonymous Chromium recovered landing/docs and most text sources."

### Drive: 6 of 10 signals present

6/10 signals (4 full, 2 partial)

- Public API: pass — "Documented HTTP API (API Reference, response shapes + curl examples); the CLI is a client over it"
- Openapi spec: fail — "Fresh browser-like HTTP /openapi.json and /swagger.json return 404; no linked spec in hand-curated API docs."
- MCP server: fail — "No Model Context Protocol documentation in fresh full docs/README; /.well-known/mcp returns 404 with browser-like HTTP client."
- SDK packages: fail — "Fresh CLI/API reference and README document CLI and raw HTTP only; no official client SDK found."
- Auth docs: pass — "API-key auth documented: --token/BHATTI_TOKEN, `bhatti setup`, per-user keys, `user rotate-key`, scoped share tokens"
- Agent self serve creds: na — "Self-host: no hosted signup; creds are minted by the operator via `bhatti user create` (server-only). Hosted-endpoint check — dropped from the denominator."
- Webhooks: fail — "No webhooks documented in fresh full docs; event log is not outbound webhook support."
- CLI tool: pass — "Comprehensive official CLI (fresh reference reference) — the primary interface"
- Error model: pass — "https://bhatti.sh/llms-full.txt: Errors use {"error": "...", "request_id": "..."}; named status-code table."
- Rate limit docs: partial — "https://bhatti.sh/llms-full.txt documents 429 quota/rate-limit status and caps; no rate-limit response headers found."
- Agent config: partial — "https://bhatti.sh/agents.md is substantive; llms discovery files are documentation, not separate agent configuration formats."

## Open source

- Repository: https://github.com/sahil-shubham/bhatti
- License: Apache-2.0
- Stars: 268
- Forks: 10
- Self-host methods: binary, source-build

## Company & presence

- Founded: 2026
- GitHub: https://github.com/sahil-shubham/bhatti
- Website / Docs: https://bhatti.sh/
- GitHub Releases: https://github.com/sahil-shubham/bhatti/releases

## Nearby in the atlas

- [Agent Safehouse](/products/agent-safehouse.md)
- [Agent Sandbox](/products/agent-sandbox.md)
- [Agent Substrate](/products/agent-substrate.md)
- [Agent37](/products/agent37.md)
- [AgentNest](/products/agentnest.md)
- [Anthropic Sandbox Runtime (srt)](/products/sandbox-runtime.md)

## Method

Facts come from the product's own public pages. Each claim carries its evidence: a quote and the page it came from. We count capabilities rather than grade products, and "Not assessed" means we have not checked, never that the product lacks it.
