# Vool

A small, local-first GPUI notebook for following a question without losing the note that led to it. Write in one continuous Markdown note, select a question, and read the answer in the right-hand pane.

## Run

Install Rust, a Vulkan-capable desktop, and the Linux development libraries required by [GPUI Kit](https://gpui-kit.com). Then run `cargo run` in this directory. Notes are saved as Markdown in `notes/`. Adjacent `.vool.json` files store questions and answers separately so asking the same question again replaces its answer in the pane. The app creates `notes/` when it starts.

For Codex answers, install the [Codex CLI](https://github.com/openai/codex) and run `codex login` in your own terminal. Vool calls `codex exec` in a read-only sandbox and uses the CLI's existing login. It does not store a token. By default it uses your Codex model; Settings can override it. If Codex is missing or not authenticated, the answer pane shows an error instead of disappearing.

For OpenRouter answers, set `OPENROUTER_API_KEY` in the **environment that launches Vool**, or enter a key in Settings for this session. Select OpenRouter there. The default is `nvidia/nemotron-3-super-120b-a12b:free`; enter any OpenRouter model ID and click **Use model**, or click **Default** to return to the provider default. The key is not saved in notes or passed as a command-line argument. Selected text is sent to the chosen provider when you ask; provider responses are saved in the note's `.vool.json` file.

For rendered answer Markdown, run `PUPPETEER_SKIP_DOWNLOAD=1 npm install` if Chromium is already installed (`/usr/bin/google-chrome` by default, or set `PUPPETEER_EXECUTABLE_PATH`). Otherwise `npm install` downloads Chromium. Mermaid fences render locally to PNG in the answer pane; if rendering fails, the fence stays visible as source. No diagram content is sent to an external rendering service. Relative image links such as `![alt](picture.png)` resolve against the note's directory; HTTP(S) image URLs remain links for GPUI to load. Keep large images out of notes if memory use matters.

## Keyboard

- `i` enters insert mode; `Esc` returns to normal mode, indicated by a block cursor.
- In normal mode, `h j k l` move through the entire note, `0` goes to the beginning of a line, and `$` to its end.
- `v` starts visual selection. Extend it with `h j k l`, then press `a` or click **Ask selection**. Mouse selections also expose the button.
- Click the menu icon at the top right (or press `s` in normal mode) to create or open notes, select a provider and model, or enter an OpenRouter key. `Esc` returns to the document. Notes save automatically.
- Select the same question again and ask to replace its answer in the pane. Other questions stay available under Related.

This is a first slice, not full Vim emulation or Google Docs-style rich-text editing. The entire note is one editable Markdown source document, with heading and emphasis styling but visible syntax markers. The answer pane renders Markdown, images, and Mermaid. GPUI Kit's editor does not support editable inline graphics or hiding Markdown markers in the note. Older notes that already contain inline answers retain that text; Vool does not silently delete it. There is no in-app Codex OAuth login, model discovery, or note renaming yet. Files are stored locally.
