Skip to content

Releases: backnotprop/plannotator

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

v0.10.0

03 Mar 01:37

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
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.10.0

Sharing plans got a ground-up rethink. The hash-based URLs that Slack and email clients kept truncating are now replaced by short links backed by a dedicated paste service — with end-to-end encryption so plan content never touches the server in readable form. The code review UI gained GitHub-style code suggestions with inline editing and syntax-highlighted diffs. And a batch of community-driven fixes landed: CJK input method support, empty file display in reviews, XDG-compliant install paths, customizable Obsidian export filenames, and proper error handling when shared links fail to load.

Short URL Sharing with End-to-End Encryption

Share URLs used to embed the entire plan as a compressed hash fragment. That worked for small plans, but anything substantial produced 10-40KB URLs that Slack, WhatsApp, and email clients would silently truncate — and the recipient would see the demo plan instead of the shared content with no indication anything went wrong (#142, #187).

Short URLs solve both problems. Click "Create short link" and the plan is encrypted in your browser using AES-256-GCM, uploaded to the paste service as an opaque blob, and you get back a ~50-character URL like share.plannotator.ai/p/a1T8a4Ey#key=.... The decryption key lives only in the URL fragment — it's never sent in HTTP requests, never stored on the server, and the paste service has zero ability to read your plan content.

The paste service runs as a Cloudflare Worker with KV storage (7-day TTL). Self-hosters can deploy their own instance and point to it with PLANNOTATOR_PASTE_URL. The existing hash-based URLs continue to work as a fallback for offline use or environments without network access.

If a short URL fails to load — expired paste, missing encryption key, network error — the portal now shows an explicit warning dialog explaining the failure instead of silently falling back to the demo plan. An amber "Demo" badge remains visible in the header so it's always clear when you're looking at demo content rather than shared data.

  • Thanks to @GunitBindal for building the paste service and short URL integration (#188), and for filing the feature request (#187)
  • Thanks to @uqarni for reporting the silent truncation fallback (#142)

Code Suggestions in Code Review

The code review UI now supports GitHub-style code suggestion blocks. When annotating a diff, you can write a fenced suggestion that renders as a syntax-highlighted before/after comparison — the reviewer sees exactly what you're proposing, not a prose description of it. Suggestions include copy buttons for quick application.

Annotation editing is also inline now. Click an existing annotation to modify its text directly in place rather than deleting and recreating. The DiffViewer component was decomposed from 615 lines down to 200 in the process, with logic extracted into focused subcomponents for the code modal, suggestion renderer, and inline editor.

Customizable Obsidian Export Filenames

The Obsidian integration now supports a configurable filename template with 12 variables: {title}, {YYYY}, {MM}, {DD}, {HH}, {mm}, {ss}, {date}, {time}, {datetime}, {project}, and {agent}. Set your preferred format in Settings and see a live preview of the generated filename. The default is {title} (same behavior as before). Filesystem-unsafe characters are automatically sanitized.

CJK Input Method Support

Pressing Enter during CJK character composition (Chinese, Japanese, Korean input methods) no longer triggers form submission. The fix adds isComposing guards to all five Enter-key handlers in the plan review UI so the Enter key confirms the IME candidate as expected, and a second Enter submits the form.

Review UI: Empty Files and Diff Error Handling

The code review UI could show an empty file list when the user's git config had diff.mnemonicPrefix enabled, because the diff parser expected standard a//b/ prefixes. The fix forces standard prefixes via --no-prefix fallback logic. Git diff errors (e.g., from detached HEAD or corrupted index) are now surfaced in the UI instead of silently showing "No changes."

XDG Base Directory Fix

The install script now correctly places the binary in ~/.local/bin rather than deriving the path from XDG_DATA_HOME. Per the XDG Base Directory Specification, XDG_DATA_HOME is for data files — not executables.

OpenCode: Remote URL Notification and Decision Timeout

OpenCode users in remote/SSH sessions now see the Plannotator URL logged directly in the TUI, since there's no local browser to open. A 10-minute decision timeout was also added — if no approve/deny action is taken, the session auto-denies and releases the port to prevent permanent port occupation.

Additional Fixes

  • Diff view clears on sidebar tab switch — switching from the Version Browser tab back to Table of Contents now properly clears the diff overlay (#199 by @flex-yj-kim)
  • Import merge fix — importing a teammate's share URL now correctly merges annotations with your existing ones instead of replacing them (#205)
  • Paste service CORS — the paste service now accepts requests from any localhost port, since the hook server uses random ports

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

Read more

v0.9.3

27 Feb 05:32

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.9.2 Fix version history logging noise in OpenCode TUI
v0.9.1 Plan Diff marketing dialog viewport fix
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.2 BROWSER env var fix for macOS and WSL devcontainers
v0.8.1 Devcontainer BROWSER fallback, mermaid clipping fix, annotation toolbar focus guard
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
v0.6.6 OpenCode sub-agent fix, CVE-2026-22812 security update
v0.6.5 Cmd+C shortcut, newline preservation, hook timeout fix
v0.6.4 Cmd+Enter keyboard shortcut
v0.6.3 OpenCode npm package fix, cache path fix
v0.6.2 OpenCode title generation fix, WSL browser detection

What's New in v0.9.3

Other Markdown files that your plan references can now be opened and annotated directly inside the viewer — useful for document-heavy or spec-driven approaches. Click a link, review the doc, leave feedback, and it all gets included when you approve or deny. Plan Diff also gained a "VS Code" button that opens the diff in VS Code's native side-by-side editor (or whatever code aliases to such as Cursor). Plus a toolbar dismissal fix and automated npm publishing for the OpenCode and Pi packages.

Linked Document Navigation & Annotation

When a plan references a local .md file (e.g., [see architecture](./docs/ARCHITECTURE.md)), clicking the link now opens it directly inside the Plannotator viewer — no new tabs, no context switching. The document swaps in place with a "Back to plan" button in the sidebar, and the Table of Contents updates to reflect the linked document's headings.

More importantly, you can annotate linked documents the same way you annotate the plan itself. Highlight text, leave comments, suggest replacements — all the usual annotation tools work. When you approve or deny, annotations from every linked document you visited are aggregated into the feedback payload sent to the agent, organized by filepath under a "Linked Document Feedback" section.

Annotation state is cached per filepath within a session. Navigate to a doc, annotate it, go back to the plan, revisit the doc later — your annotations are still there.

The server resolves paths using a multi-strategy approach: absolute paths, paths relative to the project root, and bare filename search via glob. Path traversal outside the project root is blocked. Ambiguous filenames (multiple matches) return a list of candidates so you can pick the right one.

  • Thanks to @dgrissen2 for building the initial linked document viewer and /api/doc endpoint (#184)

Open Diff in VS Code

The Plan Diff viewer now has a "VS Code" button that opens the current diff in VS Code's native side-by-side diff editor. If you're comparing your plan against a previous version and want a more familiar diff environment, one click gets you there. Uses code --diff under the hood with the version history files — no temp file juggling.

Toolbar Dismiss on Outside Click and Escape

Annotation toolbars in both the plan review and code review UIs now dismiss when you click outside them or press Escape. Previously, toolbars could get stuck open after making a selection, requiring another text selection to clear them. The fix consolidates dismissal behavior into a shared useDismissOnOutsideAndEscape hook used by both UIs.

Automated npm Publishing

The release pipeline now publishes @plannotator/opencode and @plannotator/pi-extension to npm automatically when a version tag is pushed. Uses npm's OIDC trusted publishing for provenance — no long-lived secrets. Pull requests run a dry-run build to catch packaging issues before merge. All GitHub Action versions are pinned to full SHAs for supply chain hardening.


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

  • ci(release): add npm publishing with OIDC provenance and dry-run mode by @rcdailey in #170
  • Add "Open in VS Code Diff" button to plan diff viewer by @backnotprop in #180
  • fix(ui): dismiss annotation toolbars on outside click and Escape by @flex-yj-kim in #182
  • feat: open linked .md files in read-only tabs with TOC navigation by @dgrissen2 in #184

Contributors

Full Changelog: v0.9.2...v0.9.3

v0.9.2

23 Feb 20:35

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.9.1 Plan Diff marketing dialog viewport fix
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.2 BROWSER env var fix for macOS and WSL devcontainers
v0.8.1 Devcontainer BROWSER fallback, mermaid clipping fix, annotation toolbar focus guard
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
v0.6.6 OpenCode sub-agent fix, CVE-2026-22812 security update
v0.6.5 Cmd+C shortcut, newline preservation, hook timeout fix
v0.6.4 Cmd+Enter keyboard shortcut
v0.6.3 OpenCode npm package fix, cache path fix
v0.6.2 OpenCode title generation fix, WSL browser detection

What's New in v0.9.2

Patch: Removed version history logging from the shared server that was filling the OpenCode TUI input box with red [History] Saved v1 for ... messages on every plan submission (#178).


What's New in v0.9.0

When your coding agent revises a plan after feedback, you no longer have to re-read the whole thing to figure out what changed. Plan Diff shows exactly what's different — with two view modes, automatic version history, and a sidebar for browsing past iterations. This was the most requested feature from the community (#138, #111, Discussion #110).

Plan Diff

After you deny a plan and the agent resubmits, a +N/-M badge appears below the document card showing how many lines were added and removed. Click it to toggle into diff view.

Two view modes, switchable with one click:

  • Rendered diff — the plan renders as usual, but with color-coded left borders. Green for added sections, red with strikethrough for removed content, yellow for modified lines. Scan the plan visually and immediately spot where the changes landed.

  • Raw diff — a monospace, git-style view with + and - prefixed lines. Useful when you need precise, line-level detail about what changed in the markdown source.

Both views work from the same underlying diff. The engine computes line-level changes using the diff npm package and groups consecutive add/remove pairs into "modified" blocks so you see intent, not noise.

Version History

Every time a plan arrives, Plannotator automatically saves it to ~/.plannotator/history/ before you see the UI. Plans are versioned sequentially — first submission is version 1, revision after feedback is version 2, and so on. Same plan heading on the same day means the same plan being iterated on. Identical resubmissions are deduplicated.

The sidebar now has two tabs: Table of Contents (existing) and Version Browser (new). From the Version Browser, select any previous version to diff against. The default comparison is always the immediately prior version, but you can jump back further if the plan has gone through several rounds.

Version history is scoped by project (git repo or working directory) and stored independently of the plan-save-on-decision setting.

Sidebar Redesign

The Table of Contents panel from v0.7.0 has been promoted to a shared left sidebar with tabs. The first tab is the existing TOC; the second is the new Version Browser. The sidebar opens by default on the TOC tab if you have "Auto-open Sidebar" enabled in Settings — the Version Browser tab never auto-opens, so the diff workflow stays opt-in.

Terminology Cleanup

The plan review UI previously labeled annotation exports as "diffs," which was confusing now that actual diffs exist. Exported annotation files are now called "annotations" throughout — exportAnnotations(), .annotations.md filenames, and "Download Annotations" in the toolbar. The code review flow (which works with real git diffs) is unchanged.


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

Full Changelog: v0.9.1...v0.9.2

v0.9.1

23 Feb 08:56

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
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.2 BROWSER env var fix for macOS and WSL devcontainers
v0.8.1 Devcontainer BROWSER fallback, mermaid clipping fix, annotation toolbar focus guard
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
v0.6.6 OpenCode sub-agent fix, CVE-2026-22812 security update
v0.6.5 Cmd+C shortcut, newline preservation, hook timeout fix
v0.6.4 Cmd+Enter keyboard shortcut
v0.6.3 OpenCode npm package fix, cache path fix
v0.6.2 OpenCode title generation fix, WSL browser detection

What's New in v0.9.1

Patch: The Plan Diff marketing dialog now handles smaller viewports gracefully — the content area scrolls while the header and dismiss button stay pinned, so you're never trapped in a dialog you can't close.


What's New in v0.9.0

When your coding agent revises a plan after feedback, you no longer have to re-read the whole thing to figure out what changed. Plan Diff shows exactly what's different — with two view modes, automatic version history, and a sidebar for browsing past iterations. This was the most requested feature from the community (#138, #111, Discussion #110).

Plan Diff

After you deny a plan and the agent resubmits, a +N/-M badge appears below the document card showing how many lines were added and removed. Click it to toggle into diff view.

Two view modes, switchable with one click:

  • Rendered diff — the plan renders as usual, but with color-coded left borders. Green for added sections, red with strikethrough for removed content, yellow for modified lines. Scan the plan visually and immediately spot where the changes landed.

  • Raw diff — a monospace, git-style view with + and - prefixed lines. Useful when you need precise, line-level detail about what changed in the markdown source.

Both views work from the same underlying diff. The engine computes line-level changes using the diff npm package and groups consecutive add/remove pairs into "modified" blocks so you see intent, not noise.

Version History

Every time a plan arrives, Plannotator automatically saves it to ~/.plannotator/history/ before you see the UI. Plans are versioned sequentially — first submission is version 1, revision after feedback is version 2, and so on. Same plan heading on the same day means the same plan being iterated on. Identical resubmissions are deduplicated.

The sidebar now has two tabs: Table of Contents (existing) and Version Browser (new). From the Version Browser, select any previous version to diff against. The default comparison is always the immediately prior version, but you can jump back further if the plan has gone through several rounds.

Version history is scoped by project (git repo or working directory) and stored independently of the plan-save-on-decision setting.

Sidebar Redesign

The Table of Contents panel from v0.7.0 has been promoted to a shared left sidebar with tabs. The first tab is the existing TOC; the second is the new Version Browser. The sidebar opens by default on the TOC tab if you have "Auto-open Sidebar" enabled in Settings — the Version Browser tab never auto-opens, so the diff workflow stays opt-in.

Terminology Cleanup

The plan review UI previously labeled annotation exports as "diffs," which was confusing now that actual diffs exist. Exported annotation files are now called "annotations" throughout — exportAnnotations(), .annotations.md filenames, and "Download Annotations" in the toolbar. The code review flow (which works with real git diffs) is unchanged.


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: add plan version history backend and API by @backnotprop in #175
  • feat: plan diff UI with sidebar and dual view modes by @backnotprop in #176
  • feat: Plan Diff marketing dialog, Pi origin support, and docs by @backnotprop in #177
  • refactor: rename diff -> annotations in plan review context by @backnotprop in #173
  • docs: add UI settings reference to marketing site docs by @backnotprop in #171
  • docs: add blog post about local diff review for coding agents by @backnotprop in #166

Full Changelog: v0.9.0...v0.9.1

v0.9.0

23 Feb 08:38

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.8.5 Pi coding agent support, auto-close countdown, image endpoint security fix, OpenCode package fix
v0.8.2 BROWSER env var fix for macOS and WSL devcontainers
v0.8.1 Devcontainer BROWSER fallback, mermaid clipping fix, annotation toolbar focus guard
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
v0.6.6 OpenCode sub-agent fix, CVE-2026-22812 security update
v0.6.5 Cmd+C shortcut, newline preservation, hook timeout fix
v0.6.4 Cmd+Enter keyboard shortcut
v0.6.3 OpenCode npm package fix, cache path fix
v0.6.2 OpenCode title generation fix, WSL browser detection

What's New in v0.9.0

When your coding agent revises a plan after feedback, you no longer have to re-read the whole thing to figure out what changed. Plan Diff shows exactly what's different — with two view modes, automatic version history, and a sidebar for browsing past iterations. This was the most requested feature from the community (#138, #111, Discussion #110).

Plan Diff

After you deny a plan and the agent resubmits, a +N/-M badge appears below the document card showing how many lines were added and removed. Click it to toggle into diff view.

Two view modes, switchable with one click:

  • Rendered diff — the plan renders as usual, but with color-coded left borders. Green for added sections, red with strikethrough for removed content, yellow for modified lines. Scan the plan visually and immediately spot where the changes landed.

  • Raw diff — a monospace, git-style view with + and - prefixed lines. Useful when you need precise, line-level detail about what changed in the markdown source.

Both views work from the same underlying diff. The engine computes line-level changes using the diff npm package and groups consecutive add/remove pairs into "modified" blocks so you see intent, not noise.

Version History

Every time a plan arrives, Plannotator automatically saves it to ~/.plannotator/history/ before you see the UI. Plans are versioned sequentially — first submission is version 1, revision after feedback is version 2, and so on. Same plan heading on the same day means the same plan being iterated on. Identical resubmissions are deduplicated.

The sidebar now has two tabs: Table of Contents (existing) and Version Browser (new). From the Version Browser, select any previous version to diff against. The default comparison is always the immediately prior version, but you can jump back further if the plan has gone through several rounds.

Version history is scoped by project (git repo or working directory) and stored independently of the plan-save-on-decision setting.

Sidebar Redesign

The Table of Contents panel from v0.7.0 has been promoted to a shared left sidebar with tabs. The first tab is the existing TOC; the second is the new Version Browser. The sidebar opens by default on the TOC tab if you have "Auto-open Sidebar" enabled in Settings — the Version Browser tab never auto-opens, so the diff workflow stays opt-in.

Terminology Cleanup

The plan review UI previously labeled annotation exports as "diffs," which was confusing now that actual diffs exist. Exported annotation files are now called "annotations" throughout — exportAnnotations(), .annotations.md filenames, and "Download Annotations" in the toolbar. The code review flow (which works with real git diffs) is unchanged.


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: add plan version history backend and API by @backnotprop in #175
  • feat: plan diff UI with sidebar and dual view modes by @backnotprop in #176
  • feat: Plan Diff marketing dialog, Pi origin support, and docs by @backnotprop in #177
  • refactor: rename diff -> annotations in plan review context by @backnotprop in #173
  • docs: add UI settings reference to marketing site docs by @backnotprop in #171
  • docs: add blog post about local diff review for coding agents by @backnotprop in #166

Full Changelog: v0.8.5...v0.9.0