Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.27.13 | Open a review on a specific base (--base, --diff-type), symlink containment on /api/doc, CI flake fix, Amp decision relay |
| v0.27.12 | Unified decision control, token hover cards, local-vs-remote diff, approval notes |
| v0.27.11 | OpenCode server leak fix, durable local feedback archive, unknown-subcommand fix |
| v0.27.10 | Auto-viewed files on scroll, annotation undo/redo, OpenCode 2 slash commands restored, npm 12 agent terminal fix |
| v0.27.9 | WebMCP browser-agent tools, HTML refresh from disk, host seams, lazy renderers, Windows uninstall fix |
| v0.27.8 | Pi keeps its prompt cache across plan transitions, thumbs-up returns to HTML annotation, embed picker seam |
| v0.27.7 | Pi host crash fix on Windows, Call Flow tree cap, jj fork-point base, plannotator knowledge skill + llms.txt |
| v0.27.6 | Live app annotation lands on Pi, one interaction model for HTML pages |
| v0.27.5 | Annotate your running app, Agent TUI placement, collapsed lockfiles, VS Code theme fix |
| v0.27.4 | Portable Guided Review exports, guides.show share links, guide CLI, jj Call Flow |
| v0.27.3 | Folder watcher freeze fix on large repos, first SBOM-attested release pipeline |
| v0.27.2 | Mobile plan and code review, Codex CLI 0.147 fix, configurable markdown extensions |
What's New in v0.27.14
A community release. Eleven pull requests, nine of them from contributors, and one first-time contributor who arrived with two Pi fixes. Six of the changes close issues people filed. The theme is the long tail: Pi plans that lose their progress, Codex threads split across files, a browser setting that silently did nothing under WSL, a toolbar that grew off the bottom of the screen. Each one was reported by someone who hit it, and each one is fixed.
Pi: plan progress survives compaction and session forks
On Pi, the approved plan's progress widget tracked [DONE:n] markers in memory only. After a context compaction, a session fork, or a restart, the counter reset to 0/N and the checkboxes in the plan file were never written back, so a half-finished plan looked untouched.
Completion state is now persisted into the approved plan's markdown itself. A new plannotator_mark_done tool lets the agent mark each step as it finishes, the checkbox flips in the file immediately, and a restored session reads its progress back from the plan instead of starting over. Older in-progress executions are recovered on restore by writing their markers back into the plan. The tool is scoped to the executing phase and refuses to run outside it, and the tool set changes only at phase entry, so Pi's prompt cache is untouched.
#1496 by @a4180p, closing #1376 reported by @huangxinsteam-oss, with @michaelmior confirming the same failure.
Pi: Ask AI renders completed messages and reports errors
Ask AI on Pi built its response from streamed text_delta events. A Pi provider that did not emit usable deltas produced an empty answer, and a failed request, such as an upstream 429, ended as a successful empty response with no indication anything went wrong.
The provider now maps text blocks from Pi's message_end event, which Pi documents as the authoritative completed message, and forwards a failed request's error message to the UI. Normal delta streaming still takes precedence, so nothing is rendered twice.
Codex: annotate-last works when a thread spans several rollout files
One Codex thread can be written across several rollout JSONL files. plannotator last picked the first file whose name matched the thread id, from an unsorted directory listing, which could be an empty or aborted segment. The command then failed with "No rendered assistant message found" while the message sat in a sibling file.
Every rollout for the thread is now considered, newest first, and annotate-last uses the first one that actually contains a rendered assistant message. The Stop hook's plan detection takes the newest existing rollout for the current session and deliberately does not fall back across segments, so an older segment can never resurrect a stale plan. Single-file threads behave exactly as before. The fix was verified against the Codex CLI with a synthetic multi-segment session home.
#1493 by @FNDEVVE, closing #1367 reported by @arklanq-patronus.
PLANNOTATOR_BROWSER works under WSL, and says so when it fails
Under WSL, PLANNOTATOR_BROWSER was always routed through cmd.exe /c start, so a Linux path or script could never launch. The failure was swallowed, and a headless session reported success while the reviewer never saw a window.
Both runtimes now classify the configured value first. Windows targets (chrome.exe, C:\..., /mnt/c/...) keep the cmd.exe route; POSIX paths and bare names that resolve on the Linux PATH are executed directly. When an explicitly configured browser fails to launch, one line on stderr names the executable and the error before the usual fallback prints the URL. The Pi runtime now reports opened: false on spawn errors instead of claiming success. macOS and non-WSL Linux behavior is unchanged.
#1494 by @FNDEVVE, closing #1472 reported by @Pallieter.
Code review: the annotation toolbar stays on screen when suggested code expands
Selecting lines near the bottom of a diff and expanding Add suggested code pushed the submit row past the bottom edge. The toolbar's vertical clamp reserved a fixed 200 pixels while its maximum height was the whole viewport, so internal scrolling never engaged and the toolbar simply grew off screen. Ask AI mode had the same problem.
The toolbar now measures its real height after every change and keeps the whole box inside the visible area: an anchored toolbar flips above its anchor when it would not fit below, a toolbar taller than the viewport pins to the top with a bounded height so it scrolls internally, and a dragged toolbar keeps its position but clamps into bounds.
#1491 by @FNDEVVE, closing #1424 reported by @tekumara.
Mod+E enters and leaves Edit Mode in place
Plan review and annotate had an Edit button but no keyboard route into markdown Edit Mode. Mod+E now toggles it: entering keeps your scroll position and drafts, and pressing it again commits your edits and returns you to the same place in the rendered document. The chord is ignored while you are typing in an input, a text area, or a comment composer, so it cannot steal a keystroke. It is listed in the in-app shortcut help and on the docs page.
#1492 by @FNDEVVE, closing #1479 requested by @ogizanagi.
JJ: line-of-work bases stay put
On Jujutsu repos, the automatic "line of work" base could move under a review. A moving remote bookmark or an ambiguous fork-point revset could pull unrelated changes into the diff, or label a current-change diff as line of work. The base is now resolved once to an immutable commit id, ambiguous or unavailable fork points are reported instead of guessed, and the fallback to the current change keeps your line-of-work preference for the next switch. Detected fork points are exposed for explicit selection, the base label shows a short commit id instead of a 40-character hash, and the Bun and Pi servers stay aligned.
#1497 by @graemefolk.
Additional Changes
- Skill autocomplete menu no longer clips: typing
/or$in the annotate comment composer opened the skill menu inside the composer card, whose scroll container clipped every row past the card edge. The composer now allows visible overflow only while the menu is open and restores its scrolling when it closes. #1488 by @leoreisdias - Data directory resolved per call: four modules captured
PLANNOTATOR_DATA_DIRat import time and froze every derived path, so a data directory set after import was ignored, and the Codex, Tour, and Guide review schemas could stay stale across versions. All of them now resolve on each call, and the schema files are rewritten once per process so a version upgrade never reads an older schema. #1490 by @FNDEVVE, closing #1477 filed by @bendrucker - Dependency refresh: 33 minor and patch updates across the workspace, including
@pierre/diffs1.3.6. Three packages are held back on purpose and now excluded from Dependabot. The Bun runtime stays pinned at 1.3.14. #1501 - Commit-rail switches keep the base picker: a regression introduced on main after v0.27.13 and caught by the pre-release QA gate before it shipped. #1508
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".
Pi: Update @plannotator/pi-extension to 0.27.14 and restart Pi.
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorWhat's Changed
- fix(pi): persist approved plan checklist progress by @a4180p in #1496
- fix(pi): render completed messages and errors by @a4180p in #1495
- fix(codex): fall back across rollout files for annotate-last and the Stop hook by @FNDEVVE in #1493
- fix(browser): honor POSIX PLANNOTATOR_BROWSER under WSL and warn on launch failure by @FNDEVVE in #1494
- fix(review): keep the annotation toolbar inside the viewport when suggested code expands by @FNDEVVE in #1491
- feat(editor): Mod+E shortcut to enter and leave Edit mode in place by @FNDEVVE in #1492
- fix(shared): resolve data-dir paths per call instead of capturing at import by @FNDEVVE in #1490
- fix(review): stabilize JJ line-of-work bases by @graemefolk in #1497
- fix(ui): prevent skill autocomplete menu clipping by @leoreisdias in #1488
- chore(deps): bun minor+patch group in #1501
- fix(review): stop echoing the launch-frozen git context on commit switches in #1508
New Contributors
Contributors
@FNDEVVE carried this release: five merged pull requests in a week, three of them closing issues other people filed, each with a stash-the-fix control proving the new tests fail on the old code. @a4180p arrived with two Pi fixes at once, and the checklist persistence one closes a bug that had cost people real plan progress. @graemefolk kept pushing on Jujutsu support and made the line-of-work base honest about what it can and cannot resolve. @leoreisdias fixed the skill menu clipping with a DOM regression test that names the clipping ancestor, so the failure cannot come back quietly.
The reports made the fixes possible:
- @huangxinsteam-oss reported the Pi progress reset (#1376), and @michaelmior confirmed it
- @arklanq-patronus reported the multi-file Codex thread failure (#1367)
- @Pallieter reported the silent
PLANNOTATOR_BROWSERfailure (#1472) - @tekumara reported the toolbar running off the bottom of the diff (#1424)
- @ogizanagi requested the Edit Mode shortcut (#1479)
- @bendrucker filed the import-time data directory capture (#1477) after root-causing the CI flake in the last release
Thank you. Plannotator gets better because you tell us where it falls short.
Full Changelog: v0.27.13...v0.27.14