Follow @plannotator on X for updates
Missed recent releases?
| Release | Highlights |
|---|---|
| v0.14.4 | GitHub review submission, repo identifier in tab title, nested code fence parser fix, Pi paste URL wiring, file header gap fix |
| v0.14.3 | PR context panel, diff search in code review, OpenCode permission normalization, landing page redesign |
| v0.14.2 | OpenCode plan mode prompt replacement, Windows non-ASCII path fix, Pi link fix |
| v0.14.1 | Single submit_plan with auto-detect, viewed-file draft persistence, Bear nested tag fix |
| v0.14.0 | PR review via GitHub URL, /plannotator-last for annotating agent messages, OpenCode plan mode permissions fix, VS Code SSH proxy fix
|
| 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 |
What's New in v0.14.5
v0.14.5 adds GitLab merge request review support, bringing Plannotator's code review UI to a second hosting platform. Two community bug fixes round out the release. 3 PRs, 2 from external contributors, 1 first-time.
GitLab Merge Request Review
Plannotator can now review GitLab merge requests alongside GitHub PRs. Pass any GitLab MR URL to the review command and it works the same way: diff viewer, annotations, feedback submission, and the new PR context panel (summary, comments, pipeline status).
The platform is auto-detected from the URL. github.com routes through gh, and any URL containing /-/merge_requests/ routes through glab. Self-hosted GitLab instances are supported via the --hostname flag.
Under the hood, the existing GitHub implementation was extracted to packages/shared/pr-github.ts, and a parallel pr-gitlab.ts handles glab CLI interactions. The dispatch layer in pr-provider.ts routes by platform. The PRRef and PRMetadata types are now discriminated unions that carry the platform context throughout the stack.
GitLab's API surface differs from GitHub's in several ways that required specific handling. glab mr diff outputs bare diffs without the diff --git prefix, so the output is normalized before parsing. glab has no --jq flag, so JSON responses are parsed in full. Review submission requires three separate API calls (note, discussions, approve) rather than GitHub's single atomic endpoint, with inline comments submitted in parallel using Promise.allSettled for partial failure resilience.
The UI adapts to the platform: labels switch between PR/MR, icons between GitHub/GitLab, and issue number prefixes between # and !.
Annotate-Last Session Resolution After cd
/plannotator-last silently annotated the wrong message when a user changed directories during a Claude Code session. The command resolves the current session by matching process.cwd() against Claude Code's project slug, but after a cd the CWD no longer matches the session's original directory. The result: it finds a stale session from a previous day and opens that session's last message with no warning.
The fix introduces three-tier session resolution. First, it checks for PPID-based session metadata that Claude Code writes to ~/.claude/sessions/. If that's not available, it falls back to CWD-based slug matching, then to a recency heuristic. The PPID path is the most reliable because it ties directly to the running Claude Code process regardless of the shell's current directory.
This is a Claude Code-only bug. Codex uses CODEX_THREAD_ID, OpenCode and Pi use their SDK APIs, and none of them resolve sessions via CWD.
Additional Changes
- Fix duplicate Code Review header in Pi extension — the Pi extension's review command handler wrapped feedback in a
# Code Review Feedbackheading, butexportReviewFeedback()already includes that heading. The duplicate is removed, and two tests verify single-heading output. By @dmmulroy in #370.
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: Run /plugin in Claude Code, find plannotator, and click "Update now".
OpenCode: Clear cache and restart:
rm -rf ~/.bun/install/cache/@plannotatorThen in opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}Pi: Install or update the extension:
pi install npm:@plannotator/pi-extensionWhat's Changed
- feat: GitLab merge request review support by @backnotprop in #364
- fix: annotate-last resolves wrong session after cd by @janah01 in #366
- fix: remove duplicate 'Code Review' header in pi extension review feedback by @dmmulroy in #370
New Contributors
Contributors
@janah01 identified and fixed a subtle session resolution bug in /plannotator-last that caused it to silently annotate the wrong message after cd-ing during a Claude Code session. The three-tier resolution strategy in #366 ensures the command finds the correct session regardless of the shell's current directory.
@dmmulroy fixed the duplicate heading in Pi extension review feedback in #370, his second contribution after wiring the paste URL in v0.14.4.
Full Changelog: v0.14.4...v0.14.5