OpenGenie
Repository on GitHub

Tour

On this page

What the app looks like, from real screenshots captured with Playwright. Every figure says the width it was taken at and where it ran: deployed means a Databricks workspace; local run means the same app on a laptop, and scripted agent means a deterministic stand-in for the model, used where the screen matters more than the answer.

The shell has three parts: your sessions and files on the left, the notebook in the centre, and the assistant beside it. Everything below is a state of one of those.

The shell

The assistant is a zone next to the notebook, not a tab, so opening a file does not close the conversation that is about it. The folder named under the greeting is the only place this conversation may write.

The shell at 1440 px: a left rail listing sessions and files, a notebook with four cells in the centre, and the assistant dock on the right headed 'in context: parity_demo'.
1440 pxlightdeployed The starting screen.

Choosing where it may write

The workspace browser is how a conversation starts. Picking a folder sets the fence for the session: the choice and the permission are the same act.

The workspace tree open, showing folders and notebooks, with a chooser for the working folder.
1440 pxlightdeployed Picking a folder is picking the boundary.

The notebook

Every cell has its own Ask and Run, because the unit of the work is the cell, not the file. The bar above carries Run all and the compute the SQL will run on.

A notebook named parity_demo with SQL cells, each showing Ask and Run buttons, and a bar above with Run all and Serverless SQL.
1440 pxlightdeployed Run all and the compute it will use, always visible.

Run all stops at the first failure

Later cells usually read what earlier ones made, so Run all stops at the first failure. The bar says “2 ran · 1 failed”, and the failing cell offers Fix with agent, which sends the engine's own error text rather than a paraphrase of it.

A notebook after Run all: two cells succeeded, the third shows an error from the SQL engine, and a button labelled Fix with agent sits beside it.
1440 pxlightdeployed The agent starts from the cause, not from “it didn't work”.

The run map

On a long notebook, the map lists what ran, what was skipped on purpose and what failed, with the failing statement in full. First failed and Last run jump to the cell.

The notebook run map open: cell 2 done, cell 3 skipped, cell 4 failed with its statement shown in full, and buttons for First failed and Last run.
1440 pxlightlocal run Where the failure is, without scrolling for it.

Python cells and their plots

Python runs on serverless compute, started by an administrator, as the app's own service principal — every result says so, because it did not run as you. The output is drawn under the cell, and matplotlib figures the cell leaves open appear there as images, with a download button.

A finished Python cell with its output drawn directly under it: three KPI figures.
1440 pxlightlocal run Output under the cell, as in Databricks and Jupyter. Figures are static images; widgets are not supported.

The assistant

Asking about one cell, from the cell

⌘I opens a prompt on the cell itself, with four one-click actions and a reminder that only this cell may change. The conversation still happens in the dock, so Stop, approvals and the audit trail stay in one place.

A prompt open on cell three with the placeholder naming that cell, and chips for Explain, Fix, Optimise and Comment.
1440 pxlightdeployed The message is bound to parity_demo · cell 3.

What was actually sent

The part users never see and always wonder about: the prompt is short, it names the cell, and it states the one constraint that matters — leave every other cell alone.

The assistant dock showing the sent message, with a chip reading cell 3 and a sentence saying to change only that cell.
1440 pxlightdeployed What you said, plus one constraint. No hidden scaffolding presented as your words.

Next steps derived from the turn

Up to three suggestions, derived from what the turn actually did. “Run it” appears only if a notebook was written and not run.

The dock scrolled to the end of a turn, with three follow-up chips under the answer.
1440 pxlightdeployed Derived from the turn, not from a fixed menu.

Slash commands and history

A bare / lists every registered command with its description. History is available from the dock's own header, because on a narrow screen the left rail is not there.

The composer with a slash typed, showing a list of commands with descriptions.
1440 pxlightdeployed Discoverable without documentation.

Long-running work

The work runs on the server, not in the browser tab, and every step is written to a journal. That is what makes the next three screens possible.

The mission view

One accepted request becomes a mission: the objective, where it is now, what it wrote, and which tool call proves each requirement. Earlier missions stay selectable.

The mission view after a completed request: the objective, the notebook the agent wrote, three requirements each marked verified, and the plan it followed.
1440 pxlightlocal run, scripted agent Results first, then the plan that produced them.
A requirement's evidence expanded, showing the exact tool input and the result it returned.
1440 pxlightlocal run, scripted agent Open any proof to see the exact input and the result it returned.

Approvals, inline

When an action needs a human, the conversation waits on one decision card that names the target and the reason. There is no modal, and closing the tab does not lose the question.

The assistant waiting for approval: a card in the dock naming the target of the action, the reason it needs approval, and the decision buttons.
1440 pxlightlocal run, scripted agent The decision, its target and its reason, in one place.

Coming back, and recovering

Close the page and return later: the plan, the full answer and its status are there. If the server restarted mid-turn, the app says what was interrupted and offers to restore the agent; it does not replay an uncertain operation behind your back.

A fresh browser window showing a finished turn: the completed plan, the full answer, and a ready-for-review status.
1440 pxlightlocal run, scripted agent After the page was closed: nothing lost, nothing duplicated.
After a server restart: a Restore action, a disabled composer, the partial plan preserved, and a sentence explaining what is uncertain.
1440 pxlightlocal run, scripted agent After a restart: the uncertainty is stated, and the next move is yours.

Files and screenshots

Attach a file, drop it on the composer, or paste an image from the clipboard. The attachment travels with the message as a chip, and is kept with the conversation.

A sent message carrying a pasted image as a chip named shot.png, followed by the agent's answer.
1440 pxlightlocal run, scripted agent The pasted image, on the message it belongs to.

If the selected model cannot see images, the app says which model cannot and asks for one that can, rather than sending pixels that nobody will read.

The composer refusing to send an image, with a sentence naming the selected model and saying a vision model is needed.
1440 pxlightlocal run, scripted agent A capability is a declared fact about the model, not a hope.

The model picker

One control, identical in the composer and the top bar. Grouped by provider, searchable, and honest about what it knows: a limit that was measured is labelled as measured, and an unknown one says so.

The model picker open: the Databricks AI Gateway group listing llama-4-maverick as current, gpt-oss-120b, meta-llama-3-3-70b and qwen3-next-80b, and a group of models not available here.
1440 pxlightlocal run The picker shows what this workspace can actually use, and says why the rest is unavailable. The catalogue ships 13 models from 4 providers, plus the serving endpoints the workspace exposes.

The fence, on screen

The working folder is stated where you work. A notebook the agent writes outside it is not overwritten in place: the app saves a copy inside the folder and says so. A write the agent attempts through its tools outside the folder is refused by the tool server; a write that needs a person waits for one, as in the approval above.

A notebook banner saying the agent wrote a different file which is outside the folder it may write to, so it made a copy instead, with an Open it button.
860 px croplightlocal run The fence, as a reader meets it: a sentence, and a way to the copy.

Every width, both themes

800 px: one zone at a time

Below 860 px, two panes cannot both be readable, so one becomes a drawer you open. It never opens by itself, and the control for it is always on screen.

The app at 800 px: files and chat collapsed to slim rails at the edges, and the context panel open as a drawer on the right saying where this agent can write.
800 pxlightlocal run Nothing is hidden that cannot be reached in one press.

A phone

The mission view on a 390 px phone screen: the objective, status and results stacked in one column.
390 pxlightlocal run Check on a long job from your phone.

Dark

Dark is a restated palette, not an inversion of the light one, and its contrast was measured on the painted colours.

The notebook and the assistant in dark theme, with the in-cell prompt open and readable.
1440 pxdarkdeployed The same components, a different set of values.
The mission view in dark theme at 1920 px: an achieved outcome, three of three requirements verified, and the conversation beside it.
1920 pxdarklocal run, scripted agent On a wide screen the content keeps a readable measure instead of stretching.

What these screenshots do not show

The decisions behind each screen are in spec 006 (the dock, the model control, the drawer) and spec 007 (zones, keys, scrolling, focus). The fence is in spec 001 and safety and governance.