Sandcastle runs your agent workflows so you don't have to. Parallel execution,
budget guardrails, human-in-the-loop approvals, policy enforcement - all out of the box.
Just sandcastle serve and you're live.
$ pip install sandcastle-ai
$ sandcastle serve
That's it. Two commands. No PostgreSQL, Redis, or S3 needed - Sandcastle auto-detects empty config and starts in local mode with SQLite + in-process queue.
Or from source: git clone https://github.com/gizmax/Sandcastle.git && cd Sandcastle && uv sync && uv run sandcastle serve
Sandstorm is a brilliant piece of engineering - one API call, a full agent, completely sandboxed. It nails the core problem: giving agents full system access without worrying about what they do with it.
But when you start building real products on top of it, the glue code piles up fast. You need orchestration, retries, scheduling, cost controls, approvals, and monitoring - none of which are Sandstorm's job.
Sandstorm = the engine.
Sandcastle = the product you build with it.
Sandcastle adds the orchestration layer Sandstorm doesn't need to have.
Define multi-step pipelines in YAML. Dependencies, parallel branches, data passing between steps.
Steps at the same DAG layer run concurrently. Fan out over lists with configurable concurrency.
Replay from any step or fork with changes. Checkpoints restore prior outputs so you only pay for what re-runs.
Pause workflows for human review. Approve, reject, or edit the data before the next step runs.
A/B test models and prompts per step. Automatic quality evaluation and best-variant deployment.
Declarative rules for PII redaction, secret blocking, cost guards. Applied per step or globally.
SLO-based model routing. Define quality, cost, and latency constraints - let the optimizer pick the model.
Just sandcastle serve. Auto-detects local vs production - SQLite or PostgreSQL, in-process or Redis.
Marketing, sales, support, HR, legal, and product templates ready to use. Blog to Social, Lead Enrichment, Contract Review, and more.
Live SSE event stream. See runs complete, steps execute, and errors appear instantly. No page refresh needed.
No SDKs, no boilerplate. Declare your pipeline, Sandcastle handles the rest.
name: "Lead Enrichment"
sandstorm_url: "${SANDSTORM_URL}"
default_model: sonnet
default_timeout: 300
steps:
- id: "scrape"
prompt: |
Visit {input.target_url} and extract:
company name, employees, product, contact.
output_schema:
type: object
properties:
company_name: { type: string }
employees: { type: integer }
- id: "enrich"
depends_on: ["scrape"]
prompt: |
Given: {steps.scrape.output}
Research revenue, industry, decision makers.
retry:
max_attempts: 3
backoff: exponential
- id: "score"
depends_on: ["enrich"]
prompt: "Score this lead 1-100: {steps.enrich.output}"
model: haiku # cheaper for simple scoring
on_complete:
storage_path: "leads/{run_id}/result.json"
Each step runs inside a Sandstorm sandbox - full system access, completely isolated. Sandcastle handles the orchestration between them.
depends_on{steps.id.output}Runs, costs, schedules, dead letters, approvals, experiments, policy violations - all in one place. Includes a visual workflow builder for drag-and-drop pipeline design.
Skip the blank page. Pick a template, tweak the prompts, and ship. Every category covers real production use cases.
No exotic dependencies. Battle-tested tools you already know. Local mode needs zero infrastructure.
Sandcastle is fully open source under the MIT license. No paid tiers, no feature gates, no "contact sales" buttons. Every feature you see on this page ships in the free version - because there is only one version.
I built Sandcastle in my free time and I plan to keep improving it - new features, better docs, bug fixes, community support. If it saves you time or you just think it's cool, a coffee goes a long way.
It keeps me caffeinated and motivated to ship the next update.
โ Buy Me a Coffee