Skip to content

Releases: backnotprop/plannotator

v0.14.1

18 Mar 23:38

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.14.0 PR review via GitHub URL, /plannotator-last for annotating agent messages, OpenCode plan mode permissions fix, VS Code SSH proxy fix
v0.13.1 OpenCode plan mode rewrite, Obsidian save fix
v0.13.0 Built-in themes, annotatable plan diffs, file-scoped code review comments, Octarine integration, unified review core, Pi remote sessions
v0.12.0 Quick annotation labels, mobile compatibility, Graphviz rendering, markdown images with lightbox, linked doc navigation in annotate mode
v0.11.4 Git add from code review, bidirectional scroll navigation, clipboard paste for annotation images, VS Code IPC port stability
v0.11.3 Expandable diff context, hierarchical folder tree, redesigned worktree controls, supply chain hardening
v0.11.2 Git worktree support in code review, VS Code editor annotations in review, Obsidian auto-save & separator settings, session discovery, smart file resolution
v0.11.1 VS Code extension for in-editor plan review, Pinpoint mode for point-and-click annotations, untracked files in code review
v0.11.0 Auto-save annotation drafts, comment popover, Obsidian vault browser, deny message framing fix, configurable OpenCode timeout
v0.10.0 Short URL sharing with E2E encryption, code suggestions in review UI, CJK input method support, customizable Obsidian filenames, XDG install fix
v0.9.3 Linked document navigation & annotation, VS Code diff integration, toolbar dismiss fix, automated npm publishing
v0.9.0 Plan Diff with two view modes, version history, sidebar redesign, terminology cleanup

What's New in v0.14.1

v0.14.1 is a small patch with two fixes and one feature. It simplifies the OpenCode plan mode tool interface, adds viewed-file persistence to code review drafts, and fixes Bear's nested tag handling.

OpenCode: Single submit_plan with Auto-Detect

v0.14.0 patched OpenCode plan mode permissions, but the underlying tool interface was still more complex than it needed to be. Agents had two tools (submit_plan and submit_plan_file) and an 80+ line prompt that fought with OpenCode's own plan mode directive.

This release collapses both tools back into a single submit_plan(plan) that auto-detects whether the argument is markdown text or a file path. On the first submission, the agent passes plan text directly. On denial, the response includes the history path where the plan was saved, so the agent can edit that file with targeted changes and resubmit the path. The planning prompt drops from 80+ lines to roughly 25.

The auto-detection logic is straightforward: if the value is an absolute path ending in .md that exists on disk, treat it as a file path. Plan markdown virtually never satisfies all three conditions.

Persist Viewed Files in Code Review Drafts

The draft auto-save system (introduced in v0.11.0 for annotations) now includes viewed-file state. When reviewing a large diff, marking files as "viewed" is part of the workflow. Previously, a page refresh or browser restart lost that progress. Viewed files now save and restore atomically alongside annotations in the same draft file. The restore banner shows both counts when applicable. Old drafts without viewed files load correctly.

Bear Nested Tag Fix

Bear supports nested tags like plannotator/plans for hierarchical organization. The normalizeTags() function was stripping / characters from custom tags, collapsing plannotator/plans into plannotatorplans. The fix preserves slashes while still collapsing consecutive slashes and stripping leading/trailing ones.


Install / Update

macOS / Linux:

curl -fsSL https://plannotator.ai/install.sh | bash

Windows:

irm https://plannotator.ai/install.ps1 | iex

Claude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".

OpenCode: Clear cache and restart:

rm -rf ~/.bun/install/cache/@plannotator

Then in opencode.json:

{
  "plugin": ["@plannotator/opencode@latest"]
}

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

  • fix: preserve slashes in Bear tag normalization for nested tags by @MarceloPrado in #331
  • fix: single submit_plan with text/path auto-detect for OpenCode by @backnotprop in #333
  • feat: persist viewed files in code review drafts by @backnotprop in #335

Community

@MarceloPrado authored the Bear nested tag fix (#331), a follow-up to the configurable Bear tags feature he contributed in v0.13.0 (#283).

Community members who reported issues that shaped this release:

  • @oronbz: #332 (persist viewed files in code review, with comparison to GitHub's review workflow)
  • @rcdailey: #328 (feedback on submit_plan tool consolidation)

Full Changelog: v0.14.0...v0.14.1

v0.14.0

18 Mar 14:56

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.13.1 OpenCode plan mode rewrite, Obsidian save fix
v0.13.0 Built-in themes, annotatable plan diffs, file-scoped code review comments, Octarine integration, unified review core, Pi remote sessions
v0.12.0 Quick annotation labels, mobile compatibility, Graphviz rendering, markdown images with lightbox, linked doc navigation in annotate mode
v0.11.4 Git add from code review, bidirectional scroll navigation, clipboard paste for annotation images, VS Code IPC port stability
v0.11.3 Expandable diff context, hierarchical folder tree, redesigned worktree controls, supply chain hardening
v0.11.2 Git worktree support in code review, VS Code editor annotations in review, Obsidian auto-save & separator settings, session discovery, smart file resolution
v0.11.1 VS Code extension for in-editor plan review, Pinpoint mode for point-and-click annotations, untracked files in code review
v0.11.0 Auto-save annotation drafts, comment popover, Obsidian vault browser, deny message framing fix, configurable OpenCode timeout
v0.10.0 Short URL sharing with E2E encryption, code suggestions in review UI, CJK input method support, customizable Obsidian filenames, XDG install fix
v0.9.3 Linked document navigation & annotation, VS Code diff integration, toolbar dismiss fix, automated npm publishing
v0.9.0 Plan Diff with two view modes, version history, sidebar redesign, terminology cleanup

What's New in v0.14.0

v0.14.0 adds PR review via GitHub URL, a new /plannotator-last command for annotating agent messages, and a batch of fixes for OpenCode plan mode, the VS Code extension over SSH, and the review server. Seven of the nine PRs address user-reported issues. Three external contributors authored fixes, two of them first-time.

PR Review via GitHub URL

/plannotator-review now accepts a GitHub pull request URL. Run /plannotator-review https://github.com/owner/repo/pull/123 and the review UI opens with the PR's diff, metadata badge (title, number, link back to GitHub), and full annotation support. Authentication goes through the gh CLI, so private repos work if you're already authenticated. Expandable file context fetches from the GitHub API using the PR's base and head SHAs.

In PR mode, the diff switcher and staging buttons are hidden since you're reviewing a remote PR, not local changes. Everything else works the same: annotate lines, leave file-level comments, send feedback back to the agent.

The implementation introduces a runtime-agnostic PR provider (packages/shared/pr-provider.ts) that follows the same interface pattern as the existing ReviewGitRuntime, with a Bun wrapper in packages/server/pr.ts.

Annotate Last Agent Message

/plannotator-last extracts the last rendered assistant message from the current session and opens it in the annotation UI. Select text, add comments, mark deletions, attach images, and send structured feedback back to the agent. This works across all four harnesses:

Harness How it finds the message
Claude Code Parses ~/.claude/projects/{slug}/*.jsonl session logs
Pi ctx.sessionManager.getEntries() API
OpenCode client.session.messages() SDK
Codex Parses ~/.codex/sessions/ rollout JSONL files

The UI adapts to the annotate-last context: the copy button reads "Copy message," the completion overlay says "annotations on the message," and the feedback export is titled "Message Feedback."

OpenCode Plan Mode Permissions and Prompt Fixes

v0.13.1 rewrote OpenCode plan mode, but OpenCode's upstream prompt and permission system fought the plugin at several points. The agent would get PermissionDeniedError when writing .md files in the plan directory. OpenCode's "STRICTLY FORBIDDEN" plan mode directive confused models into refusing file edits even when explicitly allowed. The submit_plan tool appeared outside of plan mode, leading to confusing agent behavior.

This release fixes all of that. The plugin now grants per-agent edit permission for *.md scoped to the plan agent only. It strips OpenCode's conflicting plan mode prompt from synthetic user message parts. It overrides the todowrite tool description to redirect to submit_plan, and injects a <system-reminder> reinforcing plan mode behavior on every turn. The validatePlanPath directory restriction is disabled so plans can be written anywhere the agent chooses within the XDG data path.

VS Code SSH Remote: Proxy Race Condition and IPC Discovery

Two issues prevented the VS Code extension from working reliably over SSH Remote. First, the cookie proxy connected to the upstream Bun server before it was ready, showing "proxy error" on first load. The fix adds retry with exponential backoff (200/400/800ms) in the proxy, plus a silent auto-reload fallback in the webview wrapper.

Second, background processes spawned by Claude Code hooks don't inherit VS Code's PLANNOTATOR_BROWSER environment variable, so openBrowser() had no way to reach the extension. The fix introduces a file-based IPC registry at ~/.plannotator/vscode-ipc.json. The extension writes its IPC port keyed by workspace path, and openBrowser() reads it as a fallback. Multi-window setups are handled via longest-prefix workspace matching.

Additional Changes

  • Review server CWD context flow — In tmux/server/attach setups, the OpenCode review server could use the wrong working directory for diff commands. The review flow now carries cwd as explicit session context via GitContext, so all endpoints (/api/diff, /api/file-content, /api/git-add) use the correct project directory. Authored by @jwyce in #323
  • Disable external diff in git commands — Review-related git diff calls now include --no-ext-diff so external diff tools configured in the user's git config don't corrupt the output. Authored by @BruceChen7 in #320
  • /plannotator-last documentation — Docs and install scripts updated for the new command (#327)

Install / Update

macOS / Linux:

curl -fsSL https://plannotator.ai/install.sh | bash

Windows:

irm https://plannotator.ai/install.ps1 | iex

Claude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".

OpenCode: Clear cache and restart:

rm -rf ~/.bun/install/cache/@plannotator

Then in opencode.json:

{
  "plugin": ["@plannotator/opencode@latest"]
}

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

  • fix(review): disable external diff in git commands by @BruceChen7 in #320
  • fix: proxy race condition + IPC discovery for VS Code SSH Remote by @7tg in #322
  • fix: opencode review cwd context flow by @jwyce in #323
  • feat: PR review support via GitHub URL by @backnotprop in #324
  • feat: /plannotator-last — annotate the last agent message by @backnotprop in #325
  • feat: add release process skill by @backnotprop in #326
  • docs: add /plannotator-last to docs and install scripts by @backnotprop in #327
  • fix: OpenCode plan mode permissions and prompt conflicts by @backnotprop in [#329](h...
Read more

v0.13.1

16 Mar 23:46

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.13.0 Built-in themes, annotatable plan diffs, file-scoped code review comments, Octarine integration, unified review core, Pi remote sessions
v0.12.0 Quick annotation labels, mobile compatibility, Graphviz rendering, markdown images with lightbox, linked doc navigation in annotate mode
v0.11.4 Git add from code review, bidirectional scroll navigation, clipboard paste for annotation images, VS Code IPC port stability
v0.11.3 Expandable diff context, hierarchical folder tree, redesigned worktree controls, supply chain hardening
v0.11.2 Git worktree support in code review, VS Code editor annotations in review, Obsidian auto-save & separator settings, session discovery, smart file resolution
v0.11.1 VS Code extension for in-editor plan review, Pinpoint mode for point-and-click annotations, untracked files in code review
v0.11.0 Auto-save annotation drafts, comment popover, Obsidian vault browser, deny message framing fix, configurable OpenCode timeout
v0.10.0 Short URL sharing with E2E encryption, code suggestions in review UI, CJK input method support, customizable Obsidian filenames, XDG install fix
v0.9.3 Linked document navigation & annotation, VS Code diff integration, toolbar dismiss fix, automated npm publishing
v0.9.0 Plan Diff with two view modes, version history, sidebar redesign, terminology cleanup
v0.8.5 Pi coding agent support, auto-close countdown, image endpoint security fix, OpenCode package fix
v0.8.0 Open source (MIT/Apache-2.0), annotate command, self-hosted share portal, resizable panels, mermaid controls, auto-close on approval, documentation site

What's New in v0.13.1

v0.13.1 rewrites how Plannotator works with OpenCode's plan mode. The plugin now intercepts plan mode, injects its own planning workflow, and gives OpenCode users the same interactive browser-based review that Claude Code and Pi users already have. This release also fixes an Obsidian save failure on certain Bun versions.

OpenCode Plan Mode Rewrite

Previous versions of the OpenCode plugin had a fragile plan mode integration. Long plans caused JSON parse errors because the entire plan was passed as a tool call string argument. The agent wrote to a custom directory that OpenCode's permission system blocked. The browser review UI often failed to open. There was no support for the agent asking clarifying questions during planning.

This release replaces all of that with file-based plan storage. The agent writes its plan to a markdown file on disk, then calls submit_plan with the file path. Plans live in ~/.local/share/opencode/plans/, which is the XDG data path that OpenCode's permission system already allows. The agent picks the filename, and on feedback it revises the same file and resubmits. No content is lost between rounds.

The planning prompt now follows an exploration-first workflow: Explore the codebase, ask clarifying questions, write the plan, submit for review. Previously, agents would jump straight into writing a plan before understanding the code. For greenfield tasks where there is no codebase to explore, the agent skips to questions. The prompt is tool-neutral and avoids referencing specific tool names like write or edit, so it works with GPT models that use apply_patch.

Under the hood, the plugin strips OpenCode's native "STRICTLY FORBIDDEN: ANY file edits" directive from the system prompt and replaces it with Plannotator's own scoped rules, which allow the agent to create and edit plan files while still preventing codebase modifications. The submit_plan tool is hidden from subagents by default; users running custom subagent workflows like Superpowers or OhMyOpenCode can set PLANNOTATOR_ALLOW_SUBAGENTS=1 to make it visible.

Shared checklist utilities were extracted to @plannotator/shared for cross-plugin reuse of plan execution tracking.

Obsidian Save Fix

Bun versions 1.1.43 through 1.1.45 introduced a regression where mkdirSync({ recursive: true }) throws EEXIST when the directory already exists. This broke Obsidian saves on the second attempt. The fix adds an existsSync guard before the mkdir call. It's a no-op on unaffected Bun versions and prevents the save failure on affected ones.


Install / Update

macOS / Linux:

curl -fsSL https://plannotator.ai/install.sh | bash

Windows:

irm https://plannotator.ai/install.ps1 | iex

Claude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".

OpenCode: Clear cache and restart:

rm -rf ~/.bun/install/cache/@plannotator

Then in opencode.json:

{
  "plugin": ["@plannotator/opencode@latest"]
}

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

Community

Five long-standing feature requests and bug reports drove this release:

  • @DanielusG requested file-based plans in #63, the oldest open issue on the tracker
  • @5trongHust reported the JSON parse error on long plans in #129
  • @fidelix requested question/answer support during planning in #152
  • @eromoe reported the browser not opening after plan mode in #183
  • @sfpmld reported subagent access to submit_plan in #289
  • @Pollux12 reported the Obsidian save failure in #315

Full Changelog: v0.13.0...v0.13.1

v0.13.0

16 Mar 15:45

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.12.0 Quick annotation labels, mobile compatibility, Graphviz rendering, markdown images with lightbox, linked doc navigation in annotate mode
v0.11.4 Git add from code review, bidirectional scroll navigation, clipboard paste for annotation images, VS Code IPC port stability
v0.11.3 Expandable diff context, hierarchical folder tree, redesigned worktree controls, supply chain hardening
v0.11.2 Git worktree support in code review, VS Code editor annotations in review, Obsidian auto-save & separator settings, session discovery, smart file resolution
v0.11.1 VS Code extension for in-editor plan review, Pinpoint mode for point-and-click annotations, untracked files in code review
v0.11.0 Auto-save annotation drafts, comment popover, Obsidian vault browser, deny message framing fix, configurable OpenCode timeout
v0.10.0 Short URL sharing with E2E encryption, code suggestions in review UI, CJK input method support, customizable Obsidian filenames, XDG install fix
v0.9.3 Linked document navigation & annotation, VS Code diff integration, toolbar dismiss fix, automated npm publishing
v0.9.0 Plan Diff with two view modes, version history, sidebar redesign, terminology cleanup
v0.8.5 Pi coding agent support, auto-close countdown, image endpoint security fix, OpenCode package fix
v0.8.0 Open source (MIT/Apache-2.0), annotate command, self-hosted share portal, resizable panels, mermaid controls, auto-close on approval, documentation site

What's New in v0.13.0

v0.13.0 brings built-in themes, annotatable plan diffs, file-scoped code review comments, and deeper platform parity for the Pi extension. Six of the fourteen PRs in this release came from external contributors, three of them first-time.

Built-in Theme System

The UI now ships with eighteen built-in themes across dark, light, and system-adaptive modes, from high-contrast terminals to soft pastels. A theme grid in Settings lets you preview and switch instantly; your choice persists via cookies across sessions. Under the hood, all color tokens were consolidated into packages/ui/theme.css as CSS custom properties, which means the plan viewer, code review, and annotate UIs all share a single source of truth for color.

Annotatable Plan Diffs

Plan diff view (the comparison that appears when a coding agent resubmits after a denial) now supports annotations directly on diff content. Hover over an added, removed, or modified section and the annotation toolbar appears. Each annotation carries a diffContext field (added, removed, modified) that is included in the exported feedback, so the agent knows exactly which part of the diff your comment targets. This was a major refactor: the annotation highlighting infrastructure was extracted into a shared useAnnotationHighlighter hook, and the diff view uses its own block-level hover system rather than web-highlighter.

File-Scoped Comments in Code Review

The /plannotator-review UI now supports file-level comments in addition to line-level annotations. Each file header has a comment composer that lets you leave feedback about the file as a whole. These comments appear in the Review Panel alongside line annotations and are included in the exported feedback. Useful for high-level observations like "this file should be split" or "the approach here needs rethinking" that don't attach to any specific line.

Octarine Notes Integration

Octarine joins Obsidian and Bear as a third notes app integration. Plan snapshots can be saved directly to Octarine on approval or denial. All three integrations now support an auto-save toggle. Enable it once in Settings and every plan decision writes to your notes app without prompting. Under the hood, all integration saves run in parallel with Promise.allSettled, so a slow or failing integration doesn't block the others.

Pi Extension: Remote Session Support

The Pi extension now detects SSH and devcontainer environments the same way the Claude Code hook does, using PLANNOTATOR_REMOTE, SSH_TTY, and SSH_CONNECTION. In remote sessions, it uses a fixed port and returns the URL for manual browser opening instead of trying to launch one. This brings Pi to full parity with Claude Code and OpenCode for remote development workflows.

Unified Review Core (Bun + Pi)

The review server had two implementations: one in the Bun-compiled hook, one in the Pi extension. They drifted apart over time, causing bugs like missing untracked file support in Pi. This release extracts a runtime-agnostic review core that both platforms consume. Diff assembly, file content retrieval, worktree handling, and stage/unstage all live in one place now. Regression tests cover the shared surface.

Shared Feedback Templates

The deny feedback message that gets sent back to the agent was inconsistent across plan review, code review, and annotate mode. Each had its own phrasing and structure. This release unifies them into shared templates. It also adds an instruction to preserve the plan's # Title heading on resubmission, which fixes a version history issue where title changes would break slug-based plan grouping.

Configurable Bear Tags

Bear integration previously hardcoded the tag. You can now set custom tags and choose whether tags are prepended or appended to the note body. This PR also fixes a double-title bug where both the URL parameter title and the H1 in the note body were rendering.

Additional Changes

  • Favicon. All three server modes (plan review, code review, annotate) now serve an SVG favicon: purple rounded square with a white "P" and gold highlight stripe (#312 by @dgrissen2, idea from Discussion #269)
  • LGTM approval fix. Approving in code review no longer tells the agent to "address all feedback." If you clicked LGTM, there is no feedback to address (#293, reported by @tobeycodes in #284)
  • Non-blocking browser launch (Pi/Linux). execSync(xdg-open) blocked the Pi extension's event loop on Linux. Replaced with detached spawn().unref() (#292, reported by @dvic in #288)
  • Mobile context menu fix. Suppresses the native iOS Safari callout and Android Chrome context menu during text selection so the annotation toolbar isn't obscured (#281 by @grubmanItay)
  • Tater sprite z-index fix. The tater mascot was rendering in front of the plan document due to a stacking context created by the mobile compat PR. Fixed (#308)
  • review-renovate skill. New agent skill at .agents/skills/review-renovate/ for automated supply chain review of Renovate dependency PRs (#306)

Install / Update

macOS / Linux:

curl -fsSL https://plannotator.ai/install.sh | bash

Windows:

irm https://plannotator.ai/install.ps1 | iex

Claude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".

OpenCode: Clear cache and restart:

rm -rf ~/.bun/install/cache/@plannotator

Then in `openco...

Read more

v0.12.0

12 Mar 08:11

Choose a tag to compare

Follow @plannotator on X for updates

Claude Code users, want to give feedback on approval? Please upvote & comment here.


Missed recent releases?
Release Highlights
v0.11.4 Git add from code review, bidirectional scroll navigation, clipboard paste for annotation images, VS Code IPC port stability
v0.11.3 Expandable diff context, hierarchical folder tree, redesigned worktree controls, supply chain hardening
v0.11.2 Git worktree support in code review, VS Code editor annotations in review, Obsidian auto-save & separator settings, session discovery, smart file resolution
v0.11.1 VS Code extension for in-editor plan review, Pinpoint mode for point-and-click annotations, untracked files in code review
v0.11.0 Auto-save annotation drafts, comment popover, Obsidian vault browser, deny message framing fix, configurable OpenCode timeout
v0.10.0 Short URL sharing with E2E encryption, code suggestions in review UI, CJK input method support, customizable Obsidian filenames, XDG install fix
v0.9.3 Linked document navigation & annotation, VS Code diff integration, toolbar dismiss fix, automated npm publishing
v0.9.0 Plan Diff with two view modes, version history, sidebar redesign, terminology cleanup
v0.8.5 Pi coding agent support, auto-close countdown, image endpoint security fix, OpenCode package fix
v0.8.0 Open source (MIT/Apache-2.0), annotate command, self-hosted share portal, resizable panels, mermaid controls, auto-close on approval, documentation site

What's New in v0.12.0

This is a community release. Ten of the fourteen PRs in v0.12.0 were authored by external contributors, spanning three major features and a sweep of cross-platform fixes. The annotation system gained preset labels for one-click feedback — no typing, just click and move on. The plan viewer now renders Graphviz diagrams alongside Mermaid, inline markdown images with a lightbox zoom, and renders all diagrams by default instead of showing raw source. And the entire UI works on mobile.

Quick Annotation Labels

Reviewing a plan often means the same feedback applies to multiple sections — "clarify this," "verify this assumption," "match existing patterns." Quick Labels turn those into one-click preset chips that appear above the annotation toolbar. Select text, click a label, done. No typing required.

Ten default labels ship out of the box, each with an emoji and a color-coded pill:

❓ Clarify this · 🗺️ Missing overview · 🔍 Verify this · 🔬 Give me an example · 🧬 Match existing patterns · 🔄 Consider alternatives · 📉 Ensure no regression · 🚫 Out of scope · 🧪 Needs tests · 👍 Nice approach

Several labels carry agent-facing tips that get injected into the feedback. For example, selecting a section and clicking "🔍 Verify this" tells the agent: "This seems like an assumption. Verify by reading the actual code before proceeding." The "🧬 Match existing patterns" label instructs the agent to search the codebase for existing solutions rather than introducing a new approach. These tips are invisible to the reviewer but shape how the agent responds.

When the feedback is exported, labeled annotations are grouped into a Label Summary section at the bottom — **🔍 Verify this**: 3 — so both the reviewer and the agent can see at a glance which patterns recur across the plan.

Labels are fully customizable in Settings. Add up to 12, reorder them, pick custom colors and tips, or remove the ones you never use. Settings persist across sessions via cookies.

A follow-up PR introduced a dedicated Quick Label editing mode alongside Markup, Comment, and Redline. In this mode, selecting text immediately shows a floating label picker — no toolbar intermediary. Alt+1 through Alt+0 keyboard shortcuts work in any mode for power users who prefer not to reach for the mouse.

Mobile Compatibility

Plannotator was desktop-only. That mattered less when the tool was purely a local dev workflow, but with shared URLs and team reviews becoming common, people were opening plan links on phones and tablets and getting a broken layout.

The UI now adapts fully below 768px. The header collapses into a hamburger menu. The annotation panel renders as a full-screen overlay with a backdrop and close button. Touch support covers resize handles, pinpoint annotations, text selection, and the toolstrip. Card action buttons are always visible on touch devices instead of appearing on hover. The Settings modal switches to a horizontal tab bar. The CommentPopover width is capped to the viewport so it doesn't overflow off-screen.

Desktop layout is completely unchanged — this is additive, not a redesign.

Graphviz Diagram Rendering

Plannotator has supported Mermaid diagrams since v0.6.8. Plans that use Graphviz for architecture diagrams, dependency graphs, or state machines were stuck with raw DOT source in a code block. The Viewer now renders graphviz, dot, and gv fenced code blocks using @viz-js/viz, with the same UX conventions as Mermaid: source/diagram toggle, zoom and pan controls, and an expanded fullscreen view.

Mermaid Diagram Improvements

The Mermaid viewer received a substantial UX overhaul. Diagrams now open in a proper expanded fullscreen mode with zoom in/out, fit-to-view, and wheel zoom. The source/diagram toggle was reworked for clarity. Wide diagrams no longer clip against container edges in both plan view and plan diff view. Safari stability issues with SVG rendering were resolved.

A separate PR changed both Mermaid and Graphviz diagrams to render by default instead of showing raw source code first — the source toggle is still one click away, but the visual rendering is now the default state.

Markdown Image Rendering

Markdown ![alt](path) syntax was silently treated as plain text — the ! character wasn't in the inline scanner, so images never rendered. They do now. Local image paths are proxied through the existing /api/image endpoint, and relative paths resolve correctly when annotating files outside the project root.

Clicking any rendered image opens a full-screen lightbox with the alt text as a caption. Press Escape or click the backdrop to dismiss.

Linked Doc Navigation in Annotate Mode

The /plannotator-annotate command lets you annotate any markdown file, but clicking .md links inside that file would break — the annotate server was missing a /api/doc endpoint, so link requests returned raw HTML instead of JSON. This release adds the missing route and supports chained relative link navigation, so you can follow links between sibling markdown files without leaving annotate mode.

VS Code Extension in SSH Remote Sessions

The VS Code extension sets PLANNOTATOR_BROWSER to its own open-in-vscode handler so plans open in editor tabs instead of external browsers. In SSH remote sessions, the shared openBrowser() function skipped browser launch entirely — ignoring the custom handler. The fix is a one-line condition change: if PLANNOTATOR_BROWSER is set, always call openBrowser() regardless of remote detection. This covers plan review, code review, and annotate mode.

Additional Changes

  • Windows markdown path supportplannotator annotate now handles Windows drive-letter paths (C:\..., C:/...), Git Bash/MSYS paths (/c/...), and Cygwin paths (/cygdrive/c/...) in the shared markdown resolver ([...
Read more

v0.11.4

09 Mar 14:42

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.11.3 Expandable diff context, hierarchical folder tree, redesigned worktree controls, supply chain hardening
v0.11.2 Git worktree support in code review, VS Code editor annotations in review, Obsidian auto-save & separator settings, session discovery, smart file resolution
v0.11.1 VS Code extension for in-editor plan review, Pinpoint mode for point-and-click annotations, untracked files in code review
v0.11.0 Auto-save annotation drafts, comment popover, Obsidian vault browser, deny message framing fix, configurable OpenCode timeout
v0.10.0 Short URL sharing with E2E encryption, code suggestions in review UI, CJK input method support, customizable Obsidian filenames, XDG install fix
v0.9.3 Linked document navigation & annotation, VS Code diff integration, toolbar dismiss fix, automated npm publishing
v0.9.0 Plan Diff with two view modes, version history, sidebar redesign, terminology cleanup
v0.8.5 Pi coding agent support, auto-close countdown, image endpoint security fix, OpenCode package fix
v0.8.0 Open source (MIT/Apache-2.0), annotate command, self-hosted share portal, resizable panels, mermaid controls, auto-close on approval, documentation site

What's New in v0.11.4

This release adds the ability to stage files directly from the code review UI and ships a batch of quality-of-life improvements across annotations, image attachments, and the VS Code extension.

Git Add from Code Review

Reviewing code and staging it used to be separate workflows — approve a file in the browser, switch to the terminal, git add it by hand. Now there's a "Git Add" button right in the file header. Click it to stage a file, click again to unstage. Staged files pick up a green tint and a "+" badge in the sidebar, so you can scan the file tree and immediately see which changes you've accepted versus what's still pending. The button is context-aware — it only appears when viewing uncommitted or unstaged diffs, and it works correctly inside worktrees. Staging a file automatically marks it as viewed.

The diff type dropdown also picks up two new options, "Staged changes" and "Unstaged changes", so you can filter the view down to just the files you've staged or just the ones left to review.

Bidirectional Scroll Navigation

Annotations in plan review now link the sidebar and the document in both directions. Clicking an annotation card smooth-scrolls to its highlighted text and applies a focused glow so you can spot it immediately. Clicking a highlight in the document scrolls the annotation panel to the matching card. For long plans with many annotations spread across the page, this eliminates the back-and-forth hunting between the two panes.

Authored by @grubmanItay.

Clipboard Paste for Annotation Images

You can now paste images from the clipboard directly into a per-annotation attachment popover with Cmd+V (macOS) or Ctrl+V (Windows/Linux). Previously, image attachments required either drag-and-drop or the file picker — clipboard paste only worked for the global attachments panel. The popover now shows a platform-aware shortcut hint in the drop zone so the capability is discoverable.

This PR also fixes an absolute path resolution regression introduced in v0.11.2's smart file resolution feature, where explicitly provided absolute paths outside the project root were incorrectly rejected.

VS Code IPC Port Stability

The VS Code extension communicates with plannotator via a local IPC server on a random port, stored in the PLANNOTATOR_VSCODE_PORT environment variable. When VS Code restarted, the extension would bind a new random port, but restored integrated terminals still held the old port in their environment — breaking the connection silently. The extension now persists its port in workspace state and attempts to reclaim the same port on restart, falling back to a new one only if the old port is occupied.


Install / Update

macOS / Linux:

curl -fsSL https://plannotator.ai/install.sh | bash

Windows:

irm https://plannotator.ai/install.ps1 | iex

Claude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".

OpenCode: Clear cache and restart:

rm -rf ~/.bun/install/cache/@plannotator

Then in opencode.json:

{
  "plugin": ["@plannotator/opencode@latest"]
}

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

  • feat: bidirectional scroll navigation between annotations and highlights by @grubmanItay in #253
  • feat: clipboard paste for per-annotation images & fix absolute path resolution by @dgrissen2 in #255
  • fix(vscode): reuse IPC server port across restarts by @backnotprop in #256
  • feat: git add files from code review UI by @backnotprop in #257

Contributors

Community members who authored PRs, reported issues, and participated in discussions that shaped this release:

Full Changelog: v0.11.3...v0.11.4

v0.11.3

08 Mar 23:33

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.11.2 Git worktree support in code review, VS Code editor annotations in review, Obsidian auto-save & separator settings, session discovery, smart file resolution
v0.11.1 VS Code extension for in-editor plan review, Pinpoint mode for point-and-click annotations, untracked files in code review
v0.11.0 Auto-save annotation drafts, comment popover, Obsidian vault browser, deny message framing fix, configurable OpenCode timeout
v0.10.0 Short URL sharing with E2E encryption, code suggestions in review UI, CJK input method support, customizable Obsidian filenames, XDG install fix
v0.9.3 Linked document navigation & annotation, VS Code diff integration, toolbar dismiss fix, automated npm publishing
v0.9.0 Plan Diff with two view modes, version history, sidebar redesign, terminology cleanup
v0.8.5 Pi coding agent support, auto-close countdown, image endpoint security fix, OpenCode package fix
v0.8.0 Open source (MIT/Apache-2.0), annotate command, self-hosted share portal, resizable panels, mermaid controls, auto-close on approval, documentation site

What's New in v0.11.3

This release overhauls the code review experience. The diff viewer now supports GitHub-style expandable context so you can see surrounding code without leaving the review, the file sidebar organizes changes into a hierarchical folder tree, and the worktree UX has been redesigned with dedicated controls that make it immediately clear which context you're reviewing.

Expandable Diff Context

Diff hunks in code review previously showed only the default 3 lines of surrounding context. You had to switch to your editor to understand what function or data structure a change sat inside. Now, separator bars appear between hunks showing how many unmodified lines are hidden. Hover to reveal expand buttons — expand up, expand down, or expand the entire collapsed section at once. Each click reveals a chunk of lines, syntax-highlighted and rendered seamlessly inline with the existing diff.

The feature works by fetching full file contents from a new /api/file-content endpoint and feeding them to @pierre/diffs' FileDiff component, which handles all the expansion UI and state management internally. If the file content can't be fetched (binary files, deleted files, demo mode), the diff renders exactly as before — no expansion buttons, no errors.

Hierarchical Folder Tree

The code review sidebar previously listed every changed file in a flat list. For PRs touching files across many directories, this made it hard to find what you were looking for. Files are now grouped into a collapsible folder tree that mirrors the repository structure. Each folder node shows aggregate addition/deletion stats and annotation counts rolled up from its children. Folders auto-expand when you navigate with j/k keys so the active file is always visible.

Redesigned Worktree Controls

The v0.11.2 worktree support packed both worktree switching and diff type selection into a single dropdown, which created confusion — selecting a worktree silently replaced the dropdown's options, and there was no persistent visual indicating you'd left the main repo. This release splits that into two independent controls: a Context dropdown for switching between the main repo and any linked worktrees, and a View dropdown for selecting the diff type (uncommitted, last commit, vs branch). The Context dropdown highlights with a distinct border when a worktree is active, so you can glance at the sidebar and immediately know which tree you're reviewing.

Supply Chain Hardening

GitHub Actions in the deploy pipeline are now pinned to commit SHAs instead of mutable version tags, and Renovate is configured to keep those pins up to date automatically. This closes the supply chain risk of a compromised upstream action tag silently changing what runs in CI.


Install / Update

macOS / Linux:

curl -fsSL https://plannotator.ai/install.sh | bash

Windows:

irm https://plannotator.ai/install.ps1 | iex

Claude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".

OpenCode: Clear cache and restart:

rm -rf ~/.bun/install/cache/@plannotator

Then in opencode.json:

{
  "plugin": ["@plannotator/opencode@latest"]
}

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

Contributors

Community members who requested features and participated in discussions that shaped this release:

Full Changelog: v0.11.2...v0.11.3

v0.11.2

07 Mar 20:39

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.11.1 VS Code extension for in-editor plan review, Pinpoint mode for point-and-click annotations, untracked files in code review
v0.11.0 Auto-save annotation drafts, comment popover, Obsidian vault browser, deny message framing fix, configurable OpenCode timeout
v0.10.0 Short URL sharing with E2E encryption, code suggestions in review UI, CJK input method support, customizable Obsidian filenames, XDG install fix
v0.9.3 Linked document navigation & annotation, VS Code diff integration, toolbar dismiss fix, automated npm publishing
v0.9.0 Plan Diff with two view modes, version history, sidebar redesign, terminology cleanup
v0.8.5 Pi coding agent support, auto-close countdown, image endpoint security fix, OpenCode package fix
v0.8.0 Open source (MIT/Apache-2.0), annotate command, self-hosted share portal, resizable panels, mermaid controls, auto-close on approval, documentation site
v0.7.0 TOC sidebar, sticky actions, save to notes without approving, import teammate reviews, viewed file tracking

What's New in v0.11.2

This release fills gaps across the whole surface area — worktree users can finally review diffs from linked working trees, VS Code users can annotate code in their editor tabs during code review (not just plan review), and Obsidian users get auto-save and cleaner filenames. Closed the Plannotator tab while Claude is still waiting? plannotator sessions finds your active servers so you can reopen the UI without restarting the agent.

Git Worktree Support in Code Review

Running /plannotator-review from a repository with git worktrees now surfaces each worktree as a selectable option in the diff dropdown. Selecting a worktree runs the diff scoped to that working tree's directory, showing its uncommitted changes, last commit, or branch diff — the same options available for the main repo. Once inside a worktree view, the dropdown adapts to show only worktree-relevant diff types, and a "Back to main repo" option returns to the original context.

This was a straightforward gap: worktree users had no way to review changes happening in linked trees. The diff infrastructure already supported custom cwd — it just needed worktree detection via git worktree list --porcelain and a UI path to reach it.

Configurable Browser & Session Management

Accidentally closed the Plannotator tab while Claude is still waiting for your review? plannotator sessions shows all active server sessions so you can find and reopen it. Use --open to launch the tab again, or --clean to clear stale entries from sessions that didn't shut down cleanly. Sessions register at ~/.plannotator/sessions/ on startup and remove themselves on exit.

This release also adds a --browser CLI flag to control which browser Plannotator opens. Pass an app name on macOS (plannotator review --browser "Safari") or an executable path on Linux/Windows. Set PLANNOTATOR_BROWSER as an environment variable for a persistent default.

Obsidian Saving Enhancements

Three improvements for Obsidian users, both from requests by @ovitrif:

Filename separator setting — a new dropdown in Obsidian settings replaces spaces in generated filenames with dashes or underscores. This fixes issues with CLI tools (including Claude Code itself) fumbling space-escaped paths inside Obsidian vaults. (#235)

Auto-save on plan arrival — an opt-in toggle that saves plans to your Obsidian vault the moment they load, before you approve or deny. This solves a real workflow problem: approving a plan from the CLI kills the hook server before you can Cmd+S, losing the save entirely. (#228)

Hardened title sanitization — plan titles with parentheses, brackets, curly braces, hash, tilde, and backtick characters now produce clean filenames instead of passing those characters through.

Smart File Resolution for Annotate

The /plannotator-annotate command no longer requires exact file paths. Three resolution strategies are tried in order: exact path match, case-insensitive relative path, and bare filename search across the project. If a bare filename is ambiguous (matches multiple files), you get the full list so you can pick. Common directories like node_modules/, .git/, and dist/ are excluded from search.

VS Code Editor Annotations in Code Review

The VS Code editor annotation system — select code in your editor tabs, annotate it, and have those annotations appear in Plannotator's sidebar — was introduced in v0.11.1 for plan review. It now works in code review too. The same Cmd+Shift+. shortcut, the same inline comment threads, the same gutter decorations. Annotations from editor tabs appear under an "Editor" divider in the ReviewPanel and are included in the feedback markdown sent back to the agent.

This also includes VS Code theme integration: the extension now bridges VS Code's CSS variables into the Plannotator iframe, so the review UI automatically adopts whatever color theme you're using — dark, light, Monokai, Solarized, etc. The existing OKLCH palette serves as fallback for non-VS Code contexts.

Additional Changes

  • Pinpoint mode fix — clicking stopped working after entering and exiting Plan Diff view because the click handler captured a null highlighter ref at effect setup time. The ref is now resolved lazily at click time. (#238)
  • Inline links inside bold/italic — links nested inside **bold** or _italic_ markdown were rendered as plain text instead of clickable links. The inline markdown renderer now handles this recursively. (#236 by @flex-yj-kim)
  • Light mode code blocks — highlight.js markdown grammar tokens (emphasis, strong, code) used dark-theme colors that made text nearly invisible in light mode. CSS overrides now force these tokens to inherit the base code color. (#234 by @dgrissen2)
  • Windows annotate paths — file path resolution for /plannotator-annotate on Windows failed when paths used @ prefix or when the working directory differed between caller and Bun script. Added PLANNOTATOR_CWD env var support and proper path joining. (#233 by @theflysurfer)

Install / Update

macOS / Linux:

curl -fsSL https://plannotator.ai/install.sh | bash

Windows:

irm https://plannotator.ai/install.ps1 | iex

Claude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".

OpenCode: Clear cache and restart:

rm -rf ~/.bun/install/cache/@plannotator

Then in opencode.json:

{
  "plugin": ["@plannotator/opencode@latest"]
}

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

  • fix(annotate): resolve file paths correctly on Windows by @theflysurfer in #233
  • fix: unreadable text in markdown code blocks (light mode) by @dgrissen2 in #234
  • fix: render inline links inside bold and italic markdown by @flex-yj-kim in #236
  • feat: smart file resolution for plannotator annotate by @dgrissen2 in #237
  • fix(pinpoint): restore click handler after exiting plan diff by @backnotprop in #238
  • feat: VS Code editor annotations + theme integration by @backnotprop in #239
  • feat: Obsidian saving enhancements — separator, auto-save, sanitization by @backnotprop in #240
  • feat: support git worktrees in code review by @backnotprop in #241
  • feat: --browser CLI flag & session...
Read more

v0.11.1

06 Mar 09:11

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.11.0 Auto-save annotation drafts, comment popover, Obsidian vault browser, deny message framing fix, configurable OpenCode timeout
v0.10.0 Short URL sharing with E2E encryption, code suggestions in review UI, CJK input method support, customizable Obsidian filenames, XDG install fix
v0.9.3 Linked document navigation & annotation, VS Code diff integration, toolbar dismiss fix, automated npm publishing
v0.9.0 Plan Diff with two view modes, version history, sidebar redesign, terminology cleanup
v0.8.5 Pi coding agent support, auto-close countdown, image endpoint security fix, OpenCode package fix
v0.8.0 Open source (MIT/Apache-2.0), annotate command, self-hosted share portal, resizable panels, mermaid controls, auto-close on approval, documentation site
v0.7.0 TOC sidebar, sticky actions, save to notes without approving, import teammate reviews, viewed file tracking
v0.6.8 Mermaid diagram rendering, repo/branch info display

What's New in v0.11.1

Two headline features in this release: a VS Code extension that opens plan reviews inside editor tabs instead of the browser, and Pinpoint mode — a point-and-click alternative to drag-selecting text for annotations. The VS Code extension keeps you in the editor, and Pinpoint mode makes annotating faster when you want to target a whole paragraph, heading, or table cell without precision-dragging across it.

VS Code Extension (coming to Marketplace this week)

The VS Code extension is built and merged into the monorepo, but not yet published to the VS Code Marketplace. Marketplace publishing will be finalized this week — follow @plannotator for the announcement. If you want to try it now, you can build and install locally with bun run build:vscode && bun run package:vscode.

When Claude Code runs in VS Code's integrated terminal, the extension opens plan reviews inside a VS Code tab instead of launching an external browser window. Plan review, code review, and annotate all work in-editor — no more Alt-Tabbing to a browser. The panel auto-closes on approve or deny. If you prefer the browser, disable it via the plannotatorWebview.injectBrowser setting.

This started as a community proposal by @alpgul in #91, and @7tg (Barbaros Goren) built the first working implementation at 7tg/plannotator-vscode. That repo is now archived and the extension lives in the monorepo at apps/vscode-extension/. The initial commit preserves @7tg's authorship.

  • Thanks to @alpgul for the original proposal (#91)
  • Thanks to @7tg for the community implementation

Pinpoint Mode

A new input method that lets you annotate by clicking instead of dragging. Toggle between Select (the existing drag-to-select behavior) and Pinpoint in the toolbar, or hold Alt/Option to temporarily switch modes.

In Pinpoint mode, hovering over the plan highlights the element under your cursor — a paragraph, heading, list item, table cell, bold text, inline code, or an entire code block — with a dashed outline and a label tooltip describing what you're targeting. Click to select it, and the existing annotation flow (markup, comment, or redline) takes over.

The targeting is context-aware. Inside a table, hovering near the outer edge targets the whole table; moving inward targets individual cells. List items are individually targetable, but hovering in the gap between items or the left gutter targets the entire list. Code blocks route through the existing code annotation path with line-level selection.

This is especially useful for longer blocks where drag-selecting the full text is tedious, or for precise targeting of inline elements like a single bold word or link.

Additional Changes

  • Untracked files in code review — newly created files (not yet git add'd) were invisible in the /plannotator-review UI because git diff only covers tracked files. The diff now includes untracked new files so the full picture of the agent's work is visible during review (#227 by @zerone0x, fixes #189 reported by @zhuscat)
  • Hooks.json validation on install — the install scripts now check for stale hooks.json configs (e.g., old timeout values from previous installs) and overwrite them with the canonical config. This prevents the "plannotator times out after 30 minutes" issue some users hit after updating from older versions (#230)
  • VS Code extension debounce fix — removed an unnecessary 1-second debounce guard that could delay panel opening when reviewing plans in quick succession (#231)
  • Tabbed help dialog — the "how does this work?" dialog now has two tabs: "Selection Modes" (new video covering Select vs. Pinpoint) and "How Plannotator Works" (the existing overview video)

Install / Update

macOS / Linux:

curl -fsSL https://plannotator.ai/install.sh | bash

Windows:

irm https://plannotator.ai/install.ps1 | iex

Claude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".

OpenCode: Clear cache and restart:

rm -rf ~/.bun/install/cache/@plannotator

Then in opencode.json:

{
  "plugin": ["@plannotator/opencode@latest"]
}

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

  • fix: include untracked new files in uncommitted/unstaged code review diffs by @zerone0x in #227
  • feat: VS Code extension for in-editor plan review by @backnotprop in #229
  • fix: validate plugin hooks.json on install by @backnotprop in #230
  • fix: remove 1-second debounce guard from VS Code extension panel opening by @backnotprop in #231
  • feat: pinpoint mode for point-and-click annotations by @backnotprop in #232

Contributors

Community members who reported issues and requested features that shaped this release:

Full Changelog: v0.11.0...v0.11.1

v0.11.0

05 Mar 00:57

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.10.0 Short URL sharing with E2E encryption, code suggestions in review UI, CJK input method support, customizable Obsidian filenames, XDG install fix
v0.9.3 Linked document navigation & annotation, VS Code diff integration, toolbar dismiss fix, automated npm publishing
v0.9.0 Plan Diff with two view modes, version history, sidebar redesign, terminology cleanup
v0.8.5 Pi coding agent support, auto-close countdown, image endpoint security fix, OpenCode package fix
v0.8.0 Open source (MIT/Apache-2.0), annotate command, self-hosted share portal, resizable panels, mermaid controls, auto-close on approval, documentation site
v0.7.0 TOC sidebar, sticky actions, save to notes without approving, import teammate reviews, viewed file tracking
v0.6.8 Mermaid diagram rendering, repo/branch info display
v0.6.7 Quick Comment mode, type-to-comment shortcut, smart agent detection

What's New in v0.11.0

Annotations are no longer a single-session gamble. Auto-save drafts persist your work in the background — if the server crashes, the browser refreshes, or you accidentally close the tab, your annotations are waiting when you come back. The comment writing experience was rebuilt around a proper popover with expandable dialog mode, solving the cramped single-line textarea that made long comments painful. Obsidian users get a new vault browser sidebar tab for browsing and annotating vault files directly during plan review. And a critical bug where Claude Code was silently ignoring deny feedback has been fixed — your "Request Changes" annotations now actually reach the model.

Auto-Save Annotation Drafts

Every annotation you make is now automatically saved in the background to ~/.plannotator/drafts/. If the Plannotator server crashes, Bun segfaults, the browser refreshes, or your SSH connection drops — your work survives. When you reopen the same plan, you're prompted to restore the draft or discard it.

Drafts are keyed by plan content hash so they match the right plan even across server restarts. They're cleaned up automatically on successful approve or deny. Both the plan review and code review UIs have independent draft systems.

This was the single most frustrating gap in the tool — losing 20 minutes of careful annotation feedback to a stray kill signal or browser reload. It should have shipped months ago.

Comment Popover

The comment textarea — previously a cramped inline input at the bottom of the annotation toolbar — is now a dedicated popover that appears near your text selection. It auto-focuses, auto-sizes, and supports image attachments inline. For longer comments, click the expand button to open a full dialog with more room to write.

The popover tracks the anchor element's position on scroll and resize, flips above the selection when there isn't enough space below, and handles click-outside dismissal correctly even when child portals (like the image annotator) are open. Keyboard shortcuts carry over: Cmd+Enter to submit, Escape to close.

Obsidian Vault Browser

A new sidebar tab lets Obsidian users browse their vault's markdown files directly during plan review. Enable it in Settings > Saving > Obsidian, and a vault icon tab appears alongside Table of Contents and Version Browser. Click any .md file to open and annotate it — the annotations are included in the feedback sent back to the agent.

Plans often reference existing docs, specs, or notes that live in your vault. Instead of switching to Obsidian or using /plannotator-annotate separately, you can now pull in relevant context and annotate it as part of the same review session.

Improved Deny Message Framing

The deny message — what Claude sees when you click "Request Changes" — has been rewritten to make your feedback harder to overlook. The previous framing was technically correct but easy for the model to skim past, especially with longer annotation lists. The new framing structures the feedback more assertively so Claude incorporates your annotations rather than re-entering plan mode with a surface-level revision.

OpenCode: Configurable Plan Review Timeout

The submit_plan tool in the OpenCode plugin had a hardcoded timeout that would reopen the browser window after 5-10 minutes if you hadn't reviewed the plan yet. After several cycles of this, the agent would give up and print the plan to the console. The timeout is now configurable — set it in your OpenCode config to match your workflow, whether you review plans immediately or let them queue up while you step away.

Additional Changes

  • Missing annotate command in install scripts — the /plannotator-annotate slash command wasn't included in the plugin install, so users who updated from pre-v0.8.0 couldn't use the annotate feature without manual setup (#218 by @maggiehe)
  • Pi extension: blocklist-only bash safety — the Pi extension now uses a blocklist approach for bash command safety instead of an allowlist, and the plan file path is interactive rather than hardcoded (#222)
  • Server modularization — extracted shared route handlers (image serving, file uploads, draft API) into reusable modules, reducing duplication across the plan, review, and annotate servers (#214)
  • CommentPopover image attachment fix — image attachments in the comment popover no longer cause the popover to close, fixed via a data-popover-layer convention for portal click-outside detection (#226)

Install / Update

macOS / Linux:

curl -fsSL https://plannotator.ai/install.sh | bash

Windows:

irm https://plannotator.ai/install.ps1 | iex

Claude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".

OpenCode: Clear cache and restart:

rm -rf ~/.bun/install/cache/@plannotator

Then in opencode.json:

{
  "plugin": ["@plannotator/opencode@latest"]
}

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

  • feat: Obsidian vault browser sidebar tab by @backnotprop in #209
  • refactor: extract shared route handlers and modularize plan server by @backnotprop in #214
  • feat: auto-save annotation drafts to survive server crashes by @backnotprop in #217
  • fix: add missing /plannotator-annotate command to install scripts by @maggiehe in #218
  • feat: CommentPopover for better comment writing UX by @backnotprop in #220
  • feat(pi-extension): blocklist-only bash safety + interactive plan file path by @backnotprop in #222
  • fix: make OpenCode submit_plan timeout configurable by @backnotprop in #223
  • fix: improve deny message framing to prevent ignored feedback by @backnotprop in #224...
Read more