Driven by your coding agent · CLI + MCP

Your agent has the brains.
tabledi gives it a table it can trust.

Your coding agent connects your data, shapes it, and serves it live to your team — deterministic, self-hostable, built for millions of rows.

No AI bundled · bring Claude Code, Codex or Cursor · your model key

  tabledi skill · Claude Code
yoroll up last night's eval — every prompt variant, pass rate + cost
read 480 run logs (jsonl) · 6 variants
typed sheet created · variant × pass% × $/run
yowhich variant wins per dollar?
query · best variant per dollar · deterministic · gen #12
yolet the team watch this live
3 teammates invited · live table + pivot · re-ranks as runs land
📊
eval-board · shared workspace · updating live
What your agent gets done

Say it in plain English. Your agent makes it real.

tabledi ships no AI of its own — your coding agent drives it. One tool surface underneath, so every step is the same whether it comes from chat, CLI, or MCP.

🔗

Connect anything

Postgres, MySQL, Mongo, CSV/Excel, HTTP feeds — even a published Google Sheet by its CSV link. Linked live, auto-syncing, resilient.

You say"watch this sheet — here's the CSV link"
tabledi channel add https://…/pub?output=csv
🧮

Merge & shape

Joins, rollups, formulas, dedupe — derived tables that recompute incrementally.

You say"merge these into a daily P&L"
tabledi derive merge ops.* --rollup day
👥

Share it live

Invite teammates into the workspace — same tables, same views, formulas intact, updating in realtime. No exports, no stale screenshots.

You say"let the team watch this live"
POST /v1/workspaces/{ws}/invitations
💬

Ask in plain language

Your agent turns questions into queries — deterministic, generation-stamped answers.

You say"top 10 regions by margin"
tabledi query 'SELECT region…'
🎯

Same answer, every time

Ask the same thing 100 times, get the same number 100 times — with lineage you can replay.

You getgen-stamped, verifiable results
gen #204 · deterministic
🔒

Run it yourself

A single Rust binary on your infra, or embedded in-process over a C ABI. No data leaves.

You say"keep our data in-house"
docker run -v tabledi_data:/data tabledi/server
Real example

Your ops sheet works too — no OAuth dance.

Publish the workbook's tabs to the web as CSV (File → Share → Publish to web), hand the links to channels, and they stay synced. If the source flakes, the channel backs off, breaks the circuit, and keeps serving the last good rows.

  tabledi skill · Claude Code
yowatch our ops workbook — here are the 3 published CSV links
3 channels linked · poll every 5 min · backoff + stale-guard
yomerge them & roll up daily cost vs revenue
merged 3 → 1 · daily_pnl · 18,204 rows
rollup · cost vs revenue by day · gen #204
yolet ops watch this live — no more Friday exports
ops team invited · same table, formulas intact · live on every sync
day cost revenue margin
Jun 24$4,210$6,89038.9%
Jun 25$4,380$7,12038.5%
Jun 26$4,955$7,48033.8%
Jun 27$4,730$8,05041.2%
Jun 28$4,610$8,34044.7%
Jun 29$4,890$8,11039.7%

Three flaky CSV feeds in. One merged, generation-stamped daily P&L out — and the ops team watches it live in the workspace, formulas intact. You kept the spreadsheet; it just stopped being a file.

Connect

Your agent. Your model key. tabledi's data.

The coding agent you already run drives tabledi three ways — write once, both Claude Code and Codex eat it.

⌘ CLI
$ tabledi login$ tabledi channel add …$ tabledi query '…' REST command surface — optimistic-locked, audited, deterministic.
⚡ MCP
/mcp/v1 + stdio bridgetools · resources · auth, scoped by X-Tabledi-Workspace. Per-tenant guarded writes — rate, blast-radius, audit via tabledi-guard.
📦 Skill
skills/tablediOne SKILL.md teaches the agent when & how to reach for CLI / MCP. Same file works in Claude Code and Codex — write once, both eat it.
The engine

Built for scale you can verify.

A columnar slot+pool engine in Rust — predicate pushdown, generation-stamped lineage, Arrow snapshots. The numbers are from its own benchmarks.

0.44ms

1M-row rollup

Columnar pushdown — 215× over row-based. COUNTIF lands 411×.

100/100

Deterministic

Same query, same answer, every run — generation-stamped.

~0.5s

Bulk ingest

75,000-row import — columnar-native, no row↔column thrash.

1 binary

Self-hostable

Your infra, or in-process over a C ABI. WASM next.

Install

From zero to a live, shared table in 60 seconds.

Install the command surface, log in, then hand it to your agent.

~/your-project
# 1 · install the command surface
$ ./scripts/install.sh # or: cargo install --path binaries/tabledi-cli
$ tabledi login
# 2 · hand it to your agent
$ claude mcp add tabledi --stdio tabledi-mcp-server
# codex: add [mcp_servers.tabledi] to ~/.codex/config.toml
# 3 · then just talk to it
roll up last night's eval runs into a live leaderboard
Pricing — one engine, three shapes

Start free. Self-host when it matters.

Free
$0
Hosted starter
  • isolated workspace on the shared base · sub-second wake
  • full CLI + MCP + skill
  • fair-use quotas · local mode is always free
Try it
Most popular
Pro
Metered
Pay for what runs
  • dedicated, suspend-on-idle
  • persistent workspaces
  • priority refresh + channels
Start Pro
Enterprise
Self-host
Always-on · your infra
  • always-on dedicated — ours or yours
  • self-host: Docker or a single binary
  • in-process FFI embedding
Talk to us

Give your agent a table it can trust.

Deterministic, self-hostable, built for millions of rows — driven by the coding agent you already use.