suffername25 downloadsAsks you one question a day, inside your own notes. You answer in your words and get asked a followup question. Later it builds new questions out of writing you already did. You keep writing.
A vault that interviews you, so that you keep writing.
A blank page stops you; a question doesn't. keep-writing puts one into your daily note in Obsidian, you answer it in your own words, and the next questions come out of what you already wrote — so it never runs out.

In the community store, and early. Search community plugins for keep-writing. Needs Obsidian 1.13 or newer. Questions built from your own writing need a model endpoint; everything else works without one.
On first run it offers to fill your question bank: 2,274 questions written for this, as four plain Markdown notes you can edit or delete.
## Asked
> [!ask] what do you get complimented on the most?
> from [[Bank/autobiographical#^b17850831]]
▏

Your answer gets an id and a link back to the question, and the model reads what you wrote to offer the next one.
On the editor's right-click menu under keep-writing, and in the command palette.
| Command | What happens |
|---|---|
| Draw a question | Three to choose from. A bank question is written straight in; a paragraph of yours goes to the model first. |
| Mark this answer done, and follow up | Links the answer the cursor is in, then offers what follows from it. Safe to run twice. |
| Reopen latest follow-ups | Restores the latest saved offer without another model call, including after restarting. |
| Unmark this answer | Removes its answer links and matching bookmark. Keeps the text, block ID, and existing follow-ups. |
| Ask about the selection | Highlight text in any note and be asked about it. The question lands in today's note. |
| Install the starter question bank | Writes the question notes into your bank folder. Skips anything already there. |
| Open the menu | All of the above, as one chooser. Made for the mobile toolbar. |

There is no right-click on a phone, so the menu is a command instead. Settings → Toolbar, add keep-writing: Open the menu, and that one button reaches everything. It offers only what applies where you are — asking about a selection appears when you have selected something.
Findable from Obsidian's own settings search: type "bank folder" or "endpoint" anywhere in Settings.
| Setting | |
|---|---|
| Daily notes folder | Where your daily notes are. A folder picker, so you cannot name one that isn't there. Default Sittings. |
| Question bank folder | Where the questions are kept. Default Bank. |
| Ask about writing in | One folder per line. The plugin reads what you wrote there and asks about it. Your daily notes are included already; add a folder of finished writing to widen it. |
| Bank share | Default 70%. Choose how often to draw a bank question instead of your writing. An empty jar falls back to the other. |
| Use a model | Off makes it bank-only, with no network call at all. |
| Endpoint | Any OpenAI-compatible server. Default is one on your own computer. For Ollama: http://localhost:11434/v1 |
| Model | Must name a model your server has. |
| Reply budget | Raise it if you get no questions and no error. Default 2048. |
| API key | Only if your server needs one. Saved in Obsidian secret storage on this device; existing plaintext settings migrate automatically. |

Nothing you write leaves your computer unless you point the endpoint somewhere else. That is the whole of what changes.
The guide covers where questions come from and how the bank is built, spending a day on one note, picking up where you stopped, how the three model jobs differ, and how to read your vault in graph view.
Two licences, because there are two kinds of thing here.
starter/ is CC BY-SA 4.0. It is writing, not code. Share and adapt it, as long as you credit the source and license what you build under the same terms.NOTICE says which is which. Your answers are yours — neither licence reaches anything you write.
npm install
npm run dev # rebuild on change
npm test # unit tests, no vault and no model needed
npm run build # typecheck, then bundle
test/fake-vault.ts stands in for Obsidian's App — reads and the whole write surface — so the interview runs and is tested with no Obsidian and no DOM. Tests needing a live model are skipped unless KW_LIVE=1.
Releases are not cut by hand. Pushing a bare semver tag (0.2.0, never v0.2.0) runs .github/workflows/release.yml, which checks the tag against manifest.json and versions.json, tests, builds, attests the assets and publishes them. Every release is signed against the commit it was built from, which matters here because main.js carries all 2,274 questions and nobody can diff those by eye:
gh attestation verify main.js --repo micahchoo/keep-writing