- 代理跑完 plan mode 产出方案时:在浏览器里逐段批注再一键回传,比在终端里读长文本、手打修改意见省事得多,终端里做这件事基本没法定位到具体段落
- 审 PR/MR diff 时:本地改动和 GitHub PR、GitLab MR 走同一套批注界面,评论能直接进代理会话,不用在 GitHub 网页和终端之间来回粘贴
- 多代理并行时:Inbox 汇总各会话的提问和消息,回复能回到发起会话,避免开一堆终端窗口轮询哪个代理在等你
- 用 Jujutsu、Perforce 这类非 Git 主流工作流时:审阅层不绑死 Git,换别的 diff 审阅工具通常只认 Git
plannotator
backnotpropApache-2.0活跃维护 有专家点评给编码 Agent 用的协作工作台,能规划、批注、审查代码,并把反馈一键回传给 Claude Code、Codex 等 Agent。
The workspace to stay in the loop and on top of agents - shape, decide, plan, annotate, review code, share with team, and send all feedback to agents with one click.
专家点评
上手难度:进阶更新于 2026-11-11给 AI 编码代理加一层浏览器审阅界面,把批注和 diff 评论直接回传给代理
适用场景
踩坑
- 安装器只装二进制,代理侧还要按表格配插件或 hooks:Claude Code 要加 marketplace 再装插件并重启,Pi 走 pi install 而非安装器,Gemini CLI 有 0.36.0 版本下限。只跑完 curl 就以为接好了,会在代理侧看不到任何产出
- issue 里反复出现包管理器分发(Homebrew 等)的请求,说明当前安装路径是官方脚本直装二进制;在需要统一软件源、做版本锁定的环境里,升级和回滚要自己管
- 审阅会话的连续性被反复提为 feature request(live updates、agent replies、避免 eager submit_plan),说明当前交互模型偏向一次性提交,代理中途改计划时审阅端的同步行为要自己先验证清楚
同类对比
如果只需要在终端里看 diff 和留评论,不需要浏览器批注回传,用代理自带的 plan review 或常规 PR 审阅流程就够;它的价值集中在「批注要结构化地回到代理会话」这一环,不需要这环就没必要引入。
curl -fsSL https://plannotator.ai/install.sh | bash
irm https://plannotator.ai/install.ps1 | iexREADME 未说明硬件要求,仅说明支持 macOS、Linux、WSL 和 Windows PowerShell 安装
项目说明
由 README 自动翻译提炼给 AI 编码代理做本地浏览器审阅台,批注计划、HTML 和代码后一键把反馈发回代理
给编码 Agent 用的协作工作台,能规划、批注、审查代码,并把反馈一键回传给 Claude Code、Codex 等 Agent。
核心能力
- 通过代理的 hooks 和命令直接接入,代理产出自动在浏览器打开
- 批注计划、规格、Markdown、HTML 等产物并回传反馈
- 审阅本地改动或 GitHub PR、GitLab MR 的 diff 并留评论
- 支持 Git、GitButler、Jujutsu、Perforce 等多种版本控制
- Inbox 汇总多个代理的消息与提问,回复直达发起会话
容易踩的坑
安装器只装二进制,多数代理还需按表格额外配置插件或 hooks;Claude Code 需先添加 marketplace 再安装插件并重启;Pi 不走安装器,改用 pi install npm:@plannotator/pi-extension;Gemini CLI 需 0.36.0 以上版本
- v0.28.61最新正式版2026-11-10 · 2026-11-10 22:33 UTC
Follow @plannotator on X for updates
Release Highlights v0.28.60 Click a word to highlight it, a one-time Themes dialog, Settings → Rows rebuilt, tell your agent how you want your rows, starred threads as pills above the list, a pill for new messages out of view, a half-circle face picker with ten Glass colours, a new phone sidebar and reply box v0.28.59 A quieter Agents section in the sidebar, machine names only when agents run on more than one machine, agent icons that are always gently alive and lean toward your pointer v0.28.58 Start Codex from New message, an Agents section in the sidebar, start an agent in a folder on any drive, play audio attachments and comment at a moment, Claude Code's Plannotator tools work on Windows v0.28.57 Pin artifacts, and see every artifact on one page, filter the list by project, date or agent, a thread shows its pull requests and their state, choose what the sidebar shows, and in what order, Ask AI starts from Side in the selection bar v0.28.56 Questions can show trade-offs and a prototype to try, a thread with many big pictures no longer crashes the tab, Escape closes New message and keeps your draft, read threads stop being bold and keep their place, agent messages that name no thread start a new one v0.28.55 Floating reply drafts, now a setting under Experimental, open questions sit next to Reply again, a comment box that keeps unsent comments as Drafts, choose how your list looks: Minimal, Balanced or Detailed, update an older linked machine from this Inbox v0.28.53 Start an agent in a new folder, or from a git URL, "+" on each project row starts a session there, a reaction tray, a thread's Links, Settings → Activity, New message offers the open thread's files, Bro mode: agents write to you in plain words v0.28.52 Start agents from the Inbox, on by default, a new reply box, Ask AI for everyone, Insights in Settings → Decision data, Plannotator reloads itself after an update v0.28.51 Starred threads, a note when an agent's session has ended, "Back from snooze", Ask about a past decision, expand arrows in guided reviews v0.28.50 A faster, lighter Inbox, session names across the Inbox, initiatives on the Board, earlier comments on a file, global comments on Guided Reviews v0.28.49 A checklist for each thread, a pill that shows who gets your reply, a calmer full screen, Inbox replies in T3 Code, --titlefor review and annotatev0.28.48 Reply attachments that follow the draft, links to any web page on Board cards, instant theme switches, a daily anonymous ping, a faster Inbox What's New in v0.28.61
TL;DR
- Fixed: Updates now update the Claude Code plugin too
- New: An agent's chosen face shows on every icon of it
- New: Filter the Inbox list by pull request state
- Fixed: Modern dark shows section bands and the Reply button
- Fixed: One conversation no longer shows as two agents
0.28.61 is a small patch release. Its main fix makes an update bring the Claude Code
- v0.28.602026-11-10 · 2026-11-10 11:51 UTC
查看更新说明
Follow @plannotator on X for updates
Release Highlights v0.28.59 A quieter Agents section in the sidebar, machine names only when agents run on more than one machine, agent icons that are always gently alive and lean toward your pointer v0.28.58 Start Codex from New message, an Agents section in the sidebar, start an agent in a folder on any drive, play audio attachments and comment at a moment, Claude Code's Plannotator tools work on Windows v0.28.57 Pin artifacts, and see every artifact on one page, filter the list by project, date or agent, a thread shows its pull requests and their state, choose what the sidebar shows, and in what order, Ask AI starts from Side in the selection bar v0.28.56 Questions can show trade-offs and a prototype to try, a thread with many big pictures no longer crashes the tab, Escape closes New message and keeps your draft, read threads stop being bold and keep their place, agent messages that name no thread start a new one v0.28.55 Floating reply drafts, now a setting under Experimental, open questions sit next to Reply again, a comment box that keeps unsent comments as Drafts, choose how your list looks: Minimal, Balanced or Detailed, update an older linked machine from this Inbox v0.28.53 Start an agent in a new folder, or from a git URL, "+" on each project row starts a session there, a reaction tray, a thread's Links, Settings → Activity, New message offers the open thread's files, Bro mode: agents write to you in plain words v0.28.52 Start agents from the Inbox, on by default, a new reply box, Ask AI for everyone, Insights in Settings → Decision data, Plannotator reloads itself after an update v0.28.51 Starred threads, a note when an agent's session has ended, "Back from snooze", Ask about a past decision, expand arrows in guided reviews v0.28.50 A faster, lighter Inbox, session names across the Inbox, initiatives on the Board, earlier comments on a file, global comments on Guided Reviews v0.28.49 A checklist for each thread, a pill that shows who gets your reply, a calmer full screen, Inbox replies in T3 Code, --titlefor review and annotatev0.28.48 Reply attachments that follow the draft, links to any web page on Board cards, instant theme switches, a daily anonymous ping, a faster Inbox v0.28.47 Board lanes, Settings → Rows, a new thread header, a "Make it yours" tour step, Request guided review, Jira links on Board cards What's New in v0.28.60
TL;DR
- New: Click a word to highlight it, in plan review, annotate and documents opened from an Inbox thread
- New: A one-time Themes dialog, shown about 15 seconds after the Inbox opens
- New: Settings → Rows is rebuilt: your own list stays in view, plain choices, Undo, a Dense look and a Pull requests switch
- New: Tell your agent how you want your rows, from Settings → Rows or with
plannotator inbox rows - New: Starred threads as pills above the list, when you turn on "Keep starred above the list"
- New: A pil
- v0.28.592026-11-10 · 2026-11-10 02:17 UTC
查看更新说明
Follow @plannotator on X for updates
Release Highlights v0.28.58 Start Codex from New message, an Agents section in the sidebar, start an agent in a folder on any drive, play audio attachments and comment at a moment, Claude Code's Plannotator tools work on Windows v0.28.57 Pin artifacts, and see every artifact on one page, filter the list by project, date or agent, a thread shows its pull requests and their state, choose what the sidebar shows, and in what order, Ask AI starts from Side in the selection bar v0.28.56 Questions can show trade-offs and a prototype to try, a thread with many big pictures no longer crashes the tab, Escape closes New message and keeps your draft, read threads stop being bold and keep their place, agent messages that name no thread start a new one v0.28.55 Floating reply drafts, now a setting under Experimental, open questions sit next to Reply again, a comment box that keeps unsent comments as Drafts, choose how your list looks: Minimal, Balanced or Detailed, update an older linked machine from this Inbox v0.28.53 Start an agent in a new folder, or from a git URL, "+" on each project row starts a session there, a reaction tray, a thread's Links, Settings → Activity, New message offers the open thread's files, Bro mode: agents write to you in plain words v0.28.52 Start agents from the Inbox, on by default, a new reply box, Ask AI for everyone, Insights in Settings → Decision data, Plannotator reloads itself after an update v0.28.51 Starred threads, a note when an agent's session has ended, "Back from snooze", Ask about a past decision, expand arrows in guided reviews v0.28.50 A faster, lighter Inbox, session names across the Inbox, initiatives on the Board, earlier comments on a file, global comments on Guided Reviews v0.28.49 A checklist for each thread, a pill that shows who gets your reply, a calmer full screen, Inbox replies in T3 Code, --titlefor review and annotatev0.28.48 Reply attachments that follow the draft, links to any web page on Board cards, instant theme switches, a daily anonymous ping, a faster Inbox v0.28.47 Board lanes, Settings → Rows, a new thread header, a "Make it yours" tour step, Request guided review, Jira links on Board cards v0.28.46 Snooze a thread, Settings → Accounts, long pastes become file tiles, HTML pages on a phone, hide the repository owner What's New in v0.28.59
TL;DR
- Changed: The Agents section in the sidebar is quieter: a plain heading when closed, no panel behind it
- Changed: Machine names show only when agents run on more than one machine
- Changed: Agent icons are always gently alive, and lean toward your pointer
0.28.59 is a small release that finishes the sidebar's Agents section, which arrived in 0.28.58 in an earlier form. It has 4 PRs, all from @backnotprop. One is a test fix, and one changes nothing you see yet.
Plannotator Inbox
A quieter Agents section
Closed, Agents is now a plain heading row like Project
- v0.28.582026-11-10 · 2026-11-10 01:02 UTC
查看更新说明
Follow @plannotator on X for updates
Release Highlights v0.28.57 Pin artifacts, and see every artifact on one page, filter the list by project, date or agent, a thread shows its pull requests and their state, choose what the sidebar shows, and in what order, Ask AI starts from Side in the selection bar v0.28.56 Questions can show trade-offs and a prototype to try, a thread with many big pictures no longer crashes the tab, Escape closes New message and keeps your draft, read threads stop being bold and keep their place, agent messages that name no thread start a new one v0.28.55 Floating reply drafts, now a setting under Experimental, open questions sit next to Reply again, a comment box that keeps unsent comments as Drafts, choose how your list looks: Minimal, Balanced or Detailed, update an older linked machine from this Inbox v0.28.53 Start an agent in a new folder, or from a git URL, "+" on each project row starts a session there, a reaction tray, a thread's Links, Settings → Activity, New message offers the open thread's files, Bro mode: agents write to you in plain words v0.28.52 Start agents from the Inbox, on by default, a new reply box, Ask AI for everyone, Insights in Settings → Decision data, Plannotator reloads itself after an update v0.28.51 Starred threads, a note when an agent's session has ended, "Back from snooze", Ask about a past decision, expand arrows in guided reviews v0.28.50 A faster, lighter Inbox, session names across the Inbox, initiatives on the Board, earlier comments on a file, global comments on Guided Reviews v0.28.49 A checklist for each thread, a pill that shows who gets your reply, a calmer full screen, Inbox replies in T3 Code, --titlefor review and annotatev0.28.48 Reply attachments that follow the draft, links to any web page on Board cards, instant theme switches, a daily anonymous ping, a faster Inbox v0.28.47 Board lanes, Settings → Rows, a new thread header, a "Make it yours" tour step, Request guided review, Jira links on Board cards v0.28.46 Snooze a thread, Settings → Accounts, long pastes become file tiles, HTML pages on a phone, hide the repository owner v0.28.45 Plannotator Modern theme, a thread panel view, session names in the To picker, thread links open in place, comment on diagram parts What's New in v0.28.58
TL;DR
- New: Start Codex from New message
- New: An Agents section in the sidebar, in place of Machines
- New: Start an agent in a folder on any drive
- New: Play audio attachments and comment at a moment
- New: Claude Code's Plannotator tools work on Windows
New message can now start Codex, and it can start an agent in a folder on any drive, not only under your home folder. The sidebar's Machines section is now Agents, a list of the agents that are running. Audio attachments play in the Inbox and take comments, questions inside an attached Markdown file can be answered, and Claude Code's Plannotator tools now work on Windows.
0.28.58 ha
- v0.28.572026-11-09 · 2026-11-09 19:26 UTC
查看更新说明
Follow @plannotator on X for updates
Release Highlights v0.28.56 Questions can show trade-offs and a prototype to try, a thread with many big pictures no longer crashes the tab, Escape closes New message and keeps your draft, read threads stop being bold and keep their place, agent messages that name no thread start a new one v0.28.55 Floating reply drafts, now a setting under Experimental, open questions sit next to Reply again, a comment box that keeps unsent comments as Drafts, choose how your list looks: Minimal, Balanced or Detailed, update an older linked machine from this Inbox v0.28.53 Start an agent in a new folder, or from a git URL, "+" on each project row starts a session there, a reaction tray, a thread's Links, Settings → Activity, New message offers the open thread's files, Bro mode: agents write to you in plain words v0.28.52 Start agents from the Inbox, on by default, a new reply box, Ask AI for everyone, Insights in Settings → Decision data, Plannotator reloads itself after an update v0.28.51 Starred threads, a note when an agent's session has ended, "Back from snooze", Ask about a past decision, expand arrows in guided reviews v0.28.50 A faster, lighter Inbox, session names across the Inbox, initiatives on the Board, earlier comments on a file, global comments on Guided Reviews v0.28.49 A checklist for each thread, a pill that shows who gets your reply, a calmer full screen, Inbox replies in T3 Code, --titlefor review and annotatev0.28.48 Reply attachments that follow the draft, links to any web page on Board cards, instant theme switches, a daily anonymous ping, a faster Inbox v0.28.47 Board lanes, Settings → Rows, a new thread header, a "Make it yours" tour step, Request guided review, Jira links on Board cards v0.28.46 Snooze a thread, Settings → Accounts, long pastes become file tiles, HTML pages on a phone, hide the repository owner v0.28.45 Plannotator Modern theme, a thread panel view, session names in the To picker, thread links open in place, comment on diagram parts v0.28.44 The iPhone keyboard no longer moves the Inbox, pictures stay clear of the option card, What's new over your tailnet What's New in v0.28.57
TL;DR
- New: Pin artifacts, and see every artifact on one page
- New: Filter the list by project, date or agent
- New: A thread shows its pull requests and their state
- New: Choose what the sidebar shows, and in what order
- Changed: Ask AI starts from Side in the selection bar
You can now pin a thread's files and pictures and find them all on a new Artifacts page. The list gets a filter, the sidebar can be rearranged, and a thread shows the pull requests its agent is working on. Attachments download from a right-click, the list marks what waits on you with one question mark, and the What's new page opens on each release's TL;DR.
0.28.57 has 18 PRs, all from @backnotprop, plus #2938, which merged ten o
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Plannotator
⭐️ NEW: Plannotator Inbox is the missing layer between you and managing multi-agent work.
Plannotator is a local, browser-based review surface for AI coding agents: Claude Code, Codex, Copilot CLI, Gemini CLI, OpenCode, Kiro, Droid, Amp, DeepSeek Harness, and Pi.
It plugs directly into your agent through its hooks and commands. When the agent proposes a plan, html, or finishes writing code, the work opens in your browser and you mark it up, comment, and send feedback directly to the agent for it to act on it.
Review documents, plans, and agent messages
Annotate plans, specs, messages, html, then send the feedback to your agent.
Code Review
Review local changes or remote PRs. Comment on diffs, suggest code. Your comments go back to the agent. Works with Git, GitButler, Jujutsu (jj), Perforce (p4), GitHub, and GitLab.
Annotate HTML Artifacts
Plannotator Inbox
The Plannotator Inbox is one local window where your agents leave you messages, questions, files, and guided reviews while they keep working. Answer a question with a click, annotate a file, and press Send when you can. Nothing holds an agent session open while you do, and your reply goes back to the session that asked.
plannotator inbox
Claude Code, Pi, and OpenCode connect through Plannotator's plugins, and your replies arrive as their next turn. Any other agent reaches it over MCP with plannotator inbox mcp, and plannotator inbox --help is the guide an agent reads. Watch the demo · More on the Inbox · Docs
Herdr Annotate: Plannotator in the Terminal
Herdr Annotate brings Plannotator-style review to the terminal: annotate terminal text, review whole Markdown documents and your coding agent's replies inside Herdr, and send the feedback straight back to the agent as its next message. Works with Claude Code, Codex, Pi, Copilot CLI, and Droid replies. Annotations are saved in the Plannotator data directory, so terminal reviews and app reviews compound.
herdr plugin install plannotator/herdr-annotate
Prefer it standalone? Plannotator TUI powers the document review and runs without Herdr: brew install plannotator/tap/plannotator-tui.
Commands
On Codex, swap the slash commands for !plannotator … (e.g. !plannotator review) or the $plannotator-* skills.
Annotate
/plannotator-annotate README.md # Local markdown file
/plannotator-annotate src/ # Browse and annotate files in a folder
/plannotator-annotate https://docs.rs/… # Fetch and annotate any URL
/plannotator-annotate report.html --render-html # Render HTML as-is instead of converting
/plannotator-last # Annotate the agent's last message
Need a realistic document to try? Copy the product requirements document template and filled example as Markdown.
Code review
/plannotator-review # Review uncommitted changes
/plannotator-review <github-pr-url> # Review a GitHub pull request
/plannotator-review <gitlab-mr-url> # Review a GitLab merge request
plannotator review --gitbutler # Review an active GitButler workspace
plannotator review --patch-file reading.diff # Review a static caller-supplied unified diff
GitButler users can review the whole workspace, one stack, or one branch layer. See the GitButler workflow guide.
Plan mode
No command needed. Plan mode is wired in through each harness's hooks. Any time your agent creates a plan, the markdown review surface opens for you.
CLI
plannotator sessions # List active Plannotator sessions
plannotator sessions --open 1 # Reopen a session in the browser
plannotator archive # Browse saved plan decisions read-only
Privacy and network behavior
Plannotator does not collect usage telemetry or analytics. Plans, diffs, annotations, drafts, history, and configuration stay local by default.
Each plan review, annotate, archive, share-portal, and code-review app surface checks GitHub for the latest Plannotator release when it loads. This sends no plan or review content and gives the Plannotator project owner no usage analytics, although GitHub receives an ordinary request. There is currently no opt-out setting for the release check. Local Git code review can also query the configured origin with git ls-remote to detect the default branch and a stale baseline; it does not send the local diff. That remote query runs when the review opens, when the page loads its diff, when you switch the diff type or base (including the "Diff out of date · Refresh" button), and when you press Fetch — never on a timer, so an idle review page makes no network calls. Turn it off entirely with plannotator review --no-git-remote-check, PLANNOTATOR_GIT_REMOTE_CHECK=0, or { "gitRemoteCheck": false } in ~/.plannotator/config.json; the compare target then comes from local refs only and the "behind GitHub" banner never appears.
Content leaves the local workflow only when a network feature needs it:
- URL annotation fetches the requested site, through Jina Reader by default for public pages or directly when Jina is disabled or unavailable.
- GitHub and GitLab review uses your authenticated CLI and Git remote to retrieve PR or MR data.
- Ask AI and review agents send the selected question and relevant plan, document, repository, or diff context to your configured provider. When Ask AI is answered by the agent session that opened Plannotator ("Ask this session"), the question goes to that session instead.
- Sharing sends the complete link to whoever or whatever service you use to deliver it. Encrypted short links upload ciphertext to the paste service.
- Workspaces is a separate hosted product, so the open source app's local-storage model does not apply to content placed there.
The privacy policy documents these boundaries and the hosted website and waitlist data.
Link sharing
Open source asynchronous link sharing remains available for compatibility but is moving to deprecated support. Workspaces is the primary direction for team sharing. No removal date has been announced.
Share a plan with a teammate and they can annotate it themselves. Import their feedback and send it straight back to your agent.
Small markdown shares are compressed into the URL fragment. The fragment is not included in the browser's request to the share portal, but it is not encrypted. Anyone or any messaging service with the complete link can read the shared content. The portal host still receives ordinary request metadata.
Large markdown and raw HTML shares use a short-link service. The share payload is encrypted with AES-256-GCM before upload, the server stores only ciphertext, and the key is kept in the URL fragment rather than sent in the paste request. Anyone with the complete link can decrypt it. Hosted pastes expire after 7 days.
Same model as PrivateBin. The paste service is self-hostable.
Sharing can be disabled entirely with PLANNOTATOR_SHARE=disabled.
Workspaces is the primary path for hosted team collaboration.
Install
One installer covers almost every agent. It installs the plannotator binary, auto-detects your installed agents, and configures hooks, skills, and slash commands for each:
# macOS / Linux / WSL
curl -fsSL https://plannotator.ai/install.sh | bash
# Windows PowerShell
irm https://plannotator.ai/install.ps1 | iex
The installer downloads the binary from GitHub Releases. A full install can also contact GitHub for release resolution and agent files, Ataraxy-Labs/sem for the optional sem sidecar, and npm for Pi, selected extra skills, or the managed agent-terminal runtime. Pinning --version skips only GitHub API release resolution, not the release download. See the privacy policy for the complete network boundaries.
Want just the binary and nothing else? Pass --minimal (or export PLANNOTATOR_MINIMAL=1) to install only the plannotator binary to ~/.local/bin, skipping every skill, hook, slash command, and per-agent config:
curl -fsSL https://plannotator.ai/install.sh | bash -s -- --minimal
Then finish the step for your agent:
| Agent | After the installer | Details |
|---|---|---|
| Amp | Copy plannotator.ts into ~/.config/amp/plugins/, then plugins: reload. Workflows live in the command palette. | README |
| Claude Code | /plugin marketplace add backnotprop/plannotator, then /plugin install plannotator@plannotator. Restart Claude Code. | README |
| Codex | Nothing. Plan review is enabled automatically via Codex's experimental Stop hook (macOS/Linux/WSL; on native Windows, Codex hooks are experimental and the installer prints manual setup steps). $plannotator-review, $plannotator-annotate, and $plannotator-last skills included. | README |
| Copilot CLI | /plugin marketplace add backnotprop/plannotator, then /plugin install plannotator-copilot@plannotator. Restart. Plan review activates in plan mode (Shift+Tab). | README |
| DeepSeek Harness | Add @plannotator/dsh on DSH's Plugins page, or run dsh plugin --profile <profile> add @plannotator/dsh. Plan review opens on exit_plan_mode. The plugin adds /plannotator-review, /plannotator-annotate and /plannotator-last, which open without blocking the session. | README |
| Droid | droid plugin marketplace add https://github.com/backnotprop/plannotator, then droid plugin install plannotator@plannotator. Commands only, no plan interception yet. | README |
| Gemini CLI | Nothing. The hook, policy, and slash commands are configured automatically. Requires Gemini CLI 0.36.0+. | README |
| Kiro CLI | Nothing. Skills and an example agent are installed automatically. Try kiro-cli chat --agent plannotator. | README |
| OpenCode | Add "plugin": ["@plannotator/opencode@latest"] to opencode.json. Restart OpenCode. | README |
| Pi | Skip the installer. Just pi install npm:@plannotator/pi-extension. Start Pi with --plan, or toggle with /plannotator-plan-mode. | README |
| T3 Code | For Claude threads in T3: run plannotator t3 --help and follow its two steps (sign in to T3 once, add the --t3 MCP entry). Your Inbox replies then arrive in the thread as new turns. | README |
Updating: run the installer again for the binary and slash commands. It also updates an installed Claude Code plugin when the claude command is on your PATH (opt out with --skip-claude-plugin); otherwise run claude plugin marketplace update plannotator, then claude plugin update plannotator@plannotator, then restart Claude Code (refreshing the marketplace alone does not update the plugin). Pi: pi update --extensions (a plain pi update updates only Pi).
On Claude Code 2.1.287 or newer, plan review, code review and annotate don't make Claude wait: Claude ends its turn and your decision arrives later as a message. Set PLANNOTATOR_CLAUDE_MOD=0 to go back to the classic flow.
Full walkthroughs live in the installation docs.
Uninstall
The safe default removes recognized Plannotator-installed components and keeps your local plans, history, drafts, guides, and settings:
plannotator uninstall
Use --purge for a full removal of known local Plannotator data as well:
plannotator uninstall --purge
Purge requires typing purge at the prompt and explains that the data is
local-only: it is not stored on a Plannotator server and cannot be recovered.
For automation, pass --yes (or -y); non-interactive removal refuses to run
without it. Use --dry-run to preview recognized work without making changes.
Host integrations are always part of uninstall. If a broken or unavailable
host prevents safe cleanup, the command names the blocking plugin manager or
configuration, gives exact manual cleanup instructions, and stops before
deleting the binary. Complete that cleanup and rerun uninstall.
It also keeps the binary when an agent's config file can't be read (another
tool's too), or when a hook it did not install still runs Plannotator. The
error names the file, the tool, and what to do. A plannotator-inbox entry
you added yourself, or a Claude Code or Droid plugin installed for one project,
is named with how to remove it and does not keep the binary.
These mechanics keep the ordinary confirmation default-negative, make the
irreversible outcome require a stronger explicit word, and still give package
managers and scripts a conventional non-interactive flag.
The command covers the conventional macOS, Linux, WSL, and Windows binary
locations; the managed sem sidecar and agent-terminal runtime; installer
skills, commands, hooks, policies, caches, and recognizable Amp/Kiro files; and
detected Claude Code, Copilot CLI, Droid, Pi, and VS Code installations through
their host CLIs. Shared JSONC settings are edited surgically, while strict JSON
updates preserve the file's indentation, line endings, and trailing-newline
style. Custom
or unrecognized files, separately installed optional skills, project-local
integrations, external plan-save locations, and invalid configs are preserved
(malformed host config is a fail-safe error). If cleanup reports an error,
the CLI remains available for a safe retry, and its Windows PATH entry is
retained or restored when possible. If PATH restoration itself fails, the
output gives the full CLI path for retry and asks for manual PATH repair.
For safety, purge refuses filesystem roots, the home directory, the shared
temporary directory, symlinked data directories, and non-directory data paths.
Existing paths are compared by filesystem identity, so case aliases, symlinks,
hardlinks, and bind mounts cannot bypass the root/home/ancestor checks.
That identity and every containment guard are revalidated after awaited host
commands, immediately before the synchronous data-removal block; a replaced
data directory is refused without touching either the old or replacement data.
If your dedicated data directory is symlinked, point PLANNOTATOR_DATA_DIR at
its resolved target and retry.
If you installed only the standalone Pi extension and do not have the
plannotator CLI, use pi remove npm:@plannotator/pi-extension.
Add to ~/.claude/settings.json:
{
"hooks": {
"PermissionRequest": [
{
"matcher": "ExitPlanMode",
"hooks": [
{
"type": "command",
"command": "plannotator",
"timeout": 345600
}
]
}
]
}
}
curl -fsSL https://plannotator.ai/install.sh | bash -s -- --version vX.Y.Z
& ([scriptblock]::Create((irm https://plannotator.ai/install.ps1))) -Version vX.Y.Z
Try it
The fastest way to see what Plannotator does is to invoke it yourself, right now, from your agent:
/plannotator-last # annotate the agent's last reply
/plannotator-review # review your current diff, PR-style
/plannotator-annotate report.html # annotate any file, folder, or URL
(Slash commands in most agents; $plannotator-* skills in Codex, command palette in Amp.)
Plan review needs no command at all. The next time your agent proposes a plan, it opens in your browser automatically.
How it works
Plan review
Agent calls ExitPlanMode
-> PermissionRequest hook fires
-> Local server reads plan from hook input
-> Browser opens with review UI
-> You annotate and approve/deny
-> Approve: agent proceeds
-> Deny: structured feedback sent to agent
-> Agent revises, plan diff shows what changed
Code review
You run /plannotator-review
-> git diff captures changes (or PR fetched by URL)
-> Browser opens with diff viewer
-> Annotate lines, stage/unstage files
-> Send feedback: returned to agent session
-> Approve: "LGTM" sent
Integrations
VS Code: Open plans in editor tabs, view diffs inline, add annotations from the editor gutter. Install from the VS Code Marketplace.
Obsidian: Auto-save approved plans to a vault with YAML frontmatter, tags from the plan title, and backlinks for graph connectivity. Configure in Plannotator's Settings panel.
Bear: Save plans as Bear notes with nested tags and project metadata.
Notion: Save plans as Markdown child pages under a shared Notion page. Set NOTION_TOKEN in the environment that starts Plannotator, then configure the parent page in Settings.
GitHub / GitLab: Pass any PR or MR URL to /plannotator-review and review it with the full diff viewer, annotations, and file tree.
Remote / SSH / devcontainer
Plannotator auto-detects SSH sessions and switches to fixed port 19432. For a different port, or in a devcontainer or Docker:
export PLANNOTATOR_REMOTE=1
export PLANNOTATOR_PORT=9999 # forward this port
VS Code devcontainers forward the port automatically (check the Ports tab). For raw SSH, add this to ~/.ssh/config, using your PLANNOTATOR_PORT value if you set one:
Host your-server
LocalForward 19432 localhost:19432
In remote mode the server listens on every interface (0.0.0.0) with no login, so anyone who can reach the port can use it, even when you use an SSH tunnel. Keep the port closed to networks you don't trust.
Security
Every released binary ships with a SHA256 sidecar. SLSA provenance attestations are available from v0.17.2. The current release workflow also attaches a CycloneDX JSON SBOM, evaluates it with a fresh Grype database before anything is attested or published, and creates a GitHub/Sigstore SBOM attestation for the shipped binaries and npm tarballs.
The SBOM is intentionally labeled as a release-wide Syft inventory of the monorepo's locked build inputs and dependencies. It is not an exact per-binary runtime inventory: Bun standalone executables do not expose their bundled JavaScript package metadata to Syft. The canonical installation and verification docs cover the existing installer path; the exact new SBOM commands are included below and must be copied to that Mintlify page before the first SBOM-enabled release.
The release gate rejects scanner-side ignored matches and treats unknown applicability conservatively as runtime when evaluating CISA KEV and fixable Critical findings. Its explicit Grype configuration, complete JSON results, database status, and repository policy decision remain available as workflow evidence.
To verify a released Linux x64 binary, its existing provenance, and the new SBOM evidence directly:
tag=vX.Y.Z
version="${tag#v}"
mkdir -p /tmp/plannotator-release-verify
gh release download "$tag" --repo backnotprop/plannotator \
--pattern 'plannotator-linux-x64*' \
--pattern "plannotator-${version}-release-sbom.cdx.json*" \
--dir /tmp/plannotator-release-verify
(cd /tmp/plannotator-release-verify && sha256sum --check plannotator-linux-x64.sha256)
(cd /tmp/plannotator-release-verify && sha256sum --check "plannotator-${version}-release-sbom.cdx.json.sha256")
gh attestation verify /tmp/plannotator-release-verify/plannotator-linux-x64 \
--repo backnotprop/plannotator --source-ref "refs/tags/$tag" \
--signer-workflow backnotprop/plannotator/.github/workflows/release.yml \
--predicate-type https://slsa.dev/provenance/v1
gh attestation verify /tmp/plannotator-release-verify/plannotator-linux-x64 \
--repo backnotprop/plannotator --source-ref "refs/tags/$tag" \
--signer-workflow backnotprop/plannotator/.github/workflows/release.yml \
--predicate-type https://cyclonedx.org/bom
These are separate claims over the same artifact digest: provenance identifies its builder/source/workflow, while the CycloneDX predicate describes the release-wide inventory. The release runbook also canonicalizes the downloaded SBOM and attested predicate with jq -S and compares them.
To verify on install:
curl -fsSL https://plannotator.ai/install.sh | bash -s -- --verify-attestation
Requires the gh CLI, but no login: the installer fetches the attestation bundle from GitHub's public attestations API and verifies it with gh attestation verify --bundle (the extraction needs node, python3, or jq on PATH; gh's authenticated fetch is the fallback). Can also be set persistently in ~/.plannotator/config.json:
{ "verifyAttestation": true }
Installer verification remains opt-in and verifies SLSA build provenance; normal installation does not require gh. See the canonical installation docs for details.
Configuration
Settings are saved in cookies (not localStorage) because each hook invocation runs on a random port. You can also set options through environment variables or ~/.plannotator/config.json.
Optional Vim controls
Plan and annotate views offer a default-off Vim controls profile under
Settings → Vim. Once enabled, focus the document and use j / k
to move one rendered block at a time. After l refines into a semantic level,
j / k move among sibling rows, cells, or inline targets; h moves back to
the containing target. Refining past the deepest target enters text. v
starts characterwise Visual selection and
V selects whole blocks. Space opens the normal annotation toolbar; c,
d, m, and t select comment, redline, markup, and label actions. The same
semantic target graph drives pointer Pinpoint and keyboard navigation. Press
? in the document for the contextual key reference. Inputs, dialogs,
editors, Tab, and all pointer interactions retain their native behavior.
The document takes focus automatically when the page is otherwise neutral;
press Escape from app chrome to return to it without clicking.
An additional default-off Vim HUD toggle appears beneath Vim controls. It
uses the product-demo styling for the live target reticle and navigation
context. Its bottom-right Key panel is independently hideable while the
reticle remains active; ? still opens the complete key map on demand. The
panel shows recent handled keys, the current block/line/word/Visual phase, and
the command meaning without capturing text typed into comments or other
controls.
See Vim controls for the interaction contract and
implementation architecture.
| Variable | Description |
|---|---|
PLANNOTATOR_REMOTE | 1/true for remote mode, 0/false for local, unset for SSH auto-detection |
PLANNOTATOR_PORT | Fixed port (default: random locally, 19432 remote) |
PLANNOTATOR_BROWSER | Custom browser to open plans in. none (also false, 0, off, no, true, 1, :) opens no browser at all; the session URL is always printed. |
PLANNOTATOR_AI | disabled to disable Ask AI, Review Agents, and Guided Review; the annotate agent terminal is separate |
PLANNOTATOR_SHARE | disabled to turn off URL sharing |
PLANNOTATOR_SHARE_URL | Custom base URL for share links (self-hosted portal) |
PLANNOTATOR_PASTE_URL | Base URL of the paste service API |
PLANNOTATOR_ORIGIN | Override agent detection: claude-code, amp, droid, opencode, codex, copilot-cli, gemini-cli, kiro-cli, pi |
PLANNOTATOR_JINA | 0/false to disable Jina Reader for URL annotation |
JINA_API_KEY | Jina Reader API key for higher rate limits |
PLANNOTATOR_DATA_DIR | Base directory for Plannotator-managed files (plans, history, drafts, config.json). Default: ~/.plannotator; if that directory doesn't exist and $XDG_DATA_HOME is set to an absolute path, $XDG_DATA_HOME/plannotator is used instead (also when ~/.plannotator holds none of Plannotator's data but the XDG folder does). plannotator data-dir prints the folder in use |
Plannotator-managed files live under ~/.plannotator by default. Some UI preferences are stored in functional browser cookies. To relocate the files (for example, for an XDG-clean home):
export PLANNOTATOR_DATA_DIR=~/.local/share/plannotator
Development
bun install
bun run dev:hook # Plan review server
bun run dev:review # Code review editor
bun run dev:marketing # Marketing site (plannotator.ai)
bun run dev:vscode # VS Code extension (watch mode)
Build
bun run build # Main targets (hook + opencode + dsh)
bun run build:hook # Single-file HTML for the hook server
bun run build:review # Code review editor
bun run build:opencode # OpenCode plugin
bun run build:dsh # DeepSeek Harness plugin
bun run build:vscode # VS Code extension
Build order matters. The hook build copies pre-built HTML from apps/review/dist/. If you change UI code in packages/ui/, packages/editor/, or packages/review-editor/, rebuild the review app first:
bun run --cwd apps/review build && bun run build:hook
Test the plugin locally:
claude --plugin-dir ./apps/hook
Full binary build:
bun run --cwd apps/review build && bun run build:hook && \
bun build apps/hook/server/index.ts --compile --outfile ~/.local/bin/plannotator
License
Copyright 2025-2026 backnotprop
Dual-licensed under Apache 2.0 or MIT at your option.
Contributions are dual-licensed under the same terms unless you explicitly state otherwise.