정보
플래노테이터 스킬은 로컬 브라우저 기반의 주석 UI를 통해 계획, 코드, 파일 및 URL을 검토하는 도구인 Plannotator CLI에 대한 일반적인 참조를 제공합니다. 이 스킬은 리뷰 실행, 과거 결정 사항 탐색, 피드백 내보내기 등 보다 구체적인 `plannotator-*` 스킬에서 다루지 않는 작업들을 처리합니다. 일반적인 주석 및 검토 워크플로우를 위해 Plannotator를 호출하는 방법에 대한 지침이 필요할 때 이 스킬을 사용하세요.
빠른 설치
Claude Code
추천npx skills add backnotprop/plannotator -a claude-code/plugin add https://github.com/backnotprop/plannotatorgit clone https://github.com/backnotprop/plannotator.git ~/.claude/skills/plannotatorClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
Plannotator CLI Reference
Plannotator is a local, browser-based review layer for agent workflows: it opens plans, diffs, and documents in an annotation UI, the human marks them up, and the structured feedback comes back to you on stdout. It installs as a single plannotator binary plus per-host hooks, so plan review fires automatically when you exit plan mode; every other surface is launched explicitly from the CLI. A session runs on a random localhost port (fixed port 19432 in remote mode) and blocks until the reviewer submits feedback, approves, or closes the tab.
This skill is the knowledge layer. The plannotator-review, plannotator-annotate, and plannotator-last skills are thin launchers for the three most common actions; use this reference when you need to pick the right command or flags yourself.
Choose the command
| The user wants | Run |
|---|---|
| Review a plan you produced | Nothing. Plan review opens automatically on plan exit via hooks. Never run bare plannotator yourself. |
| Review current code changes | plannotator review |
| Review a GitHub PR or GitLab MR | plannotator review <PR_URL> |
| Annotate a markdown, text, config, or HTML file | plannotator annotate <file> |
| Annotate a web page | plannotator annotate <https-url> |
| Annotate a running local app (dev server) | plannotator annotate <http://localhost:PORT/> |
| Pick a file to annotate from a folder | plannotator annotate <folder/> |
| Annotate your latest assistant message | plannotator last |
| Browse past plan decisions | plannotator archive |
| Export or share a Guided Review | plannotator guide export / plannotator guide share |
| Reopen or list live sessions | plannotator sessions |
Session model
Every review or annotate command starts a local web server, opens the browser, and blocks until the human decides. That can take minutes. Launch it with a long (or no) command timeout, or in the background, then read stdout when the process exits. Do not kill the process to "finish" a review; a session that ends without a decision reads as no feedback.
The stdout contract is the whole interface:
- Plaintext (default): empty output on close,
The user approved.on approve, otherwise the feedback text. Address returned feedback in the same conversation. --json: one JSON record,{"decision":"approved"|"dismissed"|"annotated","feedback":"..."}. An approval may still carry notes infeedback; treat those as guidance, not a change request.--hook: hook-native output for real PostToolUse/Stop hook contexts only. Approve/close emits nothing (hook passes); annotations emit{"decision":"block","reason":"..."}.--hookimplies the gate UI. Never use it for a normal interactive invocation.
plannotator <command> --help prints usage without launching anything. Bare plannotator is the hook entry point and expects hook JSON on stdin.
plannotator review
plannotator review [--git | --gitbutler] [--local | --no-local] [--tailscale] [PR_URL]
Reviews local VCS changes, or a pull request when a URL is given. Feedback and annotations come back on stdout when the reviewer submits; an approval comes back as an LGTM-style message.
- VCS is auto-detected (JJ, GitButler, Git, and P4 where supported).
--gitforces plain Git;--gitbutlerforces GitButler (requires thebutCLI 0.21.0+). Running from a non-VCS parent folder that contains nested repos produces a combined workspace diff. - The default diff is "everything a PR would show now": merge-base of the trunk vs the working tree plus untracked files. The reviewer can switch diff types in the UI; you do not control that from the CLI.
- PR review (
plannotator review https://github.com/owner/repo/pull/123, GitLab MR URLs too) needs an authenticatedghorglabCLI.--local(the default) builds a local checkout of the PR head in the background for full file access;--no-localskips it and reviews the platform diff only. --tailscalepublishes the loopback session over the user's tailnet viatailscale serve(HTTPS, never public) and prints the URL with a QR code. A publish failure exits nonzero instead of leaving the server hanging.
plannotator annotate
plannotator annotate <target> [--markdown] [--no-jina] [--app | --static] [--render-html] [--tailscale] [--gate] [--json] [--hook]
Opens one document, page, or app in the annotation UI and returns the human's annotations on stdout.
Targets:
- Markdown and text files:
.md,.mdx,.txt. - Plain-text config and data files, rendered as text:
.yaml,.yml,.json,.jsonc,.json5,.toml,.ini,.cfg,.conf,.properties,.csv,.tsv,.log,.xml,.env.example..envitself is deliberately refused (it commonly holds secrets, and annotate history copies file contents). Source-code files belong toplannotator review, not annotate. - HTML files (
.html,.htm): rendered as the raw page by default;--markdownconverts to markdown instead.--render-htmlis accepted for compatibility; raw rendering is already the default. - URLs (
https://...): fetched and converted via Jina Reader by default;--no-jinauses plain fetch plus Turndown instead. - Running local apps: a loopback
http://localhost:PORT/URL whose probe returns HTML opens in live-app mode (annotate the real running page).--appforces live mode and fails loudly when it cannot apply;--staticforces the classic conversion pipeline. Non-loopback URLs always use the conversion pipeline. - Folders:
plannotator annotate docs/opens a file browser over the folder's supported files.
Single files are capped at 2MB. Files are read from disk at stable project paths; keep the reviewed source where it lives.
Argument tolerance: extra words are fine (plannotator annotate look at notes.md please opens notes.md), but two resolvable targets is an error naming both, and an unrecognized dashed token disables the tolerance so flag typos fail loudly. When nothing resolves in a plain multi-word invocation, the CLI prints an agent-addressed handoff on stdout and exits 0: read it, work out the concrete target, and re-run with that exact path or URL.
Strict gates and exit codes
For a machine-checkable approval gate, add --gate --json plus one or both strict flags:
plannotator annotate report.md --gate --json --require-approval --result-file /tmp/decision.json
--require-approval: exit code reports the human outcome.--result-file <path>: the stdout decision JSON is also published atomically to<path>. The parent directory must exist and the file must not; results resolve from the invocation cwd.
Exit codes under a strict flag (grep convention):
| Exit | Meaning |
|---|---|
| 0 | Approved. The only success. |
| 1 | The reviewer did not approve (annotated or dismissed); the decision record was still published. |
| 2 | The gate itself failed: bad flag combination, startup failure (missing file, unreachable URL, oversized file), or the result file could not be published. Never treat as a reviewer outcome. |
| 128+n | Killed by signal n. |
Without strict flags, startup failures exit 1 and the exit code carries no decision; parse the output instead. Both strict flags require --gate --json and reject --hook.
plannotator annotate-last
plannotator annotate-last [--stdin] [--tailscale] [--gate] [--json] [--hook]
plannotator last
Opens the latest rendered assistant message from the current agent session in the annotation UI (last is an alias). The session log is discovered per host automatically; --stdin reads the content from stdin instead.
Do not print a commentary or status message immediately before running it: the command targets the latest rendered assistant message, so a preamble becomes the thing being annotated.
plannotator copilot-last
plannotator copilot-last [--gate] [--json] [--hook]
The annotate-last variant for live GitHub Copilot CLI sessions (reads Copilot's session-state events). Normally invoked by the Copilot plugin's /plannotator-last command; use it only inside a Copilot CLI session.
plannotator archive
plannotator archive
Opens a read-only browser over saved plan decisions (approved/denied badges) from the Plannotator data directory. No feedback comes back; the session ends when the user clicks Done.
plannotator guide
plannotator guide list
plannotator guide export --id <savedGuideId> [--out <file.html>]
plannotator guide export --guide <guide.json> --patch <diff.patch> [--out <file.html>]
plannotator guide export --snapshot <snapshot.json> [--out <file.html>]
plannotator guide share --id <savedGuideId> [--public] [--ttl <7d|24h|30m|3600>] [--json]
plannotator guide unshare <id> --token <deleteToken>
Guided Reviews are AI-generated walkthroughs of a diff, produced inside the code review UI. The CLI works with saved ones:
listshows guides Plannotator has persisted for the current repo.exportwrites one portable, self-contained HTML file (the viewer loads from guides.show).--guide+--patchexports a guide you authored yourself against a unified diff (--patch -reads stdin; validation is strict and names any file the guide references that the patch lacks).--out -writes to stdout.--viewer-urloverrides the pinned viewer base.shareuploads the guide and prints a link. Encrypted by default: the key lives only in the URL fragment and the host stores ciphertext.--publicstores it unencrypted so chat apps can unfurl a preview.--ttlsets an expiry; otherwise the link stays untilunshare. A saved guide records its link, and a secondshare --idrefuses rather than orphaning the first link's delete token.unshare <id> --token <t>removes a link using the delete token printed at share time.
plannotator sessions
plannotator sessions [--open [N]] [--clean]
Lists active Plannotator server sessions. --open reopens session N (default 1) in the browser, useful when a tab was closed mid-review. --clean drops stale entries.
Other subcommands
plannotator setup-goal <interview|facts> <bundle.json | -> [--json]
plannotator uninstall [--purge] [--yes] [--dry-run]
plannotator improve-context
setup-goalopens the interview or facts-acceptance UI for /goal workflows; it is driven by theplannotator-setup-goalskill and takes a bundle JSON (-reads stdin). Do not hand-build bundles.uninstallremoves Plannotator-installed components (--purgealso deletes local data;--yesis required without a TTY;--dry-runpreviews).improve-contextandinstall-runtimeare internal integration commands (hook plumbing and managed runtime install). Never runimprove-contextdirectly;plannotator install-runtime agent-terminalexists for reinstalling the optional annotate-terminal runtime and is normally run by the installer.- Additional host-internal subcommands (the
opencode-*andcopilot-planfamily) are invoked by their plugins, not by you.
Environment variables that change behavior
| Variable | Use |
|---|---|
PLANNOTATOR_REMOTE=1 | Force remote mode (fixed port 19432, wide bind) for SSH/devcontainer sessions; 0 forces local. Unset means SSH auto-detection. |
PLANNOTATOR_PORT | Fix the port instead of a random one. |
PLANNOTATOR_ORIGIN | Override agent-origin detection (claude-code, codex, opencode, pi, oh-my-pi, amp, droid, copilot-cli, gemini-cli, kiro-cli). Set it when launching Plannotator from a wrapper the detection cannot see through. |
PLANNOTATOR_AI=disabled | Disable Ask AI and agent-launched review surfaces in the UI. |
PLANNOTATOR_SHARE=disabled | Disable URL sharing, including guide share links. |
PLANNOTATOR_DATA_DIR | Move the data directory (default ~/.plannotator): plans, history, drafts, config. |
PLANNOTATOR_BROWSER | Open sessions in a specific browser. |
Posting annotations into a live session
A running plan-review session exposes a small HTTP API on its base URL for external annotations: POST /api/external-annotations adds inline annotations the reviewer sees immediately, with PATCH/DELETE for updates and an SSE stream at /api/external-annotations/stream. The UI's "copy agent instructions" action puts the full API contract for the current session, with the correct base URL, on the clipboard for handing to an agent or script. If the user pastes such instructions, follow them; do not invent endpoints beyond that contract.
Do not
- Do not parse or scrape the browser UI's HTML; the CLI's stdout (and the documented HTTP API above) is the whole contract.
- Do not use
--hookoutside a real hook context; use--jsonwhen you need structured output. - Do not run bare
plannotatorinteractively; it is the hook entry point. - Do not guess flags. Run
plannotator <command> --helpwhen unsure; unknown dashed tokens make annotate fail on purpose. - Do not point
plannotator annotateat source-code files or.envfiles; code goes throughplannotator review, and.envis refused. - Do not start a strict gate (
--require-approval) unless a human is actually there to review; the session blocks until they act.
GitHub 저장소
자주 묻는 질문
plannotator Skill이란 무엇인가요?
plannotator은(는) backnotprop이(가) 만든 Claude Skill입니다. Skill은 Claude가 필요할 때 불러오는 지침과 리소스를 묶어 추가 프롬프트 없이 plannotator 관련 작업을 수행할 수 있게 합니다.
plannotator은(는) 어떻게 설치하나요?
이 페이지의 설치 명령을 사용하세요. plannotator을(를) Claude Code 플러그인으로 추가하거나 저장소를 skills 디렉터리에 복제한 다음 Claude를 다시 시작해 Skill을 불러옵니다.
plannotator은(는) 어떤 카테고리에 속하나요?
plannotator은(는) 메타 카테고리에 속합니다.
plannotator은(는) 무료로 사용할 수 있나요?
네. plannotator은(는) AIMCP에 등록되어 있으며 무료로 설치할 수 있습니다.
연관 스킬
이 스킬은 콘텐츠 콜렉션(Content Collections)을 위한 프로덕션 검증된 설정을 제공합니다. 콘텐츠 콜렉션은 Markdown/MDX 파일을 Zod 검증이 포함된 타입 안전한 데이터 콜렉션으로 변환해주는 TypeScript 최우선 도구입니다. 블로그, 문서 사이트 또는 콘텐츠 중심의 Vite + React 애플리케이션을 구축할 때 타입 안전성과 자동 콘텐츠 검증을 보장하기 위해 사용하세요. Vite 플러그인 구성과 MDX 컴파일부터 배포 최적화 및 스키마 검증에 이르기까지 모든 것을 다룹니다.
이 스킬은 개발자들이 Polymarket 예측 시장 플랫폼을 활용한 애플리케이션을 구축할 수 있도록 지원하며, 거래 및 시장 데이터를 위한 API 통합 기능을 포함합니다. 또한 WebSocket을 통한 실시간 데이터 스트리밍을 제공하여 실시간 거래와 시장 활동을 모니터링할 수 있습니다. 이를 통해 거래 전략을 구현하거나 실시간 시장 업데이트를 처리하는 도구를 생성하는 데 활용할 수 있습니다.
이 스킬은 개발자들이 명령어, 파일, LSP 작업 등 25개 이상의 이벤트 유형에 연결되는 OpenCode 플러그인을 만들 수 있도록 돕습니다. JavaScript/TypeScript 모듈을 위한 플러그인 구조, 이벤트 API 명세, 구현 패턴을 제공합니다. OpenCode AI 어시스턴트의 라이프사이클을 사용자 정의 이벤트 기반 로직으로 가로채거나, 모니터링하거나, 확장해야 할 때 사용하세요.
SGLang은 RadixAttention 프리픽스 캐싱을 활용하여 JSON, 정규식, 에이전트 워크플로우를 위한 고속 구조화 생성에 특화된 고성능 LLM 서빙 프레임워크입니다. 특히 반복되는 프리픽스가 있는 작업에서 상당히 빠른 추론 속도를 제공하여 복잡한 구조화 출력 및 다중 턴 대화에 이상적입니다. 제약 디코딩이 필요하거나 광범위한 프리픽스 공유가 있는 애플리케이션을 구축할 때는 vLLM과 같은 대안보다 SGLang을 선택하십시오.
