Skip to content

Releases: backnotprop/plannotator

v0.17.10

13 Apr 15:06
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.17.9 Hotfix: pin Bun to 1.3.11 for macOS binary codesign regression
v0.17.8 Configurable default diff type, close button for sessions, annotate data loss fix, markdown rendering polish
v0.17.7 Fix "fetch did not return a Response" error in OpenCode web/serve modes
v0.17.6 Bun.serve error handlers for diagnostic 500 responses, install.cmd cache fix
v0.17.5 Fix VCS detection crash when p4 not installed, install script cache path fix
v0.17.4 Vault browser merged into Files tab, Kanagawa themes, Pi idle session tool fix
v0.17.3 Sticky lane repo/branch badge overflow fix
v0.17.2 Supply-chain hardening, sticky toolstrip and badges, overlay scrollbars, external annotation highlighting, Conventional Comments
v0.17.1 Pi PR review parity, parseRemoteUrl rewrite, cross-repo clone fixes, diff viewer flash fix
v0.17.0 AI code review agents, token-level annotation, merge-base diffs
v0.16.7 Gemini CLI plan review, install script skills directory fix
v0.16.6 Perforce support, Pi shared event API, suggested code prefill, file tree expand fix

What's New in v0.17.10

v0.17.10 adds HTML and URL annotation, binds local servers to loopback for security, fixes two UI bugs in the review and plan editors, and hardens the release pipeline with supply chain age gating and binary smoke tests. 7 PRs, 1 from a first-time external contributor.

Annotate HTML Files and URLs

plannotator annotate now accepts HTML files and URLs in addition to markdown. Running plannotator annotate page.html converts the file to markdown via Turndown and opens the standard annotation UI. Running plannotator annotate https://example.com/docs fetches the page content through Jina Reader (which handles JavaScript-rendered pages), falls back to plain fetch with Turndown conversion, and opens it for annotation.

Local and private URLs skip Jina automatically and use direct fetch. A --no-jina flag, PLANNOTATOR_JINA environment variable, and config.json setting are available to disable Jina Reader entirely. For authenticated use with higher rate limits, set JINA_API_KEY.

Folder mode now shows .html and .htm files alongside markdown, with on-demand conversion when you click one. A subtle source badge in the UI shows the URL hostname or original filename so you always know where the content came from.

Dangerous link protocols (javascript:, data:, vbscript:) are blocked in the markdown renderer. Local HTML files are capped at 10MB and restricted to the project root.

Pi extension parity is included: file browser, HTML conversion, URL/Jina support, and the source badge all work identically in the Node.js server.

Local Servers Bind to Loopback by Default

Local plan, review, and annotate servers now bind to 127.0.0.1 instead of 0.0.0.0. Previously, running plannotator review on a laptop exposed the review API (including the agent job launcher) to every device on the local network. Remote sessions (SSH, Docker, devcontainers) continue to bind to 0.0.0.0 so port forwarding still works.

Both the Bun and Pi server implementations were updated with regression tests verifying hostname selection in local vs. remote sessions.

Safari Scroll Position Fix in Code Review

Safari users experienced the diff view snapping back to the top after momentum scrolling. The root cause was a WebKit compositor bug: Safari loses track of scroll position when a web component shadow DOM (<diffs-container> from @pierre/diffs) is a child of a scroll container. The reset bypasses all JavaScript APIs, so intercepting scrollTo and the scrollTop setter caught nothing.

The fix adds a WebKit-only scroll event listener that detects bogus resets (scrollTop jumping from over 200px to 0 in a single event) and synchronously restores the last known position. It is never attached on Chrome, Firefox, or Edge.

Triple-Click Paragraph Selection Restored

Triple-clicking a paragraph to select the full line stopped producing the annotation toolbar. The bug was a timing interaction between the dismiss-on-outside-click handler (added in #182) and browser click counting. The third pointerdown fired the dismiss hook, which removed the <mark> element and normalized text nodes. This DOM mutation changed the element under the cursor, resetting the browser's click count so the third click registered as detail=1 instead of detail=3.

The fix guards the dismiss handler: multi-click pointerdowns (event.detail >= 2) are skipped because they are part of an active selection gesture.

Additional Changes

  • 7-day minimum release age for dependencies — Renovate and bunfig.toml now enforce a 7-day hold on new dependency versions. This prevents repeat incidents like the Bun 1.3.12 codesign regression (#541), where a 2-day-old release was picked up by CI before the defect surfaced. Automerge is also disabled. #550 by @backnotprop
  • Smoke tests for compiled binaries — The release pipeline now tests the linux-x64 binary after compilation: --help for basic loading, review and annotate for full server startup with HTTP binding. If any test fails, artifacts are never uploaded. #555 by @backnotprop
  • Annotate documentation and blog post — Docs for all four annotate input types (markdown, HTML, URLs, folders), environment variable references for PLANNOTATOR_JINA and JINA_API_KEY, and a blog post with demo video. #553 by @backnotprop

Install / Update

macOS / Linux:

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

Windows PowerShell:

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

Pin a specific version:

curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.10

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

Copilot CLI:

/plugin marketplace add backnotprop/plannotator
/plugin install plannotator-copilot@plannotator

Gemini CLI: The install script auto-detects ~/.gemini and configures hooks, policy, and slash commands.

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

VS Code Extension: Install from the VS Code Marketplace.


What's Changed

  • feat(annotate): support HTML files and URL annotation by @backnotprop in #545
  • fix(ui): restore triple-click paragraph selection by @backnotprop in #546
  • fix(review): work around Safari scroll-reset bug with shadow DOM diffs by @backnotprop in #547
  • chore: enforce 7-day minimum release age for supply chain hardening by @backnotprop in #550
  • docs(annotate): URL/HTML annotation docs, blog post, and promo video by @backnotprop in #553
  • Bind local Plannotator servers to loopba...
Read more

v0.17.9

11 Apr 19:02
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.17.8 Configurable default diff type, close button for sessions, annotate data loss fix, markdown rendering polish
v0.17.7 Fix "fetch did not return a Response" error in OpenCode web/serve modes
v0.17.6 Bun.serve error handlers for diagnostic 500 responses, install.cmd cache fix
v0.17.5 Fix VCS detection crash when p4 not installed, install script cache path fix
v0.17.4 Vault browser merged into Files tab, Kanagawa themes, Pi idle session tool fix
v0.17.3 Sticky lane repo/branch badge overflow fix
v0.17.2 Supply-chain hardening, sticky toolstrip and badges, overlay scrollbars, external annotation highlighting, Conventional Comments
v0.17.1 Pi PR review parity, parseRemoteUrl rewrite, cross-repo clone fixes, diff viewer flash fix
v0.17.0 AI code review agents, token-level annotation, merge-base diffs
v0.17.9 Gemini CLI plan review, install script skills directory fix
v0.16.6 Perforce support, Pi shared event API, suggested code prefill, file tree expand fix
v0.16.5 Resize handle scrollbar fix, VS Code Marketplace publish

What's New in v0.17.9

v0.17.9 is a hotfix for a macOS binary signing regression introduced by Bun 1.3.12.

Fix: macOS Binary Killed on Launch (Bun 1.3.12 Regression)

Users on macOS Sequoia reported that the v0.17.8 binary was killed immediately on launch with no output — zsh: killed ~/.local/bin/plannotator. The binary was a valid Mach-O executable but had no code signature at all, causing macOS to SIGKILL it before it could run.

The regression was introduced by Bun 1.3.12. The release workflow uses bun-version: latest, so v0.17.8's build picked up 1.3.12 while v0.17.7 had been built with 1.3.11. Bun 1.3.11 injects an ad-hoc linker signature into cross-compiled macOS binaries; 1.3.12 does not. macOS Sequoia enforces stricter unsigned binary restrictions and kills them outright.

The fix pins bun-version to 1.3.11 across all three workflow jobs (test, build, npm-publish) until the upstream Bun issue is resolved.

If you're on v0.17.8 and can't wait for the update, the workaround is to apply the signature manually:

codesign --sign - --force ~/.local/bin/plannotator

Install / Update

macOS / Linux:

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

Windows PowerShell:

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

Pin a specific version:

curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.9

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

Copilot CLI:

/plugin marketplace add backnotprop/plannotator
/plugin install plannotator-copilot@plannotator

Gemini CLI: The install script auto-detects ~/.gemini and configures hooks, policy, and slash commands.

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

VS Code Extension: Install from the VS Code Marketplace.


What's Changed

  • fix: pin Bun to 1.3.11 to fix macOS binary codesign regression (Bun 1.3.12) by @backnotprop

Community

@aviadshiber reported the issue in #541 with a full diagnostic — binary path, SHA256, codesign output, and the workaround — which made the root cause straightforward to identify and fix.

Full Changelog: v0.17.8...v0.17.9

v0.17.8

11 Apr 00:30
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.17.7 Fix "fetch did not return a Response" error in OpenCode web/serve modes
v0.17.6 Bun.serve error handlers for diagnostic 500 responses, install.cmd cache fix
v0.17.5 Fix VCS detection crash when p4 not installed, install script cache path fix
v0.17.4 Vault browser merged into Files tab, Kanagawa themes, Pi idle session tool fix
v0.17.3 Sticky lane repo/branch badge overflow fix
v0.17.2 Supply-chain hardening, sticky toolstrip and badges, overlay scrollbars, external annotation highlighting, Conventional Comments
v0.17.1 Pi PR review parity, parseRemoteUrl rewrite, cross-repo clone fixes, diff viewer flash fix
v0.17.0 AI code review agents, token-level annotation, merge-base diffs
v0.16.7 Gemini CLI plan review, install script skills directory fix
v0.16.6 Perforce support, Pi shared event API, suggested code prefill, file tree expand fix
v0.16.5 Resize handle scrollbar fix, VS Code Marketplace publish
v0.16.4 Compound planning improvement hook, GitHub Enterprise + self-hosted GitLab, dockview workspace, new themes

What's New in v0.17.8

v0.17.8 fixes a data loss bug in annotate mode, makes the default code review diff view configurable, adds a way to close a review session without killing the agent, and improves markdown rendering across the board. Four PRs in this release, including the first contribution from @gwynnnplaine and @githendrik.

Configurable Default Code Review Diff Type

The default diff view in code review used to be uncommitted, which combines staged and unstaged changes. That doesn't match git diff semantics — running git diff in your terminal shows only unstaged hunks. Users who stage hunks as they review them had no way to focus on just the unstaged remainder without manually toggling the dropdown every session.

This release switches the default to unstaged and makes it user-configurable. The first time you run a local code review session after upgrading, a setup dialog asks which view you'd prefer as your default. The choice is persisted to ~/.plannotator/config.json and can be changed any time from Settings > Display. P4 users keep their existing default (p4-default); the dropdown still works for one-off switches during a session.

Close Button to Exit Review and Annotate Sessions

Once you opened a Pi PR review with /plannotator-review <pr-url>, there was no obvious way to end the session without killing the entire Pi agent. The review UI had no "Close" or "Done" affordance, so finishing meant either submitting feedback you didn't want to give or terminating the agent and losing context.

A Close button now lives in the review and annotate toolbars. When you have annotations queued, it flips to "Send Feedback" so the action always reflects what's about to happen. On the server side, a new /api/exit endpoint resolves the session cleanly without going through the feedback path. This works in both review and annotate flows.

Markdown Rendering Improvements

A handful of long-standing rough edges in the markdown renderer used by plan review and annotate mode are addressed in this release.

Bullet markers in multi-line list items used to float to vertical center; they're now pinned to the top of the first line so the marker sits where you'd expect. Bullet glyphs are consistent across nesting levels. Strikethrough (~~text~~) renders as <del>. Triple-asterisk ***bold italic*** parses correctly instead of getting eaten by the double-asterisk pass. Backslash escaping (\*, \_, \`, \[, \~) renders the literal character without showing the backslash. Autolinks (<https://url> and <email@domain.com>) become clickable links. Checkbox icons are nudged 3px down to align with the text baseline.

A test fixture covering all of these cases now lives at tests/test-fixtures/10-inline-gaps-and-bullets.md.

Annotate Data Loss Fix on Linked Document Submission

When running plannotator annotate on a markdown file with links to other files, annotations left on the original file were silently dropped if you clicked "Send Annotations" while viewing a linked document. The submission endpoint only sent annotations from the currently-viewed file, so a careful round of annotations on the original could disappear with no warning, no recovery path, and nothing persisted to disk.

The bug was in useLinkedDoc.open(): it stashed original-file annotations into a ref before swapping React state to the linked doc, but getDocAnnotations() only read from the doc cache and the active linked doc — never from the stashed state. The submission pipeline never saw the original file's annotations. The UI also showed the wrong count, because docAnnotationCount only updated on back() rather than on every navigation.

Both are fixed. The hook now exposes a sourceFilePath option so getDocAnnotations() can pull stashed annotations back into the submission payload, and the count updates immediately on navigation. Plan mode, folder mode, and annotate-last were never affected.


Install / Update

macOS / Linux:

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

Windows PowerShell:

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

Pin a specific version:

curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.8

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

Copilot CLI:

/plugin marketplace add backnotprop/plannotator
/plugin install plannotator-copilot@plannotator

Gemini CLI: The install script auto-detects ~/.gemini and configures hooks, policy, and slash commands.

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

VS Code Extension: Install from the VS Code Marketplace.


What's Changed

  • fix(annotate): include original file annotations when submitting from linked doc view by @backnotprop in #536
  • feat(review): configurable default diff type by @backnotprop in #531
  • fix(review): add Close button to exit Pi review session by @gwynnnplaine in #523
  • fix: improve markdown rendering and bullet alignment by @backnotprop in #530

New Contributors

Community

@gwynnnplaine filed #522 about being unable to end a review session without killing the Pi agent, then turned around and shipped the fix in #523 — issue and resolu...

Read more

v0.17.7

09 Apr 16:38
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.17.6 Bun.serve error handlers for diagnostic 500 responses, install.cmd cache fix
v0.17.5 Fix VCS detection crash when p4 not installed, install script cache path fix
v0.17.4 Vault browser merged into Files tab, Kanagawa themes, Pi idle session tool fix
v0.17.3 Sticky lane repo/branch badge overflow fix
v0.17.2 Supply-chain hardening, sticky toolstrip and badges, overlay scrollbars, external annotation highlighting, Conventional Comments
v0.17.1 Pi PR review parity, parseRemoteUrl rewrite, cross-repo clone fixes, diff viewer flash fix
v0.17.0 AI code review agents, token-level annotation, merge-base diffs
v0.16.7 Gemini CLI plan review, install script skills directory fix
v0.16.6 Perforce support, Pi shared event API, suggested code prefill, file tree expand fix
v0.16.5 Resize handle scrollbar fix, VS Code Marketplace publish
v0.16.4 Compound planning improvement hook, GitHub Enterprise + self-hosted GitLab, dockview workspace, new themes
v0.16.3 Pi phase configuration, CLI help, untracked file discovery fix, review scroll reset

What's New in v0.17.7

v0.17.7 fixes the "fetch(req) did not return a Response object" error that affected OpenCode users running opencode web, opencode serve, or any mode that starts the HTTP server (including --port or --hostname flags).

Fix: OpenCode Web/Serve Mode Compatibility

OpenCode recently added Node.js support alongside Bun. To bridge its Hono app to Node's HTTP server, OpenCode uses @hono/node-server, which includes a createAdaptorServer function. That function unconditionally patches global.Response with a polyfill class — a necessary step for Node.js, which lacks native web API globals.

The problem: in opencode web and opencode serve modes, this patch runs before plugins load. When the plannotator plugin calls Bun.serve() and the fetch handler returns new Response(...), it's constructing the hono polyfill, not Bun's native Response. Bun validates return types using internal type tags, not instanceof, so it rejects the polyfill and shows its default error page. The error() handler added in v0.17.6 also uses new Response(...), which is why it didn't fire either — the error handler's own response was also a polyfill.

Plain opencode TUI without --port or server config was never affected. In that mode, OpenCode routes requests through an internal RPC bridge instead of starting an HTTP server, so createAdaptorServer never runs and global.Response stays native.

The fix detects the polyfill by walking the prototype chain. Hono sets up Object.setPrototypeOf(Response2.prototype, GlobalResponse.prototype), so the parent prototype's constructor is the original native Response. The plugin recovers it and restores globalThis.Response before any server code runs. When Response hasn't been patched, the detection check fails safely and the fix is a no-op.


Install / Update

macOS / Linux:

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

Windows PowerShell:

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

Pin a specific version:

curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.7

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

Copilot CLI:

/plugin marketplace add backnotprop/plannotator
/plugin install plannotator-copilot@plannotator

Gemini CLI: The install script auto-detects ~/.gemini and configures hooks, policy, and slash commands.

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

VS Code Extension: Install from the VS Code Marketplace.


What's Changed

  • fix: recover native Response when patched by hono node-server adapter by @backnotprop

Community

@Zengwenj reported the original issue in #528. @xxJava provided the p4 stack trace and confirmed cross-platform reproduction. @boris-gorbylev and @chocochu confirmed on macOS. @jehu-rodriguez confirmed 0.17.6's error handler didn't fire, which was the key clue that the issue was a non-Response return rather than an exception. The latest reporter confirmed opencode web as the specific trigger, which led directly to identifying the hono adapter's global.Response patch as the root cause.

Full Changelog: v0.17.6...v0.17.7

v0.17.6

09 Apr 15:08
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.17.5 Fix VCS detection crash when p4 not installed, install script cache path fix
v0.17.4 Vault browser merged into Files tab, Kanagawa themes, Pi idle session tool fix
v0.17.3 Sticky lane repo/branch badge overflow fix
v0.17.2 Supply-chain hardening, sticky toolstrip and badges, overlay scrollbars, external annotation highlighting, Conventional Comments
v0.17.1 Pi PR review parity, parseRemoteUrl rewrite, cross-repo clone fixes, diff viewer flash fix
v0.17.0 AI code review agents, token-level annotation, merge-base diffs
v0.16.7 Gemini CLI plan review, install script skills directory fix
v0.16.6 Perforce support, Pi shared event API, suggested code prefill, file tree expand fix
v0.16.5 Resize handle scrollbar fix, VS Code Marketplace publish
v0.16.4 Compound planning improvement hook, GitHub Enterprise + self-hosted GitLab, dockview workspace, new themes
v0.16.3 Pi phase configuration, CLI help, untracked file discovery fix, review scroll reset
v0.16.2 Draggable comment popovers, cross-file annotation visibility, custom diff fonts, OpenCode verbose log fix

What's New in v0.17.6

v0.17.6 adds error handlers to all three Bun servers (plan, review, annotate) so that unhandled exceptions produce a diagnostic 500 response instead of Bun's opaque default error page. This release also adds OpenCode cache clearing to the Windows CMD install script, which was missing entirely.

Server Error Handlers

Several OpenCode users reported seeing Bun's default error page ("You're seeing this because fetch(req) did not return a Response object") when using submit_plan. The root cause remains under investigation, but the default Bun error page provides zero diagnostic information, making it impossible to identify the actual exception from user reports alone.

All three servers (plan review, code review, annotate) now register an error handler with Bun.serve(). When the fetch handler throws for any reason, the error handler catches it, logs the full exception to stderr, and returns a 500 response with the error message. Normal requests are unaffected. The only change in behavior is on error paths that were previously showing the opaque Bun page.

This gives us the diagnostic information we need. The next user who hits this issue will see the actual error message instead of the generic Bun page, and can include it in their report.

Windows CMD Install Script Cache Fix

The install.cmd script had no OpenCode cache clearing at all. Users who installed or updated via CMD on Windows kept running stale cached plugin versions indefinitely. The script now clears %USERPROFILE%\.cache\opencode\packages\@plannotator alongside the existing bun cache paths, matching the behavior already present in install.sh and install.ps1 since v0.17.5.


Install / Update

macOS / Linux:

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

Windows PowerShell:

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

Pin a specific version:

curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.6

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

Copilot CLI:

/plugin marketplace add backnotprop/plannotator
/plugin install plannotator-copilot@plannotator

Gemini CLI: The install script auto-detects ~/.gemini and configures hooks, policy, and slash commands. See apps/gemini/README.md for manual setup.

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

VS Code Extension: Install from the VS Code Marketplace. Tested with Claude Code running in VS Code's integrated terminal. Not currently compatible with Anthropic's official VS Code extension due to upstream hook bugs.


What's Changed

  • fix: add Bun.serve error handlers for diagnostic 500 responses by @backnotprop
  • fix: add OpenCode cache clearing to install.cmd by @backnotprop

Community

@Zengwenj, @xxJava, @boris-gorbylev, and @chocochu reported and confirmed #528. The error handler addition is a direct response to the difficulty of diagnosing the reported Bun error page without exception details.

Full Changelog: v0.17.5...v0.17.6

v0.17.5

09 Apr 14:12
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.17.4 Vault browser merged into Files tab, Kanagawa themes, Pi idle session tool fix
v0.17.3 Sticky lane repo/branch badge overflow fix
v0.17.2 Supply-chain hardening, sticky toolstrip and badges, overlay scrollbars, external annotation highlighting, Conventional Comments
v0.17.1 Pi PR review parity, parseRemoteUrl rewrite, cross-repo clone fixes, diff viewer flash fix
v0.17.0 AI code review agents, token-level annotation, merge-base diffs
v0.16.7 Gemini CLI plan review, install script skills directory fix
v0.16.6 Perforce support, Pi shared event API, suggested code prefill, file tree expand fix
v0.16.5 Resize handle scrollbar fix, VS Code Marketplace publish
v0.16.4 Compound planning improvement hook, GitHub Enterprise + self-hosted GitLab, dockview workspace, new themes
v0.16.3 Pi phase configuration, CLI help, untracked file discovery fix, review scroll reset
v0.16.2 Draggable comment popovers, cross-file annotation visibility, custom diff fonts, OpenCode verbose log fix
v0.16.1 SSE stream idle timeout fix for external annotations API

What's New in v0.17.5

v0.17.5 is a hotfix for a server crash affecting plannotator review on systems without Perforce installed, plus a fix for stale OpenCode plugin caches that the install script failed to clear.

VCS Detection Crash When Perforce Is Not Installed

When running plannotator review, the server detects which version control system manages the current directory. The detection loop tries each provider in order: git first, then Perforce (p4). The Perforce provider calls Bun.spawn(["p4", "info"]) to check for a workspace. On systems where the p4 binary isn't installed, Bun.spawn throws an ENOENT error that was not caught. The unhandled exception crashed the Bun server process.

This affected every user who doesn't have Perforce installed and ran plannotator review. The git provider's detection had the same vulnerability — if git wasn't in $PATH (possible on some Windows configurations), the spawn would throw before Perforce detection even ran.

Both providers now catch spawn failures and return false, allowing the detection loop to continue to the next provider or fall back to git as the default. Perforce support continues to work for users who have it installed.

Install Script Cache Path Fix

The install script clears cached OpenCode plugin packages to force a fresh download on the next run. The cache-busting targeted ~/.cache/opencode/node_modules/@plannotator, but OpenCode actually stores plugin packages at ~/.cache/opencode/packages/@plannotator. Users who ran the install script to update were still running the old cached plugin version in OpenCode until the cache expired or was manually cleared.

Both install.sh and install.ps1 now clear the correct path.


Install / Update

macOS / Linux:

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

Windows:

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

Pin a specific version:

curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.5

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

Copilot CLI:

/plugin marketplace add backnotprop/plannotator
/plugin install plannotator-copilot@plannotator

Gemini CLI: The install script auto-detects ~/.gemini and configures hooks, policy, and slash commands. See apps/gemini/README.md for manual setup.

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

VS Code Extension: Install from the VS Code Marketplace. Tested with Claude Code running in VS Code's integrated terminal. Not currently compatible with Anthropic's official VS Code extension due to upstream hook bugs.


What's Changed

  • fix: catch VCS detection spawn failures when p4/git not in PATH by @backnotprop in #527
  • fix: correct OpenCode cache path in install scripts by @backnotprop in #527

Community

@Zengwenj reported the crash in #528 with a clear reproduction path and suspected cause. @xxJava confirmed the issue on both Windows and macOS and provided the full stack trace that pinpointed the exact line in p4.ts. @boris-gorbylev and @chocochu confirmed the issue on macOS with OpenCode.

Full Changelog: v0.17.4...v0.17.5

v0.17.4

08 Apr 23:23
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.17.3 Sticky lane repo/branch badge overflow fix
v0.17.2 Supply-chain hardening, sticky toolstrip and badges, overlay scrollbars, external annotation highlighting, Conventional Comments
v0.17.1 Pi PR review parity, parseRemoteUrl rewrite, cross-repo clone fixes, diff viewer flash fix
v0.17.0 AI code review agents, token-level annotation, merge-base diffs
v0.16.7 Gemini CLI plan review, install script skills directory fix
v0.16.6 Perforce support, Pi shared event API, suggested code prefill, file tree expand fix
v0.16.5 Resize handle scrollbar fix, VS Code Marketplace publish
v0.16.4 Compound planning improvement hook, GitHub Enterprise + self-hosted GitLab, dockview workspace, new themes
v0.16.3 Pi phase configuration, CLI help, untracked file discovery fix, review scroll reset
v0.16.2 Draggable comment popovers, cross-file annotation visibility, custom diff fonts, OpenCode verbose log fix
v0.16.1 SSE stream idle timeout fix for external annotations API
v0.16.0 GitHub Copilot CLI, external annotations API, bot callback URLs, interactive checkboxes, print support, diff display options

What's New in v0.17.4

v0.17.4 ships three PRs: a sidebar consolidation that folds the Obsidian vault browser into the Files tab, three new Kanagawa themes, and a Pi regression fix from @dmmulroy.

Vault Browser Merged into Files Tab

The sidebar previously had separate "Files" and "Vault" tabs when an Obsidian vault was configured. The two tabs had identical tree UI but parallel state, and switching between them broke the mental model of "files are files."

The Vault tab is gone. Vault directories now appear as collapsible sections inside the Files tab, beneath project directories, marked with an Obsidian icon in the section header. Annotation count badges still appear per-directory. Disabling the vault in Settings removes the section without affecting project file browsing.

Two server-side gaps accompany this change. The annotate server (both Bun and Pi) was missing the /api/obsidian/vaults, /api/reference/obsidian/files, and /api/reference/obsidian/doc endpoints — vault files were unreachable when opening linked docs via plannotator annotate ./. Those endpoints are now present on all three servers (plan, review, annotate).

The sticky header lane was also incorrectly suppressed whenever a linked doc was active. That gate has been removed. The sticky bar now follows scroll behavior consistently regardless of mode.

Net change is -334 lines: one Files tab handles all directory types uniformly.

#526

Kanagawa Themes

Three Kanagawa variants join the theme picker as dark-only themes, placed alphabetically after Gruvbox:

  • Kanagawa Dragon — warmest variant, ash-black base (#181616) with muted teal accent
  • Kanagawa Wave — the classic Kanagawa, cool blue-purple base (#1f1f28) with purple accent
  • Kanagawa Bones — same base as Wave, earthier character, cyan-blue primary with brighter purple accent

Colors are mapped directly from the official Ghostty Kanagawa palette.

#524

Additional Changes

  • Pi: planning tool stripped on fresh sessions. PR #446 refactored the Pi session_start handler to use applyPhaseConfig() but left the idle branch calling only restoreSavedState(), which no-ops when there's no saved state. On fresh sessions that had never entered planning mode, plannotator_submit_plan remained in the active tool set — a regression from #387. The idle branch now explicitly strips planning-only tools when there is no saved state to restore. (#525 by @dmmulroy)

Install / Update

macOS / Linux:

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

Windows:

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

Pin a specific version:

curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.4

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

Copilot CLI:

/plugin marketplace add backnotprop/plannotator
/plugin install plannotator-copilot@plannotator

Gemini CLI: The install script auto-detects ~/.gemini and configures hooks, policy, and slash commands. See apps/gemini/README.md for manual setup.

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

VS Code Extension: Install from the VS Code Marketplace. Tested with Claude Code running in VS Code's integrated terminal. Not currently compatible with Anthropic's official VS Code extension due to upstream hook bugs.


What's Changed

  • feat(sidebar): merge vault browser into files tab + UX polish by @backnotprop in #526
  • fix(pi): strip planning-only tools on fresh idle sessions by @dmmulroy in #525
  • feat(themes): add Kanagawa Dragon, Wave, and Bones themes by @backnotprop in #524

Contributors

@dmmulroy tracked down and fixed a regression in the Pi tool-scoping logic he originally authored in #387 (#525). This is his fourth contribution to the project.

Full Changelog: v0.17.3...v0.17.4

v0.17.3

08 Apr 14:42
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.17.1 Pi PR review parity, parseRemoteUrl rewrite, cross-repo clone fixes, diff viewer flash fix
v0.17.0 AI code review agents, token-level annotation, merge-base diffs
v0.16.7 Gemini CLI plan review, install script skills directory fix
v0.16.6 Perforce support, Pi shared event API, suggested code prefill, file tree expand fix
v0.16.5 Resize handle scrollbar fix, VS Code Marketplace publish
v0.16.4 Compound planning improvement hook, GitHub Enterprise + self-hosted GitLab, dockview workspace, new themes
v0.16.3 Pi phase configuration, CLI help, untracked file discovery fix, review scroll reset
v0.16.2 Draggable comment popovers, cross-file annotation visibility, custom diff fonts, OpenCode verbose log fix
v0.16.1 SSE stream idle timeout fix for external annotations API
v0.16.0 GitHub Copilot CLI, external annotations API, bot callback URLs, interactive checkboxes, print support, diff display options
v0.15.5 Custom display names, GitHub viewed file sync, expand/collapse all in file tree, search performance, WSL fix
v0.15.2 Compound Planning skill, folder annotation, /plannotator-archive slash command, skill installation via platform installers

What's New in v0.17.3

v0.17.3 is a substantial release covering ten PRs — supply-chain hardening with SLSA build attestations, a major plan header overhaul with sticky toolstrip and badges, overlay scrollbars across the entire app, inline highlighting for external annotations, Conventional Comments in code review, and several smaller fixes from the community. Two contributors from outside the core team shipped changes this cycle.

Sticky Toolstrip and Badges

The stickyActionsEnabled setting previously only pinned the right-side action buttons. The annotation toolstrip (selection mode + editor mode toggles) and the left-side badges (repo, branch, plan diff) scrolled away with the document, forcing you back to the top to switch modes or jump into a diff.

A new ghost sticky lane fades in once you scroll past the original toolstrip, pinning the toolstrip and badges on the same horizontal plane as the action buttons. The compact bar uses a row layout for badges and hides label text on inactive toolstrip modes to leave room. Top-of-document rendering is unchanged. The lane stays hidden in plan-diff mode, archive mode, linked-doc mode, and when sticky actions is off. Honors prefers-reduced-motion.

#510

Conventional Comments in Code Review

The code review annotation toolbar now has an optional Conventional Comments label picker — suggestion, issue, nitpick, question, and others, with an inline blocking/non-blocking toggle per label. Annotations export in conventional format (**label** (decoration): text) as plain markdown, compatible with GitHub PRs and any text-based review system.

A dedicated Comments settings tab houses the master toggle (off by default), a label editor for adding/editing/deleting/reordering custom labels, per-label blocking decorator toggle, an educational "how it works" section linking to the spec, and live example output. Drafts persist label and decoration state across file switches.

#501

Unified Plan Header Dropdown and Agent Instructions

Plan mode's header has been consolidated. The sprawled desktop toolbar (mode toggle, standalone Settings button, custom export sub-dropdown) and the separate mobile menu are now a single PlanHeaderMenu rendered at all breakpoints, modeled on the existing review header menu. The version number and release notes link moved into the dropdown footer.

A new "Agent Instructions" item copies a clipboard payload teaching external agents (Claude Code, Codex, custom scripts) how to POST annotations into the live session via /api/external-annotations. The instruction body lives in packages/ui/utils/planAgentInstructions.ts so it can be edited independently of UI code.

The PR also fixes a long-standing bug where the Send Annotations / Approve cluster was hidden whenever a linked doc was active, blocking submission for users running plannotator annotate ./ once they opened a file.

#515

Header Polish: Coordinated Shrinking, Share/Copy Cleanup

Sticky header label shrinking is now driven by measured geometry instead of fixed pixel reserves. A ResizeObserver on the wrapper plus another on the action button cluster computes exactly how much room is available; both sides of the header shrink in lockstep so they stay horizontally aligned as long as possible. Below ~340px of plan area the ghost bar stacks below the action buttons.

"Quick Share" and "Quick Copy" are now plain "Share" and "Copy". Share opens the existing export modal so it benefits from the short-link path for large payloads instead of dumping a 50KB hash URL straight to the clipboard.

The sidebar rail no longer pushes the background grid pattern 30px to the right — it floats over the document area, and the grid paints edge-to-edge under the sidebar flags.

#519

Overlay Scrollbars

Wide, translucent, full-length overlay scrollbars across plan mode and code review, replacing the 6px WebKit rail that was hard to grab. Click the track to page-animate toward the click; drag the thumb smoothly; no layout shift; Firefox parity; respects prefers-reduced-motion; disappears in print.

Backed by overlayscrollbars-react wrapped in a new OverlayScrollArea component. Native scroll semantics stay on the viewport element so existing scrollIntoView and scrollTo calls still work. Wrapped containers include the main plan viewer, annotation panel, sidebar tabs, settings and export modals, file tree, review sidebar, AI chat tab, PR comments timeline, and PR summary/checks dock panels.

#509, closing #354

Inline Highlighting for External Annotations

External annotations posted via POST /api/external-annotations can now optionally highlight the matching originalText span inline in the rendered plan — COMMENT renders yellow, DELETION renders strikethrough. Annotations without originalText or of type GLOBAL_COMMENT continue to render sidebar-only.

No protocol or schema change. Tools choose inline vs global purely by what they supply. If originalText doesn't match anywhere in the rendered DOM, the annotation degrades gracefully to sidebar-only with a console warning. PATCH and DELETE through the API correctly remove and reapply highlights as state changes.

#511

Supply-Chain Hardening

The release pipeline now generates SLSA build provenance attestations for every released binary. Each of the twelve cross-compiled binaries (six Plannotator targets, six paste-service targets) is signed via Sigstore and recorded in Rekor through actions/attest-build-provenance. Top-level workflow permissions have been tightened to contents: read with per-job overrides.

Installers now accept a --version v0.X.Y flag (and positional form), so you can pin to a specific version instead of always pulling latest. The default behavior is unchanged.

Attestation verification is opt-in via three mechanisms with documented precedence: a --verify-attestation CLI flag, a PLANNOTATOR_VERIFY_ATTESTATION=1 environment variable, or { "verifyAttestation": true } in ~/.plannotator/config.json. Off by default to match how rustup, brew, bun, deno, and helm handle attestation — turning it on hard-fails the install if gh isn't available, so opt-in is never silently skipped. Anyone can still verify any release manually with gh attestation verify.

The same PR fixes a Windows installer crash where cmd.exe's enabledelayedexpansion was eating the ! characters in an embedded node -e script during Gemini settings merge.

[#512](https://github.com/back...

Read more

v0.17.2

08 Apr 14:10
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.17.1 Pi PR review parity, parseRemoteUrl rewrite, cross-repo clone fixes, diff viewer flash fix
v0.17.0 AI code review agents, token-level annotation, merge-base diffs
v0.16.7 Gemini CLI plan review, install script skills directory fix
v0.16.6 Perforce support, Pi shared event API, suggested code prefill, file tree expand fix
v0.16.5 Resize handle scrollbar fix, VS Code Marketplace publish
v0.16.4 Compound planning improvement hook, GitHub Enterprise + self-hosted GitLab, dockview workspace, new themes
v0.16.3 Pi phase configuration, CLI help, untracked file discovery fix, review scroll reset
v0.16.2 Draggable comment popovers, cross-file annotation visibility, custom diff fonts, OpenCode verbose log fix
v0.16.1 SSE stream idle timeout fix for external annotations API
v0.16.0 GitHub Copilot CLI, external annotations API, bot callback URLs, interactive checkboxes, print support, diff display options
v0.15.5 Custom display names, GitHub viewed file sync, expand/collapse all in file tree, search performance, WSL fix
v0.15.2 Compound Planning skill, folder annotation, /plannotator-archive slash command, skill installation via platform installers

What's New in v0.17.2

v0.17.2 is a substantial release covering ten PRs — supply-chain hardening with SLSA build attestations, a major plan header overhaul with sticky toolstrip and badges, overlay scrollbars across the entire app, inline highlighting for external annotations, Conventional Comments in code review, and several smaller fixes from the community. Two contributors from outside the core team shipped changes this cycle.

Sticky Toolstrip and Badges

The stickyActionsEnabled setting previously only pinned the right-side action buttons. The annotation toolstrip (selection mode + editor mode toggles) and the left-side badges (repo, branch, plan diff) scrolled away with the document, forcing you back to the top to switch modes or jump into a diff.

A new ghost sticky lane fades in once you scroll past the original toolstrip, pinning the toolstrip and badges on the same horizontal plane as the action buttons. The compact bar uses a row layout for badges and hides label text on inactive toolstrip modes to leave room. Top-of-document rendering is unchanged. The lane stays hidden in plan-diff mode, archive mode, linked-doc mode, and when sticky actions is off. Honors prefers-reduced-motion.

#510

Conventional Comments in Code Review

The code review annotation toolbar now has an optional Conventional Comments label picker — suggestion, issue, nitpick, question, and others, with an inline blocking/non-blocking toggle per label. Annotations export in conventional format (**label** (decoration): text) as plain markdown, compatible with GitHub PRs and any text-based review system.

A dedicated Comments settings tab houses the master toggle (off by default), a label editor for adding/editing/deleting/reordering custom labels, per-label blocking decorator toggle, an educational "how it works" section linking to the spec, and live example output. Drafts persist label and decoration state across file switches.

#501

Unified Plan Header Dropdown and Agent Instructions

Plan mode's header has been consolidated. The sprawled desktop toolbar (mode toggle, standalone Settings button, custom export sub-dropdown) and the separate mobile menu are now a single PlanHeaderMenu rendered at all breakpoints, modeled on the existing review header menu. The version number and release notes link moved into the dropdown footer.

A new "Agent Instructions" item copies a clipboard payload teaching external agents (Claude Code, Codex, custom scripts) how to POST annotations into the live session via /api/external-annotations. The instruction body lives in packages/ui/utils/planAgentInstructions.ts so it can be edited independently of UI code.

The PR also fixes a long-standing bug where the Send Annotations / Approve cluster was hidden whenever a linked doc was active, blocking submission for users running plannotator annotate ./ once they opened a file.

#515

Header Polish: Coordinated Shrinking, Share/Copy Cleanup

Sticky header label shrinking is now driven by measured geometry instead of fixed pixel reserves. A ResizeObserver on the wrapper plus another on the action button cluster computes exactly how much room is available; both sides of the header shrink in lockstep so they stay horizontally aligned as long as possible. Below ~340px of plan area the ghost bar stacks below the action buttons.

"Quick Share" and "Quick Copy" are now plain "Share" and "Copy". Share opens the existing export modal so it benefits from the short-link path for large payloads instead of dumping a 50KB hash URL straight to the clipboard.

The sidebar rail no longer pushes the background grid pattern 30px to the right — it floats over the document area, and the grid paints edge-to-edge under the sidebar flags.

#519

Overlay Scrollbars

Wide, translucent, full-length overlay scrollbars across plan mode and code review, replacing the 6px WebKit rail that was hard to grab. Click the track to page-animate toward the click; drag the thumb smoothly; no layout shift; Firefox parity; respects prefers-reduced-motion; disappears in print.

Backed by overlayscrollbars-react wrapped in a new OverlayScrollArea component. Native scroll semantics stay on the viewport element so existing scrollIntoView and scrollTo calls still work. Wrapped containers include the main plan viewer, annotation panel, sidebar tabs, settings and export modals, file tree, review sidebar, AI chat tab, PR comments timeline, and PR summary/checks dock panels.

#509, closing #354

Inline Highlighting for External Annotations

External annotations posted via POST /api/external-annotations can now optionally highlight the matching originalText span inline in the rendered plan — COMMENT renders yellow, DELETION renders strikethrough. Annotations without originalText or of type GLOBAL_COMMENT continue to render sidebar-only.

No protocol or schema change. Tools choose inline vs global purely by what they supply. If originalText doesn't match anywhere in the rendered DOM, the annotation degrades gracefully to sidebar-only with a console warning. PATCH and DELETE through the API correctly remove and reapply highlights as state changes.

#511

Supply-Chain Hardening

The release pipeline now generates SLSA build provenance attestations for every released binary. Each of the twelve cross-compiled binaries (six Plannotator targets, six paste-service targets) is signed via Sigstore and recorded in Rekor through actions/attest-build-provenance. Top-level workflow permissions have been tightened to contents: read with per-job overrides.

Installers now accept a --version v0.X.Y flag (and positional form), so you can pin to a specific version instead of always pulling latest. The default behavior is unchanged.

Attestation verification is opt-in via three mechanisms with documented precedence: a --verify-attestation CLI flag, a PLANNOTATOR_VERIFY_ATTESTATION=1 environment variable, or { "verifyAttestation": true } in ~/.plannotator/config.json. Off by default to match how rustup, brew, bun, deno, and helm handle attestation — turning it on hard-fails the install if gh isn't available, so opt-in is never silently skipped. Anyone can still verify any release manually with gh attestation verify.

The same PR fixes a Windows installer crash where cmd.exe's enabledelayedexpansion was eating the ! characters in an embedded node -e script during Gemini settings merge.

[#512](https://github.com/back...

Read more

v0.17.1

07 Apr 01:16

Choose a tag to compare

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.17.0 AI code review agents, token-level annotation, merge-base diffs
v0.16.7 Gemini CLI plan review, install script skills directory fix
v0.16.6 Perforce support, Pi shared event API, suggested code prefill, file tree expand fix
v0.16.5 Resize handle scrollbar fix, VS Code Marketplace publish
v0.16.4 Compound planning improvement hook, GitHub Enterprise + self-hosted GitLab, dockview workspace, new themes
v0.16.3 Pi phase configuration, CLI help, untracked file discovery fix, review scroll reset
v0.16.2 Draggable comment popovers, cross-file annotation visibility, custom diff fonts, OpenCode verbose log fix
v0.16.1 SSE stream idle timeout fix for external annotations API
v0.16.0 GitHub Copilot CLI, external annotations API, bot callback URLs, interactive checkboxes, print support, diff display options
v0.15.5 Custom display names, GitHub viewed file sync, expand/collapse all in file tree, search performance, WSL fix
v0.15.2 Compound Planning skill, folder annotation, /plannotator-archive slash command, skill installation via platform installers
v0.15.0 Live AI chat in code review, plan archive browser, folder file viewer, resizable split pane, Pi full feature parity

What's New in v0.17.1

v0.17.1 is a patch release that fixes PR review in the Pi extension and addresses several cross-platform bugs found during an exhaustive parity audit of every server endpoint between Bun and Pi runtimes.

Pi PR Review

The Pi extension's plannotator-review command was completely ignoring PR URL arguments and always falling back to local git diffs. v0.17.1 implements the full PR review flow: URL parsing, authentication checks, PR metadata fetch, and local worktree creation for both same-repo and cross-repo PRs. Same-repo PRs use git worktree add --detach with the PR's head ref; cross-repo forks use a shallow clone with tracking refs for both branches.

Beyond the missing PR flow, an audit of all 27 review server feature areas uncovered 12 parity gaps in the Pi server. These ranged from missing diagnostic logging on PR actions to incorrect access guards that would have allowed diff switching in PR mode. All have been fixed.

Remote URL Parsing

parseRemoteUrl has been rewritten to handle the full range of git remote formats. The previous regex incorrectly matched HTTPS URLs with non-standard ports (e.g., https://gitlab.example.com:8443/group/project.git) as SSH, and failed on multi-segment GitLab paths like group/subgroup/project. The new implementation handles SSH, SSH with port (ssh://git@host:22/path), standard HTTPS, and HTTPS with custom ports as separate cases. This fix applies to both Bun and Pi runtimes.

Cross-Repo Clone Fixes

Cross-repo PR clones (forks from different organizations) had two issues. The gh repo clone and glab repo clone commands don't accept a --hostname flag, so self-hosted GitHub Enterprise and GitLab instances would fail. The fix uses GH_HOST and GITLAB_HOST environment variables instead, which both CLIs respect. The shallow fetch depth has also been increased from 50 to 200 commits to handle PRs with longer histories.

Additional Changes

  • Git Add button hidden in PR mode. The staging button was incorrectly visible during PR reviews because the server returned diffType: undefined and the client defaulted to "uncommitted". The client now disables staging when PR metadata is present
  • Diff viewer theme flash fix. Switching files in the diff viewer caused a brief flash of the wrong theme. The Pierre diff library's theme was being computed asynchronously via requestAnimationFrame; the initial state now reads CSS custom properties synchronously so the correct background appears on the first frame
  • Resolved/Outdated filters in PR comments. The PR comments tab now has toggle buttons to hide resolved or outdated review threads. Filters use the same green and amber color tokens as the existing status badges and integrate with the existing Clear Filters control

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".

Copilot CLI:

/plugin marketplace add backnotprop/plannotator
/plugin install plannotator-copilot@plannotator

Gemini CLI: The install script auto-detects ~/.gemini and configures hooks, policy, and slash commands. See apps/gemini/README.md for manual setup.

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

VS Code Extension: Install from the VS Code Marketplace. Tested with Claude Code running in VS Code's integrated terminal. Not currently compatible with Anthropic's official VS Code extension due to upstream hook bugs.


What's Changed

Full Changelog: v0.17.0...v0.17.1