PLAN
NOTATOR
Visual plan review and annotation for AI coding agents. Mark up plans in your browser, approve or reject changes, and send structured feedback straight back to the agent — works with Claude Code, Codex, Gemini CLI, OpenCode and more.
Plannotator integrates with 6 AI coding agents. Click a tab to see its specific install and command details.
Add the plugin inside Claude Code
Activates automatically when Claude Code enters plan mode — no extra command needed.
Install the plannotator binary (same as all agents)
Plan mode is not yet supported in Codex. Only review and annotate commands are available.
Install the binary — Gemini auto-detected
Requires Gemini CLI version 0.36.0 or later. Run gemini --version to check.
Add to opencode.json, then run install script
Always restart OpenCode after adding the plugin or running the install script to clear cached plugin versions.
Install binary, then add two plugins in Copilot CLI
Use Shift+Tab inside Copilot CLI to enter plan mode. Plannotator activates automatically.
Install via Pi's own package manager
Plannotator works with AI coding agent CLIs — not the Claude.ai browser chat. Make sure you have Node.js installed, and the CLI tool for whichever agent you use.
Install the Bun runtime Windows
Plannotator requires Bun as its package manager. Run in PowerShell, then restart your terminal:
Install the plannotator command Windows
This installs the plannotator system command used by all supported agents:
Pick your agent and install it
Install whichever agent(s) you want to use with Plannotator:
Add Plannotator to your agent
See the Supported Agents section above or jump to the specific agent tutorial below for exact registration steps — each agent is slightly different.
Run plannotator --version in a terminal. If you see a version number, the binary is installed correctly.
The core feature is Plan Review — it activates automatically when your agent enters plan mode.
Ask agent
to plan
Browser
opens
Annotate
the plan
Approve or
send feedback
Agent
proceeds
Start your agent in a project folder
Navigate to your project and launch the agent, then ask it to plan something:
Use the visual browser UI
When plan mode activates, your browser opens automatically. You can:
- 🟡 Highlight sections to add comments
- 🔴 Delete parts of the plan you don't want
- 🟢 Insert new instructions or steps
- 🔵 Replace sections with your own wording
Send your decision back to the agent
- ✅ Approve — agent proceeds with implementation immediately
- 🔄 Request Changes — annotations sent back as structured feedback, agent revises the plan
Review git diffs visually NEW
Open a visual diff of your current uncommitted changes, or review a PR:
Annotate any markdown file and send feedback back
Share plans with colleagues
- 📎 Small plans — encoded entirely in the URL, nothing stored on any server
- 🔐 Large plans — AES-256-GCM encrypted before upload, auto-deletes after 7 days
Share URL with colleague → they annotate it → you import their feedback → send back to the agent.
Lock to a specific version for stability
Every release ships with SHA256 checksum + SLSA provenance (v0.17.2+).
🛠 Install Commands
irm bun.sh/install.ps1 | iexInstall Bun runtimeirm plannotator.ai/install.ps1 | iexInstall plannotator binarynpm i -g @anthropic-ai/claude-codeInstall Claude Codenpm i -g @openai/codexInstall Codex CLIplannotator --versionVerify install
⚡ Claude Code Commands
/plugin marketplace add backnotprop/plannotatorRegister plugin/plannotator-reviewReview current diff/plannotator-review <url>Review a PR/plannotator-annotate <file>Annotate a file/plannotator-lastAnnotate last message/plannotator-archive🔮 Browse all past decisions
🔷 Codex CLI Commands
!plannotator reviewReview current diff!plannotator review <url>Review a PR!plannotator annotate <file>Annotate a file!plannotator lastAnnotate last message
💎 Gemini / 🟣 OpenCode
/planGemini: enter plan mode/plannotator-reviewCode review (both)/plannotator-annotate <file>Annotate file (both)pi install npm:@plannotator/pi-extensionPi install/plannotatorPi: toggle plan mode
🎯 Plan Review Actions
ApproveAgent proceeds with implementationRequest ChangesSend annotations as feedbackHighlight → CommentAdd note to a sectionSelect → DeleteRemove a plan sectionSelect → ReplaceRewrite a sectionSelect → InsertAdd a new step
🔧 Advanced
-Version vX.Y.ZPin a specific versionbun installInstall deps from sourcebun run build:reviewBuild review app firstbun run buildBuild everythingplannotator --versionCheck current version
🔮 Hidden CLI Commands
plannotator sessionsList active server sessionsplannotator sessions --open NReopen closed browser sessionplannotator sessions --cleanRemove stale session filesplannotator archiveBrowse saved plan decisionsplannotator improve-contextInvoke custom context hookplannotator copilot-planCopilot CLI plan interceptionplannotator copilot-lastCopilot CLI last messageplannotator --helpFull hidden command list
🏴 Hidden Flags
--browser "Firefox"Override browser globally--no-jinaDisable Jina Reader for URLs--no-localSkip local checkout for PR review--localForce local checkout (PR review)
⛔ Rejected / Never Do This
npm install❌ Will fail — repo requires Bun (workspace:*protocol)bun run build(first)❌ Silently copies stale HTML — alwaysbuild:reviewfirstplannotator(no args, non-interactive)❌ Reserved for hook JSON on stdin; usereview/annotate/plannotator-reviewin Codex❌ Use!prefix in Codex, not//planin Codex❌ Plan mode not supported in Codex yetAdding JWT/API keys to annotations❌ Annotations are stored in plaintext on diskSharing plans with secrets❌ Large plans go to share service — encrypt client-side firstPLANNOTATOR_PORT=80 / 443❌ Requires root; use 9xxx range instead
🚦 Troubleshooting
| Problem | Fix |
|---|---|
| npm error EUNSUPPORTEDPROTOCOL | Use bun install not npm install — this repo requires Bun |
| claude: command not found | Run npm install -g @anthropic-ai/claude-code then restart terminal |
| Browser doesn't open automatically | Restart your agent CLI after plugin install; check plannotator is in PATH |
| build:hook fails with cp error | Run bun run build:review first, then bun run build |
| Plugin not found in marketplace | Must be inside a Claude Code / Copilot CLI session — not Claude.ai browser chat |
| Gemini plan mode not triggering | Requires Gemini CLI 0.36.0 or later — run gemini --version to check |
Claude Code has the deepest Plannotator integration — automatic plan interception, visual review, annotations, and team sharing all work out of the box.
Install Claude Code and the plannotator binary
Launch Claude Code and register the plugin
Restart Claude Code after the plugin installs.
Use it — ask Claude to plan something
Your browser will open automatically with the visual plan UI.
Codex supports code review and annotation commands, but plan mode is not yet available. Commands use ! prefix instead of /.
Install Codex CLI and the plannotator binary
Launch Codex and use plannotator commands
Gemini CLI gets full plan mode + code review support. The installer auto-detects Gemini by checking for ~/.gemini. Requires Gemini CLI 0.36.0+.
Install Gemini CLI and run the plannotator installer
Use Plannotator inside Gemini CLI
OpenCode uses a JSON config file for plugins. After adding the plugin entry and running the installer, restart OpenCode to activate.
Add plannotator to your opencode.json config
Find or create opencode.json in your project root:
Run the installer to download binary and clear plugin cache
Restart OpenCode after this step.
Use plannotator inside OpenCode
These are real prompts and workflows you can copy directly into your agent session.
Ask Claude to plan a code refactor, then annotate it
Start a Claude Code session in your project folder, then ask:
When the browser opens, you can:
- 🟡 Highlight the JWT section and add a comment: "Use RS256 not HS256 for production"
- 🔴 Delete any steps touching files you don't want changed
- ✅ Approve — Claude proceeds with your feedback baked in
Plan a new feature before any code is written
Use Request Changes to send back: "Also add a system preference detection on first load" — Claude will revise the plan and resubmit for another round of review.
Review an open GitHub Pull Request visually
Inside Claude Code, run:
In the browser, annotate specific lines of the diff. Then click Send Feedback — your annotations are sent back to Claude as structured context so it can explain or fix the code inline.
Mark up an architecture markdown file
Great for reviewing AI-generated design docs, sprint plans, or README files before accepting them. Your annotations become feedback Claude acts on immediately.
Share a plan with a colleague for their review
- Claude presents a plan → Plannotator opens in your browser
- Click the Share button — copies a URL to clipboard
- Send the URL to your colleague (Slack, Teams, email)
- They open the URL, add their own annotations, click Export Link
- You import their annotated link → all feedback merged
- Click Send to Agent — combined feedback goes back to Claude
Large plans are AES-256-GCM encrypted before upload. The server never sees the content — only you and whoever has the URL can read it.
Using Plannotator over SSH or in a devcontainer
Set these environment variables before launching your agent:
These variables let you customise Plannotator's behaviour without changing any code. Set them in your shell profile or .env file.
| Variable | Values | Description |
|---|---|---|
| PLANNOTATOR_REMOTE | 1 / 0 / unset | Force remote mode (SSH/devcontainer). Unset = auto-detect via SSH env vars. |
| PLANNOTATOR_PORT | number | Fixed port to use. Default: random locally, 19432 for remote sessions. |
| PLANNOTATOR_BROWSER | path/name | Custom browser to open plans in. macOS: app name. Linux/Windows: executable path. |
| PLANNOTATOR_SHARE | disabled | Set to disabled to turn off URL sharing entirely. Default: enabled. |
| PLANNOTATOR_SHARE_URL | URL | Custom base URL for share links if you self-host the portal. Default: https://share.plannotator.ai. |
| PLANNOTATOR_JINA | 0 / 1 | Disable/enable Jina Reader for URL annotation. Default: enabled. Also configurable in ~/.plannotator/config.json. |
| JINA_API_KEY | string | Optional Jina Reader API key for higher rate limits (500 RPM vs 20 RPM unauthenticated). Free keys include 10M tokens. |
| PLANNOTATOR_VERIFY_ATTESTATION | 1 / true | Run gh attestation verify on every install for supply-chain security. Requires gh CLI installed and authenticated. |
Create ~/.plannotator/config.json to set options permanently without environment variables:
Never rubber-stamp a plan
The whole point of Plannotator is to keep you in the loop. Even if the plan looks good, scan each section — AI agents can make subtle scope creep mistakes or touch files you didn't intend. Use highlights to mark sections you want to watch.
Iterate until the plan is exactly right
Don't approve a plan that's 80% right. Click Request Changes with specific annotations — the agent will revise and resubmit. The Plan Diff feature shows exactly what changed between versions so you can see if your feedback was addressed.
Look for the +N / -M badge below the plan card. Click it to toggle between normal view and git-style diff view to see exactly what the agent revised.
Write actionable comments, not vague ones
- ❌ Bad: "I don't like this"
- ✅ Good: "Use dependency injection here instead of importing directly — makes unit testing easier"
- ❌ Bad: "Change the database part"
- ✅ Good: "Use a transaction here — both inserts must succeed or fail together"
Don't use latest in automated or team setups
If your team uses Plannotator in CI or shared dev environments, pin a specific version to avoid surprise breaking changes:
Every decision is saved automatically
All approved and denied plans are saved to ~/.plannotator/plans/ with full version history under ~/.plannotator/history/. Browse them any time via the Archive sidebar tab in any active session. Useful for understanding why a codebase evolved a certain way.
Plannotator isn't just for agent-generated plans
You can annotate any URL, HTML file, or markdown file and send feedback back to the agent:
Everything you need to build on top of, extend, or contribute to Plannotator.
Key folders to know
Run the dev servers
Build order matters — always follow this sequence
The hook build copies pre-built HTML from the review app. If you skip the review build, you'll get stale files.
Running only bun run build after changing review-editor code will silently copy stale HTML. Always run build:review first.
Server API surface (all servers use random port locally, 19432 in remote)
Inject annotations from external tools programmatically
Any tool (linters, CI, custom scripts) can push annotations into the active Plannotator session via the REST API:
How to submit a contribution
- Fork the repo at github.com/backnotprop/plannotator
- Run
bun installandbun run dev:hookto verify the dev environment works - Make your changes — if touching server endpoints, update both the Bun server (
packages/server/) and the Pi server (apps/pi-extension/server/) - Put runtime-agnostic logic in
packages/shared/so all runtimes benefit - Test locally with
claude --plugin-dir ./apps/hook - Submit a Pull Request — dual licensed MIT / Apache 2.0
There are two server implementations with the same API surface — Bun (used by Claude Code + OpenCode) and Node.js (used by Pi). If you add or change any server endpoint, you must update both.