keep-writing

by suffername
5
4
3
2
1
Score: 50/100

Description

A vault that interviews you, so that you keep writing. An Obsidian plugin: a question waiting in your daily note, new ones composed from writing you have already done, and every answer linked to what provoked it.

Reviews

No reviews yet.

Stats

0
stars
438
downloads
0
forks
16
days
1
days
1
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
49
commits

Latest Version

2 days ago

Changelog

0.8.0

  • Ask my own… is the last row of every draw, even an empty one. Search every question in every bank, answered ones included and marked with the note that answered them, and pick one. Or type a new question: it is added, as you typed it, to Bank/Custom.md and asked at once.
  • Bank/Custom.md needs no ids. Any list line you type there, from any device, is a question: searchable, drawable, and retired when answered. Change its words and it is a new question.
  • Check and repair the question banks gives an id to bank lines that have none, which until now were silently skipped, and a new id to a repeated one. An answer to a Custom question you have since reworded is linked to what it became. What it cannot decide alone, it lists.

Requires Obsidian 1.13.0 or later.

0.7.0

  • Set up keep-writing replaces the first-run offer to fill the question bank. It finds your daily notes folder, lists the folders that hold your writing with how many paragraphs each has, offers the banks, and checks for an AI server. Nothing changes until you start, and it ends by drawing your first question. Run it again from the command palette.
  • If Obsidian's Daily notes plugin writes into your questions folder, today's note is made by that plugin, in your date format and with your template. Settings offers to use its folder.
  • Settings → Check the server lists your server's models and turns Model name into a choice. It also finds Ollama and LM Studio on this device, and offers to switch to one when your server is not answering.
  • When the AI server cannot be reached, the message says where to fix it.
  • Ask about writing in shows how many paragraphs each folder holds, and how many questions can come from in all.

Requires Obsidian 1.13.0 or later.

0.6.0

  • Paragraphs without a block id are drawn. Until now only a paragraph that already carried an id could be, so a vault without them got no questions from its own writing. Nothing is written into the paragraph: it is linked by an address computed from its words (^kw-…), and answering it retires it like any other.
  • Ask about the selection no longer adds a block id to the paragraph you selected.
  • Every question from your writing now has the paragraph it came from quoted under it, as text. A drawn paragraph was not shown before, and a chosen one was embedded.
  • When a draw finds nothing, it says why: nothing in the folders you chose and the bank, or everything answered.
  • Settings → The AI's instructions: who is asking, and where the AI looks when you mark an answer, point at a paragraph, or draw one. Each box holds the whole list it steers by, up to 250 words, with a Restore row to put the default back. The reply format stays fixed. An instruction you edited in 0.5.0 keeps working: the list it was added to is put in front of it.

Requires Obsidian 1.13.0 or later.

0.5.0

  • 1,202 new questions: 767 in autobiographical, 60 in learning, and 375 prompts in invention. The bundled banks now hold 3,576.
  • Banks you already installed can receive them. The first time Obsidian loads this version, it shows how many new questions each installed bank would gain and adds nothing unless you agree. Add new questions to installed banks, and Add new questions in settings, do the same at any time. New questions go into the section of their register. Nothing you wrote or changed is edited, and a question you deleted does not come back.
  • Each bank note now carries a shipped property: the highest question number of each kind it has received. It is how an update knows what is new. Leave it in place.
  • Settings → What the AI looks for holds two instructions you can edit, up to 100 words each: one for questions about a paragraph you choose, one for questions drawn from your older writing. Clear a box to restore the default. Notes in a Lenses folder are no longer read.
  • Follow-ups can be asked for again: marking an answer again usually finds other questions, and Different questions in the chooser leaves out every question it has already shown.
  • A follow-up is now written with the questions and answers that led to it in the same thread. Questions about a paragraph you point at have their own instructions to the model, instead of borrowing the follow-up's.

Requires Obsidian 1.13.0 or later. Existing bank notes are kept as they are until you choose to add the new questions.

0.4.0

  • The bank list starts closed behind Installed banks, with a count. Open that page to adjust frequencies or open a bank note.
  • Rewrote settings descriptions to explain what each control changes. Opening a bank note now closes Settings so the note is visible.
  • Added 100 ordinary-life questions, reviewed against the personal Bank test. Short, particular answers are welcome; no project is needed.
  • Settings now let you choose bundled banks, copy agent instructions for a new bank, and set draw weights per bank. Imported Markdown banks appear automatically. Weights apply to both opening questions and manual draws; 0 pauses a bank.
  • The default bank mix is ordinary life 30, autobiographical 25, autoethnographic 20, learning 15, and invention 10. Custom banks start at 10. Empty and fully answered banks yield their share to the others.
  • The folder dropdowns in settings list every folder in the vault, including folders made or renamed while Obsidian is open. In 0.3.0 they offered only the folder already chosen, and no Add a folder list, until the plugin was reloaded.
  • The default model name is now qwen3.8-27b. Existing configured model names are kept.

Requires Obsidian 1.13.0 or later. Existing bank notes are preserved; install the ordinary-life bank from settings.

0.3.0

  • A draw reads only the notes it chooses. Over 250,000 synthetic notes a draw takes 58 ms, where it took 6 s. The plugin no longer does work each time any note is saved.
  • Marking an answer writes answers on the answer only. It no longer writes answered-by on the source, or registers on the answer. Properties already in your notes are not changed.
  • Removed: Reopen latest follow-ups, Unmark this answer and Open the menu. The right-click submenu stays, and offers Graduate threads to pieces in a daily note. To get follow-ups again, mark the answer again. To take back a mark, delete it from answers.
  • New: Graduate threads to pieces. A question and its follow-ups move out of a daily note into a new piece, word for word, with the questions as headings. Every link to a moved paragraph follows it. The model can summarize a thread to help you name it, and suggest headings when you ask; neither is written unless you pick it.
  • The chooser's paragraph count includes blocks it has not read yet, so it can be higher than before. Two tellings of one paragraph are now two blocks.

Requires Obsidian 1.13.0 or later. A saved follow-up offer from 0.2.9 is dropped from plugin data on the next settings write.

0.2.9

  • Accepting a saved follow-up no longer writes the paragraph's block id a second time when it already has one. The one body edit the plugin makes is now covered by tests that drive the writer that ships; until now they drove a twin nothing called.
  • The saved follow-ups (the ones Reopen latest follow-ups shows) keep their rules in one place: a question leaves the offer only once its Ask is written, two clicks write once, and an offer replaced by a newer one accepts nothing. Same behaviour, now tested.
  • Internal: answered-ness and the jar cache move out of the Bank module; what a reach decides (Lens, composer, embedding) is one table; the bank share default and its clamp are declared once; unmark reads the property names from the modules that own them; the cooperative work budget counts its own steps.

Requires Obsidian 1.13.0 or later. No change to stored data or settings.

0.2.8

  • Preserve the selected source across delayed acceptance. Refuse changed or ambiguous paragraphs without writing to unrelated prose.
  • Revalidate answers before marking them when text changes during an asynchronous operation.
  • Scope targeted draws before deduplication and reuse unchanged extraction. Keep cache invalidation and disposal tied to the current file generation.
  • Yield during large draws and replace repeated heading scans with indexed lookup.
  • Preserve the saved follow-ups, secret storage, safe unmarking and bank-share controls from 0.2.7.
  • Verify package, lockfile, manifest and tag versions before publication.

Requires Obsidian 1.13.0 or later. Synthetic large-vault checks do not establish mobile or device-specific performance.

README file from

Github

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 a daily note, an answer is written under a question; "Mark this answer done, and follow up" is chosen from the right-click menu; the answer gains a block id and a link to the question it answers; the model offers three follow-up questions from what was written, and the chosen one lands below the answer.

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.

What it does

  • Starts the day for you. Adds an opening question to a new daily note when a bank has unanswered questions. Works without AI.
  • Draws a question into today's note. Three to choose from — pick one, or press Escape and nothing is written.
  • Asks your own. Under the three is Ask my own…: search every bank, answered questions included, or type a new question. A new one is kept in Bank/Custom.md, where any line you type, on any device, is a question.
  • Turns your old writing into new questions. Highlight a paragraph and you are asked about that paragraph. Let the draw find one and you get a question about your life now — most of what it can reach is years old, and a question about 2020 is a question for whoever you were then. Any paragraph in the folders you choose counts, as it is; nothing is added to it.
  • Lets you rewrite how it asks. The AI's instructions are in settings: who is asking, and where it looks for each kind of question. The reply format stays fixed, so no edit can stop the questions, and every box has a way back to its default.
  • Follows up. Mark an answer done and the model reads it, then offers the next question. Run it again next week and it writes fresh ones.
  • Opens where you stopped. Leave a note about where to pick up, and tomorrow's first question comes from what you wrote, with your own words under it.
  • Links every answer to the question that caused it, which is what stops a question coming back once you have answered it.
  • Grows pieces out of days. A question and its follow-ups can leave the daily note and become a piece of its own, with every link following the words.
  • Never writes your prose. It adds frontmatter, a block id on your answer, and the question itself, with the words it asks about quoted under it. The only other writes are ones you start: a question you typed, added to Bank/Custom.md, and ids the bank check adds to bank lines. No sentence of yours is ever edited or reworded.

Getting started

On first run, Set up keep-writing finds your daily notes, lists the folders that hold your writing and how much each holds, offers the question banks — 3,576 questions across five plain Markdown notes you can edit or delete — and checks for an AI server. Nothing changes until you start, and it ends by drawing your first question.

  1. Open today's daily note.
  2. Run Draw a question — ribbon icon, command palette, or right-click.
  3. Pick one. It lands in your note and the cursor goes where your answer starts:
## Asked

> [!ask] what do you get complimented on the most?
> from [[Bank/autobiographical#^b17850831]]

▏

The draw offering three sources: two bank questions with their kind and address underneath, and one paragraph the owner wrote a week earlier, marked as a revisit.

  1. Write. Then, with the cursor still in your answer, run Mark this answer done, and follow up.

Your answer gets an id and a link back to the question, and the model reads what you wrote to offer the next one.

Commands

On the editor's right-click menu under keep-writing, and in the command palette.

Command What happens
Set up keep-writing Daily notes, writing folders, banks and AI server in one place. Runs on first load; run it again any time.
Draw a question Three to choose from, and Ask my own… to search the banks or write a new question. 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. Run it again for fresh follow-ups.
Ask about the selection Highlight text in any note and be asked about it. The question lands in today's note.
Choose question banks to install Choose which banks to add. Existing notes keep your edits.
Check and repair the question banks Gives an id to bank lines that have none, so they can be asked, and lists what it cannot fix by itself.
Graduate threads to pieces In a daily note, turns a question and its follow-ups into a piece of writing of its own: your words moved as written, the questions as headings.

Graduating a daily note's thread: "Graduate threads to pieces" from the right-click menu; a form with three lines on what the thread is about, a title typed in, and suggested headings filled in; then the new piece, with its title, date, headings and the answers as they were written.

Obsidian's right-click menu with a keep-writing submenu open, holding Draw a question, Mark this answer done, and Graduate threads to pieces.

On a phone

Where the editor menu opens on a phone, its keep-writing actions are listed flat, because a submenu wants a hover. The quickest way in is the toolbar: in Settings → Toolbar, add keep-writing: Draw a question and keep-writing: Mark this answer done, and follow up.

Settings

Findable from Obsidian's own settings search: type "bank folder" or "server address" anywhere in Settings.

Setting
Daily notes folder Where your daily notes are, chosen from your folders. Default Sittings.
Question bank folder Where the questions are kept, chosen from your folders. Default Bank.
Ask about writing in Choose the folders you want questions about, each shown with how many paragraphs it holds. Your daily notes are included by default.
Use saved questions (%) Default 70%. Choose how often to draw a bank question instead of your writing. If one source has nothing available, the other is used.
Question banks Install selected banks, get authoring instructions for your agent, and open Installed banks to choose how often each appears. Zero pauses it.
Generate questions with AI Off makes it bank-only, with no network call at all.
The AI's instructions Who is asking, and where the AI looks when you mark an answer, point at a paragraph, or draw one. Restore puts the default back.
Server address An OpenAI-compatible server. The default expects one already running on your device. For Ollama: http://localhost:11434/v1
Check the server Lists your server's models so Model name becomes a choice, and finds Ollama or LM Studio on this device.
Model name Must name a model your server has.
Response length limit Maximum AI response size in tokens. Raise it if responses are cut short. Default 2048.
API key Only if your server needs one. Saved in Obsidian secret storage on this device; existing plaintext settings migrate automatically.

Open Installed banks to adjust a frequency, then return to the compact main settings page.

To import a finished bank or get instructions for your agent, see Choose, import, or create a bank.

Nothing you write leaves your computer unless you point the endpoint somewhere else. That is the whole of what changes.

More

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, how to change how it asks, and how to read your vault in graph view.

Licence

Two licences, because there are two kinds of thing here.

  • The code is MIT.
  • The question bank in 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.

Development

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,374 questions and nobody can diff those by eye:

gh attestation verify main.js --repo micahchoo/keep-writing