plannotator-compound
Analyze a user's Plannotator plan archive to extract denial patterns, feedback taxonomy, evolution over time, and actionable prompt improvements — then produce a polished HTML dashboard report. Falls back to Claude Code ExitPlanMode denial reasons when Plannotator data is unavailable.
Security Assessment
About plannotator-compound
This skill conducts a comprehensive research analysis of a user's Plannotator plan archive to extract denial patterns, a feedback taxonomy, evolution over time, and actionable prompt improvements, then produces a polished HTML dashboard report. It is structured as a strict multi-phase process where each phase completes fully before the next begins and research integrity is paramount: every in-scope file must be read, with no skipping or early summarizing. The workflow first performs source selection. In first-class Plannotator mode it locates the data directory using $PLANNOTATOR_DATA_DIR or the default ~/.plannotator and looks for *-denied.md files in the plans/ subdirectory. If that archive is absent or has no denied plans, it falls back to Claude Code mode by reading ~/.claude/projects/ and using a bundled parser to extract ExitPlanMode denial reasons from JSONL transcripts. If neither source is available it asks the user rather than guessing.
Phase 0 locates the plans and detects previous reports, which follow a versioned naming scheme (compound-planning-report.html, then -v2, -v3, and so on). If a prior report exists, the latest one's filesystem modification date becomes a cutoff date and the user is offered an incremental run (only files dated after the cutoff, building on prior findings) or a full re-analysis, with the new report using the next version number either way. Phase 1 inventories the dataset, always counting all files for overall stats: approved and denied counts, the date range and days spanned, and a revision rate of denied over total. It deliberately ignores *.annotations.md files because denied files already contain the full plan plus appended reviewer feedback after a separator, and it runs wc -l over approved plans to track whether plan size is growing.
Phase 2 is the map step, reading every in-scope *-denied.md file and only those files. For incremental runs only files whose embedded YYYY-MM-DD date is strictly after the cutoff are processed. Extraction is parallelized through sub-agents using model haiku, since the work is straightforward file reading and structured extraction rather than reasoning, with a batching strategy scaled to dataset size: tiny datasets read directly in the main agent, small datasets use 2-3 agents, medium datasets 4-6, and large datasets as many as needed to keep batches around 10-15 files split along natural time boundaries. Use this skill to turn an archive of denied plans into an evidence-based, versioned dashboard of where planning went wrong and how to improve prompts.
FAQ
What data sources can this analysis use?
It primarily uses a Plannotator plan archive (from $PLANNOTATOR_DATA_DIR or ~/.plannotator, looking for *-denied.md files). If that archive is missing or has no denied plans, it falls back to Claude Code ExitPlanMode denial reasons parsed from ~/.claude/projects/ transcripts, and if neither is available it asks the user.
What is the difference between an incremental and a full run?
If a previous report exists, an incremental run only analyzes files dated after that report's modification date (the cutoff) and builds on prior findings to save tokens, while a full run re-analyzes the entire archive. Both produce the next versioned report filename.
Which files does the extraction phase read?
Only the in-scope *-denied.md files. It deliberately ignores approved plans, diff files, and *.annotations.md files, because each denied file already contains the full plan text plus the reviewer's feedback after a separator.
Which model is used for extraction and why?
Extraction sub-agents use model haiku because the work is straightforward file reading and structured extraction rather than reasoning, making haiku faster and cheaper for the job.
How does it decide how many parallel agents to launch?
It scales by dataset size: tiny datasets (10 files or fewer) are read directly in the main agent, small (11-30) use 2-3 agents, medium (31-80) use 4-6, and large (80+) use as many as needed to keep each batch around 10-15 files, split along natural time boundaries.
Install plannotator-compound
Quick Setup:
- Copy the skill folder to
.claude/skills/ - Claude will automatically detect and use the skill
Repository
backnotprop/plannotator