Insurgently
Obsidian plugin· Beta · beta · not yet released

Learning Editor

Feedback on your writing, marked on the exact words, from a coach that learns your habits. Nothing changes without your say.

What's changed in Learning Editor

Unreleased

not yet released

Everything built so far.

New

  • Marks on the exact words: each piece of feedback is a wavy underline in its kind's color (Voice, Clarity, Line, Cuts, Mechanics), with a card that shows the words, the suggested change, why, and a Careful: line when a fix would change a number, a name or a quote.
  • Apply and dismiss: one click, one change, one undo. A mark whose words you edited turns gray and won't apply. Apply all visible findings applies every safe fix as one change.
  • Dismiss with a reason: Voice, Wrong or Not now, in one tap or with the keys 1, 2 and 3. A dismissed mark doesn't come back for the same words.
  • Inline diff: Cuts and Mechanics show the words to cut struck in place. Any kind can switch between underline and inline diff.
  • The strip: a count of marks by kind at the foot of the note. Click a kind to show or hide it.
  • A panel beside your note, opened from the spell-check ribbon icon or Open the panel. It holds every action: check, coach and stop, clear findings, apply all, hide a kind or switch it to inline diff, your profile and rules, and what the coach learned. It follows the note you're on, remembers which sections you folded and can open on start.
  • Vim keys (]f, [f, z=, zg, :FeedbackApplyAll) when vim mode is on; no command has a default keyboard shortcut.
  • Your profile: Create your profile makes a starter profile note with sections for your voice, words never to fix, house conventions, habits to coach and rejected suggestions. Import profile from a file… brings in one you already have (desktop only).
  • Habit checks when you ask: Check this note marks hedges, intensifiers, softeners, filler and vague words from a starter pack, your profile and your own rule notes, plus close repeats, leaned-on words, very long sentences and sticky sentences (heavy with glue words like of, the and that). A note is never checked until you ask; after that it stays up to date as you write. Local and free.
  • Habit rules you can write: a rule is a small note with its own examples; a rule whose examples fail is switched off and the panel's Rules and profile section says why. Its Copy the starter habit rules button gives you copies to edit.
  • Spelling and grammar on your device, checked by Harper, with a dictionary note for your own words.
  • Coach this note: a model reads the draft against your profile through Model Hub, with a spending limit per run, progress in the status bar and Stop coaching. It ends with a summary and a score out of 10.
  • The learning loop: your decisions become proposals for your profile (keep these words, treat this as your voice, make this an automatic check, turn this kind down). Review what I've learned shows them, and you accept or skip each one.
  • Writing progress, a section of the panel: your habit rate per 100 words for the open note, next to your average, with the top habits, the hardest paragraphs and the coach's last read. The rate can be saved to the note's frontmatter as habit_rate, off by default.
  • Report a problem… in the panel's "⋯" menu: builds a bug report you read in full before you send it, by a GitHub issue, a copy, a file or email. Learning Editor's part holds counts, timings and error codes only, never your notes' words, names or paths.
  • Searchable settings for the profile and rules folder, each check, the coach's spending limit and model, how each kind of mark shows, the kinds you turned down, and opening the panel on start. Type in Obsidian's settings search to find a row.

Changed

  • The command palette lists eight commands: Open the panel, Coach this note, Check habits in this note, Go to next finding, Go to previous finding, Show finding, Apply finding and Dismiss finding. Everything else is a button in the panel. Open the panel (open-panel) is new; the ids of the other seven are unchanged, so existing keyboard shortcuts for them keep working.
  • A one-time notice names any moved command you had given a keyboard shortcut to, and says it's now in the panel.
  • Dialogs and notices share one look and keyboard behavior, and the settings tab is built from Obsidian's setting definitions.
  • Obsidian 1.13.1 or later is required.

Fixed

  • Review what I’ve learned in the settings tab shows again.
  • Path settings save once, after you stop typing, rather than on every key.
For plugin developers · 7 changes
  • Build a different editor on the same code: startEditor(plugin, options) with your own categories, coach prompt and tools, files and settings storage. See the developer guide in docs/guide/developers/.
  • plugin.automation and ctx.automation: run the editor's commands from a script or a test without clicking. commands() lists them, run(id, { target, answers }) runs one, state() returns what the panel shows, idle() waits until the coach and the checks are quiet and log() returns the notices and commands so far. A command that writes to a note, a setting or a paid model run is planned first and runs only with confirm; a paid coach run is priced with Model Hub's estimate() (Model Hub 0.13 or newer): the plan carries its high estimate as costUsd, the budget you approve caps the run, and without a price the run is refused. Confirming Show, Apply or Dismiss finding needs the plan's markId, so a moved cursor can't change a different finding.
  • EditorOptions.panel: the panel, its ribbon icon and its Open the panel command. It's on for Learning Editor itself. A host that passes its own pluginId gets no panel unless it sets panel: true, so existing hosts behave as before: without the panel, every command is registered with Obsidian, and Open writing progress shows the progress in a dialog. The panel's view type is <pluginId>-panel. The old <pluginId>-progress view is gone; leaves left for it close on start. Hosts need Obsidian 1.13.1.
  • EditorOptions.support: where a host takes bug reports ({ email, repo }). Each host's report section is registered under its own plugin id and display name; a host that names no repo gets the email route only.
  • EditorOptions.report: a host's own fields, suspects, secrets and settings in its bug report section, after the editor's. A host collect that throws or hangs costs only its own lines. errorCode and KNOWN_CODES are exported for hosts.
  • renderSettings stays exported for hosts.
  • The root styles.css is generated by the build and committed, so a host can copy learning-editor/styles.css.

Each released version is also a GitHub release with the same notes. What is planned next: the roadmap.