grove

GitHub PR review

Grove brings GitHub pull-request review in-app by shelling out to the gh CLI you already have — no token storage, no OAuth, no GitHub App. If gh is missing or logged out, the GitHub surfaces degrade to a "run gh auth login" hint rather than erroring.

The Reviews inbox

The task rail shows a Reviews section: open PRs that request your review. Each row carries the title, number, author, a +adds/−dels diffstat, and — fetched lazily on hover — the CI and review-decision badge. PRs that already have an active Grove task are de-duplicated out. Refresh is a manual button, not a poller.

The command palette (Cmd+K) also lists the repo's open PRs — select one to open it for review.

Two ways to open a PR

Review-only (the default, instant). Grove fetches the PR head into a private ref and renders a read-only side-by-side diff straight from git's object database — no worktree, no checkout, robust to force-pushes. Fast path for "look and comment."

Materialized worktree. One click ("Open worktree") upgrades the review into a full task: a real worktree on a grove/pr/<n> branch, editable files, agent-capable, full comment anchoring. From there the PR task behaves like any other task — you can spawn an agent on someone else's PR and ask it to address review feedback.

Comment sync

GitHub review comments sync bidirectionally with Grove's comment store:

  • Pull runs when you activate a PR task: inline review comments and PR-conversation comments land in the local store, threaded with their replies, stamped with their GitHub author, and content-anchored so they relocate like any Grove comment. Conversation-level comments group under a "PR conversation" header.
  • Push submits your locally-authored comments as one batched GitHub review — approve, request changes, or comment. Replies to GitHub threads post as inline replies.

The sync is idempotent: a per-task mapping table records which GitHub comment corresponds to which Grove comment, so nothing is ever posted or imported twice. The author stamp is the boundary — Grove never echoes GitHub's own comments back upstream.

Because synced comments live in the same store agents read, an agent on the PR task sees the human review feedback in its inboxcomments_list_pending includes the GitHub reviewer's notes.

Creating a PR from a task

Every task has a PR button (top bar and hover card):

  • No PR yet → it opens GitHub's compare page for the task's branch, pre-set to draft or regular per your settings. You write the title and body on github.com; when you tab back, the button has noticed the new PR and flipped to PR #n.
  • PR exists → the button opens it; the caret menu adds Merge to base (squash + delete branch, after a confirm).

Grove never runs git push — getting the branch onto origin is the agent's (or your) job. The button is a handoff, not a publish pipeline.

CI rollup

PR status folds GitHub's check results into one conservative badge: skipped/neutral counts as passing, anything unknown counts as pending (never falsely green), and a single failing check makes the rollup red.

Current limitations

  • Merge is hardcoded to squash + delete-branch.
  • No live updates — no webhooks or background polling; refresh is manual or on-activation.
  • Upstream comment edits aren't reconciled (the first-synced body sticks).
  • A long-open review can lag the PR until reopened (the head ref refreshes on open/materialize).

See also