AI note editor · macOS · MIT

Wisp is a Markdown editor with Claude wired into it. Type a thought into the box at the top and Claude reads your notes, works out which one it belongs in and where inside it, and shows you the exact edit before anything is written. Ask a question instead and it answers from those same notes, citing every file it read.

What it writes is plain Markdown in the folder you opened — the same characters you would have typed, still readable by everything else you own.

macOS · Apple Silicon
brew tap oglimmer/wisp https://github.com/oglimmer/wispbrew install --cask wisp
Read the source →

Needs Anthropic's claude CLI installed — that is what does the thinking.

~/vault
Reminders
  • Overdue · 2 daysTag v0.4.0wisp.md
  • Today · 17:00Reply to Martainbox.md
  • Mon · 09:00Weekly review↻ weekly
  • 1 Aug · 10:00Renew the domain↻ yearly

Jot a note and Add files it. Ask a question and Lookup answers it.

CheckAddClaude · readyLookup
# Wisp A folder-backed Markdown editor with Claude doing the filing. ## Decisions - Claude proposes the edit; **you** approve the diff.- Images get described into the note, so a picture is searchable.- Reminders live in `.wisp-reminders.json` at the vault root. > Notes should outlive the app that wrote them. Source: [github.com/oglimmer/wisp](https://github.com/oglimmer/wisp)
projects/wisp.mdSaved
A mock of the Wisp window: a file tree and reminder list on the left; on the right, the box that hands a note or a question to Claude, above the raw Markdown source.

The idea

An assistant that writes files, not a database.

The usual price for this much automation is a store you cannot read: an index, a sync service, a format that only exists inside one app. Wisp pays the other price. Claude reads the folder you pointed it at and writes back into it, and what lands on disk is Markdown you could have typed yourself — the hashes stay hashes, the asterisks stay asterisks.

That is also what keeps the AI honest. Every filing is a diff you approve, every answer names the notes it came from, and if you delete the app tomorrow, what is left behind is a folder of text files.

Claude

One box, both directions.

The panel above the editor takes whatever you type. Add files it into the vault. Lookup answers it from the vault. Same box, opposite directions — so you never have to know where a note lives to put something in it or get something out.

ring the dentist about the crown, has to happen before the 12th

Checked · nothing written yet

EXISTINGhealth.md

Appointments to make already live under that heading in this file.

ReminderRing the dentist11 Aug · 09:00 · once
## Appointments - Optician — new lenses ordered, collect any time- Dentist — ring about the crown, before the 12th ## Repeat prescriptions
Check and Add file the note; Lookup answers from the vault and writes nothing.
Check, then Add
Check shows the plan — target file, new or existing, one line on why, and a diff of the change. Nothing reaches disk until you press Add.
It reads the whole vault
Your notes go along with the request, so the usual filing or answer comes back in a single pass instead of a crawl through the folder.
It edits, it does not append
An existing note is rewritten around your addition, under the right heading and in the formatting already there.
Answers name their sources
Every file an answer drew on is listed with what it contributed, and clicking one opens it.
Only your notes
Lookup is told to answer from the vault and nothing else — and to say plainly when the notes do not have it.
Lookup never writes
It is a read path by construction. The handler behind it has no way to touch a file.

Images

A picture becomes text you can search.

Drop a screenshot into a note and it is copied into the vault and referenced immediately. Then Claude looks at it and writes down what is actually there — the kind of image, its key elements, and any text or numbers it can read off — into the note itself.

NSEWtarget 400k
![a bar chart of Q3 revenue by region](images/q3-revenue.png) <details><summary>Image description</summary>A bar chart titled "Q3 revenue by region" with four bars: North 412k, South 388k, East 274k and West 501k. A dashed line at 400k is labelled "target"; only North and West clear it, and West is the tallest bar on the chart.</details>
The reference is inserted the moment you drop the file, so nothing stalls. The alt text and the description arrive a few seconds later, as plain text in the note.
  • The description is ordinary text in the note, so find, grep and Lookup all see it.
  • It sits in a collapsed block, so the note still reads as a note.
  • Drop several at once and they are described in parallel while you keep typing.
  • PNG, JPEG, GIF and WebP are analysed. Anything else imports as usual, just undescribed.

Reminders

Dates in a note become dates in the sidebar.

File a note that commits you to something and Claude proposes a reminder with it — "before the 12th" resolved against today into an actual date and time. It arrives as part of the plan, so you see it before you accept it.

  • Only for real commitments — a deadline, a booking, a "don't forget". Facts and ideas get nothing.
  • Add one by hand with , or right-click any file in the tree.
  • Repeat daily, weekly, monthly or yearly.
  • Link a reminder to a note and open it straight from the alert.
  • Stored as plain JSON in .wisp-reminders.json at the vault root — readable, editable, and hidden from the tree.
Due now · repeats weekly

Weekly review

projects/wisp.md

Wisp brings its window forward, so this lands in front of whatever you were doing.

Editing

Find, step, replace.

Under the AI it is still a text editor, and the shortcuts are the ones your hands already know. Search seeds itself from your selection, matches stay highlighted while you work, and closing the bar leaves the caret exactly where you stopped.

Findvault3 of 6Esc
# Vault notes The vault is just a folder. Wisp opens the vault youpicked and writes back into it — no vault database,no vault index, nothing beside your files. - [ ] Document the vault layout
Every match stays highlighted. Stepping never loses your place.
Keyboard shortcuts in Wisp
⌘SCtrl+SSaveThe status bar reads Saved or Unsaved changes. Wisp asks before you discard edits.
⌘FCtrl+FFindOpens seeded with whatever you had selected. Every match lights up at once.
⌘GF3Next matchHold ⇧ to walk backwards through the file.
EscClose findThe caret stays on the match you stopped at, ready to type.
⌘⌥FCtrl+HReplaceRewrites the Markdown source, so it opens the raw view to show you what changed.

The vault

A folder is the whole format.

There is no library and no import step. Point Wisp at a folder and it shows you what is in it — and that folder is exactly what Claude is given to read and write.

Pick a folder once
Wisp remembers it the next time you open the app.
No index, no database
Claude reads the folder itself, so there is nothing to build or resync.
Nested paths just work
Name a new file journal/2026/june.md and the folders get made.
Everything else still works
Point another editor at the same folder and nothing objects.

Hidden from the tree — and from Claude

  • node_modules
  • .git
  • .DS_Store
  • .obsidian
  • .wisp-reminders.json
  • …and every other dot-prefixed entry

Security

It only ever touches your vault.

  • Nothing is written unreviewedCheck shows the whole diff. Add is the only thing that writes.
  • Claude stays in your vaultIt runs with your folder as its working directory and read-only tools, and a target path outside the folder is refused.
  • A bad reminder is droppedAnything malformed, or dated in the past, is discarded rather than shown. A wrong alarm is worse than none.
  • It is your ClaudeWisp shells out to the CLI on your own machine, under your own account. The app itself opens no connection at all.
  • Context isolation is onThe page has no reach into Node.
  • Node integration is offNothing in the renderer can require a module.
  • One narrow bridgeEvery read and write crosses a minimal IPC surface, and nothing else.
  • Paths are checkedTraversal guards keep every operation inside the folder you picked.

Install

Two lines and it's yours.

macOS · Apple Silicon · signed and notarised
brew tap oglimmer/wisp https://github.com/oglimmer/wispbrew install --cask wisp

One prerequisite

Filing, Lookup and image descriptions all run Anthropic's claude CLI, so it has to be installed and signed in. Wisp looks for it on your PATH and in the usual install locations:

  • /opt/homebrew/bin
  • /usr/local/bin
  • ~/.local/bin
  • ~/.claude/local

Without it the editor still opens, saves, searches and reminds — it simply cannot think. And when you do use those features, the notes involved go to Claude through that CLI, on your own account. Wisp itself talks to nothing.

Apple Silicon is the only build published as a binary. On Intel macOS, Linux or Windows, run it from source — you need Node 18 or newer.

From source
git clone https://github.com/oglimmer/wisp.gitnpm installnpm start

MIT licensed. Issues and pull requests are welcome at github.com/oglimmer/wisp.