grove

Task rail

The left-most column of the Grove window is the vault tree: a tree of .grove/workspace/ where each task is an expandable folder of its notes, interleaved with loose notes, folders, and web links — plus a synthetic "main" row for the workspace itself and a collapsible Archived section at the bottom.

What a task row shows

  • The task name, with its color stripe. Color is yours to assign from an HSL wheel — use it to group related work at a glance.
  • Expand the row and you're looking at the task's notes — plan.md, design docs, the setup log — because a task is a folder. See Tasks and worktrees.
  • Tasks have exactly two states: active and archived. There is no running/idle dot on the row — the live "what's happening" signal lives on the chat pills, which tint when a turn finishes unfocused and badge open-comment counts. See Chat and terminal.

Notifications

When an agent needs you — a question, a finished turn — Grove fires an OS-level notification rather than accumulating badge counts in the rail. Focus follows you, not the other way around.

Hover card

Hovering a task opens a card with the at-a-glance state and the most-used actions:

  • Branch name and a live +adds / −removes diff stat.
  • Four icon actions: open terminal, show files, show changes, sync (rebase onto base).
  • A Create PR control. See GitHub PR sync.
  • One start a chat button per agent provider (Claude, Codex).

Interactions

  • Click activates the task — the diff overlay in the viewer follows the active task. A plain click does not auto-open a chat.
  • Right-click for the context menu: Rename, Change color…, Archive / Unarchive, Demote (delete worktree, keep the notes as a plain folder), Delete (remove worktree + branch + folder).
  • Keyboard, on the focused row: Cmd+Backspace archives an active task (or deletes an archived one); Enter starts a rename.
  • Drag moves notes and folders around the vault tree. (Tasks aren't reorderable — rows follow vault order.)

Create and auto-rename

A new task starts life with a placeholder name (Task <digits>) and an unmaterialized worktree. The first time its agent finishes a turn, Grove derives a real title from your first prompt and renames the task — unless you've already named it yourself. Loose vault files and folders can be promoted to tasks, and tasks demoted back to plain folders, from the same menu.

Current limitations

  • No task reordering or custom sort.
  • Rebase conflicts surface when you sync, not as a persistent row status.

Where this lives in the code

  • Rail, rows, context menu, drag: src/components/WorkspaceTree.tsx.
  • Hover card and color picker: src/components/TaskHoverCard.tsx, src/components/TaskColorPicker.tsx.
  • Task list, notifications, auto-rename: src/hooks/useTasks.ts.