A structured document, built while you think.
A good technical note has a shape: sections and sub-sections, a list of options, a table that compares them, a diagram of how the parts connect. You talk (or type) about what you are thinking, and a model that runs on your own computer arranges it into exactly that: headings, lists, tables, diagrams and formulas. Ideas you rejected stay visible, crossed out. When you are done, one button makes a typeset PDF. Nothing leaves your computer.
This page is a map: which part of the window is what, and what to say to get what you want. Words in this style are things to say or type.
In one minute
- Have LM Studio running with the model loaded. The small pill at the top of Lucid shows a green dot and the model name when it is ready. If it says No model loaded, click the Load … button in the pill (it asks first, and takes about half a minute).
- Click New page (top of the left column), type a title, press Enter.
- Talk or type into the box at the bottom. With Wispr Flow just dictate: the words appear in the box and are sent about half a second after you stop. Typing: press Enter.
- Watch the page. Your words become notes. To change something, say what to change (Command mode, below). To undo anything, say
undo. - Download PDF (top right) when it looks right.
Lucid runs on macOS, Windows and Linux. Where this guide shows the Mac keys ⌘ and ⌥, press Ctrl and Alt on Windows and Linux (this page shows them for you); everything else is the same.
The window: what is what
One window, three columns. The numbers on the picture match the list under it (the picture is the real app, here in the light theme; the dark theme looks the same with dark colours).
- 1The page list (left)New page makes a blank page. New from a format… starts a page with sections for a kind of note (concept, system design, comparison, inference, benchmark). Import a note… brings in a note that was exported. Each page shows its name, what kind of note it is and when it last changed; the open one is bold. Click a page to open it. The ✕ at the end of a row asks Delete? once; the page then goes to the Trash (the Recycle Bin on Windows), so it can still be taken back. The arrows at the top hide the column.
- 2Settings and theme (bottom left)Settings (or ⌘,): the look, the model, your name for the PDFs, and words speech recognition gets wrong. The moon/sun button switches light and dark.
- 3The format chip (top bar, left)Shows the kind of note this page is. Click it to change the kind, fill the fields printed under the title in the PDF (source, book, chapter…), or add the sections the page is missing.
- 4Model status and saving (top bar)The dot and name say whether the model is ready. If LM Studio is not running it says so, with Check again; if no model is loaded it offers to load yours. Saved / Saving… shows that your page is written to disk. If saving fails it says Couldn’t save with Try again, keeps trying by itself, and asks before the window closes.
- 5History, Export note, Markdown, Download PDF (top right)Export note saves the whole note, with its history, as a file (see Saving, export and import). History opens or closes the panel on the right. Markdown saves the page as a Markdown file. Download PDF typesets the real PDF (the one black button in the window).
- 6The page (middle)Your notes. It is read-only until you choose Edit mode: you speak and the model writes it. The title is at the top; diagrams and tables are drawn inline. Hover a diagram or table to get Edit diagram / Edit table.
- 7The mode switch (bottom)Input (words become notes), Command (words change the page), Edit (you type in the page yourself). Diagram and Table open the step-by-step builders. The keys are ⌘1 to ⌘5 in that order.
- 8The input box (bottom)Everything goes through this one box: type, or dictate. Above it, one line says what Lucid is doing (Structuring your notes… 6 s, or Working on your change…, and when it is done a short summary with Undo). A question from Lucid appears there too, as a card.
- 9The History panel (right)Two lists. Changes: everything that changed the page, newest first. What you said: your words, with Edit and send again.
- 10Show and RevertOn each change: Show scrolls to what it touched and flashes it; Revert takes back just that change (it asks first), whatever came after it.
- 11Block numbers (the margin)A light number by each block: B1, B2, B3… A list is one block, a table is one, a diagram is one. Click one to see its parts. Say “in block 3, …” to talk about it (see Block numbers).
The three modes
The mode decides what your words mean. The box under the page always says which one you are in.
| Mode | Your words are… | Example | Switch to it |
|---|---|---|---|
| Input | notes. They are written into the page, structured (headings, bullets, a table, a diagram, a formula when that is what you described). | Load balancer. Multiple application servers behind it. Health checks to avoid unhealthy servers. | Click Input, ⌘1, ⌘/, or say input mode |
| Command | instructions about what is already on the page. Nothing is added as a note. | Add a CDN in front of the web server.Add another row for consistency to this table. | Click Command, ⌘2, ⌘/, say command mode, hold the right ⌥ key while you dictate one command, or start with Lucid, … |
| Edit | keys in the page: you click and type like in any editor. Use it for the few things the model gets wrong. | (you type) | Click Edit, ⌘3, ⌘E, or say edit mode. Esc goes back. |
yes or no. If the model cannot make notes of your words, they are kept as you said them (listed as Kept as written): your words are never lost.One more card. If you are in Command mode and say something that sounds like notes, a card asks Add it to the page as a note? with Add as a note and Dismiss.
Block numbers: say which block you mean
When a page has several diagrams, tables or lists, “this one” is not always clear. In the left margin of the page each block has a light number: B1, B2, B3… (picture above, marker 11). A list is one block, a table is one, a diagram is one. Inside a block there are parts, and you can name those too.
Say it (Command mode)
In block 3, add a row for cost. Cross out item 2 of block 6. Rename node 2 of block 5 to Cache. Delete column 3 of block 4. In the second block, add a row for cost. B3: rename the client to browser.“Block 3”, “B3”, “block three”, “the third block” and “the last block” all work. The same with the right ⌥ key or Lucid, … in Input mode.
The parts of a block: click its number
- A list: its items, item 2 of block 6.
- A table: its columns from the left and its rows from the top, row 2 of block 4, column 3 of block 4.
- A diagram: its parts and its connections, numbered as the diagram builder numbers them, node 2 of block 5, connection 1 of block 5.
Esc or a click elsewhere closes the list.
- What you see, what you say and what the model reads are the same thing. The numbers are the model's own references (
b3,b3.2), and Lucid tells it which one a number is when you say it. - If there is no such block or part (block 9 on a page of six, row 2 of a diagram), the model asks which one you mean instead of changing something else.
- The numbers follow the page: when a block is added or removed the numbers after it change, so count what is on the page now.
- Hide them in Settings → Appearance → Block numbers. In a very narrow window they are hidden by themselves.
What to say
Say it the way you would say it to a person. Lucid works out the structure.
Notes (Input mode)
Caching. A cache hit costs microseconds, a miss costs a database round trip. Redis is an in-memory store.Usually a heading and a short paragraph or bullets, with the key words in bold.
Say it plainly: Lucid decides whether something is a heading, a sentence or a bullet, and it is told never to invent facts or numbers.
A comparison table (Input)
Create a comparison table. Three columns: property, SQL, NoSQL. Rows: schema, relationships, scaling, consistency and use cases.One table with those columns and rows.
Add a row for consistency guarantees and fill in the SQL and NoSQL columns.(Command) A new row, filled in. If Lucid cannot tell which table you mean it asks, and you answer "the first one".
A diagram (Input)
The browser gets static files from a CDN. API calls go through a load balancer and an API gateway to the order service. The order service reads from Redis, queries PostgreSQL and publishes events to Kafka.One diagram: a cloud for the CDN, a hexagon for the load balancer, a cylinder for PostgreSQL, a pipe for Kafka… (see "Components that look like what they are").
A formula said in words
KV cache size is two times the number of layers times the number of KV heads times the head dimension times the bytes per element times the sequence length.A display formula, with the surrounding sentence kept as text.
Keep rejected ideas (Command)
Cross out PostgreSQL and MongoDB. We're choosing DynamoDB, but I want to remember the alternatives.Both options crossed out and still visible; DynamoDB marked chosen. If the same name is also in a diagram, it is the list that changes.
Change a diagram (Command)
Add Redis between the web server and the database. Add a cache-miss path to PostgreSQL and show that the result gets stored in Redis before returning.The same diagram, updated: nothing that was there is lost.
Rename this node to API Gateway. Reverse this arrow. Group the services as Backend."This", "that" and "it"
The model uses where your cursor is and what changed last.
Then we delete the old cache entries after thirty days.(Input) written as a note, not run as an instruction.
Make that a heading.(Command) "that" is the sentence you just added. "This table" is the table your cursor is in.
Convert what is there
Turn those options into a table. Turn this list into a diagram.The list becomes a table or a diagram; nothing is added that you did not say.
If Lucid is unsure which thing you mean it asks, with a card above the input box: click an option or say the first one, the second one… If it asks, it will not ask the same question again once you answered.
Diagrams by voice: the diagram builder
A ten-part diagram is hard to say in one breath, so there is a guided way: parts first, then connections, then fixes by number. Say diagram mode (or click Diagram next to the mode switch).
- 1The steps1 Components, 2 Connections, 3 Edit, Think. You move on by saying
connections,editand so on, or by clicking. - 2Undo, Cancel, Insert diagramUndo takes back one step (say
undo), Cancel throws the draft away (cancel), the black Insert diagram button (Insert table in the table builder; saydone) puts the diagram into the page as one undo step. - 3The drawingUpdated after every phrase. It is shown as large as it can be read: a long chain is drawn top to bottom instead of shrinking.
- 4The numbered listsComponents 1, 2, 3… and connections #1, #2… Use the numbers to fix things.
- 5What was understoodThe line under the drawing says exactly what your last phrase did.
The steps
- Components. Say the parts:
client, server, DNS, database(oradd keywords: …). Each is numbered and drawn, and gets the right shape from its name. - Connections.
client to server·server to DNS·from server to client returns HTML(the words after are the label) ·client to server to database(a chain). They are numbered #1, #2… - Edit, by number.
reverse 2·rename 3 to Cache·delete connection 4·connection 2 is resolve domain·group 2 and 3 as Backend·direction left to right. If a number could mean a component or a connection it asks. - Think. Ramble and correct yourself; later statements win. Nothing is drawn until you say
draw it.
What the grammar cannot read is handed to the model with your numbering, and Lucid tells you what changed. Say edit this diagram (or use Edit diagram on a drawing) to change a diagram that is already on the page with the same numbers. A half-built draft survives a reload.
Tables by voice: the table builder
Say table mode (or click Table). It works like the diagram builder: columns, then rows, then fixes by number.
- Columns.
three columns: property, SQL, NoSQL - Rows. A whole row per phrase:
schema, fixed, flexible· one cell at a time withskipandnew row· a whole column:SQL column: fixed, joins. - Fix, by number.
cell 2 3 is embedded·delete row 2·add column cost·move row 3 up.
Then done. edit this table reopens the table on the page.
Components that look like what they are
Say what a part is called and it is drawn as what it is, on the page and in the PDF. This works from the words alone: in the builder, in dictated notes, and for what an AI agent writes.
A program that uses the thing (Kafka consumer, Redis client, queue worker) stays a plain service. Anything you chose explicitly (3 is a database) is never changed.
Voice commands
Short whole phrases that Lucid handles itself, without asking the model. They only count when they are the whole thing you say, so a long sentence that merely contains these words is never mistaken for one.
| Say | What happens |
|---|---|
input mode · back to notes · notes mode | Your next words are notes. |
command mode · commands | Your next words are instructions. |
edit mode · let me edit · edit by hand | You type in the page. Esc goes back. |
diagram mode · new diagram · draw a diagram | Opens the diagram builder. |
table mode · new table · create a table | Opens the table builder. |
edit this diagram · edit this table | Opens the one on the page in its builder. |
undo · scratch that · redo | One step back or forward (also ⌘Z / ⇧⌘Z). |
yes · apply it · go ahead | Accepts a change that was waiting for your yes. |
no · cancel · never mind | Refuses it. |
the first one · the second one … option three | Answers a question Lucid asked with options. |
stop · cancel that | Stops what is running. |
export pdf · export as markdown | Makes the file (it asks where to save). |
Lucid, add a row for cost to this table | In Input mode: this one thing is a command, then back to notes. |
Keyboard shortcuts
| Keys | What |
|---|---|
| Enter | Send what is in the input box (ShiftEnter makes a new line). Pasted text is sent by itself after a short pause. |
| ⌘1 · ⌘2 · ⌘3 | Input mode · Command mode · Edit mode, from anywhere in the window. |
| ⌘4 · ⌘5 | Open the diagram builder · the table builder. While a builder is open the modes are off (say done or cancel first). All the number keys leave an open dialog alone. |
| ⌘/ | Switch between Input and Command. |
| hold right ⌥ | Everything you dictate while it is held is one command. |
| ⌘E · Esc | Edit mode on · back to the input box. |
| ⌘Z · ⇧⌘Z | Undo / redo the model's changes (outside text fields). |
| ⌘L | Back to the input box. |
| ⌘, | Settings. |
| ⌘+ · ⌘− · ⌘0 | Zoom the page only in, out, and back to 100% (also View → Zoom In, Zoom Out, Actual Size). A pinch on the trackpad, or Ctrl and the scroll wheel over the page, do the same. The pages list, the buttons, the input box and the History panel keep their size. While the page is not at 100% a small percentage chip shows in the top bar; click it to reset. |
| Esc | Closes a dialog or a menu; in the input box cancels the running job or clears the text. |
History, undo and revert
- Undo / redo take back or bring back the last change (say
undo, or ⌘Z). Every change by the model is exactly one step. - Changes (in the History panel) lists every change to the page, newest first, with who made it: Lucid, Builder, an AI agent, or Revert. Show scrolls to what it touched and flashes it.
- Revert takes back one earlier change, not just the last. It asks first (Take this back? with Restore and Cancel), and afterwards the entry says Taken back. Only the blocks that change touched go back to how they were; later changes to other blocks stay. It is one undo step, and the revert is itself listed, so it can be reverted. It is available while those blocks are still as that change left them; after another change or your own typing, the button is greyed out and says why. Lucid keeps the way back for the newest 25 changes.
- What you said keeps your words; Edit and send again puts them back in the box, for example to fix a word the speech recognition got wrong.
Dialogs
Settings (⌘,)
- Appearance: Theme (Light, Dark or System), Type (Mono by default, Sans or Serif) and Block numbers (Show or Hide). Applied at once; the PDF keeps its own typesetting.
- Language model (LM Studio): the address (this computer only), the model name, and the context length used when Lucid loads the model.
- PDF: your name, and the text at the right of the footer (the page number is on the left).
- Words to expect: one per line. Names and tools that speech recognition gets wrong ("vLLM", "Kubernetes"); they are kept as you wrote them.
- Save keeps the model, PDF and words; Cancel or Esc closes it.
New from a format…
Say what the notes are about (What will you write about?). A format is suggested at once, and again by the model a few seconds later; Suggest a format asks again. You always choose, or you choose Blank page. Give it a title and press Create page.
The page then starts as the format's section headings, and what you dictate goes under the right one.
Note formats
| Format | For | Sections |
|---|---|---|
| Concept note | One computer-science or system-design idea | Definition · Intuition · How it works · Example · Pitfalls and gotchas · Related concepts |
| System design note | Designing a system end to end | Requirements · Capacity estimates · API · High-level design · Data model · Deep dives · Trade-offs and decisions · Open questions |
| Comparison | Choosing between technologies | Context · Options · Comparison · Pros and cons · Decision |
| Inference engineering note | KV cache, FLOPs, bandwidth, batching… | Intuition · The math · Numbers to remember · Hardware implications · Pitfalls |
| Benchmark note | An experiment or a benchmark | Goal and hypothesis · Setup · Method · Results · Observations · Next experiments |
Empty sections are not printed in the PDF. A blank page can take a format later (the chip at the top).
Saving, exporting and importing a note
Every note saves by itself, as one file in ~/Lucid (<title>--<id>.lucid, JSON). That file is the whole note: its blocks (text, diagrams, tables), everything you said (each dictation, as it came), the history of changes with the way back for the newest 25, and its format and fields. Older versions are kept in ~/Lucid/.lucid/backups.
Export note…
The Export note button in the top bar, or File → Export Note… (⇧⌘E). Choose where to save the .lucid file: a backup, a move to another computer, or a note to hand to someone.
One choice: Include what I said and the change history (on). Switch it off to share only the notes, the title and the fields under it: your dictation can hold things you do not want to hand out. You cannot save it into your Lucid folder itself (the note is already there).
Import a note…
Import a note… in the pages list, or File → Import Note… (⌘O). Pick one or more .lucid files. The note opens, with what was said and its history, and Revert still works on its newest changes.
Each file is checked first, and every block in it. A file that is not a note, is damaged, or comes from a newer Lucid is refused with the reason, and nothing is written for it. Nothing is ever overwritten: if you already have the same note, the import is a copy (… (copy)) and both are kept.
| The notes | What you said | History and Revert | For | |
|---|---|---|---|---|
| .lucid file | yes, exactly | yes (or left out) | yes (or left out) | keeping, moving, sharing; Import brings it back |
| Markdown | yes, as text (diagrams as Mermaid) | no | no | other tools, GitHub |
| yes, typeset | no | no | reading and printing |
Export
- Download PDF typesets the real PDF with Tectonic in the house style (numbered sections, underlined title, "Page N" and your footer). Diagrams and tables are typeset, not screenshots. A big diagram is set at its own size and may move to the top of the next page so the text after it fills the page it leaves.
- The first PDF needs the internet, once. The PDF engine (Tectonic) downloads its typesetting files the first time it runs: several hundred small ones, about five minutes. Lucid does it in the background after the first start and says so next to the buttons (Getting the PDF engine ready (first time only, needs the internet): 120 files…). A PDF you ask for meanwhile waits for it and shows the same count. After that a PDF takes a second or two and works offline.
- Markdown saves GitHub-flavoured Markdown; each diagram is a Mermaid block.
- Nothing to install: the PDF engine and the drawing of diagrams come with Lucid. Markdown always works, also without the internet.
Dictating with Wispr Flow
Lucid does no speech recognition. Wispr Flow turns your voice into text and pastes it; Lucid's input box takes the paste.
- A paste goes to the input box wherever the focus is (after clicking a button, a pill, the page, or with the cursor in the title) and is sent about half a second after the last piece arrives. Several pastes in a row are joined.
- It stays where you meant it when it should: into a field of an open dialog, and into the page itself in Edit mode. While a builder is open, it goes to the builder.
- Start typing after a paste and the automatic send is cancelled, so you can correct the words first.
- For one command by voice, hold the right ⌥ key while you dictate, or begin with
Lucid, …. Wispr's own command mode is not used. - There is a short check-list for trying it with your own voice: docs/wispr.md on GitHub.
When something goes wrong
| You see | What it means · what to do |
|---|---|
| LM Studio isn’t running | Start LM Studio and its local server, then click Check again. |
| No model loaded, or Another model is loaded | Click the Load … button in the pill: it asks first, unloads any other model, then loads yours. |
| Your words appear as they were said, listed as Kept as written | The model’s answer could not be used. Nothing is lost: Edit and send again in the History, or fix it in Edit mode. |
| Lucid asks a question | It could not tell which thing you meant. Click an option or say the second one. |
| Couldn’t save | The folder is full or not writable. Click Try again; Lucid also keeps trying by itself and asks before the window closes. |
| Getting the PDF engine ready (first time only…) next to Download PDF | Normal on the first start: wait, it counts the files (about five minutes). A PDF you ask for meanwhile waits for it. |
| needs the internet the first time it makes a PDF | Connect to the internet and click Download PDF again. What was already downloaded is kept. |
| Tectonic, the PDF engine, was not found | The copy of Lucid is damaged. Download it again from the project’s releases (Help, Check for Updates…). Markdown export works meanwhile. |
| PDF without some diagrams, and a note that they could not be drawn | The note says which. Send the page to Lucid again, or fix the diagram in its builder (click the diagram), then download the PDF again. Please report it if it keeps happening. |
| Revert is greyed out | The blocks that change touched were changed after it (by another change or by you). Use undo, or fix it in Edit mode. |
| Nothing happens when you dictate | Click once in the Lucid window so it has the focus; check that Wispr Flow is pasting (the text should appear in the box). |
Where things live
- Your pages: one file per page in
~/Lucid, the Lucid folder in your home folder (on Windows,C:\Users\you\Lucid); a JSON file you can back up or copy. SetLUCID_HOMEto use another folder. - Settings, build files, backups:
~/Lucid/.lucid/. Old versions of a page are kept there before it is overwritten. - PDFs an agent makes:
~/Lucid/exports/. The PDFs you download go where you choose. - Look and type (theme, Mono/Sans/Serif): remembered by the app itself.
For AI agents (MCP)
Lucid is also a toolbox for AI agents: Claude Code, or a model in LM Studio's chat, can read and edit your pages with the same safe tools the local model uses. The Lucid app must be running. Every agent change is one undo step, appears in Changes marked as the agent's, and can be reverted.
The tools: list_documents, get_outline, read_document, insert_notes, apply_ops, list_formats, create_document, export_pdf (saves a PDF in ~/Lucid/exports/), describe_kit. Set-up commands for Claude Code and LM Studio are in docs/mcp.md on GitHub.
Honest limits
- The model is a local 27-billion-parameter model. It is usually right, not always; Edit mode, undo and Revert are for the rest.
- A request takes 10 to 25 seconds, which is normal for a 27B model on a laptop (the first one after a change is the slowest). The line above the input box counts the seconds.
- Pasting, not hearing: Lucid depends on Wispr Flow (or you typing) for the words.
- A diagram with 15 parts in one long column cannot be big on a single PDF page.
- The app is tested with a scripted model and with the real one; how Wispr Flow behaves on your voice can only be checked by you (a check-list).