github backnotprop/plannotator v0.14.0

7 hours ago

Follow @plannotator on X for updates


Missed recent releases?
Release Highlights
v0.13.1 OpenCode plan mode rewrite, Obsidian save fix
v0.13.0 Built-in themes, annotatable plan diffs, file-scoped code review comments, Octarine integration, unified review core, Pi remote sessions
v0.12.0 Quick annotation labels, mobile compatibility, Graphviz rendering, markdown images with lightbox, linked doc navigation in annotate mode
v0.11.4 Git add from code review, bidirectional scroll navigation, clipboard paste for annotation images, VS Code IPC port stability
v0.11.3 Expandable diff context, hierarchical folder tree, redesigned worktree controls, supply chain hardening
v0.11.2 Git worktree support in code review, VS Code editor annotations in review, Obsidian auto-save & separator settings, session discovery, smart file resolution
v0.11.1 VS Code extension for in-editor plan review, Pinpoint mode for point-and-click annotations, untracked files in code review
v0.11.0 Auto-save annotation drafts, comment popover, Obsidian vault browser, deny message framing fix, configurable OpenCode timeout
v0.10.0 Short URL sharing with E2E encryption, code suggestions in review UI, CJK input method support, customizable Obsidian filenames, XDG install fix
v0.9.3 Linked document navigation & annotation, VS Code diff integration, toolbar dismiss fix, automated npm publishing
v0.9.0 Plan Diff with two view modes, version history, sidebar redesign, terminology cleanup

What's New in v0.14.0

v0.14.0 adds PR review via GitHub URL, a new /plannotator-last command for annotating agent messages, and a batch of fixes for OpenCode plan mode, the VS Code extension over SSH, and the review server. Seven of the nine PRs address user-reported issues. Three external contributors authored fixes, two of them first-time.

PR Review via GitHub URL

/plannotator-review now accepts a GitHub pull request URL. Run /plannotator-review https://github.com/owner/repo/pull/123 and the review UI opens with the PR's diff, metadata badge (title, number, link back to GitHub), and full annotation support. Authentication goes through the gh CLI, so private repos work if you're already authenticated. Expandable file context fetches from the GitHub API using the PR's base and head SHAs.

In PR mode, the diff switcher and staging buttons are hidden since you're reviewing a remote PR, not local changes. Everything else works the same: annotate lines, leave file-level comments, send feedback back to the agent.

The implementation introduces a runtime-agnostic PR provider (packages/shared/pr-provider.ts) that follows the same interface pattern as the existing ReviewGitRuntime, with a Bun wrapper in packages/server/pr.ts.

Annotate Last Agent Message

/plannotator-last extracts the last rendered assistant message from the current session and opens it in the annotation UI. Select text, add comments, mark deletions, attach images, and send structured feedback back to the agent. This works across all four harnesses:

Harness How it finds the message
Claude Code Parses ~/.claude/projects/{slug}/*.jsonl session logs
Pi ctx.sessionManager.getEntries() API
OpenCode client.session.messages() SDK
Codex Parses ~/.codex/sessions/ rollout JSONL files

The UI adapts to the annotate-last context: the copy button reads "Copy message," the completion overlay says "annotations on the message," and the feedback export is titled "Message Feedback."

OpenCode Plan Mode Permissions and Prompt Fixes

v0.13.1 rewrote OpenCode plan mode, but OpenCode's upstream prompt and permission system fought the plugin at several points. The agent would get PermissionDeniedError when writing .md files in the plan directory. OpenCode's "STRICTLY FORBIDDEN" plan mode directive confused models into refusing file edits even when explicitly allowed. The submit_plan tool appeared outside of plan mode, leading to confusing agent behavior.

This release fixes all of that. The plugin now grants per-agent edit permission for *.md scoped to the plan agent only. It strips OpenCode's conflicting plan mode prompt from synthetic user message parts. It overrides the todowrite tool description to redirect to submit_plan, and injects a <system-reminder> reinforcing plan mode behavior on every turn. The validatePlanPath directory restriction is disabled so plans can be written anywhere the agent chooses within the XDG data path.

VS Code SSH Remote: Proxy Race Condition and IPC Discovery

Two issues prevented the VS Code extension from working reliably over SSH Remote. First, the cookie proxy connected to the upstream Bun server before it was ready, showing "proxy error" on first load. The fix adds retry with exponential backoff (200/400/800ms) in the proxy, plus a silent auto-reload fallback in the webview wrapper.

Second, background processes spawned by Claude Code hooks don't inherit VS Code's PLANNOTATOR_BROWSER environment variable, so openBrowser() had no way to reach the extension. The fix introduces a file-based IPC registry at ~/.plannotator/vscode-ipc.json. The extension writes its IPC port keyed by workspace path, and openBrowser() reads it as a fallback. Multi-window setups are handled via longest-prefix workspace matching.

Additional Changes

  • Review server CWD context flow — In tmux/server/attach setups, the OpenCode review server could use the wrong working directory for diff commands. The review flow now carries cwd as explicit session context via GitContext, so all endpoints (/api/diff, /api/file-content, /api/git-add) use the correct project directory. Authored by @jwyce in #323
  • Disable external diff in git commands — Review-related git diff calls now include --no-ext-diff so external diff tools configured in the user's git config don't corrupt the output. Authored by @BruceChen7 in #320
  • /plannotator-last documentation — Docs and install scripts updated for the new command (#327)

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

Then in opencode.json:

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

Pi: Install or update the extension:

pi install npm:@plannotator/pi-extension

What's Changed

  • fix(review): disable external diff in git commands by @BruceChen7 in #320
  • fix: proxy race condition + IPC discovery for VS Code SSH Remote by @7tg in #322
  • fix: opencode review cwd context flow by @jwyce in #323
  • feat: PR review support via GitHub URL by @backnotprop in #324
  • feat: /plannotator-last — annotate the last agent message by @backnotprop in #325
  • feat: add release process skill by @backnotprop in #326
  • docs: add /plannotator-last to docs and install scripts by @backnotprop in #327
  • fix: OpenCode plan mode permissions and prompt conflicts by @backnotprop in #329
  • fix: comment out failing validatePlanPath containment tests by @backnotprop in #330

New Contributors

Contributors

@7tg continues improving VS Code's remote experience. After fixing SSH browser launch in v0.12.0 (#274), this release tackles the proxy race condition and IPC discovery gap that caused "proxy error" on webview open (#322). Both the bug report (#321) and the fix came from @7tg, with a thorough diagnosis of the startup timing and environment variable inheritance issues.

@jwyce authored the review CWD context fix (#323), ensuring the review server uses the correct project directory in tmux and server-attach workflows. First contribution.

@BruceChen7 fixed external diff tool interference in review git commands (#320). First contribution.

Community members who reported issues and participated in discussions that shaped this release:

  • @linxi-1214: #328 (submit_plan not appearing after plan mode, with screenshots comparing expected vs actual behavior)
  • @ilmpc: #328 (confirmed the issue and identified OpenCode's changed plan prompt as the root cause)
  • @rcdailey: #328 (reported submit_plan visible outside plan mode, confusing the agent)

Full Changelog: v0.13.1...v0.14.0

Don't miss a new plannotator release

NewReleases is sending notifications on new releases.