Releases: backnotprop/plannotator
v0.17.10
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.
- #545 by @backnotprop
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.tomlnow 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:
--helpfor basic loading,reviewandannotatefor 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_JINAandJINA_API_KEY, and a blog post with demo video. #553 by @backnotprop
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows PowerShell:
irm https://plannotator.ai/install.ps1 | iexPin a specific version:
curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.10Claude 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/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionVS 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...
v0.17.9
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- Fixes #541, reported by @aviadshiber
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows PowerShell:
irm https://plannotator.ai/install.ps1 | iexPin a specific version:
curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.9Claude 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/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionVS 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
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.
- #531, inspired by #521 from @githendrik, related to #287 from @prashanth057
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.
- #523, closing #522 reported and fixed by @gwynnnplaine
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 | bashWindows PowerShell:
irm https://plannotator.ai/install.ps1 | iexPin a specific version:
curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.8Claude 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/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionVS 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
- @gwynnnplaine made their first contribution in #523
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...
v0.17.7
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 | bashWindows PowerShell:
irm https://plannotator.ai/install.ps1 | iexPin a specific version:
curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.7Claude 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/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionVS 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
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 | bashWindows PowerShell:
irm https://plannotator.ai/install.ps1 | iexPin a specific version:
curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.6Claude 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/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionVS 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
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 | bashWindows:
irm https://plannotator.ai/install.ps1 | iexPin a specific version:
curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.5Claude 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/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionVS 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
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.
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.
Additional Changes
- Pi: planning tool stripped on fresh sessions. PR #446 refactored the Pi
session_starthandler to useapplyPhaseConfig()but left the idle branch calling onlyrestoreSavedState(), which no-ops when there's no saved state. On fresh sessions that had never entered planning mode,plannotator_submit_planremained 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 | bashWindows:
irm https://plannotator.ai/install.ps1 | iexPin a specific version:
curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version v0.17.4Claude 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/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionVS 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
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.
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.
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.
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.
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.
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.
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.
v0.17.2
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.
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.
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.
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.
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.
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.
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.
v0.17.1
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: undefinedand 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 | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude 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/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionVS 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(pi): full PR review parity with Bun server by @backnotprop in #503
Full Changelog: v0.17.0...v0.17.1