Skip to content

Releases: backnotprop/plannotator

v0.27.12

Choose a tag to compare

@github-actions github-actions released this 03 Sep 13:49
Immutable release. Only release title and notes can be modified.

Follow @plannotator on X for updates

Missed recent releases?
Release Highlights
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
v0.27.1 Open-in-editor launch fix, file headers respect Viewed/Git-add visibility toggles
v0.27.0 Call Flow analysis, --tailscale remote reviews, Pi rebuild, focus-mode shortcut

What's New in v0.27.12

The largest release of the 0.27 line: seven pull requests, two of them from community contributors, one a first-time contribution. The headline is a rebuilt decision header across every review surface, alongside a new hover card for code symbols and a set of community fixes. Every change went through independent adversarial review, and the release was gated by a 26-agent QA sweep before tagging.

One decision control across every surface

The header buttons for finishing a review grew organically over the years and ended up inconsistent: annotate showed different buttons than code review, approve sat next to send feedback where a stray click could pick the wrong one, and some finishing actions only existed as keyboard shortcuts. This release replaces all of it with a single adaptive control.

Every annotate surface and both code review destinations now show one primary action that reflects your session: Done (or Approve where approval is real) when there is nothing to send, Send Feedback with a count once there is. The alternate decisions live behind a caret: send with a note (the menu morphs into a composer in place), request changes with overall feedback, and an explicit discard path behind a single confirmation. Approve and send feedback never render side by side anywhere. Cmd+Enter always fires exactly what the visible primary says.

Approving with notes now actually works. Previously, notes attached to an approval were silently discarded by every runtime. Approvals that carry notes are delivered to your agent with clear framing that they are non-blocking guidance, not a change request. The capability is advertised by the server, so older components fail closed instead of dropping your words. The review sidebar also gains a "+ General comment" button for review-level comments that are not tied to a line, and the local feedback archive now records whether a comment was review-level or line-level.

A few behavior changes worth knowing: bare approvals no longer send the old "LGTM - no changes requested." placeholder text, approving despite open annotations is now an explicit two-step (caret, then confirm) instead of a dimmed one-click button, and pressing Escape on an open header menu closes just the menu instead of also triggering whatever Escape used to do underneath.

The design came directly from community feedback asking for overall review comments, an integrated global comment field, and a fast "that's fine" path for message annotation. #1458

Hover cards for code symbols

Rest your pointer on an identifier in a code review diff and Plannotator shows a card: the symbol's kind, a best-effort signature, its doc comment, where it is defined, and a sample of references, each linking into the References panel. Everything is powered by the same ripgrep search that backs Cmd+click, so there is nothing to install and nothing indexes your repo. If ripgrep is missing or the answer is weak, the card simply does not appear.

Because hover affordances are personal, the first review after updating shows a one-time introduction with a live try-it: hover the demo token inside the dialog and the real card opens against it. Choose your trigger right there: on hover (the default, matching the VS Code hover delay of 300ms), only while holding Cmd (Ctrl on Windows and Linux), or off. A delay setting offers faster and more relaxed dwell times. Everything lives in Settings under the Editor tab, and anyone who had turned the earlier experimental toggle off stays off without seeing the dialog.

The References panel also moved: Cmd+click and card links now open it beside the diff instead of splitting below it, so it stops stealing vertical room from the code you are reading. #1461, #1462, #1465

Compare your local branch with its remote

A new "Local vs remote branch" diff type answers the question "what would I push right now?": local commits the remote does not have, staged and unstaged edits, and untracked files, all compared against the branch's configured remote-tracking ref from your last fetch. It resolves the upstream properly rather than assuming an origin branch of the same name, only appears when the branch actually has an upstream, and shows a clear empty state when local and remote match. It never touches the network; fetching mid-review raises the existing refresh banner.

Contributed by @leoreisdias, whose implementation carried both server runtimes, the settings integration, and a genuinely thorough test suite including a real bare-remote integration test. #1451

OpenCode: the session URL notice can no longer burn a model turn

On recent OpenCode 2 betas, the "Plannotator session ready" notice posted into the transcript could wake a model turn on its own, burning tokens while the reviewer was still annotating, with the real feedback then queued behind that spurious turn. The notice is now sent with explicit queue delivery, the same mechanism feedback already uses, so it renders in the transcript and waits for a genuinely user-initiated turn no matter how the host behaves.

Reported by @Naasha with an unusually well-researched diagnosis that correctly identified the upstream mechanics, closing #1459. #1460

Additional Changes

  • Skill fix for file approval: the installed agent skills now instruct agents to use --gate --json when a user asks to approve a saved plan or document, so an agent can no longer promise an Approve button that plain annotate does not render. Contributed by @zhangjinzan1 in their first contribution, complete with a freshness test that keeps the guidance from drifting. #1453
  • Insecure-context fix: note and comment ids are minted through a fallback-safe generator, so remote-mode sessions served over plain http can no longer lose a typed note to a missing crypto.randomUUID.
  • Escape discipline: header menus and popovers consume the Escape that dismisses them, and vim navigation defers to open popovers, so one keypress does one thing.

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

Pi: Update @plannotator/pi-extension to 0.27.12 and restart Pi.

OpenCode: Clear cache and restart:

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

What's Changed

  • feat: unified decision control across annotate and code review in #1458
  • feat(review): token hover cards, Tier 0 in #1461
  • feat(review): hover card trigger settings and first-run introduction in #1462
  • feat(review): compare local branch with remote by @leoreisdias in #1451
  • fix(opencode): queue-deliver the session URL notice by report from @Naasha in #1460
  • fix(review): open the References panel beside the diff in #1465
  • docs(skills...
Read more

v0.27.11

Choose a tag to compare

@github-actions github-actions released this 01 Sep 21:00
Immutable release. Only release title and notes can be modified.

Follow @plannotator on X for updates

Missed recent releases?
Release Highlights
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 (same-day patch on v0.27.5)
v0.27.5 Annotate your running app, Agent TUI placement, collapsed lockfiles, VS Code theme fix, Pi fixes
v0.27.4 Portable Guided Review exports, guides.show share links, guide CLI, favicon switcher, 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, folder annotate cold-start, configurable markdown extensions
v0.27.1 Open-in-editor launch fix, file headers respect Viewed/Git-add visibility toggles
v0.27.0 Call Flow analysis, --tailscale remote reviews, review panel remembers your view, Pi rebuild (breaking command rename), focus-mode shortcut
v0.26.8 Placed comment markers on HTML pages, shift-click multi-select, live app annotation

What's New in v0.27.11

A patch release with one important resource fix, one new safety net, and a CLI fix from a first-time contributor. Every change went through independent adversarial review and a six-agent QA sweep before tagging.

OpenCode servers no longer pile up in the background

If you had the opencode CLI installed, every Plannotator session quietly started an opencode serve process at launch, just to list OpenCode's models in the Ask AI dropdown. Ending a session with Ctrl-C never cleaned that process up, and every later session found the leftover server and loaded more state into it. Over a day of normal use this grew into a multi-gigabyte orphan process nobody started on purpose.

Three things changed. Nothing starts anymore until you actually select OpenCode in Ask AI; most users never do, and now never spawn it. When it does start, each session runs its own private server on its own port instead of sharing one, so sessions can never pile into each other. And the server is now closed when the session ends, including on Ctrl-C.

Two visible differences for OpenCode users of Ask AI: the model list fills in when you first select the provider instead of being preloaded, and you will see one opencode serve process per active Plannotator session rather than a shared one. Both are the intended shape of the fix.

#1445

Your submitted feedback is now archived locally

Every plan decision, code review submission, and annotate submission is now recorded on your machine, under ~/.plannotator/feedback/, organized by project. Each record is one line in an append-only index plus a readable markdown file holding your review text, the excerpts it quoted, and annotation metadata, with lightweight provenance such as file paths and the git ref under review.

The reason it exists: feedback used to be gone the moment it was sent. An agent times out, a terminal closes, and the review you wrote is unrecoverable. Now there is a durable record of everything you submitted, and a growing personal archive you can analyze or learn from over time. Herdr Annotate, the terminal-side annotator, writes to the same archive with its own client label, so both tools build one history.

The archive stays on your machine and is never transmitted. It is on by default; set PLANNOTATOR_FEEDBACK_HISTORY=0 (or "feedbackHistory": false in ~/.plannotator/config.json) to turn it off, and delete ~/.plannotator/feedback/ to forget what is there. The privacy page documents it. The write path is deliberately fail-safe: if the archive cannot be written for any reason, your feedback still submits exactly as before.

#1438

A typo'd command now tells you instead of hanging forever

plannotator annotatte README.md used to print nothing and hang until killed, because an unrecognized subcommand fell through to the plan-review hook path, which waits for hook data on stdin that never arrives from a terminal. An unknown subcommand now exits immediately with the misspelled word, a "Did you mean" suggestion, and a pointer to --help. A registry test scrapes the real dispatcher so the known-command list can never drift and reject a valid command.

Contributed by @SumeraMartin in #1444, whose diagnosis of the stdin fallthrough was exact, in their first contribution to the project.

Additional Changes

  • @plannotator/ui 0.35.2 (with @plannotator/core 0.25.1): hosts embedding the annotation UI can hide the Quick Label tool via the new hideQuickLabel prop on AnnotationToolstrip (forwarded by StickyHeaderLane). Default off; Plannotator's own surfaces are unchanged. #1442. Two broken publishes were caught and corrected the same day: 0.35.0 shipped an unresolvable workspace:* dependency, and 0.35.1 imported a core export the published core 0.25.0 did not contain. The source manifest now pins the exact core version, core 0.25.1 ships the missing exports, and CI installs the packed tarballs outside the monorepo and verifies real imports, TypeScript compilation, and a Vite build, so both failure classes are structurally closed. Use 0.35.2; 0.35.0 and 0.35.1 are deprecated. #1446, #1447
  • Privacy page: plannotator.ai/privacy now documents the local feedback archive, what a record contains, and how to disable or delete it.

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

Pi: Update @plannotator/pi-extension to 0.27.11 and restart Pi.

OpenCode: Clear cache and restart:

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

What's Changed

  • fix(ai): stop leaking opencode serve processes in #1445
  • feat(server): durable feedback archive for every submitted review in #1438
  • fix(cli): exit on an unknown subcommand instead of blocking on stdin by @SumeraMartin in #1444
  • feat(ui): allow hosts to hide Quick Label in #1442
  • fix(ui): publish exact core dependency in #1446
  • fix(packages): publish annotation thread exports in #1447

New Contributors

Community

@SumeraMartin found the unknown-subcommand hang, diagnosed the exact stdin fallthrough that caused it, and shipped the fix with a drift-proof test suite in a first contribution that merged as written. The opencode leak was caught during our own multi-agent operations when a monitoring session flagged a multi-gigabyte orphan process, and the feedback archive grew out of repeated user reports of reviews lost to agent timeouts.

Thank you. Plannotator gets better because you tell us where it falls short.

Full Changelog: v0.27.10...v0.27.11

v0.27.10

Choose a tag to compare

@github-actions github-actions released this 31 Aug 21:23
Immutable release. Only release title and notes can be modified.

Follow @plannotator on X for updates

Missed recent releases?
Release Highlights
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 (same-day patch on v0.27.5)
v0.27.5 Annotate your running app, Agent TUI placement, collapsed lockfiles, VS Code theme fix, Pi fixes
v0.27.4 Portable Guided Review exports, guides.show share links, guide CLI, favicon switcher, 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, folder annotate cold-start, configurable markdown extensions
v0.27.1 Open-in-editor launch fix, file headers respect Viewed/Git-add visibility toggles
v0.27.0 Call Flow analysis, --tailscale remote reviews, review panel remembers your view, Pi rebuild (breaking command rename), focus-mode shortcut
v0.26.8 Placed comment markers on HTML pages, shift-click multi-select, live app annotation
v0.26.7 Pinpoint targets any element on HTML pages, smarter hover labels, zero-scan hit testing

What's New in v0.27.10

This release brings two review features people have asked for, restores the slash commands on OpenCode 2, and fixes three reported bugs. Six PRs shipped, every one shaped by community reports and requests, and the whole set went through an adversarial 29-point QA sweep before tagging.

Files mark themselves viewed as you scroll

Reviewers reading the all-files diff top to bottom no longer check every file off by hand. Scroll past a file after actually reading it and it marks itself viewed; open a file, read it, and move on, and the same happens. Momentum-flicking to the bottom marks nothing: a file only counts once its content was on screen long enough to have been read, and collapsed or generated files (your lockfiles) never auto-mark from their folded headers.

The reviewer stays in charge. Un-viewing a file is treated as "come back to this," and auto-view will never re-check it. When a diff refreshes and a file's content changed underneath its checkmark, the checkmark comes off, so a stale check can't vouch for code an agent just rewrote. The feature is on by default with a one-time notice the first moment it fires, and it can be turned off in Settings or from the gear above the file list.

#1430

Undo and redo for annotations

Mod+Z / Mod+Shift+Z now work across annotation actions in plan review and code review: create, edit, and delete for comments, deletions, checkbox toggles, suggestion batches, and image annotator strokes. History is bounded, per-document, and deliberately conservative: typing in a text field keeps the browser's native undo, and comments posted by agents or external tools never enter your history, so an undo can only ever touch your own work.

Requested by @jj-valentine in #828.

#1426, closing #828

Slash commands return on OpenCode 2

OpenCode 2's plugin API originally had no way for a plugin to execute a slash command, which left /plannotator-review, /plannotator-annotate, and /plannotator-last dead on V2. Upstream shipped exactly the hook that was missing (anomalyco/opencode PR #44765), and Plannotator now uses it: on hosts with the new API the three commands run natively again, opening the UI directly with no model turn and your arguments passed through untouched. Agent switching selected in the review UI also works again on those hosts.

On OpenCode 2 builds that don't have the new API yet, the commands fall back to asking the agent to run the plannotator CLI, which works everywhere today. The native path takes over automatically as OpenCode builds update. OpenCode 1 behavior is unchanged.

#1434, #1435

Remote OpenCode 2 sessions show their URL

Remote sessions are only usable if you can see the session URL, and on OpenCode 2 there was no visible place for it to land. Both the new native commands and submit_plan now post the URL as a notice directly in the session transcript, without waking a model turn. This came out of the release QA sweep rather than a field report, which is where you want to find it.

#1435

Share links stop serving stale snapshots

When a teammate sent you a share link and you annotated their plan, the export kept offering the original short link back, without your annotations. The link lifecycle now tracks exactly which content a short URL was minted for and clears it the moment the content changes, so you can never send back a link that silently drops your feedback. The remaining piece, minting a fresh short link for small plans, is tracked in #1427.

Reported by @grncdr in #798.

#1425, closing #798

Agent terminal works on npm 12

npm 12 blocks dependency install scripts by default, which silently skipped node-pty's native build on Linux and left the annotate-mode Agent tab reporting "Agent unavailable" from a runtime that looked installed but couldn't load. The managed runtime now approves exactly that one build script, verifies the native binary actually exists after install, retries the build once if it doesn't, and fails loudly with the repair command instead of failing later in the UI.

Reported by @smartobc-stephen in #1409, with a diagnosis accurate down to the fix.

#1411, closing #1409

Additional Changes

  • Herdr Annotate: the README and plannotator.ai now introduce Herdr Annotate, terminal-side annotation built on Plannotator TUI, with a landing page at plannotator.ai/tui-annotate. Annotations from the terminal land in the same Plannotator data directory, so both tools compound.
  • Firefox forced colors: the plannotator.ai hero text no longer disappears for Firefox users running with "Override the colors specified by the page" or OS high contrast.

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

Pi: Update @plannotator/pi-extension to 0.27.10 and restart Pi.

OpenCode: Clear cache and restart:

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

What's Changed

  • feat(review): mark files viewed as you scroll past them in #1430
  • feat: add bounded annotation undo and redo in #1426
  • feat(opencode): restore the slash commands on OpenCode 2 in #1434
  • fix(opencode): show session URLs in remote OpenCode 2 sessions in #1435
  • fix(share): invalidate stale short links in #1425
  • fix(agent-terminal): approve node-pty install scripts for npm 12 in #1411

Community

This release is community-shaped end to end. @jj-valentine requested undo/redo hotkeys for annotations in #828, and that request is now the bounded history system in both review surfaces. @grncdr filed the stale short-link report in #798 with a clean reproduction of the round-trip that dropped annotations. @smartobc-stephen reported the npm 12 agent-terminal failure in #1409 with a root-cause analysis so precise the fix followed it almost line for line. The auto-viewed feature and the OpenCode...

Read more

v0.27.9

Choose a tag to compare

@github-actions github-actions released this 27 Aug 23:17
Immutable release. Only release title and notes can be modified.

Follow @plannotator on X for updates

Missed recent releases?
Release Highlights
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 (same-day patch on v0.27.5)
v0.27.5 Annotate your running app, Agent TUI placement, collapsed lockfiles, VS Code theme fix, Pi fixes
v0.27.4 Portable Guided Review exports, guides.show share links, guide CLI, favicon switcher, 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, folder annotate cold-start, configurable markdown extensions
v0.27.1 Open-in-editor launch fix, file headers respect Viewed/Git-add visibility toggles
v0.27.0 Call Flow analysis, --tailscale remote reviews, review panel remembers your view, Pi rebuild (breaking command rename), focus-mode shortcut
v0.26.8 Placed comment markers on HTML pages, shift-click multi-select, live app annotation
v0.26.7 Pinpoint targets any element on HTML pages, smarter hover labels, zero-scan hit testing
v0.26.6 Fixed empty environment variables in sandboxed sessions (Bun 1.3.14 builds)

What's New in v0.27.9

Eleven pull requests, one of them from @leoreisdias. Two threads run through the release. Browser-integrated agents can now read a plan or an annotate session and leave comments on it through WebMCP, instead of scraping the page. And the raw-HTML annotation surface gained a Refresh action along with a published set of seams so other applications can run that surface as Plannotator ships it. A Windows uninstall fix and a pre-release QA pass close it out.

Browser agents can read your document and comment on it

An agent that runs inside the browser, such as Codex's browser or Claude Code's browser, has until now had to work out what is on the page by reading the DOM. Plan review and every annotate surface (markdown, raw HTML, live app, folder) now register a small tool catalog on document.modelContext, the WebMCP surface those agents speak.

The catalog is deliberately narrow. read_document returns the whole situation in one zero-argument call: the session, the document text windowed at 16k characters and cut at a block boundary, an outline with per-section comment counts, every comment with its quote and context, sibling documents, and a set of nudge codes. add_comments writes a batch, anchoring by an exact quote, by section, by reply, or as a document-level note, and is idempotent by request id. update_comment, remove_comments, reveal and nudge_user round it out, with list_documents in folder sessions.

Three rules make this safe to ship without a consent dialog. Decisions stay with the human: no tool approves, denies, submits, closes, stages or marks anything viewed, and a test pins the catalog so none can be added quietly. An agent may edit or remove only the comments it created, which are stamped browser-agent; asking to touch a human's comment answers forbidden. And nothing is ever registered inside the sandboxed iframes, so a page you are annotating can neither see nor impersonate Plannotator's tools.

Without the API there is no footprint at all. Feature detection is one typeof check per mount, and when document.modelContext is absent the catalog is never built and no indicator, banner, request or timer is created. That was verified rather than assumed: builds from main and from the branch served the same annotate session to a Chrome without WebMCP, and the rendered DOM (44,607 characters), the request lists, the console output and the timer counts came back identical on both sides.

The nudges are what keep an agent in step with you. Every response carries codes computed from state the page already holds, so the agent learns on the call it was going to make anyway that you added a comment, that your composer is open, that the file changed on disk, or that the live app navigated to another page. A header indicator appears after the first tool call, and a Settings toggle turns the whole provider off and on.

One product change comes with it. Annotation gains an optional inReplyTo field, so an agent can answer a comment you left. A reply inherits its parent's anchor, renders indented under it in the annotations panel, and exports nested under the parent as a **Replies:** block, which is what puts the exchange in front of the coding agent in order. Annotations without the field render and export byte for byte as before.

Code review is phase 2 and is not in this release.

Refresh rendered HTML from disk

Markdown annotate sessions pick up an agent's edits as soon as the file changes on disk. Rendered HTML sessions kept showing the snapshot they loaded at startup, so the review surface went stale the moment the agent rewrote the report you were reading.

@leoreisdias added a Refresh action for local .html and .htm annotate sessions, next to Hide tools and reachable from the keyboard. It re-reads the document, remounts the sandboxed viewer, reapplies your annotations, and tells you how many anchors no longer match while keeping those comments in the panel. It is manual on purpose: this is the first checkpoint, and automatic filesystem-driven refresh waits until the restoration behavior has seen real use. URL sessions, archive views, markdown-converted HTML and non-HTML documents are unchanged, and HTML source saving stays off.

Review turned up a share-link race that predated the feature. The share request context included the identity of the resolver, and that identity changes as a side effect of its own success, so the first short link created on an HTML session discarded its own result. That is fixed with a regression test. A browser verification run found two more: the singular toast read "1 annotation no longer match the HTML", and a browser reload after a refresh reverted the page to the startup snapshot because /api/plan never re-read disk while the draft annotations persisted against the replaced page. /api/plan and /api/share-html now share one root read on both server runtimes, so reload and refresh land on the same bytes.

The version diff that a refresh used to cost you is back as well, recomputed rather than dropped. That fix arrived with the QA pass below.

  • #1232 by @leoreisdias, with maintainer commits for the share race, the toast and the two-runtime root read

The HTML annotation surface, packaged for hosts

Applications built on @plannotator/ui were hand-rolling their own code around HtmlViewer to get the experience Plannotator ships. The Workspaces team asked for the seams to be published, and they now are.

HtmlSurfaceControls gives a host the eye, the refresh and the pen with the exact markup, data attributes and aria state Plannotator's header uses, each control rendering only when its handler is passed. useHtmlRefresh publishes the refresh lifecycle with the backend behind a fetchSnapshot callback, so a host binds it to its own document store. projectHostThreads and buildPersistedHtmlAnchor in @plannotator/core/html-anchor project stored rows onto the annotations prop in the host's order, which is the marker numbering, and trim a composed comment's anchor for persistence within a byte budget. AnnotationPanel takes an unanchoredIds set and renders a small Unanchored chip on the matching cards. HtmlViewer takes scrollBehavior so a host can carry a reduced-motion preference across the iframe boundary, and maxAdditionalTargets for its own cap on shift-click targets.

Every seam is additive and defaults to today's behavior, and Plannotator's own app passes the same defaults. The one deliberate change you will see in Plannotator is that chip: annotations a Refresh could not re-anchor now carry it in the panel as well as in the toast, and it clears on the next refresh that re-anchors them. The rest...

Read more

v0.27.8

Choose a tag to compare

@github-actions github-actions released this 24 Aug 16:46
Immutable release. Only release title and notes can be modified.

Follow @plannotator on X for updates

Missed recent releases?
Release Highlights
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 (same-day patch on v0.27.5)
v0.27.5 Annotate your running app, Agent TUI placement, collapsed lockfiles, VS Code theme fix, Pi fixes
v0.27.4 Portable Guided Review exports, guides.show share links, guide CLI, favicon switcher, 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, folder annotate cold-start, configurable markdown extensions
v0.27.1 Open-in-editor launch fix, file headers respect Viewed/Git-add visibility toggles
v0.27.0 Call Flow analysis, --tailscale remote reviews, review panel remembers your view, Pi rebuild (breaking command rename), focus-mode shortcut
v0.26.8 Placed comment markers on HTML pages, shift-click multi-select, live app annotation
v0.26.7 Pinpoint targets any element on HTML pages, smarter hover labels, zero-scan hit testing
v0.26.6 Fixed empty environment variables in sandboxed sessions (Bun 1.3.14 builds)
v0.26.5 HTML pinpoint element annotations, durable annotate submissions, installer fallback for old git, vim HUD cursor fix

What's New in v0.27.8

A patch release with two quality-of-life fixes: Pi sessions stop losing their prompt cache when a plan finishes, and the thumbs-up returns to HTML annotation in a restrained form. Both came from user reports filed within the last week.

Pi keeps your prompt cache when a plan finishes

Finishing plan execution on Pi used to invalidate the LLM provider's prompt cache. Plannotator injects its plan instructions as conversation messages, and when the plan ended it deleted them from the middle of the chat history. Providers cache conversations front to back, so everything after the deleted message was re-billed at full uncached rates on the next turn. In the reporting user's session that meant re-paying for roughly 90 messages.

Plannotator no longer rewrites history. Old plan instructions stay where they are, and a note at the end of the conversation tells the model the plan is over and earlier instructions no longer apply. The phase instructions now state explicitly that they supersede anything Plannotator said before, so stale planning rules cannot keep steering the model. A regression test verifies each outgoing request extends the previous one byte for byte across the full planning, executing, and idle lifecycle.

Thanks @WinPooh32 for the report, and especially for attaching the exact before/after request payloads. They turned diagnosis into a five minute job.

The thumbs-up is back on HTML pages

v0.27.5 made HTML and live-app annotation comment-only: delete and label tools were markdown concepts that never fit arbitrary pages. That ruling had a side effect we did not intend to keep: there was no longer any one-click way to say "this part is good." Approving something meant opening the comment composer and typing it out.

Exactly one label affordance returns: the 👍 "Looks good" button. Select text and it is in the toolbar; pinpoint-click an element and it is a one-click action in the comment composer (disabled once you start typing, so it can never discard a draft). Everything else about comment-only holds: no delete, no label picker, no label keyboard shortcuts, and the security clamp that stops a hostile page from forcing annotations through the bridge is untouched.

Additional Changes

  • Embed picker seam for @plannotator/ui hosts: the /embed slash-menu picker (target list, empty states, kind-aware upload adapter, paragraph splice) is now a host-configurable extension in the published UI package, shipped to npm as @plannotator/ui@0.31.0 with @plannotator/core@0.24.0. Plannotator's own apps are unaffected. #1382 by @backnotprop

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

Pi: Update @plannotator/pi-extension to 0.27.8 and restart Pi.

OpenCode: Clear cache and restart:

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

What's Changed

  • fix(pi): append-only phase framing so plan transitions keep the prompt cache by @backnotprop in #1381
  • feat(ui): add embed media picker seam by @backnotprop in #1382
  • feat(annotate): restore a restricted thumbs-up on comment-only HTML surfaces by @backnotprop in 0ae40e73

Community

  • @WinPooh32 reported the Pi cache invalidation in #1380 with the request payloads that made the diagnosis immediate
  • The thumbs-up gap was reported directly by a developer using HTML annotation for report review

Full Changelog: v0.27.7...v0.27.8

v0.27.7

Choose a tag to compare

@github-actions github-actions released this 23 Aug 14:45
Immutable release. Only release title and notes can be modified.

Follow @plannotator on X for updates

Missed recent releases?
Release Highlights
v0.27.6 Live app annotation lands on Pi, one interaction model for HTML pages (same-day patch on v0.27.5)
v0.27.5 Annotate your running app, Agent TUI placement, collapsed lockfiles, VS Code theme fix, Pi fixes
v0.27.4 Portable Guided Review exports, guides.show share links, guide CLI, favicon switcher, 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, folder annotate cold-start, configurable markdown extensions
v0.27.1 Open-in-editor launch fix, file headers respect Viewed/Git-add visibility toggles
v0.27.0 Call Flow analysis, --tailscale remote reviews, review panel remembers your view, Pi rebuild (breaking command rename), focus-mode shortcut
v0.26.8 Placed comment markers on HTML pages, shift-click multi-select, live app annotation
v0.26.7 Pinpoint targets any element on HTML pages, smarter hover labels, zero-scan hit testing
v0.26.6 Fixed empty environment variables in sandboxed sessions (Bun 1.3.14 builds)
v0.26.5 HTML pinpoint element annotations, durable annotate submissions, installer fallback for old git, vim HUD cursor fix
v0.26.4 Skill-menu hover jitter fix (same-day patch on v0.26.3)

What's New in v0.27.7

A patch release led by a crash fix for Pi on Windows: a broken provider pipe could take down the entire Pi host mid plan review. Five PRs, three from returning community contributors, plus a new top-level knowledge skill that also powers plannotator.ai/llms.txt.

Pi no longer crashes when a provider pipe breaks

On Windows, opening a plan review from Pi could kill the whole Pi host with an unhandled EPIPE error. The provider child process's stdin pipe broke, nothing was listening for the failure, and the host process died with it.

This is fixed as a class, not a symptom. Every provider child process (Pi and the Codex app-server transport) now routes its pipe writes through a shared guard: a broken pipe fails that provider's query cleanly, the provider is marked dead and restartable, and the host keeps running. The regression test reproduces the exact pre-fix crash in a real Node child process.

Thanks @Kaelenx for the detailed report and for verifying the fix on the original machine within the hour.

Call Flow stops failing on normal reviews

Call Flow rejected any analysis producing more than 100 call trees, and languages that emit many small per-function trees (Swift, TypeScript) hit that ceiling on ordinary branch reviews. @sergdort's measurements in #1351 showed a normal 161-file review producing 470 valid trees, computed in under 800ms, rejected whole.

The tree cap is now 2,000, and a result that still exceeds it degrades instead of failing: the first 2,000 trees render and a visible warning in the panel says how many were truncated. The caps that guard against genuinely unbounded output (total nodes, tree depth, raw length) still reject exactly as before.

jj reviews start from where your work actually began

The jj Line of work view always diffed against trunk(). If your work branched off a staging or development line instead, the review included every commit from that line too, burying your changes in unrelated ones.

Plannotator now asks jj where the current line of work forked from shared history and starts the review there. The base is named by its remote bookmark when one exists, then its local bookmark, then the commit ID, and jj's internal push-* bookmarks are never used as names. Older jj versions that cannot answer the fork-point query fall back to trunk() instead of failing the review.

A knowledge skill for every agent, and llms.txt

Agents had launcher skills for opening reviews but no reference for everything else Plannotator can do. The new top-level plannotator skill is that reference: every subcommand, flag, and workflow, installed for Claude Code, Codex, OpenCode, Pi, Kiro, and Gemini through their own install paths. A CI freshness guard ties the skill to the CLI source, so it cannot silently drift from what the binary actually accepts.

The same document is now served at plannotator.ai/llms.txt following the llmstxt.org convention, generated from the identical source at build time.

oh-my-pi is its own agent origin

Sessions launched from the oh-my-pi harness were detected as Claude Code, because OMP exports Claude Code's environment markers into its shells. OMP is now detected as its own origin, ordered so nested runtimes still detect correctly, and sessions report the agent you are actually using.

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

Pi: Update @plannotator/pi-extension to 0.27.7 and restart Pi.

OpenCode: Clear cache and restart:

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

What's Changed

  • feat: detect the oh-my-pi harness as its own agent origin by @FNDEVVE in #1373
  • fix(review): detect JJ mutable line-of-work base by @graemefolk in #1365
  • feat(skills): top-level plannotator knowledge skill with a CLI freshness guard by @backnotprop in #1377
  • fix(ai): a broken RPC pipe must fail the provider, not kill the host by @backnotprop in #1379
  • fix(call-flow): keep big-but-valid tree lists instead of failing by @ashish921998 in #1370

Contributors

Three returning contributors landed code in this release. @graemefolk continues to own Plannotator's jj support end to end, this time replacing the assumed trunk() base with real fork-point detection. @ashish921998 turned @sergdort's Call Flow measurements into the fix that stops normal reviews from failing. @FNDEVVE made oh-my-pi a first-class agent origin.

Community reports that shaped this release:

  • @Kaelenx reported the Pi host crash on Windows in #1378 and verified the fix on the same machine
  • @sergdort measured exactly which Call Flow cap was failing normal reviews in #1351

Full Changelog: v0.27.6...v0.27.7

v0.27.6

Choose a tag to compare

@github-actions github-actions released this 21 Aug 17:43
Immutable release. Only release title and notes can be modified.

Follow @plannotator on X for updates

Missed recent releases?
Release Highlights
v0.27.5 Annotate your running app, Agent TUI placement, collapsed lockfiles, VS Code theme fix, Pi fixes
v0.27.4 Portable Guided Review exports, guides.show share links, guide CLI, favicon switcher, 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, folder annotate cold-start, configurable markdown extensions
v0.27.1 Open-in-editor launch fix, file headers respect Viewed/Git-add visibility toggles
v0.27.0 Call Flow analysis, --tailscale remote reviews, review panel remembers your view, Pi rebuild (breaking command rename), focus-mode shortcut
v0.26.8 Placed comment markers on HTML pages, shift-click multi-select, live app annotation
v0.26.7 Pinpoint targets any element on HTML pages, smarter hover labels, zero-scan hit testing
v0.26.6 Fixed empty environment variables in sandboxed sessions (Bun 1.3.14 builds)
v0.26.5 HTML pinpoint element annotations, durable annotate submissions, installer fallback for old git, vim HUD cursor fix
v0.26.4 Skill-menu hover jitter fix (same-day patch on v0.26.3)
v0.26.3 Skill references in comments with / or $, reachable remote session URLs, worktree switcher tooltips

What's New in v0.27.6

You can now annotate your running app. Point plannotator annotate at a localhost URL and the actual application opens inside the annotate UI: click any element to comment on it, press Esc to use the app normally, and send it all back to your agent. This works on Claude Code and Pi. The release also brings configurable Agent TUI placement, collapsed lockfiles in code review, and a wave of fixes across Pi, VS Code, and the annotation surface. Nineteen PRs, three from first-time contributors.

Note: v0.27.6 is v0.27.5 plus same-day Pi support for live app annotation; these notes cover both.

Annotate your running app

plannotator annotate http://localhost:5173 no longer converts the page to a snapshot. A per-session loopback proxy mirrors your dev server and opens the real, running app inside the annotate UI, hot reload and SPA navigation included. Click any element to pin a comment on it, shift-click to join more elements into the same comment, and use placed numbered markers to track everything. --static forces the old conversion; --app forces live mode and fails loudly if the server is not reachable.

The security boundary is deliberate: the proxy binds loopback only, validates the Host header before touching your app, authenticates every message between the page and the editor with a per-session token, and refuses to run at all in remote or tailnet-published sessions (use --static there). Live sessions write no session content to disk beyond your annotation draft, which is keyed per target app.

Pi users get the same feature. The proxy's decision logic (injection, host validation, security gates, redirect handling) lives in one shared core used by both server runtimes, and the Pi extension ships its own Node transport with every security guard test-covered, including working hot reload through the proxied WebSocket. /plannotator-annotate http://localhost:5173 on Pi opens the live app.

One behavior change to know: under PLANNOTATOR_REMOTE, annotating a localhost URL previously converted the page silently. It now exits with a clear message asking for --static, because silently converting when you asked for the live app hides what you are actually reviewing.

This closes the oldest open feature request in the tracker. Thanks @JulianS-Uni for the original ask in #642, and @notxcain, who saw this feature early and built the first working take on a preview proxy in #1049 before we landed a from-scratch implementation.

One interaction model for HTML and live pages

HTML and live-app annotate sessions now open with annotation armed: hover outlines what you are pointing at, a click opens the comment composer. Press Esc and you are in interact mode, where clicks, forms, and navigation reach the page itself. The pen button in the header (or Mod+Shift+A) re-arms annotation, text selection comments work in both modes, and the eye button hides every floating control when you just want to read. These surfaces are comment-only now: the markup-delete and label tools were markdown concepts that never fit pages, and removing them made the whole flow simpler. On phones and tablets the same controls live in the Options menu.

This also fixes the class of bug where a JS-driven page could not be used at all during annotation, reported by @Chrysweel in #1360 for slide decks.

Put the Agent TUI where you want it

The annotate-mode agent terminal can now dock Left or Right, or stay Hidden until you ask for it. The preference persists in ~/.plannotator/config.json, and the terminal's Position control lives in its Display popover with a matching entry in Settings. A bug fix rides along: entering wide mode used to unmount the terminal and kill a running agent session; it now stays alive in the background.

Lockfiles stop burying your review

Generated files (lockfiles, minified bundles, source maps, and anything marked linguist-generated in .gitattributes) now start collapsed in the all-files review view, the way GitHub treats them. The patch itself is never filtered; a visible notice shows what was collapsed and one click expands any of it.

Your VS Code theme choice wins

The VS Code extension used to force the IDE's colors onto the panel, so choosing Plannotator's light theme in a dark IDE gave you a broken mix. Now your chosen theme always wins and only the System setting follows the IDE, with a one-time migration so panels upgraded from older versions follow a light IDE again instead of being stuck on an auto-seeded dark.

Pi fixes

Three fixes for the Pi extension. thinking: "max" in phase config is accepted now (the whitelist predated Pi adding the level) and unrecognized values warn instead of vanishing, closing #1304 reported by @edision. Hosts that do not expose Pi's project-trust capability get an honest warning instead of being told to update Pi, closing #1353 reported by @materemias from OMP. And turning plan mode off can no longer leave stale planning instructions steering the session, closing #1320 reported by @nwhitley-trAIner.

Additional Changes

Read more

v0.27.5

Choose a tag to compare

@github-actions github-actions released this 21 Aug 16:17
Immutable release. Only release title and notes can be modified.

Follow @plannotator on X for updates

Missed recent releases?
Release Highlights
v0.27.4 Portable Guided Review exports, guides.show share links, guide CLI, favicon switcher, 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, folder annotate cold-start, configurable markdown extensions
v0.27.1 Open-in-editor launch fix, file headers respect Viewed/Git-add visibility toggles
v0.27.0 Call Flow analysis, --tailscale remote reviews, review panel remembers your view, Pi rebuild (breaking command rename), focus-mode shortcut
v0.26.8 Placed comment markers on HTML pages, shift-click multi-select, live app annotation
v0.26.7 Pinpoint targets any element on HTML pages, smarter hover labels, zero-scan hit testing
v0.26.6 Fixed empty environment variables in sandboxed sessions (Bun 1.3.14 builds)
v0.26.5 HTML pinpoint element annotations, durable annotate submissions, installer fallback for old git, vim HUD cursor fix
v0.26.4 Skill-menu hover jitter fix (same-day patch on v0.26.3)
v0.26.3 Skill references in comments with / or $, reachable remote session URLs, worktree switcher tooltips
v0.26.2 Single-file diff tabs render fully, no more silently dropped review files, light/dark theme pairs, palette-matched code blocks

What's New in v0.27.5

You can now annotate your running app. Point plannotator annotate at a localhost URL and the actual application opens inside the annotate UI: click any element to comment on it, press Esc to use the app normally, and send it all back to your agent. This release also brings configurable Agent TUI placement, collapsed lockfiles in code review, and a wave of fixes across Pi, VS Code, and the annotation surface. Eighteen PRs, three from first-time contributors.

Annotate your running app

plannotator annotate http://localhost:5173 no longer converts the page to a snapshot. A per-session loopback proxy mirrors your dev server and opens the real, running app inside the annotate UI, hot reload and SPA navigation included. Click any element to pin a comment on it, shift-click to join more elements into the same comment, and use placed numbered markers to track everything. --static forces the old conversion; --app forces live mode and fails loudly if the server is not reachable.

The security boundary is deliberate: the proxy binds loopback only, validates the Host header before touching your app, authenticates every message between the page and the editor with a per-session token, and refuses to run at all in remote or tailnet-published sessions (use --static there). Live sessions write no session content to disk beyond your annotation draft, which is keyed per target app.

One behavior change to know: under PLANNOTATOR_REMOTE, annotating a localhost URL previously converted the page silently. It now exits with a clear message asking for --static, because silently converting when you asked for the live app hides what you are actually reviewing.

This closes the oldest open feature request in the tracker. Thanks @JulianS-Uni for the original ask in #642, and @notxcain, who saw this feature early and built the first working take on a preview proxy in #1049 before we landed a from-scratch implementation.

One interaction model for HTML and live pages

HTML and live-app annotate sessions now open with annotation armed: hover outlines what you are pointing at, a click opens the comment composer. Press Esc and you are in interact mode, where clicks, forms, and navigation reach the page itself. The pen button in the header (or Mod+Shift+A) re-arms annotation, text selection comments work in both modes, and the eye button hides every floating control when you just want to read. These surfaces are comment-only now: the markup-delete and label tools were markdown concepts that never fit pages, and removing them made the whole flow simpler. On phones and tablets the same controls live in the Options menu.

This also fixes the class of bug where a JS-driven page could not be used at all during annotation, reported by @Chrysweel in #1360 for slide decks.

Put the Agent TUI where you want it

The annotate-mode agent terminal can now dock Left or Right, or stay Hidden until you ask for it. The preference persists in ~/.plannotator/config.json, and the terminal's Position control lives in its Display popover with a matching entry in Settings. A bug fix rides along: entering wide mode used to unmount the terminal and kill a running agent session; it now stays alive in the background.

Lockfiles stop burying your review

Generated files (lockfiles, minified bundles, source maps, and anything marked linguist-generated in .gitattributes) now start collapsed in the all-files review view, the way GitHub treats them. The patch itself is never filtered; a visible notice shows what was collapsed and one click expands any of it.

Your VS Code theme choice wins

The VS Code extension used to force the IDE's colors onto the panel, so choosing Plannotator's light theme in a dark IDE gave you a broken mix. Now your chosen theme always wins and only the System setting follows the IDE, with a one-time migration so panels upgraded from older versions follow a light IDE again instead of being stuck on an auto-seeded dark.

Pi fixes

Three fixes for the Pi extension. thinking: "max" in phase config is accepted now (the whitelist predated Pi adding the level) and unrecognized values warn instead of vanishing, closing #1304 reported by @edision. Hosts that do not expose Pi's project-trust capability get an honest warning instead of being told to update Pi, closing #1353 reported by @materemias from OMP. And turning plan mode off can no longer leave stale planning instructions steering the session, closing #1320 reported by @nwhitley-trAIner.

Additional Changes

  • Shift+1-4 switches annotation mode from the keyboard, and the shortcuts yield when you are typing into the comment toolbar. #1244 by @galmadar
  • The review annotation toolbar stays on screen when the sidebar is closed, clamped exactly to the viewport. #1354 by @unexge
  • Concurrent settings writes no longer lose changes: config saves take a bounded advisory lock, and two server processes sharing a data dir both land their writes. Part of #1364
  • guides.show touches: two real example guides linked on the landing page, a "Made with Plannotator" link in the viewer header, and a fo...
Read more

v0.27.4

Choose a tag to compare

@github-actions github-actions released this 17 Aug 18:20
Immutable release. Only release title and notes can be modified.

Follow @plannotator on X for updates

Missed recent releases?
Release Highlights
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, folder annotate cold-start, configurable markdown extensions
v0.27.1 Open-in-editor launch fix, file headers respect Viewed/Git-add visibility toggles
v0.27.0 Call Flow analysis, --tailscale remote reviews, review panel remembers your view, Pi rebuild (breaking command rename), focus-mode shortcut
v0.26.8 Placed comment markers on HTML pages, shift-click multi-select, live app annotation
v0.26.7 Pinpoint targets any element on HTML pages, smarter hover labels, zero-scan hit testing
v0.26.6 Fixed empty environment variables in sandboxed sessions (Bun 1.3.14 builds)
v0.26.5 HTML pinpoint element annotations, durable annotate submissions, installer fallback for old git, vim HUD cursor fix
v0.26.4 Skill-menu hover jitter fix (same-day patch on v0.26.3)
v0.26.3 Skill references in comments with / or $, reachable remote session URLs, worktree switcher tooltips
v0.26.2 Single-file diff tabs render fully, no more silently dropped review files, light/dark theme pairs, palette-matched code blocks
v0.26.1 GitButler 0.22.0 compatibility via capability-probed JSON flags

What's New in v0.27.4

A Guided Review can now leave Plannotator. This release ships portable guide exports, share links on guides.show, and a guide CLI any agent can drive, alongside a favicon style switcher, jj support for Call Flow, GitLab artifact fixes in PR review, and a smoother call-flow Lens. Eighteen PRs, four from community contributors, two of them first-timers.

Portable Guided Reviews and guides.show

Guided Reviews used to live and die inside your review session. Now a guide has three ways out:

Download it. Every guide gets a "Download portable guide" button that produces one HTML file containing the full guide and the diff it describes. It opens anywhere, renders exactly like the in-app guide with side-by-side diffs and per-section reviewed checkboxes, and needs no Plannotator install. The file stays small because it carries your content, not the renderer: the viewer loads from guides.show, pinned by filename and cryptographic checksum, so a tampered or wrong viewer never executes. Offline, the file degrades to a readable plain-text version of the guide.

Share it. "Create share link" uploads the guide to guides.show and hands you a link anyone can open in a browser. Shares are end-to-end encrypted by default: the key lives in the URL fragment after the #, which browsers never send to the server, so guides.show stores bytes it cannot read. You also get a one-time delete token, and "Remove link" works from the same dialog for as long as that Plannotator remembers the share. An optional "Allow link previews" checkbox stores the guide unencrypted so chat apps can show its title; that is a choice, never the default. Setting PLANNOTATOR_SHARE=disabled turns all of this off.

Author it from anywhere. The new plannotator guide subcommands (list, export, share, unshare) let any agent or script produce and publish a guide from a guide JSON and a patch, without a browser in the loop.

Saved guides from v0.27.x load unchanged. The share service runs on Cloudflare with add-only, content-hashed viewer publishing and per-IP rate limiting on creation.

Choose your favicon: Totman or the classic P

The browser-tab icon is now a setting. Appearance settings offer two styles with visual previews: Totman, the current mascot, and Classic P, the original Plannotator mark restored byte-for-byte from the pre-mascot era. The server remembers your choice and serves it directly, so tabs show the right icon from the first paint without flashing the default. Hosts that embed the published UI packages are unaffected unless they opt in.

Call Flow analysis on jj repositories

Call Flow previously required a plain Git checkout. Reviews running on jj (Jujutsu) colocated repos now get the same changed-call-path analysis: the jj snapshot is resolved to the underlying Git objects and fed to the same CallDiff engine, with the same per-file Lens and dock views. Diff collection is untouched; this only extends where the analysis can run.

GitLab PR artifacts fetch reliably and more safely

Reviewing GitLab merge requests with uploaded artifacts (screenshots, logs, design files) got a hardening pass. Uploads now fetch through the authenticated API with a strict rewrite that only touches real upload URLs, falls back to the original web route when a self-hosted GitLab predates the API route, maps 401/403 responses to a clear "run glab auth login" hint, and no longer serves HTML or JavaScript content types through the artifact proxy. A regression test pins the invariant that credentials never follow a cross-origin redirect.

The call-flow Lens stops fighting your scroll

Community feedback within hours of trying Call Flow in Safari: the per-file Lens popover closed randomly mid-scroll and popped open for every badge that passed under the cursor. Three causes, three fixes: the Lens's internal scroll no longer chains to the page when momentum hits its edge (the chain moved the popup out from under a stationary pointer, which read as a random close and was worst under Safari rubber-banding); hover now has a 100ms intent delay so drive-by badges stay closed; and an in-flight page scroll holds any pending close until the scroll settles.

Reported by Rustan (@acewhocares on X).

Additional Changes

  • Touch selection survives the comment composer. On phones and tablets, dragging a multi-line range in a single-file diff no longer collapses the selection when the composer opens; the range you dragged is the range you comment on. #1333
  • Skill picker works with screen readers. The / and $ skill reference menu now exposes real listbox semantics with option roles and active-descendant tracking, so assistive tech announces what Enter will insert, closing #1233. #1316 by @ashish921998
  • Blog: an interactive UI for the grill-me skill. A new post on using /plannotator-last as the review surface for Matt Pocock's grill-me workflow, at plannotator.ai. #1321, #1322, #1323, #1332
  • Security page linked from the site footer. #1305

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

OpenCode: Clear cache and restart:

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

What's Changed

  • fix(comments): expose skill picker semantics to assistive tech by @ashish921998 in #1316
  • feat(review): jj support for...
Read more

v0.27.3

Choose a tag to compare

@github-actions github-actions released this 13 Aug 23:19
Immutable release. Only release title and notes can be modified.

Follow @plannotator on X for updates

Missed recent releases?
Release Highlights
v0.27.2 Mobile plan and code review, Codex CLI 0.147 fix, folder annotate cold-start, configurable markdown extensions
v0.27.1 Open-in-editor launch fix, file headers respect Viewed/Git-add visibility toggles
v0.27.0 Call Flow analysis, --tailscale remote reviews, review panel remembers your view, Pi rebuild (breaking command rename), focus-mode shortcut
v0.26.8 Placed comment markers on HTML pages, shift-click multi-select, live app annotation
v0.26.7 Pinpoint targets any element on HTML pages, smarter hover labels, zero-scan hit testing
v0.26.6 Fixed empty environment variables in sandboxed sessions (Bun 1.3.14 builds)
v0.26.5 HTML pinpoint element annotations, durable annotate submissions, installer fallback for old git, vim HUD cursor fix
v0.26.4 Skill-menu hover jitter fix (same-day patch on v0.26.3)
v0.26.3 Skill references in comments with / or $, reachable remote session URLs, worktree switcher tooltips
v0.26.2 Single-file diff tabs render fully, no more silently dropped review files, light/dark theme pairs, palette-matched code blocks
v0.26.1 GitButler 0.22.0 compatibility via capability-probed JSON flags
v0.26.0 Edit Mode (suggest by editing the diff), Guided Review virtualization, colorblind theme, safe uninstall, installer opt-outs, OpenCode 2 support

What's New in v0.27.3

One fix on top of v0.27.2. If you are coming from an earlier version, the full v0.27.2 notes follow below; v0.27.3 is that release plus:

Folder annotate no longer freezes the session on large repos

Community-reported within hours of v0.27.2: opening a folder annotate session on a repo with hundreds of directories could freeze the entire local server while the file-tree watcher ran its initial scan, and a browser reconnect rebuilt the watcher from scratch, so on big repos the freeze fed itself and file switching appeared permanently dead. The bug predates v0.27.2 by six releases; the reporter's repo was simply large enough to make it unbearable.

Three changes close the whole class: the watcher now warms up off the request path, so the session answers immediately while the scan runs behind it; disconnects reuse the warm watcher for 30 seconds instead of rescanning, which breaks the freeze loop; and macOS and Windows now use the operating system's native recursive watcher, measured at about 3ms to start versus 9 seconds for the previous scan on a 228-directory repo. The regression test pins it: a nested 780-directory tree that blocked the server for 79 seconds before now answers in under one second, and that test runs in CI so this cannot quietly return.

Reported by @abanoub-ashraf in #1313.

This is also the first release whose pipeline publishes a CycloneDX SBOM and attests it alongside the existing build provenance.


What's New in v0.27.2

Plannotator now works on your phone. This release ships a full mobile experience for plan review, code review, and annotation, alongside a security hardening pass, a fix for Codex review jobs on current Codex CLI versions, a large folder-mode performance win, and configurable markdown extensions. Fourteen PRs, including a community fix from @leoreisdias and a community-requested feature from @sgiath.

Plan and code review on phones and tablets

Review a plan from your couch. Approve a diff from the train. Plannotator's plan review, code review, and annotate surfaces now adapt to phones and tablets with a compact touch experience: full-width reading layouts, a full-screen navigator for files and contents, touch-safe comment composition that stays clear of the software keyboard, 44px touch targets, and safe-area-aware layouts that respect notches and home indicators. On iPhone Safari, plans use the browser's natural document scroll so the address bar collapses as you read.

Desktop behavior is unchanged. The compact experience activates only on coarse-pointer devices at tablet widths and below, so a narrow desktop window keeps the workspace you know. Pair it with v0.27.0's --tailscale flag or remote mode and your phone becomes a first-class review device: start a review on your workstation, scan the QR code, and annotate from anywhere on your tailnet.

This shipped as a five-part stack: viewport and safe-area foundation, keyboard-safe comment composition, touch and dialog primitives, the code review shell, and the plan shell.

Codex review jobs work again on current Codex CLIs

Codex CLI 0.147.0 removed the --full-auto flag, which broke every Plannotator Codex review, Guided Review, and Code Tour job at launch with an argument error. Plannotator now passes --approve-for-me, the flag Codex introduced as its replacement, across all three job builders.

Note the floor this implies: Codex review jobs now require codex-cli 0.147.0 or newer. Older Codex CLIs do not recognize the new flag. Thanks to @tgenov for independently reporting the breakage and pushing on a read-only sandbox for review jobs, an idea now tracked in #1310.

Folder annotate opens in milliseconds on large repos

Opening a folder annotate session initialized a file watcher across the entire .git/refs tree to keep git status live in the file browser. On repos with hundreds of branches and tags that took 9 to 23 seconds before the first file selection was responsive. The watcher now targets the five specific git files that drive status display (HEAD, index, the reflog, packed-refs, and the current branch ref), bringing cold start to about 30ms on the same repos with the same live status behavior.

Annotate any markdown-like file with configurable extensions

Livebook notebooks, Quarto documents, and other markdown-dialect files were rejected by annotate because the accepted extensions were hardcoded. A new config-only setting registers extra extensions to treat as markdown:

{ "markdownExtensions": [".livemd"] }

in ~/.plannotator/config.json. Listed extensions are accepted everywhere annotate accepts .md: the CLI, the folder file browser, linked-doc and wiki-link navigation, frontmatter stripping, and version history. Entries are validated hard, and dotenv-family extensions can never be registered since annotate history copies file contents. Requested by @sgiath in #1307.

Security hardening across the supply chain

Four security-focused changes landed in this cycle:

  • Pi 0.79+ required. The Pi extension now requires Pi 0.79.1 or newer and refuses older hosts with a clear message instead of running with weaker project-trust behavior. If you are on an older Pi, update Pi first. #1291
  • Continuous scanning. Semgrep CE and Trivy now run on every PR and weekly in monitor mode, with fail-closed scanner health checks and pinned, checksum-verified tooling. #1294
  • Weekly DAST. An isolated OWASP ZAP passive scan runs weekly against a disposable annotate session on an internal-only network with no credentials and blocked egress. #1299
  • Marketing site on Astro 7. plannotator.ai moved from Astro 5 to 7.1.6, clearing eight dependency advisories. #1293

Additional Changes

  • New reviewers start in Tree view. First-time code revie...
Read more