Releases: backnotprop/plannotator
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
v0.17.0
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| 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 |
| v0.14.5 | GitLab merge request review, login page image fix, Windows install path fix |
What's New in v0.17.0
v0.17.0 introduces AI-powered code review agents, token-level annotation in diffs, and merge-base diffs for PR-accurate comparisons. Three of the six PRs in this release came from external contributors, one of them a first-timer.
AI Code Review Agents
Codex and Claude Code can now run as background review agents directly from the Plannotator code review UI. Select an agent, launch it, and watch live log output stream into a detail panel while the agent works. When it finishes, its findings appear as external annotations in the diff viewer, tagged by severity.
Codex agents use their built-in codex-review command and produce priority-level findings (P0 through P3). Claude agents use a custom multi-agent prompt covering bug detection, security, code quality, and guideline compliance, with each finding classified as important, nit, or pre-existing. Both agents' findings include reasoning traces that explain the logic behind each annotation.
For PR reviews, the server automatically creates a local worktree so agents have full file access without affecting your working directory. Same-repo PRs use git worktree; cross-repo forks use a shallow clone with tracking refs for both branches. Pass --no-local to skip the worktree if you don't need file access.
The Pi extension has full agent review parity: stdin/stdout/stderr handling, live log streaming, result ingestion, and vendored review modules with import rewriting.
Token-Level Code Selection
The diff viewer now supports clicking individual syntax tokens to annotate them. Hover a token to see it underlined; click to open the annotation toolbar with the token's text and position as context (e.g., "Line 47: processOrder"). Token metadata is stored on the annotation and surfaced in sidebar badges and exported feedback.
Gutter-based line selection continues to work independently. The two selection modes don't interfere with each other.
Merge-Base Diffs
A new "Current PR Diff" option in the diff type selector uses git merge-base to find the common ancestor between your branch and the default branch, then diffs from that point. This produces the same diff you'd see on a GitHub pull request page. The existing "vs main" option (git diff main..HEAD) is still available but includes upstream changes that arrived after you branched, which can be noisy.
Additional Changes
- @ file reference support in annotate. OpenCode-style
@file.mdreferences now resolve correctly in/plannotator-annotate. The resolver strips the leading@as a fallback when the literal filename doesn't exist, while still preferring real files named@something.mdif present (#488 by @Exloz) - Markdown hard line breaks and list continuations. Two-trailing-space and backslash hard breaks now render as
<br>elements. Indented continuation lines after list items merge into the preceding bullet instead of becoming orphan paragraphs (#483, closing #482) - Explicit local mode override. Setting
PLANNOTATOR_REMOTE=0orfalsenow forces local mode, bypassing SSH auto-detection. Previously only1/truehad explicit meaning (#481 by @foxytanuki, closing #480) - PR file content merge-base fix. File contents for expandable diff context are now fetched at the merge-base commit instead of the base branch tip. When the base branch has moved since the PR was created, the old file contents didn't match the diff hunks, causing crashes in the diff renderer. The fix fetches the merge-base SHA via GitHub's compare API and falls back gracefully if unavailable
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
- feat(review): token-level code selection for annotations by @backnotprop in #500
- feat(review): AI review agents, local worktree, and UI polish by @backnotprop in #491
- fix(annotate): support @ markdown file references by @Exloz in #488
- feat(review): add merge-base diff option for PR-style diffs by @yonihorn in #485
- fix: handle markdown hard line breaks and list continuations by @backnotprop in #483
- fix(remote): support explicit local override by @foxytanuki in #481
- fix(review): use merge-base SHA for PR file contents by @backnotprop
New Contributors
Contributors
@Exloz contributed the @ file reference fix for OpenCode's annotate mode (#488), includ...
v0.16.7
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| 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 |
| v0.14.5 | GitLab merge request review, login page image fix, Windows install path fix |
| v0.14.4 | GitHub review submission, repo identifier in tab title, nested code fence parser fix, Pi paste URL wiring |
What's New in v0.16.7
v0.16.7 adds Gemini CLI as a supported platform and fixes the agent skills install path. 2 PRs, 1 from an external contributor, 1 first-timer.
Gemini CLI Plan Review
Plannotator now works with Google's Gemini CLI. When you use /plan in Gemini CLI, the BeforeTool hook intercepts exit_plan_mode, reads the plan file from disk, and opens the browser review UI. Approve or deny with annotations, same as every other supported agent.
The integration required adapting how Plannotator reads plans. Gemini provides a plan_filename pointing to a file on disk rather than passing plan content inline like Claude Code does. The server reconstructs the full path from the session's transcript path and reads the file directly. Decision output is also format-specific: Gemini expects { decision: "deny", reason: "..." } while Claude Code uses its hookSpecificOutput wrapper.
A user policy file (plannotator.toml) grants allow for exit_plan_mode so the TUI confirmation dialog is skipped and the browser review becomes the sole approval gate. Slash commands for /plannotator-review and /plannotator-annotate are installed as Gemini command TOML files.
The install script (install.sh, install.ps1, install.cmd) now auto-detects Gemini CLI by checking for ~/.gemini and configures the policy, hook, and commands automatically. The marketing site's hero section includes Gemini in the agent selector.
Install Script: Agent Skills Directory Fix
The install scripts were writing agent skills to the wrong directory. Skills are now correctly installed to ~/.agents/skills/ instead of the previous incorrect path.
- #476 by @nulladdict, closing #471
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
- feat(gemini): add Gemini CLI plan review integration by @backnotprop in #384
- fix: install agent skills to ~/.agents/skills/ directory by @nulladdict in #476
New Contributors
- @nulladdict made their first contribution in #476
Community
- @nulladdict reported the skills install directory bug in #471 and submitted the fix in #476. First contribution.
Full Changelog: v0.16.6...v0.16.7
v0.16.6
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| 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 |
| v0.14.5 | GitLab merge request review, login page image fix, Windows install path fix |
| v0.14.4 | GitHub review submission, repo identifier in tab title, nested code fence parser fix, Pi paste URL wiring |
| v0.14.3 | PR context panel, diff search in code review, OpenCode permission normalization, landing page redesign |
What's New in v0.16.6
v0.16.6 adds Perforce support, an inter-extension event API for Pi, and two code review UX improvements. 5 PRs, 4 from external contributors, 2 first-timers.
Perforce (P4) Pending Changelist Diffs
Plannotator's code review now works in Perforce workspaces. The server auto-detects whether the current directory is a Git repo or a P4 workspace and routes diff, file content, and staging operations to the appropriate backend.
P4 support covers default and numbered pending changelists. The diff dropdown lists all changelists with pending files, and binary files are automatically excluded. Because Perforce has no staging concept, the staging UI is hidden when reviewing P4 diffs. The implementation introduces a VcsProvider interface with Git and P4 implementations behind a provider registry, so additional VCS backends can be added without modifying the existing code paths.
Existing Git behavior is unchanged.
Pi Shared Event API
Other Pi extensions can now invoke Plannotator's review flows without importing internal code. The extension listens on the plannotator:request event channel and supports six actions: plan review, review status, code review, markdown annotation, annotate-last, and archive browsing.
Plan review is asynchronous. A caller sends a request and gets back a reviewId immediately. When the user approves or rejects in the browser, Plannotator emits plannotator:review-result with the decision, feedback, and metadata. Callers can also query review-status with the reviewId to recover from session restarts. The other actions are standard request/response flows.
Browser and server startup logic was extracted into a dedicated plannotator-browser.ts module to keep the main entry point focused on the state machine.
Additional Changes
- Suggested code prefill. Clicking "Add suggested code" in the annotation toolbar now pre-fills the textarea with the selected code instead of starting empty. The cursor is positioned at the end so you can edit from the original rather than retyping it (#470 by @sylvainDNS)
- File tree folders expanded by default. The review file tree now initializes with all folders expanded on first render, matching the expected behavior when opening a diff with nested files (#474 by @blimmer, closing #473)
- Annotation toolbar hidden during suggestion modal. The toolbar no longer stacks on top of the expanded suggestion editor, preventing overlapping dialogs (#469 by @sylvainDNS)
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
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. The extension opens plan review and code review directly in VS Code editor tabs instead of a browser window. 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: add Perforce (P4) pending changelist diff support by @rtsummit in #472
- feat(pi): add shared signal/event API for inter-extension review flows by @stk-code in #468
- feat(review): prefill suggested code textarea with selected code by @sylvainDNS in #470
- fix(review): expand file tree folders by default on initial render by @blimmer in #474
- fix(review): hide annotation toolbar when suggestion modal is open by @sylvainDNS in #469
New Contributors
- @rtsummit made their first contribution in #472
- @sylvainDNS made their first contribution in #469
Contributors
@rtsummit contributed Perforce support (#472), bringing Plannotator's code review to teams that use P4 for version control. First contribution.
@stk-code returned with the Pi shared event API (#468), building on the phase configuration work from v0.16.3. This opens Plannotator's review flows to the broader Pi extension ecosystem.
@sylvainDNS contributed two code review fixes in a single day: suggested code prefill (#470) and the annotation toolbar overlap fix (#469). Both include before/after screenshots in the PR. First contribution.
@blimmer identified and fixed the file tree folder collapse bug (#473, #474), continuing from the untracked file discovery fix in v0.16.4.
Full Changelog: v0.16.5...v0.16.6
v0.16.5
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| 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 |
| v0.14.5 | GitLab merge request review, login page image fix, Windows install path fix |
| v0.14.4 | GitHub review submission, repo identifier in tab title, nested code fence parser fix, Pi paste URL wiring |
| v0.14.3 | PR context panel, diff search in code review, OpenCode permission normalization, landing page redesign |
| v0.14.2 | OpenCode plan mode prompt replacement, Windows non-ASCII path fix, Pi link fix |
What's New in v0.16.5
v0.16.5 is a patch release fixing a scrollbar regression in the review UI and shipping two VS Code extension improvements. 3 PRs, all internal.
Resize Handle Scrollbar Fix
In v0.16.2, the sidebar resize handle's invisible touch area was widened to make dragging easier. The right-side handle extended 8px leftward into the content panel, covering the 6px scrollbar. Users could see the scrollbar but couldn't click it because the resize handle's hit area intercepted the click. This was a regression from the touch area change in commit 3ac3d5b.
The fix zeroes out the left encroachment on right-side handles and shifts the full touch target into the sidebar panel instead. The scrollbar is now fully accessible on both plan review and code review views.
- #465, closing #354 reported by @dillonoconnor
VS Code Extension
The extension README icon now uses an absolute URL so the VS Code Marketplace renders it correctly. Previously, the marketplace resolved the relative image path against the repo root rather than the extension subdirectory, resulting in a broken icon on the listing page.
The extension is also now published to the VS Code Marketplace as backnotprop.plannotator-webview. The .vscodeignore was tightened from 548 packaged files down to 12, the README was rewritten with CloudFront-hosted screenshots, and the marketing site gained a VS Code tab in the hero agent selector with install instructions and a marketplace link.
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
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. The extension opens plan review and code review directly in VS Code editor tabs instead of a browser window. 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(ui): right resize handle no longer covers scrollbar by @backnotprop in #465
- fix(vscode): use absolute URL for README icon by @backnotprop in #464
- feat(vscode): marketplace publish + marketing VS Code tab by @backnotprop in #463
Community
- @dillonoconnor reported the scrollbar regression in #354 and followed up with reproduction details
- @7tg requested VS Code extension installation documentation in #258
- @jedzill4 opened the original VS Code extension request in #462
Related issues now addressed by the VS Code marketplace publish:
- @jchapuis: #99 (VS Code hook integration)
- @jinhwan0724: #154 (non-TTY browser open)
- @GunitBindal: #192 (remote session UI access)
Full Changelog: v0.16.4...v0.16.5
v0.16.4
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| 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 |
| v0.14.5 | GitLab merge request review, login page image fix, Windows install path fix |
| v0.14.4 | GitHub review submission, repo identifier in tab title, nested code fence parser fix, Pi paste URL wiring |
| v0.14.3 | PR context panel, diff search in code review, OpenCode permission normalization, landing page redesign |
| v0.14.2 | OpenCode plan mode prompt replacement, Windows non-ASCII path fix, Pi link fix |
What's New in v0.16.4
v0.16.4 introduces a hook mechanism for continuously improving your plans based on compound planning insights, adds GitHub Enterprise and self-hosted GitLab support for code review, restructures the review UI around a dockview workspace, and ships three new themes. 11 PRs, 3 from external contributors, 2 first-timers.
GitHub Enterprise and Self-Hosted GitLab Support
Plannotator's code review now works with GitHub Enterprise and self-hosted GitLab instances. Previously, PR review only supported github.com and gitlab.com URLs. Now any host with a /pull/ or /merge_requests/ path pattern is recognized. The --hostname flag is threaded through all gh CLI calls for GitHub Enterprise, and self-hosted GitLab MR diffs use the glab api endpoint instead of glab mr diff (which doesn't support --hostname on self-hosted instances).
- #460, closing #348 and #457 reported by @charlozard
Compound Planning: Continuous Improvement Hook
The compound planning skill now closes the loop between analysis and action. After analyzing your plan archive and generating a report, the skill can write corrective planning instructions to ~/.plannotator/hooks/compound/enterplanmode-improve-hook.txt. A PreToolUse hook on EnterPlanMode then injects these instructions into Claude's context every time plan mode starts. The result: insights from your compound planning analysis automatically shape how Claude writes future plans.
This release also adds incremental reports that detect previous runs and only analyze new files since the last report, saving tokens on large projects. Extraction (Phase 2) now uses Haiku agents for speed, while reduction (Phase 3) uses Sonnet for analytical reasoning with two-stage reduce for large datasets.
For users without a Plannotator archive, a Claude Code fallback mode activates when ~/.plannotator/plans/ is absent or has no denied plans. A bundled Python script (extract_exit_plan_mode_outcomes.py) extracts plan outcomes directly from Claude Code conversation logs, so the compound skill works even without Plannotator history.
Review UI Improvements
The code review center area has been restructured around a Dockview workspace. PR detail views and agent panels now open as center dock tabs instead of overlaying the diff, and diff navigation is simplified to a single dedicated tab. This lays the groundwork for upcoming AI-powered review features that need flexible panel management.
New Themes
Three new color themes: Clean Contrast (dark-only), Code Fork (dark + light), and Midnight (dark-only). All three are derived from Cursor's color palettes and registered with preview swatches in the theme picker.
Additional Changes
- Pi phase configuration. Pi users can now define phase behavior (model, tools, prompt) in
plannotator.json, scoped to project or global~/.pi/agent(#446 by @stk-code) - CLI help. Running
plannotatorwith no arguments now prints a usage message instead of hanging.--helplists available subcommands (#448 by @foxytanuki, closing #447) - Untracked file discovery fix. Code review now resolves the repo root so untracked files outside the agent's CWD are included (#450 by @blimmer, closing #449)
- Review scroll reset. The diff viewport resets to the top-left when switching files (#452, closing #451 reported by @UberMouse)
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
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat's Changed
- feat: agentic review — background job runner with SSE streaming by @backnotprop in #443
- feat(pi): support phase config files by @stk-code in #446
- cli: clarify no-arg usage and add top-level help by @foxytanuki in #448
- fix(review): resolve repo root for untracked file discovery by @blimmer in #450
- fix(review): reset scroll on file switch by @backnotprop in #452
- feat(review): add dockview center workspace by @backnotprop in #453
- feat: add Clean Contrast, Code Fork, and Midnight themes by @backnotprop in #454
- feat(skill): compound planning — incremental reports, agent routing, improvement hook by @backnotprop in #455
- feat(hook): improvement hook context injection for planning by @backnotprop in #459
- feat(review): support GitHub Enterprise and fix self-hosted GitLab MR diffs by @backnotprop in #460
- feat(skill): add Claude Code fallback to compound planning skill by @backnotprop in #461
New Contributors
v0.16.3
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| 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 |
| v0.14.5 | GitLab merge request review, login page image fix, Windows install path fix |
| v0.14.4 | GitHub review submission, repo identifier in tab title, nested code fence parser fix, Pi paste URL wiring |
| v0.14.3 | PR context panel, diff search in code review, OpenCode permission normalization, landing page redesign |
| v0.14.2 | OpenCode plan mode prompt replacement, Windows non-ASCII path fix, Pi link fix |
| v0.14.1 | Single submit_plan with auto-detect, viewed-file draft persistence, Bear nested tag fix |
What's New in v0.16.3
v0.16.3 brings Pi phase configuration, a CLI help message, and two code review fixes that address missing untracked files when the agent runs from a subdirectory and scroll position persisting across file switches. 4 PRs, 3 from external contributors, 2 first-timers.
Pi Phase Configuration
Pi users can now customize Plannotator's phase behavior (model, tools, prompt) through configuration files. Phase settings can be defined in a project-level plannotator.json, in .pi/agent, or globally in ~/.pi/agent. This lets you tailor Plannotator's planning workflow per project or globally without modifying the extension itself.
CLI Help and No-Arg Usage
Running plannotator directly in a terminal with no arguments previously hung waiting for stdin, giving no indication of what it expected. Now it prints a short clarification message and exits. plannotator --help shows a top-level usage message listing available subcommands. The existing hook contract (stdin-fed JSON from Claude Code) is unchanged.
- Authored by @foxytanuki in #448, closing #447
Untracked File Discovery Fix
When an agent's working directory was a subdirectory of the repo (e.g., after cd packages/foo/), git ls-files --others would only find untracked files within that subtree, silently dropping files elsewhere in the repo. Paths in the diff output were also CWD-relative instead of root-relative, causing mismatches with tracked file diffs. The fix resolves the repo root and uses it as the CWD for both git ls-files and git diff --no-index. A regression test verifies the fix from a subdirectory.
Additional Changes
- Review scroll reset. The code review diff viewport now resets to the top-left when switching files, instead of preserving the scroll position from the previous file (#452, closing #451 reported by @UberMouse)
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
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat's Changed
- feat(pi): support phase config files by @stk-code in #446
- cli: clarify no-arg usage and add top-level help by @foxytanuki in #448
- fix(review): resolve repo root for untracked file discovery by @blimmer in #450
- fix(review): reset scroll on file switch by @backnotprop in #452
New Contributors
Contributors
@stk-code contributed Pi phase configuration support (#446), bringing per-project customization to the Pi extension.
@foxytanuki returned for a second contribution with the CLI help message (#448), after the SSE timeout fix in v0.16.1.
@blimmer identified and fixed the untracked file discovery bug (#449, #450), including a regression test. First contribution.
@UberMouse reported the scroll position issue in code review (#451).
Full Changelog: v0.16.2...v0.16.3
v0.16.2
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| 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 |
| v0.14.5 | GitLab merge request review, login page image fix, Windows install path fix |
| v0.14.4 | GitHub review submission, repo identifier in tab title, nested code fence parser fix, Pi paste URL wiring |
| v0.14.3 | PR context panel, diff search in code review, OpenCode permission normalization, landing page redesign |
| v0.14.2 | OpenCode plan mode prompt replacement, Windows non-ASCII path fix, Pi link fix |
| v0.14.1 | Single submit_plan with auto-detect, viewed-file draft persistence, Bear nested tag fix |
| v0.14.0 | PR review via GitHub URL, /plannotator-last for annotating agent messages, OpenCode plan mode permissions fix, VS Code SSH proxy fix |
What's New in v0.16.2
v0.16.2 focuses on annotation UX. Comment popovers are now draggable, annotation counts surface across sidebar tabs, and the code review diff viewer supports custom fonts. 4 PRs.
Draggable Comment Popovers
Comment popovers in both plan review and code review can now be repositioned by dragging their header bar. Previously, popovers near viewport edges or at the bottom of long documents would clip or overlap content, forcing users to scroll to work around them. A shared useDraggable hook handles the drag mechanics with a 3px movement threshold that prevents interfering with header button clicks. Once dragged, auto-positioning pauses so the popover stays where you put it. Position resets when a new annotation is selected.
The same drag behavior applies to the annotation toolbar in code review line comments.
Cross-File Annotation Visibility
Annotations are now visible across sidebar tabs. The Files and Vault browsers show per-file annotation count badges, with folders displaying aggregate counts from descendants. A summary header reports "N annotations in M files" when any file has annotations. Dot indicators appear on the Files and Vault tab icons when annotated files exist, even when the sidebar is collapsed.
The table of contents badge was redesigned from a heavy accent circle to a lighter muted rounded badge, and the same component is reused across all sidebar trees. Navigation back buttons now adapt based on context, returning to the correct sidebar tab when navigating between files.
Custom Diff Fonts
The code review diff viewer now supports custom monospace fonts and font size adjustments. A Code Font dropdown and font size slider appear in the Display settings tab. Nine fonts are available: Fira Code, Hack, IBM Plex Mono, Inconsolata, JetBrains Mono, Red Hat Mono, Roboto Mono, Source Code Pro, and Atkinson Hyperlegible Mono. Fonts load on demand from Google Fonts and jsDelivr CDN. The overrides apply to the diff shadow DOM, annotations, suggestions, and AI chat code blocks. Settings persist via the ConfigStore system.
Additional Changes
- OpenCode verbose log fix. Removed
writeRemoteShareLinkstderr output that flooded the TUI on remote sessions, and stripped leftover debug logs from the PR viewed files feature (#440, closing #435 reported by @h4rvey-g)
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
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat's Changed
- fix(opencode): remove verbose logs that flood the TUI by @backnotprop in #440
- feat(review): custom diff font family and size overrides by @backnotprop in #441
- feat(ui): draggable comment popover and annotation toolbar by @backnotprop in #442
- feat(ui): cross-file annotation visibility and adaptive navigation by @backnotprop in #444
Community
@h4rvey-g reported the OpenCode TUI flooding issue in #435, which led to the verbose log cleanup in #440.
Full Changelog: v0.16.1...v0.16.2
v0.16.1
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| 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 |
| v0.14.5 | GitLab merge request review, login page image fix, Windows install path fix |
| v0.14.4 | GitHub review submission, repo identifier in tab title, nested code fence parser fix, Pi paste URL wiring |
| v0.14.3 | PR context panel, diff search in code review, OpenCode permission normalization, landing page redesign |
| v0.14.2 | OpenCode plan mode prompt replacement, Windows non-ASCII path fix, Pi link fix |
| v0.14.1 | Single submit_plan with auto-detect, viewed-file draft persistence, Bear nested tag fix |
| v0.14.0 | PR review via GitHub URL, /plannotator-last for annotating agent messages, OpenCode plan mode permissions fix, VS Code SSH proxy fix |
| v0.13.1 | OpenCode plan mode rewrite, Obsidian save fix |
What's New in v0.16.1
v0.16.1 fixes SSE connection stability for the external annotations API introduced in v0.16.0. 1 PR from an external contributor, 1 first-timer.
SSE Stream Idle Timeout Fix
Bun's default idle timeout of 10 seconds was killing the external annotations SSE stream (/api/external-annotations/stream) before the first 30-second heartbeat could fire. The browser's EventSource auto-reconnected, but each reconnect triggered a full snapshot resend and produced a [Bun.serve]: request timed out after 10 seconds warning in the console.
The fix uses Bun's per-request server.timeout(req, 0) to disable the idle timeout only on SSE stream requests. Normal HTTP requests keep the default 10-second safety net. The change applies to all three server types (plan, review, annotate).
- Authored by @foxytanuki in #439, closing #438
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
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat's Changed
- fix(server): keep external annotation SSE streams alive by @foxytanuki in #439
New Contributors
- @foxytanuki made their first contribution in #439
Community
@foxytanuki filed #438 with a thorough root cause analysis identifying the mismatch between Bun's 10-second idle timeout and the 30-second heartbeat interval, then followed up with the fix in #439.
@j-huang-rj independently identified the same issue and submitted a fix in #433. The targeted per-request approach from #439 was chosen, but both contributors spotted the problem within hours of v0.16.0 shipping.
Full Changelog: v0.16.0...v0.16.1
v0.16.0
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| 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 |
| v0.14.5 | GitLab merge request review, login page image fix, Windows install path fix |
| v0.14.4 | GitHub review submission, repo identifier in tab title, nested code fence parser fix, Pi paste URL wiring |
| v0.14.3 | PR context panel, diff search in code review, OpenCode permission normalization, landing page redesign |
| v0.14.2 | OpenCode plan mode prompt replacement, Windows non-ASCII path fix, Pi link fix |
| v0.14.1 | Single submit_plan with auto-detect, viewed-file draft persistence, Bear nested tag fix |
| v0.14.0 | PR review via GitHub URL, /plannotator-last for annotating agent messages, OpenCode plan mode permissions fix, VS Code SSH proxy fix |
| v0.13.1 | OpenCode plan mode rewrite, Obsidian save fix |
| v0.13.0 | Built-in themes, annotatable plan diffs, file-scoped code review comments, Octarine integration, unified review core, Pi remote sessions |
What's New in v0.16.0
v0.16.0 adds GitHub Copilot CLI as Plannotator's fifth runtime, an external annotations API for integration (stay tuned...), bot callback URLs for Slack-style approval workflows, interactive plan checkboxes, print support, and configurable diff display options. 11 PRs, 3 from external contributors, 2 first-timers.
GitHub Copilot CLI Integration
Plannotator now works with GitHub Copilot CLI, contributed by @Yecats. Plan review, code review, and markdown annotation all function the same way they do in Claude Code. The Copilot plugin hooks into exit_plan_mode to intercept plans, and the same /plannotator-review, /plannotator-annotate, and /plannotator-last commands are available.
Install the binary, then in Copilot CLI:
/plugin marketplace add backnotprop/plannotator
/plugin install plannotator-copilot@plannotator
A follow-up PR added environment-variable-based agent detection so the UI correctly identifies which agent launched Plannotator, fixing the badge display that was previously hardcoded to Claude Code.
External Annotations API
Any external program can now push annotations into a live Plannotator session. Linters, AI tools, or custom scripts send annotations via HTTP POST to /api/external-annotations, and they appear in the browser UI in real-time through Server-Sent Events. The API supports single and batch annotation creation, field updates via PATCH, deletion by ID or source, and version-gated polling as a fallback for environments where SSE isn't practical.
This is the foundation for integrating Plannotator with external toolchains. A linter could annotate code review diffs with warnings. A CI pipeline could push review comments. An AI assistant could highlight sections of a plan it has questions about.
All three server types (plan, review, annotate) expose the same endpoints, and the Pi extension has full parity.
Interactive Checkboxes
Task checkboxes in rendered plans are now clickable. Checking or unchecking a box creates a COMMENT annotation that captures the action, the section context, and the task text. Toggling back to the original state removes the override and deletes the annotation. This means your checkbox interactions become part of the feedback sent to the agent.
Print Support
Plans can now be printed directly from the review UI. An export dropdown menu in the toolbar offers a print option, and Ctrl+P / Cmd+P works as a keyboard shortcut. A dedicated print stylesheet produces clean white-paper output with A4 formatting, hiding the toolbar, sidebar, and interactive elements.
Diff Display Options
The code review diff viewer now exposes display settings that were previously locked to defaults. You can configure overflow behavior (scroll vs word wrap), toggle diff indicators and line numbers, control inline diff granularity, and show or hide diff backgrounds. All settings are persisted via the ConfigStore system (cookies + ~/.plannotator/config.json) and accessible from a new Display tab in the review Settings dialog.
Bot Callback URL Parameters
Plannotator share URLs now support callback parameters for bot integrations. When a bot (e.g., a Slack bot) generates a plan and posts the Plannotator URL, it can embed ?cb=<callback_url>&ct=<auth_token> so the approval decision is sent back to the bot automatically. The user reviews and approves in Plannotator, and the bot receives the result without any copy-paste.
- Authored by @aviadshiber in #416
Additional Changes
- OpenCode startup performance. Replaced compile-time HTML embedding with lazy
readFileSyncgetters and background preloading. Bundle size drops from 21.25 MB to 0.81 MB (96% reduction), cold-start module load from ~160ms to ~35ms (#411, closing #410 reported by @DRBragg) - Markdown parser fixes. Indented closing fences (inside list items), trailing text after fence closers, and false table detection on lines with pipes are all fixed (#429, closing #427 reported by @jhillyerd)
- PR/MR platform test coverage. Regression tests for URL parsing, labels, display helpers, and CLI selection across GitHub and GitLab, including self-hosted GitLab (#426 by @sudorest)
- Compound skill description fix. Trimmed to fit Claude Code 2.1.86's 250-character limit and added
disable-model-invocationfrontmatter (#430, closing #412 reported by @arogulin) - Copilot on marketing site. The landing page harness selector now includes a Copilot button with install instructions, in alphabetical order alongside the other five runtimes.
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
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat's Changed
- feat: GitHub Copilot CLI integration by @Yecats in #409
- perf(opencode): lazy-load HTML to fix plugin startup time by @backnotprop in #411
- feat: bot callback URL params for seamless plan review by @aviadshiber in [#416](https://github.com/backnotprop/plannota...