grove

Markdown editor

Grove's notes surface — a full Milkdown WYSIWYG editor alongside Monaco — lives in the same workspace as your code, so the markdown you write and the files you reference can point at each other.

Two views, one file

Every markdown file has a rendered (WYSIWYG) view and a raw (Monaco) view, toggleable from the file header. Files in your vault open in WYSIWYG by default. Edits auto-save on a short debounce, and the serializer is tuned to round-trip cleanly — saving a version-controlled doc doesn't rewrite its bullets or loosen its lists into a noisy diff.

Toggling preserves position — flipping raw → rendered scrolls so the block containing the Monaco cursor is at the top; flipping back puts the cursor on the first source line of whichever block was top-visible. Per-path scroll memory survives tab switches.

If an agent rewrites a note you have open, the view reloads from disk — unless you have unsaved edits, which always win.

The outline rail

The right rail shows a table of contents parsed from the headings. The current heading highlights as you scroll or move the cursor. On by default for markdown files.

Reading mode

Settings → General → Reading mode widens line-height, clamps width, and bumps body font for long-form reading.

Slash menu

Typing / at the start of a block opens a typeahead command list — H1–H3, lists, quote, code, mermaid, table, divider, image, link — plus the full catalog of live :grove-* panels: task boards, status pills, diffs, comment inboxes, agent lists. Each command inserts a real schema node, not literal text. See Directives.

Starter templates

The sidebar's New from template picker seeds a workspace note from a built-in template: Daily log (date-aware), To-do, Sprint, Known bugs, Project plan / PRD, Engineering plan. Templates use live directives, so a fresh Daily log already has a working task board in it. Filenames auto-suffix on collision.

Rich blocks

  • Mermaid diagrams in fenced ```mermaid blocks render inline as SVG.
  • Code blocks with syntax-highlighted fences.
  • GFM task lists — clicking [ ] / [x] toggles via a real editor transaction, so subsequent typing can't clobber the state.
  • Image paste & drop writes into the note's attachments/ folder and renders immediately.

Cross-linking to code

Code references in plain prose — src/foo.ts, a folder like auth/, a bare filename, a symbol like resolveDeeplink() — light up as links, but only when they actually resolve to something in the repo. Ordinary prose never lights up by accident. Clicking navigates there; if a reference is ambiguous (two files named utils.ts), a picker opens and your choice is remembered. These links are content-anchored, so they survive refactors — see Wikilinks for the full anchor layer.

Typing @ opens an inline file palette scoped to the workspace; selecting a file inserts a [name](path) link. External URLs autolink as you type or paste.

Where files live

The vault is the .grove/workspace/ tree: workspace-level notes at its root, task notes inside each task's folder (next to the worktree, not in it — notes never pollute the task's diff). Committed repo docs like README.md open in the same editor.

See also