Releases: backnotprop/plannotator
v0.14.1
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.
- Authored by @MarceloPrado in #331
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat'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
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.
- #329, fixing #328 reported by @linxi-1214
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
cwdas explicit session context viaGitContext, 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 diffcalls now include--no-ext-diffso external diff tools configured in the user's git config don't corrupt the output. Authored by @BruceChen7 in #320 /plannotator-lastdocumentation — Docs and install scripts updated for the new command (#327)
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat'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...
v0.13.1
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.
- #318, closing #63 (file-based plans, requested by @DanielusG), #129 (JSON parse error, reported by @5trongHust), #152 (question support, requested by @fidelix), #183 (browser not opening, reported by @eromoe), and #289 (subagent access, reported by @sfpmld)
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 | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat's Changed
- feat: Pi-style iterative planning for OpenCode plugin by @backnotprop in #318
- fix: guard Obsidian mkdir against Bun EEXIST regression by @backnotprop in #319
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_planin #289 - @Pollux12 reported the Obsidian save failure in #315
Full Changelog: v0.13.0...v0.13.1
v0.13.0
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.
- Authored by @sercantor in #303, closing #302
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.
- Authored by @fink-andreas in #299
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.
- #310, closing #307 reported by @0xbentang
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.
- #298, addressing #296 reported by @MarceloPrado
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.
- Authored by @MarceloPrado in #283
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 detachedspawn().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 | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in `openco...
v0.12.0
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.
- Authored by @grubmanItay in #268 and #272
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.
- Authored by @grubmanItay in #260
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.
- Authored by @flex-yj-kim in #266
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.
- Authored by @flex-yj-kim in #264 and #279
- Issue #275 filed by @flex-yj-kim
Markdown Image Rendering
Markdown  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.
- Authored by @dgrissen2 in #271
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.
- Authored by @dgrissen2 in #276
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 support —
plannotator annotatenow handles Windows drive-letter paths (C:\...,C:/...), Git Bash/MSYS paths (/c/...), and Cygwin paths (/cygdrive/c/...) in the shared markdown resolver ([...
v0.11.4
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.
- Requested by @jgeralnik in #254
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.
- Authored by @dgrissen2
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 | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat'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:
- @grubmanItay — authored #253 (bidirectional scroll navigation)
- @dgrissen2 — authored #255 (clipboard paste for annotation images, absolute path fix)
- @jgeralnik — #254 (git add from code review)
- @7tg — #252 (VS Code IPC port stability)
Full Changelog: v0.11.3...v0.11.4
v0.11.3
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.
- Requested by @jhillyerd in #243
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.
- Requested by @igor-softswiss in #161, with support from @navopw
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 | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat's Changed
- chore: pin deploy.yml actions to SHAs + add Renovate by @backnotprop in #244
- feat: hierarchical folder tree in code review sidebar by @backnotprop in #246
- feat: expandable diff context in code review by @backnotprop in #247
- feat: split worktree/diff-type into separate controls by @backnotprop in #248
Contributors
Community members who requested features and participated in discussions that shaped this release:
- @jhillyerd — #243 (expandable diff context)
- @igor-softswiss — #161 (file tree view in code review)
- @navopw — discussion on #161 (file tree support)
Full Changelog: v0.11.2...v0.11.3
v0.11.2
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.
- Thanks to @alexandrekm for reporting this (#196) and @sushi30 for the discussion on commit-level flexibility
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.
- PR by @dgrissen2 (#237)
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-annotateon Windows failed when paths used@prefix or when the working directory differed between caller and Bun script. AddedPLANNOTATOR_CWDenv var support and proper path joining. (#233 by @theflysurfer)
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat'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...
v0.11.1
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.
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-reviewUI becausegit diffonly 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.jsonconfigs (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 | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat'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:
- @alpgul — #91 (VS Code extension proposal)
- @7tg — community VS Code extension (7tg/plannotator-vscode)
- @zhuscat — #189 (untracked files missing from review)
Full Changelog: v0.11.0...v0.11.1
v0.11.0
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.
- Inspired by @TomLucidor's discussion on Obsidian integration (#181)
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.
- Thanks to @injun-choi-0914 for reporting this (#215)
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-annotateslash 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-layerconvention for portal click-outside detection (#226)
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat'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...