Skip to content

Releases: backnotprop/plannotator

v0.17.1

07 Apr 01:16

Choose a tag to compare

Follow @plannotator on X for updates


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

What's New in v0.17.1

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

Pi PR Review

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

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

Remote URL Parsing

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

Cross-Repo Clone Fixes

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

Additional Changes

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

Install / Update

macOS / Linux:

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

Windows:

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

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

Copilot CLI:

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

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

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

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


What's Changed

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

v0.17.0

06 Apr 20:13

Choose a tag to compare

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.md references 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.md if 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=0 or false now forces local mode, bypassing SSH auto-detection. Previously only 1/true had 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 | bash

Windows:

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

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

Copilot CLI:

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

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

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

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


What's Changed

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

Read more

v0.16.7

02 Apr 22:36

Choose a tag to compare

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.


Install / Update

macOS / Linux:

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

Windows:

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

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

Copilot CLI:

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

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

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

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


What's Changed

  • 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

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

02 Apr 17:59

Choose a tag to compare

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 | bash

Windows:

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

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

Copilot CLI:

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

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

VS Code Extension: Install from the VS Code Marketplace. 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

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

02 Apr 05:15

Choose a tag to compare

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.

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 | bash

Windows:

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

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

Copilot CLI:

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

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

VS Code Extension: Install from the VS Code Marketplace. 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

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:

Full Changelog: v0.16.4...v0.16.5

v0.16.4

01 Apr 22:10

Choose a tag to compare

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

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 plannotator with no arguments now prints a usage message instead of hanging. --help lists 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 | bash

Windows:

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

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

Copilot CLI:

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

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

  • feat: 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

Read more

v0.16.3

01 Apr 04:30

Choose a tag to compare

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.

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 | bash

Windows:

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

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

Copilot CLI:

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

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

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

31 Mar 04:51

Choose a tag to compare

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 writeRemoteShareLink stderr 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 | bash

Windows:

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

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

Copilot CLI:

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

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

  • fix(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

30 Mar 16:17

Choose a tag to compare

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


Install / Update

macOS / Linux:

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

Windows:

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

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

Copilot CLI:

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

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

  • fix(server): keep external annotation SSE streams alive by @foxytanuki in #439

New Contributors

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

30 Mar 05:16

Choose a tag to compare

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.

Additional Changes

  • OpenCode startup performance. Replaced compile-time HTML embedding with lazy readFileSync getters 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-invocation frontmatter (#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 | bash

Windows:

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

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

Copilot CLI:

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

OpenCode: Clear cache and restart:

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

Read more