Driven by your coding agent · CLI + MCP

Your agent ran it once.
tabledi is why you can trust it tomorrow.

A process ledger for agent-produced data: collect raw (append-only), LLM-clean in pulled batches, accept only what passes server-side golden spot-checks — a row in the result table means it was accepted. Every attempt, batch and model is accounted, and the rules live server-side where no agent can quietly rewrite them. Self-hostable, built for millions of rows.

No AI bundled · bring your coding agent — Claude Code, Codex, Cursor or any other · your model key

  tabledi skill · Claude Code
crawl the supplier listings & land them raw
imported · suppliers · raw · append-only · 1,204 rows
clean & extract the needs from raw
pulled batch · 50 rows · recipe v3
golden check 5/5 · accepted 48 · rejected 2 (on the books)
which rows can I trust?
result table · a row is here = it was accepted
every attempt · batch · model — accounted · resumable next session
Connects the data you already have
PostgresMySQLMongoDB Google SheetsCSV / JSONLApache Arrow
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, Google Sheets, CSV — imported and kept in sync.

You say"connect my Google Sheets"
tabledi import ops.csv --new ops

Merge & shape

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

You say"merge these into a daily P&L"
tabledi query --json '{group: day}'

A result table you can trust

Accepted rows only — server-side golden checks gate every batch, and the clean table re-materialises on every write.

You say"show me only what passed"
tabledi derive result-table drv_x

Ask in plain language

Your agent turns questions into queries — same answer every time, generation-stamped.

You say"top 10 regions by margin"
tabledi query --json '{topN: 10}'

Same answer, every time

Ask the same thing 100 times, get the same number 100 times — each answer tagged with its exact data version, so you can replay it later.

You geta versioned, replayable answer
gen #204 · verifiable

Run it yourself

One Rust server binary on your own infrastructure — your data never leaves your network.

You say"keep our data in-house"
tabledi-server · your infra
Real example

Point it at anything — even last night's eval logs.

No schema, no ETL. Your agent reads the scattered run logs, understands them, and ships a typed, queryable leaderboard — then you can pivot, chart, or share it.

  tabledi skill · Claude Code
roll up last night's eval — every prompt variant, pass rate + cost
read 480 run logs (jsonl) across 6 variants
created sheet · variant × pass% × cost · in tabledi
query: best variant per dollar · gen #1
eval_leaderboard · gen #1
variantpass$/runverdict
baseline86.5%$0.012shipped
few-shot91.2%$0.018candidate
chain-of-thought93.8%$0.024candidate
+ tools95.1%$0.031✓ winner
+ self-check96.4%$0.042too slow
+ rerank94.0%$0.029candidate

480 scattered jsonl logs in. One typed, queryable, versioned leaderboard out — the same engine that ships your daily P&L.

Connect

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

The coding agent you already run drives tabledi three ways — from the command line, through MCP, or as a built-in skill. Same tools underneath, so they never drift.

⌘ CLI
$ tabledi login$ tabledi import data.csv$ tabledi query --json '…' A REST command surface — audited, optimistic-locked, same answer every run.
⚡ MCP
tabledi-mcp-serverTools, resources and auth your agent calls directly — scoped per workspace. Guarded writes per tenant — rate limits, blast-radius caps, full audit trail.
📦 Skill
skills/tablediOne SKILL.md teaches the agent when & how to reach for the CLI or MCP. Same file works in Claude Code and Codex — write once, both read it.
The engine

Built for scale you can verify.

A columnar engine in Rust — handles millions of rows fast, with a versioned answer on every query so you can replay and verify it. The numbers below are from its own benchmarks.

0.44ms

1M-row rollup

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

100/100

Same answer

Same query, same result, every run — versioned for replay.

~0.5s

Bulk ingest

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

1 binary

Self-hostable

One Rust server on your infra, with your storage backend.

// representative numbers from the engine's own benchmarks — columnar predicate pushdown vs row-based fallback

Install

From zero to a verified pipeline in 60 seconds.

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

~/your-project
# 1 · install the command surface
$ git clone https://github.com/cooldk/tabledi-rs && cd tabledi-rs
$ ./scripts/install.sh # installs tabledi + tabledi-mcp-server
$ tabledi login --url https://api.tabledi.com --token <api-key> # key: app.tabledi.com → profile → API keys
# 2 · hand it to your agent (Claude Code)
$ claude mcp add tabledi -- tabledi-mcp-server
# codex: add [mcp_servers.tabledi] to ~/.codex/config.toml
# 3 · then just talk to it
set up a collect → clean → accept pipeline for my supplier data
Pricing — one base, tier = rung

Start free. Self-host when it matters.

Same engine on every tier. You only move up a rung when your workload does.

Free
$0
The shared pool
  • multi-tenant shared base
  • full CLI + MCP + skill
  • evicted on logout
Try it
Most popular
Pro
Usage-based
Pay only for what runs
  • dedicated, suspend-on-idle
  • persistent workspaces
  • priority refresh + channels
Start Pro
Enterprise
Self-host
Always-on · private
  • true private deployment
  • on your own infrastructure
  • your infra, your data
Talk to us

Give your agent data it can be held to.

Golden rows gate every batch, the ledger records who and under which recipe, and the pipeline picks up where it left off. Same answer every time, self-hostable, millions of rows — driven by the coding agent you already use.