AI Assistant
⌘/Ctrl + I opens the assistant beside your results — a Pro feature that writes, explains and optimises SQL against the database you have open.
It is docked rather than floating, because the point is to read an answer next to the data it is about.
What you need
Your own API key from one of three providers. Usage is billed to your account, so you see and control what it costs.
| Provider | Get a key | Keys look like |
|---|---|---|
| Anthropic (Claude) | console.anthropic.com | sk-ant-… |
| OpenAI | platform.openai.com | sk-… |
| Google Gemini | aistudio.google.com | AIza… |
Open Settings (⌘/Ctrl + ,) → AI Assistant, pick the provider and paste the key. It is stored in the OS keychain alongside your database passwords — never in a file, never in a log.
Each provider keeps its own key and its own model. A ✓ in the picker marks one that has a key stored, and switching back does not ask you to paste anything again.
Choosing a model
Fetch asks the provider which models your key can actually reach, so the list is never a stale copy baked into this build — and you can type a model name directly if you want one the list does not show.
Effort
The Effort setting appears for Anthropic, where it is a first-class request field. OpenAI accepts the same idea only on its reasoning models and rejects it elsewhere; Gemini expresses it as a token budget. Rather than guess a mapping that turns into an error on your own key, it is offered where it is defined.
What is sent, and what is not
This is the part worth reading before you start.
Sent with every question:
- The engine and dialect (so the SQL it writes actually runs on your server).
- The database and, if you opened the panel from a table, that table's name.
- Table and column names for the open database — unless you turn Send table and column names off.
All of it goes to the provider you selected, and only to that one.
Never sent:
- Row data. Not the grid, not a sample, not a result. A column called
ssntells the model that a column is calledssn; it does not tell it anyone's number.
The CONTEXT strip along the top of the panel shows the scope in force, so you can see it before you ask rather than trust a description of it. Turning the schema off leaves an assistant that still knows your dialect but will ask for names instead of guessing them.
On a very large schema the listing is capped to keep a single question from costing a surprising amount. When that happens the assistant is told the listing is incomplete, so it asks about a table it cannot see rather than reporting that it does not exist.
Modes
The chips under the transcript change what the assistant is asked to do:
| Mode | For |
|---|---|
| generate | Write SQL from a description |
| explain | Understand SQL you already have, including what is surprising about it |
| optimize | Make a slow query faster — or say an index would help more, with the DDL |
| migrate | Schema-change DDL in the order it must run, with the locking and irreversible steps called out |
| ask | Anything else |
Running what it writes
Every statement arrives in its own block with copy, insert and run.
- insert opens it in a new query tab. Nothing runs.
- run opens it and runs it — through exactly the same path as a statement you typed yourself. A write against a production connection still raises its confirmation; a read-only connection still refuses it.
The assistant never runs anything on its own. A block that modifies data is
marked writes before you touch it. This is deliberate: an assistant that could
execute what it wrote would be one prompt injection away from a DROP, and the
schema it reads can be influenced by anyone who can create a table name.
Settings
| Setting | Default | Notes |
|---|---|---|
| Provider | Anthropic | OpenAI and Google Gemini also supported; each keeps its own key and model |
| Model | the provider's default | Fetch lists what your key can reach |
| Effort | high | Anthropic only — more reasoning before answering |
| Send table and column names | on | See What is sent |
| Only propose statements that read | off | Independent of the connection's own read-only flag; either one applies |
| Max reply tokens | 4096 | Raise it if long answers are being cut off |
Shortcuts
| Shortcut | Action |
|---|---|
| ⌘/Ctrl + I | Open or close the assistant |
| ⌘/Ctrl + , | Settings |
| ⌘/Ctrl + Enter | Send (in the assistant's input) |
Plain Enter adds a newline — questions about SQL are routinely several lines of SQL.