loading…

ZACS EXPERIMENTAL DATA AGENT

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.

WHAT IT DOES

Brutalist chat interface with sidebar for data files and conversations

Chat-first interface

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.

Generated A2UI dashboard with stats, tables, and bar charts

Agent-authored dashboards

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.

HOW IT WORKS

  1. 01
    Upload your data. CSV, JSON, Parquet, or NDJSON files land in per-user R2 storage.
  2. 02
    Chat with the agent. Ask a question in plain English. A WebSocket to your own per-user agent streams text + tool calls as the model thinks; conversations and scheduled reports persist inside that agent's own SQLite.
  3. 03
    DuckDB executes. Your data loads into an isolated Cloudflare Sandbox; the agent runs SQL against it and iterates on results.
  4. 04
    Dashboards ship live. The agent authors A2UI pages that re-query DuckDB as you view them — not static snapshots.
  5. 05
    Reports run themselves. Save a prompt + cadence and the agent fires it on its own alarm, emailing you the rich answer. Reply by email to keep the thread going.

THE STACK

Cloudflare Workers

Serverless edge runtime hosting the Hono app.

Cloudflare Agents SDK

One DataAgent Durable Object per user — owns chat history, the inbound-email lifecycle, and self-paced report alarms.

Durable Objects · Sandbox

One isolated container per user (15-minute sleep window) for the heavyweight DuckDB process.

DuckDB

Analytical SQL engine running inside the sandbox; state replays from an append-only manifest on cold start.

R2

Object storage: user files, versioned dashboards, DuckDB reconstruction manifest.

D1

SQLite for the user + OTP tables — auth state only. Conversations and reports live on the agent.

Claude Haiku 4.5

Anthropic's streaming model drives the agent tool loop.

A2UI

Zod-validated component schema with a DOM renderer for dashboards.

Hono

Typed router + middleware for auth, files, query, dashboards, reports.

Alpine.js + agents/client

Reactive SPA. Chat connects to the user's agent over a single persistent WebSocket; sidebar list + resume use the SDK's typed RPC stub.

Drizzle

Typesafe ORM over D1; migrations checked into the repo.

Resend

Magic-link + 6-digit OTP email delivery.

Vite · TypeScript

Dev server + build; strict types end to end.

HOW IT COMBINES

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.

DATA AGENT

agentic data analysis

by SandwichLabs

We'll send a 6-digit code to your email.

DATA AGENT

Check your email

We sent a 6-digit code to

DATA AGENT

Pending approval

Your account is waiting for an admin to approve access. We'll notify you once you're in.

DATA AGENT SandwichLabs
DATA AGENT