Skip to main content

Open-source runtime for general-purpose AI agents in isolated sandboxes.

Project description

Sandstorm

Claude Agent SDK, or any LLM, as a sandboxed agent in your Slack, on your infra.

CLI, HTTP API, Python client, Slack bot, and TypeScript client over the same runtime. Fresh E2B sandbox per thread, streaming, file uploads, replay, and OpenTelemetry traces out of the box.

CI PyPI Python 3.11+ License: MIT Deploy on Railway

Why this exists

Anthropic shipped Claude Managed Agents (April 2026): great sandbox, Anthropic-infra only, Claude-only. Vercel shipped Slack Agent Skill + Chat SDK: great Slack wizard, Vercel-only, TypeScript-only. Neither runs on your infrastructure; neither gives you other LLMs; neither emits to your observability backend.

Sandstorm is the intersection. Self-hosted, multi-provider, Slack-native, observable. The shortest path from pip install to a production agent that runs on your terms.

Who it's for

  • Teams who want Claude-style agents in Slack but can't send runtime traffic to Anthropic or Vercel.
  • Engineers on GPT-5 / Gemini / DeepSeek / Qwen / Kimi / Grok who still want the Claude Agent SDK's tool + skill + sandbox story.
  • Anyone running Langfuse / Phoenix / Langsmith who refuses to operate blind because their agent vendor keeps telemetry in a closed console.

What a run looks like

$ ds init research-brief && cd research-brief
$ ds "Research Acme's competitors, crawl their sites and recent news, and write a one-page briefing PDF with sources."

[tool: WebFetch]  competitor product pages + recent coverage
[tool: WebSearch] launches, pricing, positioning, buyer signals
[tool: Write]     briefing.pdf
[tool: Write]     reports/sources.md

--- Result: success | turns: 14 | cost: $0.0731 ---

artifacts:
  - briefing.pdf
  - reports/sources.md

Same prompt from Slack:

you:       @Sandstorm research Acme's competitors and post the briefing here
bot:       (paused thread sandbox resumed)
           🔧 WebFetch
           🔧 WebSearch
           🔧 Write
           Acme's top three competitors are ...
           [briefing.pdf uploaded]
           Model: sonnet | Turns: 14 | Cost: $0.0731 | Duration: 47.2s

Three things only OSS can do

  1. Self-host: runs on your Railway/Fly/K8s/Docker. Data stays in your network. E2B is available self-hosted; Anthropic's Managed Agents are Anthropic-infra only.
  2. Every LLM: Anthropic direct, OpenRouter (GPT-5, Gemini, DeepSeek, Qwen, Kimi, Grok), Vertex AI, Bedrock, Azure Foundry, any OpenAI-compatible base URL.
  3. Your observability: OTel export to Langfuse, Phoenix/Arize, Langsmith, or any OTLP backend. No vendor console.

Sandstorm vs the closed alternatives

Feature Sandstorm Claude Managed Agents Vercel Slack Agent Skill claude-code-slack-bot
Self-hosted ✅ (local)
Sandboxed per thread
Slack in the box
Multi-provider (not just Claude)
OTel traces to any backend
OSS license MIT Proprietary Apache templates MIT
Ships a TypeScript client
Session resume + replay

Full side-by-side in docs/comparison.md; "when should I pick each?" in docs/faq-vs-managed-agents.md.

60-second quickstart

pip install duvo-sandstorm
ds doctor                  # verify creds before running anything
ds init research-brief
cd research-brief
ds "Research Acme's competitors, crawl their sites, write a one-page brief with sources"

ds doctor is the fastest way to catch a missing ANTHROPIC_API_KEY / E2B_API_KEY / Slack scope before your first real query.

In Slack

pip install "duvo-sandstorm[slack]"
ds slack setup             # interactive, opens Slack app install in your browser
ds slack start             # Socket Mode (dev), use --http for production

Once installed:

  • @Sandstorm review PR 123 in owner/repo: agent picks up context, runs tests, posts review
  • /remember shipping address is Berlin: persisted per-user, per-workspace memory
  • /forget shipping address: case-insensitive substring delete
  • /memories: list what the bot remembers
  • /model claude-haiku-4-5-20251001: per-thread model override

Thread continuity is real: each thread keeps its own paused E2B sandbox, so uploaded files, generated outputs, and installed packages survive across messages, even across server restarts. See docs/memory.md.

Pick a starter

Starter Use when… Aliases
general-assistant One flexible agent for mixed workflows
research-brief Research a topic, compare options, support a decision competitive-analysis
document-analyst Review transcripts, reports, PDFs, or decks
support-triage Triage tickets into priorities, owners, next actions issue-triage
api-extractor Crawl docs and draft an API summary + OpenAPI spec docs-to-openapi
security-audit Structured security review with sub-agents and an OWASP skill
code-review Review GitHub PRs with the GitHub MCP, inline comments, CI logs pr-review

ds init --list for the current catalog.

Add toolpacks

ds add --list      # available: linear, notion, firecrawl, exa, github
ds add linear
ds add github

Each command wires the MCP server into sandstorm.json, seeds .env.example with the required API key, and makes the tools available to CLI / API / Slack runs from that project.

Replay a run with a different model

ds replay <run_id> --model claude-haiku-4-5-20251001 --budget 0.05

Forks the original agent session so the replay starts with identical context but on a fresh branch. A fast, cheap way to A/B compare models or reproduce bug-report runs. Reports cost Δ, latency Δ, and turn-count Δ as a markdown table. Details in docs/replay.md.

Install extras

pip install duvo-sandstorm                    # CLI + server
pip install "duvo-sandstorm[client]"          # Async Python client
pip install "duvo-sandstorm[slack]"           # Slack bot
pip install "duvo-sandstorm[telemetry]"       # OpenTelemetry

TypeScript client: npm install @duvo/sandstorm-client (see clients/typescript).

Deploy

  • Railway: one-click template, 30-second deploy
  • Docker: Dockerfile in repo root, docker-compose.yml for local
  • Self-host: pipx install duvo-sandstorm && ds serve
  • Langfuse-bundled local stack: docker compose -f deploy/docker-compose.langfuse.yml up

Docs

Community

If Sandstorm closes a gap for you, star the repo and open an issue or discussion with your use case. We read every one.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

duvo_sandstorm-0.9.0.tar.gz (505.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

duvo_sandstorm-0.9.0-py3-none-any.whl (120.0 kB view details)

Uploaded Python 3

File details

Details for the file duvo_sandstorm-0.9.0.tar.gz.

File metadata

  • Download URL: duvo_sandstorm-0.9.0.tar.gz
  • Upload date:
  • Size: 505.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for duvo_sandstorm-0.9.0.tar.gz
Algorithm Hash digest
SHA256 49a16c2e3f174e8d1b328e0c8480b88685be537f79adbad26dc7c7064b4af51e
MD5 e438f254958924c718fc2db7929d8f6f
BLAKE2b-256 cc58e89f5dd4e0412fb7069184a60fc21d6570e20e310ea0b60dd11bcb7f4687

See more details on using hashes here.

Provenance

The following attestation bundles were made for duvo_sandstorm-0.9.0.tar.gz:

Publisher: publish.yml on tomascupr/sandstorm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file duvo_sandstorm-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: duvo_sandstorm-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 120.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for duvo_sandstorm-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9aa7c8584127e817464c0f3decfa0334a035083fe5df666c14637be09cf40cab
MD5 6f9e9699cecb39499c61a1b230739110
BLAKE2b-256 b380e7d9380e5a0b9e756d55833bb9e884a9cf238bd7659b33b5a433ea411298

See more details on using hashes here.

Provenance

The following attestation bundles were made for duvo_sandstorm-0.9.0-py3-none-any.whl:

Publisher: publish.yml on tomascupr/sandstorm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page