Files
Michael Ramos 9130d2d6a3 feat(review): open a review on a specific base and diff type (#1484)
Adds two session-only flags to plannotator review, parsed in the shared
parser so every host inherits them together:

- --base <ref> opens the session against a caller-chosen compare target
  (branch, origin/<branch>, tag, SHA, HEAD~N), probed with git rev-parse
  --verify --end-of-options before the server starts so a typo'd ref is a
  startup error with near-match suggestions instead of a silently
  mislabelled merge-base->HEAD diff.
- --diff-type <id> opens the session in one of the nine flat git diff
  modes (REVIEW_OPEN_DIFF_TYPES, pinned against GIT_DIFF_TYPES).

The flags are a seed, never a setting: nothing writes config.json or any
review cookie, and the UI stays fully mutable. Validation is pure in
packages/shared/review-open-state.ts (provider matrix errors on
jj/GitButler/P4/workspace/PR mode, promote-with-notice when the saved
default is base-irrelevant, fatal explicit contradiction).

A flagged base rides explicitBase semantics: the new initialBaseExplicit
server option (both runtimes) seeds baseExplicitlyChosen, suppressing the
startup origin/* upgrade and canonicalization, and openStatePinned rides
/api/diff so the client neither offers the first-run setup dialog (its
one-time cookie is NOT consumed) nor runs the panel-pair self-heal for a
pinned session. The since-base dropdown label now renders from the live
active base, matching the adjacent base picker.

Coverage: Bun CLI, opencode-review bridge, OpenCode embedded plugin, and
the Pi extension (re-vendored; strict validation on the slash-command
path only, programmatic callers unchanged). Skills, command stubs, help
text, and docs updated across every host surface.
2026-09-09 21:35:05 -07:00
..

Plannotator for Amp

This is a native Amp plugin for the manual Plannotator workflows:

  • Plannotator: Review changes
  • Plannotator: Review changes or PR (leave blank for local changes)
  • Plannotator: Annotate file
  • Plannotator: Annotate last answer

Amp commands live in the command palette, not as slash commands. This plugin does not intercept Amp's planning flow.

Install

Install the plannotator CLI first:

curl -fsSL https://plannotator.ai/install.sh | bash

Then install the Amp plugin:

mkdir -p ~/.config/amp/plugins
curl -fsSL https://raw.githubusercontent.com/backnotprop/plannotator/main/apps/amp-plugin/plannotator.ts \
  -o ~/.config/amp/plugins/plannotator.ts

Restart Amp or run plugins: reload from the command palette.

For project-local installation, copy the plugin to:

.amp/plugins/plannotator.ts

CLI compatibility and feedback recovery

The review commands require a CLI that supports plannotator review --json and returns a structured { decision, message } result. The plugin uses the decision to distinguish a dismissal from feedback or approval, never words in the reviewer's text. Review feedback and approval instructions are appended to the Amp thread; a dismissed review only shows a notification. Running plannotator review directly still produces plaintext by default.

Annotation commands use the CLI's { decision, feedback? } JSON result. Feedback and approval notes are appended using your configured annotation prompts; an approval without notes only shows an approval notification.

If an older CLI returns plaintext, or a command succeeds with malformed or missing structured output, the plugin shows an invalid structured output notification instead of guessing a decision. The notice includes the captured stdout and stderr so you can recover any feedback manually. Update the CLI with the install command above, then reload the Amp plugin. If you use PLANNOTATOR_BIN or a source-entry override, update that selected CLI as well.

Local Development

From a Plannotator checkout:

mkdir -p .amp/plugins
ln -sf ../../apps/amp-plugin/plannotator.ts .amp/plugins/plannotator.ts
export PLANNOTATOR_AMP_USE_SOURCE=1
export PLANNOTATOR_CWD="$PWD"

Run plugins: reload in Amp. When the plugin is loaded from this repository, it runs the checkout's source entrypoint instead of a global plannotator binary. You can also point directly at a source entry:

export PLANNOTATOR_AMP_SOURCE_ENTRY=/path/to/plannotator/apps/hook/server/index.ts