Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.19.5 | All-files diff view, clickable code file paths, server-side hide whitespace, non-ASCII path support |
| v0.19.4 | All-files diff type, code file viewer, hide whitespace, quick-settings popover |
| v0.19.3 | Configurable feedback messages, hide merged PRs in stacked PR selector |
| v0.19.2 | Stacked PR review, source line numbers in feedback, diff type dialog re-show, ghost dot removal, docs cleanup |
| v0.19.1 | Hook-native annotation, custom base branch, OpenCode workflow modes, quieter plan diffs, anchor navigation |
| v0.19.0 | Code Tour agent, GitHub-flavored Markdown, copy table as Markdown/CSV, flexible Pi planning mode, session-log ancestor-PID walk |
| v0.18.0 | Annotate focus & wide modes, OpenCode origin detection, word-level inline plan diff, Markdown content negotiation, color swatches |
| v0.17.10 | HTML and URL annotation, loopback binding by default, Safari scroll fix, triple-click fix, release pipeline smoke tests |
| v0.17.9 | Hotfix: pin Bun to 1.3.11 for macOS binary codesign regression |
| v0.17.8 | Configurable default diff type, close button for sessions, annotate data loss fix, markdown rendering polish |
| v0.17.7 | Fix "fetch did not return a Response" error in OpenCode web/serve modes |
| v0.17.6 | Bun.serve error handlers for diagnostic 500 responses, install.cmd cache fix |
What's New in v0.19.6
v0.19.6 ships 3 PRs closing 4 long-standing issues. Two changes stand out: Pi browser sessions are now fully async, so review and annotation commands no longer lock the chat while the UI is open; and OpenCode gets a visible agent picker on the Approve button, replacing the buried Settings-only agent switch. A fix for annotate-last mode rounds out the release.
Non-Blocking Browser Sessions for Pi
Every Plannotator command in Pi that opens a browser — plan review, code review, annotation, and annotate-last — previously blocked the chat session until the browser tab was closed. The chat input was locked the entire time. If the review server crashed, or the user simply forgot to close the tab, the Pi session hung indefinitely with no way to recover except restarting.
This release rewrites the Pi browser session lifecycle from the ground up. All four browser-based flows now return control to the chat immediately after opening the browser. Users can continue working, ask follow-up questions, or start entirely new tasks while the review UI stays open in a separate tab. When the user submits feedback, approves a plan, or closes the browser, the decision is forwarded back into the Pi session automatically.
The implementation introduces a BrowserDecisionSession abstraction that wraps the server lifecycle, browser launch, and decision forwarding into a single async pattern. Each session tracks its own state and cleanup, so multiple review sessions can coexist without interfering. A stop() mechanism ensures sessions are cleaned up even if the browser tab is abandoned, preventing zombie server processes.
This also required extracting assistant message parsing into a dedicated module (assistant-message.ts) and building a session state tracker (current-pi-session.ts) to correctly scope tool availability and saved state across the new async boundaries.
- #645 by @backnotprop
Agent Picker Dropdown for OpenCode
OpenCode users can now select which agent to switch to directly from a split Approve button, without opening Settings. The button label shows exactly what will happen: "Approve → Build", "Approve → Orchestrator", or just "Approve" when switching is disabled. Click the chevron to see all available agents from the OpenCode API, plus a "No switch" option that prevents any agent mode change on approval.
Before this change, agent switching was controlled by a setting buried in the Plannotator Settings panel. Most users didn't know it existed. The default was "Build", which meant every plan approval silently switched the CLI to Build mode. Users running Orchestrator workflows, Sisyphus mode, or custom agent topologies would find their agent unexpectedly changed after approving a plan.
The "No switch" option also changes the approval prompt itself. When selected, the "approved with notes" message no longer includes "Proceed with implementation," letting the current agent decide its own next step. This is particularly useful for planning-only workflows where approval shouldn't trigger immediate implementation.
Non-OpenCode origins (Claude Code, Gemini CLI, Copilot CLI) are completely unaffected and continue using the standard Approve button.
- #648, closing #575 (agent mode switching unexpectedly, reported by @luyanfeng), #114 (wrong agent on approval, reported by @xitex), #106 (Sisyphus mode compatibility, requested by @tensam), and #159 (approve without triggering implementation, requested by @gustavocaiano)
Fix Code File and Linked Doc Resolution in Annotate-Last Mode
When annotating the last assistant message (plannotator last or /plannotator-annotate last), clicking a code file path or linked document returned a 404. The annotate-last mode sets filePath to the literal string "last-message", which was passed through as a filesystem base directory for resolving relative paths. The server tried to resolve files against "last-message" as a directory, which doesn't exist.
The fix guards both the code file popout and linked doc URL builders to skip non-path values and fall back to the project root. Normal file and folder annotation are unaffected since those use real filesystem paths.
- #647 by @backnotprop
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat's Changed
- feat(pi): make browser review and annotation sessions async by @backnotprop in #645
- feat(opencode): agent picker dropdown on Approve button by @backnotprop in #648
- fix(ui): code file and linked doc resolution in annotate-last mode by @backnotprop in #647
Community
Four issues drove the agent picker feature, all from users who were surprised or frustrated by invisible agent switching:
- @luyanfeng reported in #575 that their CLI switched from Orchestrator to Build mode after using Plannotator
- @xitex reported in #114 that approving a plan switched to the wrong agent, with follow-up discussion from @thoroc
- @tensam requested Sisyphus mode compatibility in #106
- @gustavocaiano requested the ability to approve a plan without triggering implementation in #159, with discussion from @arden-shackelford-q2, @emanuelsan, and @pencoyd
Full Changelog: v0.19.5...v0.19.6