* 🐛 fix: force standard a/b diff prefix to handle mnemonic prefix config When diff.mnemonicPrefix is enabled in git config, `git diff` uses context-dependent prefixes (c/ for commit, w/ for worktree, i/ for index) instead of the standard a/b. Both the internal parseDiffToFiles and @pierre/diffs library expect a/b prefixes, causing silent parse failures that result in an empty file list. Add --src-prefix=a/ --dst-prefix=b/ to all git diff invocations to ensure consistent output regardless of user git configuration. * ✨ feat: propagate git diff errors to review UI Previously, git diff errors were silently caught and returned as empty patches. The UI showed "No changes" with no indication of failure. - Add error field to DiffResult and propagate through ReviewServerOptions - Include error in /api/diff and /api/diff/switch responses - Show distinct error state in review UI (red icon + error message) - Clear/set error state on diff type switch * Fix mnemonic prefix handling in pi-extension runGitDiff Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Michael Ramos <mdramos8@gmail.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Plannotator
Interactive Plan Review for AI Coding Agents. Mark up and refine your plans using a visual UI, share for team collaboration, and seamlessly integrate with Claude Code, OpenCode, and Pi.
Claude Code
|
OpenCode
|
Features
| Visual Plan Review | Built-in hook | Approve or deny agent plans with inline annotations |
| Plan Diff | Automatic | See what changed when the agent revises a plan |
| Code Review | /plannotator-review | Review git diffs with line-level annotations |
| Annotate Any File | /plannotator-annotate | Annotate any markdown file and send feedback to your agent |
Sharing Plans
Plannotator lets you privately share plans, annotations, and feedback with colleagues. For example, a colleague can annotate a shared plan, and you can import their feedback to send directly back to the coding agent.
Plans are shared via compressed URL through a static site: share.plannotator.ai
- No backend or database; nothing is stored
- The site's deployment is open source
- You can self-host your own share site and point Plannotator to it via an environment variable (see docs)
Note
share.plannotator.ai uses a default fallback (demo) plan that is hard-coded into the site. This isn't a leaked plan—the site has no storage layer.
Install
Install for Claude Code
Install the plannotator command:
macOS / Linux / WSL:
curl -fsSL https://plannotator.ai/install.sh | bash
Windows PowerShell:
irm https://plannotator.ai/install.ps1 | iex
Then in Claude Code:
/plugin marketplace add backnotprop/plannotator
/plugin install plannotator@plannotator
# IMPORTANT: Restart Claude Code after plugin install
See apps/hook/README.md for detailed installation instructions including a manual hook approach.
Install for OpenCode
Add to your opencode.json:
{
"plugin": ["@plannotator/opencode@latest"]
}
Run the install script to get /plannotator-review:
curl -fsSL https://plannotator.ai/install.sh | bash
Windows:
irm https://plannotator.ai/install.ps1 | iex
This also clears any cached plugin versions. Then restart OpenCode.
Install for Pi
pi install npm:@plannotator/pi-extension
Then start Pi with --plan to enter plan mode, or toggle it during a session with /plannotator.
See apps/pi-extension/README.md for full usage details, commands, and flags.
How It Works
When your AI agent finishes planning, Plannotator:
- Opens the Plannotator UI in your browser
- Lets you annotate the plan visually (delete, insert, replace, comment)
- Approve → Agent proceeds with implementation
- Request changes → Your annotations are sent back as structured feedback
License
Copyright 2025-2026 backnotprop
This project is licensed under either of
- Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
