loading…
POWERED BY SANDWICHLABS
Upload data. Chat with an agent. Get live dashboards. All running on Cloudflare's edge, one isolated sandbox per user.
experimental — access is approval-gated; this is not a production service.
Streaming Anthropic agent loop (Claude Haiku 4.5) over a persistent WebSocket to your own per-user agent. Live tool-call reasoning, conversations resume across reloads. Upload CSV, JSON, Parquet or NDJSON; seed a K-12 demo dataset in one click.
The agent writes DuckDB SQL, then composes A2UI pages — stats, tables, bar charts, callouts — that re-query your data live. Saved, versioned, and reopenable as tabs.
Serverless edge runtime hosting the Hono app.
One DataAgent Durable Object per user — owns chat history, the inbound-email lifecycle, and self-paced report alarms.
One isolated container per user (15-minute sleep window) for the heavyweight DuckDB process.
Analytical SQL engine running inside the sandbox; state replays from an append-only manifest on cold start.
Object storage: user files, versioned dashboards, DuckDB reconstruction manifest.
SQLite for the user + OTP tables — auth state only. Conversations and reports live on the agent.
Anthropic's streaming model drives the agent tool loop.
Zod-validated component schema with a DOM renderer for dashboards.
Typed router + middleware for auth, files, query, dashboards, reports.
Reactive SPA. Chat connects to the user's agent over a single persistent WebSocket; sidebar list + resume use the SDK's typed RPC stub.
Typesafe ORM over D1; migrations checked into the repo.
Magic-link + 6-digit OTP email delivery.
Dev server + build; strict types end to end.
A request hits the Worker (Hono). Auth middleware verifies an
HMAC-signed session against D1. The browser opens a WebSocket to
its own per-user agent at /agents/data-agent/{userId};
the same session cookie gates the upgrade. Each chat turn streams
Claude tool-call reasoning back as JSON event frames. Tool dispatch
calls into the user's Sandbox Durable Object, which shells out to
the DuckDB CLI against a workspace DB. load_data and
mutating query_sql calls append to a per-user manifest
in R2, so a cold sandbox replays its way back to a populated DB.
Inbound email routes through the same agent's
onEmail hook; scheduled reports register a per-user
alarm via this.schedule and tick on their own without
any shared cron. Dashboard output is validated against the A2UI
schema, persisted as versioned JSON in R2, and rendered client-side
with live re-queries against /api/query.
agentic data analysis
by SandwichLabs
We sent a 6-digit code to
Your account is waiting for an admin to approve access. We'll notify you once you're in.
Try asking…
Click SEED SAMPLE DATA in the sidebar to load the K-12 demo, or upload a CSV / JSON / Parquet file to get started.