← All projects
Go · DuckDB · desktop app · MCP Active

Vibe Studio

An agentic desktop workspace for the data you already have. Connect Postgres, MotherDuck, S3 or a local file, join them in one DuckDB hub, and work with notebooks, skills and an AI agent that asks before it writes.

How Vibe Studio works, in four minutes ♪ sound on Ten ideas, from one DuckDB hub to an agent that asks before it writes. Drawn live too: jump to a chapter, turn on captions, or scrub to any moment. Download the mp4

What it is

Vibe Studio is a desktop data tool in the DataGrip and DBeaver mould, built around an agent. It doesn’t ask you to move your data anywhere. You point it at what you already have, a Postgres database, a MotherDuck share, a bucket of Parquet files, a DuckDB file on your laptop, and work with all of it in one place.

I built it because every data tool I like either wants my data on its server or scatters a project across a folder of CSVs, notebooks and a prompt file that drifts out of date. Vibe keeps the data where it lives and keeps the project in a folder of plain files.

How it works

Every connection is attached on first use into one embedded DuckDB. The connection name is the catalog in SQL, so any source joins any other:

SELECT p.plan_name, sum(o.revenue) AS revenue
FROM prod_pg.public.orders o
JOIN md.analytics.plans p USING (plan_id)
GROUP BY ALL;
  • Connections. Local DuckDB and SQLite, Postgres, MySQL, MotherDuck, S3, GCS, R2 and Azure storage, DuckLake, Iceberg and Delta. Read-only by default.
  • Workspaces. A workspace is a folder: vibe.yaml, notebooks/, queries/, skills/. Open one like an Obsidian vault, make it a git repo, and share it with your team the way you share code.
  • Credentials. In the OS keychain, or env vars for CI. Never in the folder, never in a log line, never where the agent can read them.
  • Notebooks. SQL, markdown and live dashboard cells. A notebook stores the questions, never the answers: every cell re-runs when you open it, so a chart can’t go stale.
  • Skills. Short markdown notes about your data: which joins are canonical, what a metric means, what to ignore. The agent reads them before it answers.
  • The agent. Ask in plain English. It reads the schema, runs SQL, and answers with a chart built from the query it just ran, so every number has a query you can check. It runs on a local model, Ollama, OpenAI, Anthropic, Gemini or Cloudflare AI Gateway.

Everything works without AI. SQL and notebooks are first-class by hand.

Bring your own agent

The tools Vibe’s own agent uses are exposed over MCP, so Claude Code, Codex, Claude Desktop or any other MCP client can work in the same workspace:

claude mcp add q3-sales -- vibe mcp serve --workspace ~/work/q3-sales

It’s one tool surface, not a looser one for outside agents. If Studio has the workspace open, the external agent’s writes show up there as the same approval card the built-in agent gets. --sandbox read-only locks a session down further; nothing on the MCP side can loosen it.

Safe by default

  • Reads are free, writes are asked. A write needs the sandbox tier to allow it, a connection that isn’t read-only, and your approval. Writes to anything that isn’t a local file always ask.
  • SQL is an allow-list. The agent’s queries are parsed before they run, and anything outside its tier is refused before it reaches the database.
  • A committed vibe.yaml can only tighten. A teammate’s shared config can’t grant an agent more than you chose.
  • No model output reaches the page’s styling. Charts come from a closed, validated list of components, not HTML the model wrote.

Install

curl -fsSL https://sandwichlabs.dev/vibe/install.sh | sh

That installs the vibe command and Vibe Studio on Linux (x86-64 or arm64, glibc 2.35+: Ubuntu 22.04, Debian 12, Fedora 36 or newer; Studio needs WebKitGTK 4.1) and macOS (14 or later on Apple silicon, 13 or later on Intel). Windows isn’t supported yet. The source is at github.com/SandwichLabs/vibe and the quickstart takes you from install to a first query and notebook.

Vibe is open source under the Apache-2.0 licence and sends no telemetry. The macOS build is unsigned for now. The install script avoids the Gatekeeper prompt; if you download the app in a browser, use System Settings ▸ Privacy & Security ▸ Open Anyway (see the install docs). Signed builds are planned.