Releases: backnotprop/plannotator
v0.21.2
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.21.1 | Annotate-last blank-page fix on multi-message sessions |
| v0.21.0 | Direct document editing in annotate mode, live git-status file tree, in-app agent terminal, open files in external apps, HTML renders as HTML |
| v0.20.3 | Annotations no longer lost when clicking away, off-screen indicator for open comments |
| v0.20.2 | Pierre CodeView all-files review, large-PR pipeline and instant-open checkout, unified agent engine selection, Pi programmatic plan mode |
| v0.20.1 | Pi extension install hotfix (pinned @pierre/diffs after a broken upstream release) |
| v0.20.0 | Multi-repo workspace reviews, semantic diff overview, UI 2.0 themes and plan look chooser, leaner single-source skill install |
| v0.19.27 | Kiro CLI integration, Glimpse native window, annotate-last message picker |
| v0.19.26 | Amp plugin production fixes, Mermaid rendering fix, Settings flicker fix, update notification toast and shimmer |
| v0.19.24 | Amp integration, configurable data directory, Auto Mode permission option, Pi plan approval fix |
| v0.19.23 | Droid integration, Windows Pi AI fix, quieter update indicator |
| v0.19.22 | Safari copy fix in plan viewer, CLAUDE_CONFIG_DIR support for session logs |
What's New in v0.21.2
Six PRs land in this release, with most of the work going into code review. You can now run your own Agent Skills as review profiles, and the review engine picker gains two new options — Cursor and OpenCode — alongside the existing Claude and Codex paths. A draft-persistence bug that resurrected deleted annotations is fixed, and Codex users get two improvements from a first-time contributor.
Custom Reviews as Agent Skills
Until now the code review engine ran a fixed review prompt. This release lets you point a review at any Agent Skill you already have installed. Enable a skill as a review profile and the agent runs that skill's instructions against your diff instead of the built-in prompt, so a security skill, a style-guide skill, or any review methodology you've written becomes a one-click review.
Findings also gained two new shapes. A review can now attach a finding to an entire file rather than a specific line, and it can raise a general finding that applies to the whole changeset instead of any single location. Whole-file and general findings render in their own sections and flow through to the exported feedback the agent receives, so nothing a reviewer raises gets dropped because it didn't map to a line.
PR #955, by @backnotprop.
Cursor and OpenCode Review Engines
The review engine selection now includes Cursor and OpenCode in addition to Claude and Codex. Both run through a unified "marker" protocol: the agent runs its own CLI (agent for Cursor, opencode run for OpenCode) against your changes and returns findings in a delimited block that Plannotator parses back into annotations. The engines are opt-in and only appear when their CLI is installed, and they share the same finding pipeline as the existing engines, so whole-file and general findings work across all four.
PR #959, by @backnotprop.
Deleted Review Annotations Stay Deleted
In code review, deleting an annotation and then refreshing the page brought it back. The draft autosave kept the last saved copy, and a deletion wasn't being persisted as a real edit, so the next load restored the annotation the user had removed. This release records deletions with a generation tombstone so they survive a refresh and a late autosave can't revive them, while leaving genuine drafts intact.
PR #951 closing #948, reported by @alexanderkreidich.
Codex Ask AI Outside Git Repos
Ask AI on the Codex provider assumed it was running inside a git repository and failed when it wasn't. It now probes for a working tree and skips the git-repo check when there isn't one, so Ask AI works in plain directories that aren't under version control.
PR #965, by @ericclemmons.
Codex Desktop Review URL Surfacing
When Plannotator runs inside the Codex desktop app, the session URL wasn't easy to find. It now prints the review URL to the terminal when it detects the Codex desktop host, so the link is visible instead of buried.
PR #966, by @ericclemmons.
Additional Changes
- Landing page section order — the capabilities section now sits above the demos on the marketing site. PR #953, by @backnotprop.
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexExtra skills (compound, setup-goal, visual-explainer), opt-in:
npx skills add backnotprop/plannotator/apps/skills/extraClaude 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-extensionDroid: Install via the plugin marketplace:
droid plugin marketplace add backnotprop/plannotator
droid plugin install plannotator@plannotator
Amp: Install the CLI first, then copy the plugin:
mkdir -p ~/.config/amp/plugins
curl -fsSL https://raw.githubusercontent.com/backnotprop/plannotator/main/apps/amp-plugin/plannotator.ts \
-o ~/.config/amp/plugins/plannotator.tsKiro CLI: The installer auto-detects Kiro and installs skills automatically. After installing the CLI, launch with:
kiro-cli chat --agent plannotatorUpgrading from before v0.20.0? Read the v0.20.0 release notes first; that release changed how skills install.
What's Changed
- fix(review): persist annotation deletions so they don't resurrect on refresh by @backnotprop in #951
- feat(marketing): restructure landing page section order by @backnotprop in #953
- feat(review): custom reviews as Agent Skills + whole-file/general findings by @backnotprop in #955
- feat(review): Cursor + OpenCode review engines (unified marker-review) by @backnotprop in #959
- Allow Codex Ask AI outside git repos by @ericclemmons in #965
- Improve Codex App review URL discoverability by @ericclemmons in #966
New Contributors
- @ericclemmons made their first contribution in #965
Contributors
@ericclemmons landed two Codex improvements in his first contributions to the project: making Ask AI work outside git repositories in #965, and surfacing the review URL when running inside the Codex desktop app in #966.
Thanks to @alexanderkreidich, who reported in #948 that deleted review annotations reappeared after a refresh — the bug this release fixes.
Full Changelog: v0.21.1...v0.21.2
v0.21.1
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.21.0 | Direct document editing in annotate mode, live git-status file tree, in-app agent terminal, open files in external apps, HTML renders as HTML |
| v0.20.3 | Annotations no longer lost when clicking away, off-screen indicator for open comments |
| v0.20.2 | Pierre CodeView all-files review, large-PR pipeline and instant-open checkout, unified agent engine selection, Pi programmatic plan mode |
| v0.20.1 | Pi extension install hotfix (pinned @pierre/diffs after a broken upstream release) |
| v0.20.0 | Multi-repo workspace reviews, semantic diff overview, UI 2.0 themes and plan look chooser, leaner single-source skill install |
| v0.19.27 | Kiro CLI integration, Glimpse native window, annotate-last message picker |
| v0.19.26 | Amp plugin production fixes, Mermaid rendering fix, Settings flicker fix, update notification toast and shimmer |
| v0.19.24 | Amp integration, configurable data directory, Auto Mode permission option, Pi plan approval fix |
| v0.19.23 | Droid integration, Windows Pi AI fix, quieter update indicator |
| v0.19.22 | Safari copy fix in plan viewer, CLAUDE_CONFIG_DIR support for session logs |
| v0.19.21 | Ask AI in plan review and annotate mode, shared AI runtime, origin-aware provider defaults |
What's New in v0.21.1
A single-fix patch release. Annotating the last assistant message could open a blank page in any conversation with more than one response. This release fixes that.
Annotate-Last No Longer Blanks on Multi-Message Sessions
Running /plannotator-last (or plannotator last) opened a blank page whenever the session had two or more recent assistant messages. With zero or one message it worked, so it looked intermittent, but it was deterministic: the failure tracked message count. It was most visible on the Pi extension, where multi-turn sessions are the norm.
The cause was a React rendering bug. When the annotate UI assembled the feedback payload during render, it reached a helper that wrote component state as a side effect. Because that state was a freshly built map on each pass, React never settled, hit its re-render limit, and threw before drawing anything, leaving an empty page. The fix makes that render-path helper a pure read of the same data, so the work that belongs at submit time no longer fires during render. The exported feedback is unchanged; the page renders.
PR #950 closing #949, reported, diagnosed, and fixed by @emmaneugene.
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexExtra skills (compound, setup-goal, visual-explainer), opt-in:
npx skills add backnotprop/plannotator/apps/skills/extraClaude 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-extensionDroid: Install via the plugin marketplace:
droid plugin marketplace add backnotprop/plannotator
droid plugin install plannotator@plannotator
Amp: Install the CLI first, then copy the plugin:
mkdir -p ~/.config/amp/plugins
curl -fsSL https://raw.githubusercontent.com/backnotprop/plannotator/main/apps/amp-plugin/plannotator.ts \
-o ~/.config/amp/plugins/plannotator.tsKiro CLI: The installer auto-detects Kiro and installs skills automatically. After installing the CLI, launch with:
kiro-cli chat --agent plannotatorUpgrading from before v0.20.0? Read the v0.20.0 release notes first; that release changed how skills install.
What's Changed
- fix(editor): stop setState-during-render loop in multi-message annotate by @backnotprop in #950
Community
Thanks to @emmaneugene, who reported the blank-page regression in #949, traced it to the exact render-path state write, and supplied the fix that this release ships.
Full Changelog: v0.21.0...v0.21.1
v0.21.0
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.20.3 | Annotations no longer lost when clicking away, off-screen indicator for open comments |
| v0.20.2 | Pierre CodeView all-files review, large-PR pipeline and instant-open checkout, unified agent engine selection, Pi programmatic plan mode |
| v0.20.1 | Pi extension install hotfix (pinned @pierre/diffs after a broken upstream release) |
| v0.20.0 | Multi-repo workspace reviews, semantic diff overview, UI 2.0 themes and plan look chooser, leaner single-source skill install |
| v0.19.27 | Kiro CLI integration, Glimpse native window, annotate-last message picker |
| v0.19.26 | Amp plugin production fixes, Mermaid rendering fix, Settings flicker fix, update notification toast and shimmer |
| v0.19.24 | Amp integration, configurable data directory, Auto Mode permission option, Pi plan approval fix |
| v0.19.23 | Droid integration, Windows Pi AI fix, quieter update indicator |
| v0.19.22 | Safari copy fix in plan viewer, CLAUDE_CONFIG_DIR support for session logs |
| v0.19.21 | Ask AI in plan review and annotate mode, shared AI runtime, origin-aware provider defaults |
| v0.19.20 | Interactive goal setup UI, OpenCode submit_plan fixes, browser no-op sentinel handling for Claude agents |
What's New in v0.21.0
This is a large release for the annotate experience. Seventeen pull requests landed since v0.20.3, five of them from external contributors, including first contributions from four new community members. The headline is a set of features that turn annotate mode into a place where you can read, edit, run an agent, and jump into your own tools without leaving the document. Alongside that, several reliability fixes harden the paths that remote and CI users depend on.
Edit Documents Directly in Annotate Mode
Until now, annotation was a one-way conversation: you highlighted text, wrote a comment, and the agent received your notes. If you wanted to change a sentence yourself, you described the change instead of making it.
This release adds a real markdown editor to annotate and plan mode. You can switch a document into edit mode, change the text directly, and the difference between the original and your edits is captured as a clean diff that travels to the agent alongside your annotations. The edit controls were reworked so the state is always legible: a clear Edits label, Save emphasis when there are unsaved changes, and a Save/Cancel pair where Cancel discards your changes after a confirmation rather than silently keeping them.
Saved source-file edits now survive a refresh. When you edit a file in annotate-folder mode and save it, the right-side Edits card is persisted in the annotation draft and restored after a reload. Restored edits are validated against the file's current contents on disk, so stale context is dropped rather than resurfaced, and the edit context is never sent to the agent if it no longer matches the file.
PR #890, #928, #936 by @backnotprop.
A Live File Tree for Annotated Folders
When you annotate a folder, the file tree on the left is now live. It uses a server-side file watcher rather than polling, so the tree updates as files change on disk. Git status drives per-file badges and folder totals, showing which files are modified, added, or deleted, with line counts for changes. Direct source-file edits made inside Plannotator show their save state in the tree as well: clean, dirty, saving, saved, or conflict.
Two follow-up rounds hardened this. Nested ignored folders like node_modules and dist are now pruned by path segment so the watcher never walks into them, watcher teardown is identity-safe so reconnects can't orphan old watchers, and git status reads run asynchronously with timeouts and request coalescing so a slow repository can't block the server. A startup-latency fix ensures the tree's first snapshot renders before the live watcher subscribes, so the tree no longer sits on a loading state while the watcher sets up.
PR #931, #933, #935 by @backnotprop.
An Agent Terminal Inside Annotate Mode
Annotate mode now includes an optional agent terminal panel. You can run a coding agent in a real terminal next to the document you're annotating, so the back-and-forth happens in one place instead of a separate window.
The terminal is backed by a PTY hosted in a small Node sidecar, since the compiled Plannotator runtime can't load native terminal bindings directly. On a normal install the runtime is provisioned automatically, and where it isn't available the panel disables itself cleanly rather than failing the session. Requires Node.js 20 or newer on your PATH.
PR #941 by @backnotprop.
Open Files in Your Editor, Terminal, or File Manager
A new "open in" control lets you launch the file you're looking at directly in an external application: VS Code, Cursor, Zed, Ghostty, iTerm2, Warp, Sublime Text, Xcode, Android Studio, or reveal it in Finder or Explorer. Only applications you actually have installed appear in the menu, the last one you used becomes the default, and copy-path and copy-diff actions are always available. The control hides itself in remote sessions where opening a local app wouldn't make sense.
This release also includes a pass on the code-review UI. The semantic diff moved from a separate docked panel into an inline accordion in the all-files view, file headers and the file tree were reworked, and the diff-freshness check was tidied.
PR #942 by @backnotprop.
HTML Files Render as HTML
Annotating an .html file now renders the page as HTML by default instead of converting it to markdown. For most HTML — rendered reports, exported documents, generated pages — this is what you actually want to look at. If you need the old behavior, pass --markdown to convert the page to text with Turndown. The serving path for raw HTML and its assets was also hardened against symlink escapes.
This is a behavior change for anyone who ran plannotator annotate file.html expecting a markdown view. The conversion is one flag away.
PR #924, #927 by @backnotprop.
Additional Changes
- Remote sessions always show a reachable URL. The session URL is now printed to the terminal for remote sessions regardless of whether URL sharing is enabled, and local sessions print the URL as a fallback when the browser can't be opened (a headless box or devcontainer). This closes a long-standing gap where remote and headless users could be left with no link and a hung review. PR #929, #945 by @backnotprop.
- Ask AI works on Bedrock and Vertex. Bare model aliases were being rejected with a 400 on Amazon Bedrock and Google Vertex; model ids are now resolved to the correct provider-specific identifiers, with a safe fallback when none is configured. PR #939 closing #938 by @masterpavan.
- Release binaries ignore caller
bunfig.toml. Compiled binaries no longer autoload abunfig.tomlfrom the directory they're run in, so a stray or hostile config in a project folder can't alter or crash the binary. PR #937 by @jrpat. - Light-mode contrast fix in code hover previews. Code hover previews used a dark-mode color in light mode, making text hard to read. PR #934 by @hl662.
- Turn URL sharing off via config. URL sharing can now be disabled through
~/.plannotator/config.json({ "share": "disabled" }) in addition to the environment variable. PR [#921](#92...
v0.20.3
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.20.2 | Pierre CodeView all-files review, large-PR pipeline and instant-open checkout, unified agent engine selection, Pi programmatic plan mode |
| v0.20.1 | Pi extension install hotfix (pinned @pierre/diffs after a broken upstream release) |
| v0.20.0 | Multi-repo workspace reviews, semantic diff overview, UI 2.0 themes and plan look chooser, leaner single-source skill install |
| v0.19.27 | Kiro CLI integration, Glimpse native window, annotate-last message picker |
| v0.19.26 | Amp plugin production fixes, Mermaid rendering fix, Settings flicker fix, update notification toast and shimmer |
| v0.19.24 | Amp integration, configurable data directory, Auto Mode permission option, Pi plan approval fix |
| v0.19.23 | Droid integration, Windows Pi AI fix, quieter update indicator |
| v0.19.22 | Safari copy fix in plan viewer, CLAUDE_CONFIG_DIR support for session logs |
| v0.19.21 | Ask AI in plan review and annotate mode, shared AI runtime, origin-aware provider defaults |
| v0.19.20 | Interactive goal setup UI, OpenCode submit_plan fixes, browser no-op sentinel handling for Claude agents |
| v0.19.18 | Edit-based submit_plan for OpenCode, Pi namespace migration, Codex annotate-last fix, OpenCode commands dir fix |
What's New in v0.20.3
v0.20.3 is a small patch of two PRs, both focused on the comment popover used in plan review and annotate mode. The first stops in-progress annotation text from being thrown away, and stops the annotation panel from forcing itself open. The second adds a way to find a comment box again after it scrolls out of view. Both came out of community feature requests.
Annotations No Longer Lost When You Click Away
The comment popover used to close on any click outside it, which discarded whatever you had typed but not yet saved. A misplaced click meant retyping the annotation. Now a popover that holds text or an attached image stays open when you click elsewhere, so your in-progress work survives a stray click. Empty popovers still close on an outside click, and Escape and the X button still cancel explicitly, so nothing changes about how you dismiss a box you actually want to discard.
The same release stops annotations from forcing the right annotation panel open. If you had closed the panel, adding a plan annotation or a code-file popout annotation used to reopen it and pull focus away from what you were reading. The panel now stays in whatever state you left it, and you can open it from the header toggle when you want it. The annotation itself is still selected and still shows its highlight, so it is never lost or hidden.
- #919 closing #821 and #888, contributed by @backnotprop
Off-Screen Indicator for an Open Comment
Because an open comment box now persists when you click or scroll away, it became possible to leave one open above or below the visible area and lose track of it. When that happens, a small pill appears pinned to the top or bottom of the viewport with a chevron pointing toward the box and an "Open comment" label. Clicking it scrolls back to the comment. The indicator only appears for a box that has actually left the viewport and disappears as soon as it returns, so it stays out of the way the rest of the time.
- #920, contributed by @backnotprop
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexExtra skills (compound, setup-goal, visual-explainer), opt-in:
npx skills add backnotprop/plannotator/apps/skills/extraClaude 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-extensionDroid: Install via the plugin marketplace:
droid plugin marketplace add backnotprop/plannotator
droid plugin install plannotator@plannotator
Amp: Install the CLI first, then copy the plugin:
mkdir -p ~/.config/amp/plugins
curl -fsSL https://raw.githubusercontent.com/backnotprop/plannotator/main/apps/amp-plugin/plannotator.ts \
-o ~/.config/amp/plugins/plannotator.tsKiro CLI: The installer auto-detects Kiro and installs skills automatically. After installing the CLI, launch with:
kiro-cli chat --agent plannotatorUpgrading from before v0.20.0? Read the v0.20.0 release notes first; that release changed how skills install.
What's Changed
- Keep annotation panel closed when adding annotations by @backnotprop in #919
- feat(annotate): off-screen indicator for open comment popover by @backnotprop in #920
Community
Both changes in this release answer feature requests from the community. @8bitjoey asked for the annotation input to keep its text instead of closing on an outside click (#821), and @jj-valentine asked for annotations to be saved rather than lost (#888). @SyahrulBhudiF and @gwynnnplaine joined the discussion on #821 that shaped the behavior.
Full Changelog: v0.20.2...v0.20.3
v0.20.2
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.20.1 | Pi extension install hotfix (pinned @pierre/diffs after a broken upstream release) |
| v0.20.0 | Multi-repo workspace reviews, semantic diff overview, UI 2.0 themes and plan look chooser, leaner single-source skill install |
| v0.19.27 | Kiro CLI integration, Glimpse native window, annotate-last message picker |
| v0.19.26 | Amp plugin production fixes, Mermaid rendering fix, Settings flicker fix, update notification toast and shimmer |
| v0.19.24 | Amp integration, configurable data directory, Auto Mode permission option, Pi plan approval fix |
| v0.19.23 | Droid integration, Windows Pi AI fix, quieter update indicator |
| v0.19.22 | Safari copy fix in plan viewer, CLAUDE_CONFIG_DIR support for session logs |
| v0.19.21 | Ask AI in plan review and annotate mode, shared AI runtime, origin-aware provider defaults |
| v0.19.20 | Interactive goal setup UI, OpenCode submit_plan fixes, browser no-op sentinel handling for Claude agents |
| v0.19.18 | Edit-based submit_plan for OpenCode, Pi namespace migration, Codex annotate-last fix, OpenCode commands dir fix |
| v0.19.17 | Reworked goal setup skill (interview-driven flow), CLI --version flag |
What's New in v0.20.2
v0.20.2 is a code-review-heavy release of nine PRs, two of them from first-time contributors. The largest work rebuilds the all-files review view on Pierre's CodeView and adds a pipeline that keeps very large pull requests fast and complete instead of failing or rendering empty. Agent engine selection is unified across review and tour modes, the Pi extension gains a programmatic plan-mode control event, and several reliability fixes land across review cleanup, annotate error messaging, and markdown rendering.
All-Files Code Review on Pierre CodeView
The all-files code review surface was rebuilt on Pierre's CodeView renderer, replacing the previous custom diff view and its lazy-mounting layer. The new foundation virtualizes large diffs, renders change-type status in file headers and the file tree, and presents renames as old/path → new/path rather than as a blank change. The annotation model, drafts, feedback export, and keyboard shortcuts carry over unchanged, so the way you review and send feedback is the same.
- #885, contributed by @backnotprop
Large Pull Request Pipeline, Instant-Open Checkout, and Scroll Performance
Reviewing very large pull requests previously hit several walls: GitHub refused oversized diffs outright, the local checkout blocked the review from opening, and some files came back from the platform with no patch content and rendered as empty stubs. This release addresses all three.
When a platform refuses an oversized diff, Plannotator now pages through the per-file API and stitches the result into a unified diff, so the review still loads. When the platform withholds per-file content on a truncated diff, an amber "Partial diff · Load full diff" notice offers to recompute the exact diff locally, and a staleness check surfaces a refresh prompt when the underlying files change mid-review. The --local checkout no longer blocks startup: the review server opens as soon as the platform diff arrives and the checkout warms in the background, with agent jobs, full-stack diff, and code navigation waiting on it only when they need real files.
Scrolling the all-files view was also reworked. Syntax highlighting moved off the main thread into a worker pool, lazy full-content augmentation no longer hitches mid-scroll, and visibility tracking was coalesced to once per frame. The result is smoother scrolling on large diffs, with a clean fallback to unhighlighted text if the worker pool is unavailable.
- #893, contributed by @backnotprop
Unified Agent Mode Engine Selection
The agent panel's engine selection was reworked so review and tour modes share one consistent model. Previously the selection conflated provider and mode in a single setting; it now separates the active mode from the engine choice (Claude or Codex) for each, with existing settings migrated forward. The change makes it clearer which engine runs for review versus tour and removes a class of confusing defaults.
- #868, contributed by @codythatsme
Programmatic Plan Mode for Pi
The Pi extension gained a plan-mode event so other extensions and automation can drive Plannotator's plan mode programmatically. A request can enter, exit, toggle, or query plan mode, and receives the resulting phase (idle, planning, or executing) in return. This opens the plan workflow to scripted and multi-extension setups on Pi without requiring a manual command or shortcut.
Review Cleanup and PR Feedback Fixes
Two reliability fixes for the review path. First, the standalone server now routes SIGINT and SIGTERM through its normal shutdown so the existing cleanup runs on interrupt or termination. Aborting a review while a large pull request was still checking out in the background previously left clone and fetch processes running and stale git worktree registrations behind; those are now cleaned up, with a second interrupt still forcing an immediate quit.
Second, the review feedback sent to the agent on "Send Feedback" now includes the triage instruction (review the feedback, verify it against the code, and discuss before changing anything) for pull request reviews, not just local diffs. The instruction is appended whenever you send annotations and is correctly omitted for platform actions that post an approval or comment directly to the host. The behavior is consistent across Claude Code, OpenCode, and Pi.
- #914, contributed by @backnotprop
Clearer Annotate and Markdown Behavior
Running plannotator annotate on a file type it does not support (for example a .cs or .pdf file) reported a misleading "File not found" even when the file was present. It now reports that the type is unsupported, lists the supported extensions, and points to plannotator review for code. Separately, custom angle-bracket autolinks are kept literal instead of having their contents parsed for markdown styling, so links that contain markdown-like characters render correctly.
Additional Changes
- README redesign. The project README was rebuilt around a feature table with a centered note on AI assistance and refreshed styling. #891 and #892
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexExtra skills (compound, setup-goal, visual-explainer), opt-in:
npx skills add backnotprop/plannotator/apps/skills/extraClaude 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-extensionDroid: Install via the plugin marketplace:
droid plugin marketplace add backnotprop/plannotator
droid plugin install plannotator@plannotator
Amp: Install the CLI first, then copy the plugin:
mkdir -p ~/.config/amp/plugins
curl -fsSL https://raw.githubusercontent.com/backnotprop/plannotator/main/apps/amp-plugin/plannotator.ts \
-o ~/.config/amp/plugins/plannotator.tsKiro CLI: The installer auto-detects Kiro and installs skills automatically. After installing the CLI, ...
v0.20.1
Follow @plannotator on X for updates
What's New in v0.20.1
A hotfix for Pi extension installs. If pi install npm:@plannotator/pi-extension failed for you today, this release fixes it.
Pi Extension Install Failure
Fresh installs of @plannotator/pi-extension started failing with an npm 404. The cause was upstream: our diff renderer dependency @pierre/diffs published a new 1.2.x line that depends on @pierre/theming@0.0.1, a package that does not exist on the npm registry. Plannotator declared the dependency with a loose ^1.1.12 range, so fresh installs floated onto the broken 1.2.9 and failed before Pi could finish loading extensions. Repo builds never saw it because the lockfile pinned an older version.
The fix pins @pierre/diffs to exact 1.1.20 everywhere, whose dependency tree fully resolves. Update with:
pi install npm:@plannotator/pi-extension- closing #880
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexPi: Install or update the extension:
pi install npm:@plannotator/pi-extensionUpgrading from before v0.20.0? Read the v0.20.0 release notes first; that release changed how skills install.
What's Changed
- fix(deps): pin @pierre/diffs to exact 1.1.20 by @backnotprop
Community
@ramarivera reported the install failure with a complete diagnosis of the broken dependency chain, down to the exact unpublished package. @MaksimZinovev and @archidemus confirmed the failure.
Full Changelog: v0.20.0...v0.20.1
v0.20.0
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.19.27 | Kiro CLI integration, Glimpse native window, annotate-last message picker |
| v0.19.26 | Amp plugin production fixes, Mermaid rendering fix, Settings flicker fix, update notification toast and shimmer |
| v0.19.24 | Amp integration, configurable data directory, Auto Mode permission option, Pi plan approval fix |
| v0.19.23 | Droid integration, Windows Pi AI fix, quieter update indicator |
| v0.19.22 | Safari copy fix in plan viewer, CLAUDE_CONFIG_DIR support for session logs |
| v0.19.21 | Ask AI in plan review and annotate mode, shared AI runtime, origin-aware provider defaults |
| v0.19.20 | Interactive goal setup UI, OpenCode submit_plan fixes, browser no-op sentinel handling for Claude agents |
| v0.19.18 | Edit-based submit_plan for OpenCode, Pi namespace migration, Codex annotate-last fix, OpenCode commands dir fix |
| v0.19.17 | Reworked goal setup skill (interview-driven flow), CLI --version flag |
| v0.19.16 | Code navigation with peek view (Cmd/Ctrl+click tokens in diffs) |
| v0.19.15 | Commit-based diff base, jj evolution diffs, GitLab reliability fixes, OpenCode command intercept fix |
What's New in v0.20.0
v0.20.0 is the largest release in a while: 11 PRs, three of them from first-time contributors. Code review gains multi-repo workspace support and a semantic diff overview. The interface gets a full visual refresh with two new themes, a grid-versus-flat plan look, and a full-page HTML annotation mode. Under the hood, the way skills and commands install has been rationalized so each artifact has a single source of truth and a default install ships lean. Several reliability fixes round it out across OpenCode, Pi, Windows, and GitLab.
Important
v0.20.0 is a large release, and two of its changes affect existing installs. Please read these before you upgrade.
1. Extra skills are no longer installed by default. The plannotator-compound, plannotator-setup-goal, and plannotator-visual-explainer skills used to ship with every install. They now install separately, so a default install stays lean. To add them:
npx skills add backnotprop/plannotator/apps/skills/extraWhen you upgrade, the installer performs a one-time cleanup that removes the old default-installed copies of these three skills from ~/.claude/skills and ~/.agents/skills. If you want them, reinstall with the command above. Copies you install yourself with npx skills add are never touched again. (Kiro CLI is the exception and keeps receiving setup-goal and visual-explainer.)
2. On Claude Code, the slash commands are now skills. Claude Code merged custom commands into skills, so Plannotator follows suit. /plannotator-review, /plannotator-annotate, and /plannotator-last are now installed as Claude Code skills under ~/.claude/skills (same names, same behavior). The old ~/.claude/commands/plannotator-*.md files are removed automatically on upgrade. The standalone /plannotator-status and /plannotator-archive commands are gone: plan archive browsing now lives in a sidebar tab during plan review. If you use the marketplace plugin, run /plugin marketplace update once so the old namespaced plannotator:* entries disappear from the / menu.
If git is missing or a fetch is blocked, the installer now stops with a clear message instead of silently leaving you half-installed. git is required.
Multi-Repo Workspace Reviews
Code review previously required a git repository as the working directory. Teams working across several services in a parent folder had no way to review them together: each repo needed its own session, and feedback was fragmented.
You can now run plannotator review from a non-git parent directory that contains multiple repositories. Plannotator discovers the nested repos that have local changes, pre-selects them, and presents a single review session covering all of them. Diff switching, file-content lookups, staging, and agent operations are all repo-aware, and the review feedback covers every repo in one pass. The single-repo workflow is unchanged: the workspace flow only engages when the directory you start from is not itself a repository.
- #543 closing #527, contributed by @Oscar-Silva
Semantic Diff Overview
Code review now opens to a semantic diff overview that groups changes by what was modified rather than only by which lines moved. It runs the sem analyzer over the active patch and shows the result as the default landing panel, with a sidebar entry above All Files, rows for binary changes, inline error reporting, and retry.
The analyzer ships as an optional sidecar that the installers fetch without blocking the rest of the install, and the overview is available in both the Bun-based servers (Claude Code, OpenCode) and the Pi extension's Node server. When the sidecar is unavailable, review falls back cleanly to the standard diff view.
- #871, contributed by @backnotprop
UI 2.0: New Themes, Plan Look Chooser, and Full-Page HTML Annotation
The interface received a broad visual refresh. Two new themes, Simple and Neutral, join the existing set, built on a refreshed design-system token bridge. The overlay scrollbar library was removed in favor of native scrolling, which is lighter and more accessible.
Plan rendering now offers two looks. Grid keeps your plan as a floating card on grid paper; Clean is a simpler, edge-to-edge flat card. A first-run dialog announces the release and lets you pick. The release announcement also surfaces what is new in the release and links to the full notes.
Annotation gains a full-page HTML mode. Running plannotator annotate --render-html opens an HTML report or explainer rendered edge-to-edge in a sandboxed frame, themed to match Plannotator, and lets you annotate it directly with text selection or by clicking an element, instead of flattening it to markdown first. This pairs naturally with the visual-explainer skill's HTML output.
- #863 and #879, contributed by @backnotprop
Leaner Install and Single-Source Skills
The way Plannotator ships skills and commands was restructured so each artifact has exactly one authoritative source. Core skills (review, annotate, last) install from a single location to both ~/.claude/skills and Codex's ~/.agents/skills. The extra skills move to opt-in installation via npx skills add (see the note at the top of these release notes). Every installer's hard-coded command and skill text was removed in favor of copying the real files from the repository, which eliminates a class of cross-platform escaping bugs.
The installers also became stricter and safer to re-run. git is now a hard requirement, and a missing git or a failed fetch stops the install with an actionable message rather than silently skipping steps. Cleanup of legacy command files and stale Codex skills only happens after the replacement skill is on disk, so no upgrade path can leave you with neither. A one-time migration ledger tracks the extras cleanup so re-running the installer never re-removes skills you reinstalled yourself.
First-run interactive installs ask whether to add the extra skills and whether to make any skills model-invocable, and the answers are saved and reused on later runs. Automated and piped installs never prompt and keep the safe defaults.
v0.19.27
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.19.26 | Amp plugin production fixes, Mermaid rendering fix, Settings flicker fix, update notification toast and shimmer |
| v0.19.24 | Amp integration, configurable data directory, Auto Mode permission option, Pi plan approval fix |
| v0.19.23 | Droid integration, Windows Pi AI fix, quieter update indicator |
| v0.19.22 | Safari copy fix in plan viewer, CLAUDE_CONFIG_DIR support for session logs |
| v0.19.21 | Ask AI in plan review and annotate mode, shared AI runtime, origin-aware provider defaults |
| v0.19.20 | Interactive goal setup UI, OpenCode submit_plan fixes, browser no-op sentinel handling for Claude agents |
| v0.19.18 | Edit-based submit_plan for OpenCode, Pi namespace migration, Codex annotate-last fix, OpenCode commands dir fix |
| v0.19.17 | Reworked goal setup skill (interview-driven flow), CLI --version flag |
| v0.19.16 | Code navigation with peek view (Cmd/Ctrl+click tokens in diffs) |
| v0.19.15 | Commit-based diff base, jj evolution diffs, GitLab reliability fixes, OpenCode command intercept fix |
| v0.19.14 | Visual explainer skill update, PFM code-file hover previews, Graphviz, diff tab size and line bg intensity, hooks settings tab |
What's New in v0.19.27
v0.19.27 adds Kiro CLI as a supported agent, introduces Glimpse native window support, and ships a message picker for annotate-last. Nine PRs total, six from external contributors, three first-timers.
Kiro CLI Integration
Plannotator now supports the Kiro CLI agent harness. The integration uses Kiro's native skill and custom agent model rather than a plugin or hook. The installer auto-detects Kiro when ~/.kiro exists or kiro-cli is on PATH, then installs five skills and a custom agent configuration file. Three skills are Kiro-specific with the kiro-cli origin baked in (review, annotate, archive), and two are shared with other agents (setup-goal, visual-explainer).
The custom agent file at ~/.kiro/agents/plannotator.json wires all five skills together with a shell tool scoped to plannotator .*. The installer never overwrites an existing agent file, so users who customize it won't lose their changes on upgrade. All three platform installers (bash, PowerShell, CMD) received the same update.
- #837 closing #794, contributed by @ashwinjohn3
Annotate-Last Message Picker
Running plannotator last after /rewind used to silently annotate the orphaned pre-rewind message. The annotation UI now surfaces recent assistant messages so you can pick which one to annotate.
Two new affordances appear when there are multiple messages to choose from. A "Message N of M" button in the sticky toolbar lets you switch between messages while staying in the same session. A Messages tab in the sidebar shows the full list with annotation counts per message. Your annotations are preserved when you switch. On submit, only messages you actually annotated are included in the feedback.
When there is only one message, the behavior is unchanged from previous versions.
Glimpse Native Window
Plannotator can now open in a Glimpse native window instead of a browser tab. Glimpse provides a lightweight, borderless WebView window that feels more integrated than a random browser tab opening in the background.
The feature is auto-detected: if glimpseui is on PATH and no explicit browser is configured via PLANNOTATOR_BROWSER, the server spawns Glimpse automatically. If Glimpse isn't installed, everything works exactly as before. Remote sessions never attempt Glimpse. The window size defaults to 1280x900 and can be adjusted via PLANNOTATOR_GLIMPSE_WIDTH and PLANNOTATOR_GLIMPSE_HEIGHT. To disable Glimpse entirely even when installed, set PLANNOTATOR_GLIMPSE=0 or add { "glimpse": false } to ~/.plannotator/config.json.
- #840, contributed by @bjesuiter
Pi Approval Continuation Fix
The previous fix for Pi plan approval (#805 in v0.19.24) sent the continuation message as a deliverAs: "followUp", which caused a visible "Follow-up: Continue with the approved plan." row to appear in Pi's TUI. This release replaces that with an idle-wait approach: after approval, the extension polls until Pi reports idle, then sends a normal user message. The visible queue artifact is gone.
Additional Changes
- List marker alignment in diff view: List bullets and numbers in the plan-diff clean view now align to the first line of multi-line items instead of centering vertically against the full wrapped height. — #838, contributed by @rcdailey
- Goal setup "grill first" interview: The setup-goal skill now supports an opt-in deep-dive interview step in Phase 1 that walks the decision tree one question at a time before building the bundle. — #839, contributed by @dgrissen2
- Glimpse disable config: A
PLANNOTATOR_GLIMPSEenvironment variable andglimpseconfig option let users disable Glimpse even when it's installed. - Multi-message annotation performance: The multi-message annotation export now computes lazily at submit time instead of re-parsing all messages on every annotation change.
- Kiro on homepage: Kiro CLI is now listed in the agent selector on plannotator.ai.
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-extensionDroid: Install via the plugin marketplace:
droid plugin marketplace add backnotprop/plannotator
droid plugin install plannotator@plannotator
Amp: Install the CLI first, then copy the plugin:
mkdir -p ~/.config/amp/plugins
curl -fsSL https://raw.githubusercontent.com/backnotprop/plannotator/main/apps/amp-plugin/plannotator.ts \
-o ~/.config/amp/plugins/plannotator.tsKiro CLI: The installer auto-detects Kiro and installs skills automatically. After installing the CLI, launch with:
kiro-cli chat --agent plannotatorWhat's Changed
- feat: Kiro CLI integration (skills + custom agent, cross-platform installers) by @ashwinjohn3 in #837
- fix(ui): align list markers to first line in clean diff view by @rcdailey in #838
- feat(setup-goal): opt-in "grill first" interview step in Phase 1 by @dgrissen2 in #839
- feat: open Plannotator in Glimpse when available by @bjesuiter in #840
- fix(pi-extension): avoid visible approval follow-up queue by @xz-dev in #843
- feat: annotate-last message picker (fixes #800) by @GLips in #809
- perf: defer multi-message annotation export to submit time by @backnotprop
- feat(marketing): add Kiro CLI to homepage agent selector by @backnotprop
- feat: add PLANNOTATOR_GLIMPSE env var to disable Glimpse native window by @backnotprop
New Contributors
- @ashwinjohn3 made their first contribution in #837
- @GLips mad...
v0.19.26
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.19.25 | Amp plugin production fixes, Mermaid rendering fix, Settings AI-tip flicker fix |
| v0.19.24 | Amp integration, configurable data directory, Auto Mode permission option, Pi plan approval fix |
| v0.19.23 | Droid integration, Windows Pi AI fix, quieter update indicator |
| v0.19.22 | Safari copy fix in plan viewer, CLAUDE_CONFIG_DIR support for session logs |
| v0.19.21 | Ask AI in plan review and annotate mode, shared AI runtime, origin-aware provider defaults |
| v0.19.20 | Interactive goal setup UI, OpenCode submit_plan fixes, browser no-op sentinel handling for Claude agents |
| v0.19.18 | Edit-based submit_plan for OpenCode, Pi namespace migration, Codex annotate-last fix, OpenCode commands dir fix |
| v0.19.17 | Reworked goal setup skill (interview-driven flow), CLI --version flag |
| v0.19.16 | Code navigation with peek view (Cmd/Ctrl+click tokens in diffs) |
| v0.19.15 | Commit-based diff base, jj evolution diffs, GitLab reliability fixes, OpenCode command intercept fix |
| v0.19.14 | Visual explainer skill update, PFM code-file hover previews, Graphviz, diff tab size and line bg intensity, hooks settings tab |
What's New in v0.19.26
v0.19.26 is a patch release with six changes. Five are bug fixes carried forward from v0.19.25 (Amp plugin production fixes, Mermaid rendering, Settings flicker), and one improves the update notification UX. Two external contributors, one first-timer.
Update Notification Improvements
The previous update indicator was a small red dot on the Options button that was easy to miss. This release adds three layers of visibility. A toast notification appears briefly after the page loads, directing users to the Options menu. The "Options" label in the toolbar now shimmers when an update is available, using the same animated gradient effect shown inside the dropdown. The "Copy update command" button inside the menu is now a filled primary-color button instead of an understated text link.
The toast auto-dismisses after four seconds and only fires once per session. Opening the Options menu still clears the dot and shimmer as before. Both the plan review and code review apps received the same treatment.
Amp Plugin Production Fixes
The Amp integration shipped in v0.19.24 worked in development but failed in production when installed globally. Three issues surfaced once users installed the plugin to ~/.config/amp/plugins/:
The plugin resolved the plannotator binary via PATH lookup, which in Amp's Bun-shaped runtime could resolve to the wrong executable. It now checks the standard installer paths (~/.local/bin/plannotator on Linux/macOS, %LOCALAPPDATA%\plannotator on Windows) before falling back to PATH. A PLANNOTATOR_BIN environment variable is also available for custom installs.
Amp's ctx.$ helper reported the plugin directory rather than the active workspace, so Plannotator commands ran from the wrong working directory. The plugin now reads Amp's CLI log to resolve the real workspace root.
Amp sets BUN_BE_BUN=1 in the plugin environment. The standalone Plannotator binary inherited this variable and behaved like bun instead of executing its own commands, failing with Script not found "annotate". The plugin now strips this variable before spawning the binary.
Mermaid Diagram Rendering Fix
Mermaid diagrams had several visual regressions: blocks rendered at incorrect sizes, zoom level reset on every parent re-render, and the pinpoint drag handle attached to the wrong target. The root cause was that the parent Viewer component re-injected the rendered SVG via dangerouslySetInnerHTML four to five times during mount and again on every re-render, wiping any imperative DOM changes the Mermaid component had applied after render (sizing attributes, viewBox adjustments, zoom state).
The fix has two parts. First, the component is wrapped in React.memo with a custom comparator that only re-renders when the diagram content changes, blocking parent-triggered re-renders entirely. Second, the sizing attributes (max-width, preserveAspectRatio, height) are now baked directly into the SVG markup string before it enters React state, so even when a legitimate re-render does inject the HTML, the attributes survive. The SVG normalization logic was extracted into a separate dependency-free module (mermaidSvg.ts) to keep it unit-testable without pulling in the browser-only mermaid library.
- #819, contributed by @HyunmoAhn
Settings AI-Tip Input Flicker Fix
The lightbulb button in Settings that opens the AI instruction tip editor caused intense flickering on open. The slide-in animation used a max-height: 0 → 60px keyframe, which is a layout property. Inside the scroll viewport, this triggered a layout feedback loop: the browser recalculated layout, which restarted the animation, which triggered another layout, roughly 40 times per second. The fix switches the keyframe to opacity and transform (translateY), which are compositor-only properties that don't participate in layout.
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-extensionDroid: Install via the plugin marketplace:
droid plugin marketplace add backnotprop/plannotator
droid plugin install plannotator@plannotator
Amp: Install the CLI first, then copy the plugin:
mkdir -p ~/.config/amp/plugins
curl -fsSL https://raw.githubusercontent.com/backnotprop/plannotator/main/apps/amp-plugin/plannotator.ts \
-o ~/.config/amp/plugins/plannotator.tsWhat's Changed
- fix: Amp plugin binary resolution by @backnotprop in #810
- fix: Amp plugin workspace cwd by @backnotprop in #811
- fix: Amp plugin Bun env leak by @backnotprop in #812
- fix: Mermaid block sizing, zoom retention, and pinpoint drag by @HyunmoAhn in #819
- fix: flickering AI-tip input in label settings by @j-token in #830
- feat: improve update notification with toast, shimmer, and prominent button by @backnotprop
New Contributors
- @HyunmoAhn made their first contribution in #819
Contributors
@HyunmoAhn diagnosed and fixed the Mermaid rendering regressions, tracing the root cause to repeated dangerouslySetInnerHTML injections from the parent component. The PR included a full test suite for the extracted SVG normalization logic. @j-token returned with a fix for the Settings AI-tip flicker, identifying the max-height animation as the source of the layout feedback loop. @jj-valentine filed #829 with a clear reproduction path and a preliminary code-level diagnosis that pointed directly at the animation keyframes.
Full Changelog: v0.19.25...v0.19.26
v0.19.25
Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.19.24 | Amp integration, configurable data directory, Auto Mode permission option, Pi plan approval fix |
| v0.19.23 | Droid integration, Windows Pi AI fix, quieter update indicator |
| v0.19.22 | Safari copy fix in plan viewer, CLAUDE_CONFIG_DIR support for session logs |
| v0.19.21 | Ask AI in plan review and annotate mode, shared AI runtime, origin-aware provider defaults |
| v0.19.20 | Interactive goal setup UI, OpenCode submit_plan fixes, browser no-op sentinel handling for Claude agents |
| v0.19.18 | Edit-based submit_plan for OpenCode, Pi namespace migration, Codex annotate-last fix, OpenCode commands dir fix |
| v0.19.17 | Reworked goal setup skill (interview-driven flow), CLI --version flag |
| v0.19.16 | Code navigation with peek view (Cmd/Ctrl+click tokens in diffs) |
| v0.19.15 | Commit-based diff base, jj evolution diffs, GitLab reliability fixes, OpenCode command intercept fix |
| v0.19.14 | Visual explainer skill update, PFM code-file hover previews, Graphviz, diff tab size and line bg intensity, hooks settings tab |
| v0.19.11 | Jujutsu (jj) VCS backend, slimmer hunk separators, collapse viewed files, multi-line gutter selection fix |
What's New in v0.19.25
v0.19.25 is a patch release with five bug fixes. Three address production issues with the Amp plugin introduced in v0.19.24, one fixes Mermaid diagram rendering, and one fixes a UI flicker in Settings. Two PRs are from external contributors, including one first-timer.
Amp Plugin Production Fixes
The Amp integration shipped in v0.19.24 worked in development but failed in production when installed globally. Three issues surfaced once users installed the plugin to ~/.config/amp/plugins/:
The plugin resolved the plannotator binary via PATH lookup, which in Amp's Bun-shaped runtime could resolve to the wrong executable. It now checks the standard installer paths (~/.local/bin/plannotator on Linux/macOS, %LOCALAPPDATA%\plannotator on Windows) before falling back to PATH. A PLANNOTATOR_BIN environment variable is also available for custom installs.
Amp's ctx.$ helper reported the plugin directory rather than the active workspace, so Plannotator commands ran from the wrong working directory. The plugin now reads Amp's CLI log to resolve the real workspace root.
Amp sets BUN_BE_BUN=1 in the plugin environment. The standalone Plannotator binary inherited this variable and behaved like bun instead of executing its own commands, failing with Script not found "annotate". The plugin now strips this variable before spawning the binary.
Mermaid Diagram Rendering Fix
Mermaid diagrams had several visual regressions: blocks rendered at incorrect sizes, zoom level reset on every parent re-render, and the pinpoint drag handle attached to the wrong target. The root cause was that the parent Viewer component re-injected the rendered SVG via dangerouslySetInnerHTML four to five times during mount and again on every re-render, wiping any imperative DOM changes the Mermaid component had applied after render (sizing attributes, viewBox adjustments, zoom state).
The fix has two parts. First, the component is wrapped in React.memo with a custom comparator that only re-renders when the diagram content changes, blocking parent-triggered re-renders entirely. Second, the sizing attributes (max-width, preserveAspectRatio, height) are now baked directly into the SVG markup string before it enters React state, so even when a legitimate re-render does inject the HTML, the attributes survive. The SVG normalization logic was extracted into a separate dependency-free module (mermaidSvg.ts) to keep it unit-testable without pulling in the browser-only mermaid library.
- #819, contributed by @HyunmoAhn
Settings AI-Tip Input Flicker Fix
The lightbulb button in Settings that opens the AI instruction tip editor caused intense flickering on open. The slide-in animation used a max-height: 0 → 60px keyframe, which is a layout property. Inside the scroll viewport, this triggered a layout feedback loop: the browser recalculated layout, which restarted the animation, which triggered another layout, roughly 40 times per second. The fix switches the keyframe to opacity and transform (translateY), which are compositor-only properties that don't participate in layout.
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-extensionDroid: Install via the plugin marketplace:
droid plugin marketplace add backnotprop/plannotator
droid plugin install plannotator@plannotator
Amp: Install the CLI first, then copy the plugin:
mkdir -p ~/.config/amp/plugins
curl -fsSL https://raw.githubusercontent.com/backnotprop/plannotator/main/apps/amp-plugin/plannotator.ts \
-o ~/.config/amp/plugins/plannotator.tsWhat's Changed
- fix: Amp plugin binary resolution by @backnotprop in #810
- fix: Amp plugin workspace cwd by @backnotprop in #811
- fix: Amp plugin Bun env leak by @backnotprop in #812
- fix: Mermaid block sizing, zoom retention, and pinpoint drag by @HyunmoAhn in #819
- fix: flickering AI-tip input in label settings by @j-token in #830
New Contributors
- @HyunmoAhn made their first contribution in #819
Contributors
@HyunmoAhn diagnosed and fixed the Mermaid rendering regressions, tracing the root cause to repeated dangerouslySetInnerHTML injections from the parent component. The PR included a full test suite for the extracted SVG normalization logic. @j-token returned with a fix for the Settings AI-tip flicker, identifying the max-height animation as the source of the layout feedback loop. @jj-valentine filed #829 with a clear reproduction path and a preliminary code-level diagnosis that pointed directly at the animation keyframes.
Full Changelog: v0.19.24...v0.19.25