Skip to content

Commit dc1190f

Browse files
authored
feat(skill): compound planning Claude Code fallback + blog post (#461)
* feat(skill): add Claude Code fallback to compound planning skill Plannotator remains the first-class data source. When users don't have a Plannotator archive, the skill now falls back to extracting ExitPlanMode denial reasons from Claude Code JSONL transcripts via a bundled parser. Adds Source Selection section, per-phase fallback notes, a progressive disclosure reference (references/claude-code-fallback.md), and the extraction script (scripts/extract_exit_plan_mode_outcomes.py). For provenance purposes, this commit was AI assisted. * fix(skill): remove duplicate detection logic and fix fallback skip Phase 0 was duplicating the Source Selection branching and telling fallback mode to skip Previous Report Detection. Now Phase 0 defers to the already-chosen mode and both paths proceed to report detection. For provenance purposes, this commit was AI assisted. * blog: add Continuously Improve Claude Code Plans post Introduces compound planning to users — how denial feedback compounds into better future plans, works for both Plannotator and plain Claude Code users. Video placeholder included for later replacement. For provenance purposes, this commit was AI assisted. * blog: revise compound planning post and adjust prose typography Rework blog copy, add looping video embeds from CloudFront media bucket, simplify process overview, add install link. Bump prose font-size to 0.95rem and line-height to 1.6 on desktop. For provenance purposes, this commit was AI assisted. * blog: move intro video, copy tweaks, video spacing For provenance purposes, this commit was AI assisted.
1 parent f8d4969 commit dc1190f

5 files changed

Lines changed: 1217 additions & 6 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
---
2+
title: "Continuously Improve Claude Code Plans"
3+
description: "Use your denial history to find feedback patterns, generate a personalized report, and automatically improve every future plan."
4+
date: 2026-04-01
5+
author: "backnotprop"
6+
tags: ["compound-planning", "plan-mode", "claude-code"]
7+
---
8+
9+
**Compound Planning.** If you've been actively using plan mode in Claude Code, there's an opportunity to improve how your agents plan for you. Here is a skill that analyzes your plan denial history, surfaces your own feedback patterns, and creates an automated loop that refines planning over time (at your request). The point is to consistently optimize what works best for you.
10+
11+
<video width="100%" style="aspect-ratio: 16/9; border-radius: 8px; margin-bottom: 1.5rem;" autoplay loop muted playsinline controls>
12+
<source src="https://d17ygohy796f9l.cloudfront.net/videos/compound-planning.mp4" type="video/mp4" />
13+
</video>
14+
15+
If you use plan mode and deny plans, you already have the data. The skill reads it and puts it to work. It works day one for any Claude Code user who has been actively using plan mode. [Plannotator](https://github.com/backnotprop/plannotator) users get an even richer analysis since Plannotator captures full plan text and inline annotations with every denial. Plannotator is [open source](https://github.com/backnotprop/plannotator) and free.
16+
17+
[Install Plannotator](https://github.com/backnotprop/plannotator?tab=readme-ov-file#install-for-claude-code), then run:
18+
19+
```
20+
/plannotator-compound
21+
```
22+
23+
## How it works
24+
25+
When you deny a plan in Claude Code, that interaction gets logged. If you're a Plannotator user, it's even better. The more you use it, the richer your archive gets. Full plan text, inline annotations, structural feedback, all saved as markdown files that build up over time.
26+
27+
Compound Planning reads that archive in three steps:
28+
29+
1. **Analyze** all your plan denials and approvals, surfacing insight patterns
30+
2. **Report** generates a personalized report so you can view your own findings and insights
31+
3. **Hook** creates an improvement hook that gets injected on plan enter mode, carrying forward the insights from the last time you ran the skill
32+
33+
The report is personalized. Every quote is pulled from your actual feedback. Every percentage is calculated from your real data. The corrective instructions at the end trace directly back to your most frequent denial reasons.
34+
35+
<video width="100%" style="aspect-ratio: 16/9; border-radius: 8px; margin-bottom: 1.5rem;" autoplay loop muted playsinline controls>
36+
<source src="https://d17ygohy796f9l.cloudfront.net/videos/compound-planning-report.mp4" type="video/mp4" />
37+
</video>
38+
39+
## Works for all Claude Code users
40+
41+
Plannotator users get the richest analysis since the archive contains full plan text and inline annotations. But you don't need Plannotator.
42+
43+
If you use Claude Code with plan mode, your denial reasons live in `~/.claude/projects/`. The skill includes a Python parser that extracts your `ExitPlanMode` outcomes, filters out boilerplate, and produces clean records of your human-authored feedback. The same analysis pipeline runs on this data and produces the same report.
44+
45+
## The feedback loop
46+
47+
The real value is the improvement hook. The corrective instructions from your report can be saved to a file that gets injected into every future planning session automatically. Claude sees your feedback patterns before writing any plan.
48+
49+
Your denied plans aren't wasted work. They're the specification for better plans going forward.
50+
51+
## Try it
52+
53+
If you have [Plannotator](https://github.com/backnotprop/plannotator) installed, it works out of the box. If you're using Claude Code without Plannotator, the skill works with your existing session logs, no additional setup.
54+
55+
The more denial history you have, the richer the analysis. Start with the [installation guide](/docs/getting-started/installation/) or check out the [repo](https://github.com/backnotprop/plannotator).

apps/marketing/src/styles/global.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@
3737
color: var(--foreground);
3838
}
3939

40+
@media (min-width: 768px) {
41+
.prose {
42+
font-size: 0.95rem;
43+
line-height: 1.6;
44+
}
45+
}
46+
4047
.prose h1 {
4148
font-size: 1.5rem;
4249
font-weight: 700;

apps/skills/plannotator-compound/SKILL.md

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ disable-model-invocation: true
44
description: >
55
Analyze a user's Plannotator plan archive to extract denial patterns, feedback
66
taxonomy, evolution over time, and actionable prompt improvements — then produce
7-
a polished HTML dashboard report.
7+
a polished HTML dashboard report. Falls back to Claude Code ExitPlanMode denial
8+
reasons when Plannotator data is unavailable.
89
---
910

1011
# Compound Planning Analysis
@@ -16,15 +17,37 @@ them into actionable insights, and produce an elegant HTML dashboard report.
1617
This is a multi-phase process. Each phase must complete fully before the next begins.
1718
Research integrity is paramount — every file must be read, no skipping.
1819

20+
## Source Selection
21+
22+
Before starting the analysis, determine which data source is available.
23+
24+
1. **Plannotator mode (first-class)** — Check `~/.plannotator/plans/`. If it
25+
exists and contains `*-denied.md` files, use this mode. The entire workflow
26+
below is written for Plannotator data.
27+
28+
2. **Claude Code fallback mode** — If the Plannotator archive is absent or
29+
contains no denied plans, check `~/.claude/projects/`. If present, read
30+
[references/claude-code-fallback.md](references/claude-code-fallback.md)
31+
before continuing. That reference explains how to use the bundled parser at
32+
[scripts/extract_exit_plan_mode_outcomes.py](scripts/extract_exit_plan_mode_outcomes.py)
33+
to extract denial reasons from Claude Code JSONL transcripts. Every phase
34+
below has a short note explaining what changes in fallback mode — the
35+
reference file has the details.
36+
37+
3. **Neither available** — Ask the user for their Plannotator plans directory or
38+
Claude Code projects directory. Do not guess.
39+
1940
## Phase 0: Locate Plans & Check for Previous Reports
2041

21-
Check for `~/.plannotator/plans/`. If it exists and contains `.md` files, proceed.
42+
Use the mode chosen in Source Selection above.
2243

23-
If not found, ask the user:
24-
> "I couldn't find plans at ~/.plannotator/plans/. Where is your plans directory?"
44+
**Plannotator mode:** Verify the plans directory contains `*-denied.md` files. If
45+
none exist, fall back to Claude Code mode before stopping.
2546

26-
Once you have the path, verify it contains files matching `*-denied.md`. If none
27-
exist, inform the user there's no denial data to analyze and stop.
47+
**Claude Code fallback mode:** Run the bundled parser per the fallback reference to
48+
build the denial-reason dataset. Create `/tmp/compound-planning/` if needed.
49+
50+
In either mode, proceed to Previous Report Detection below.
2851

2952
### Previous Report Detection
3053

@@ -112,6 +135,11 @@ Extract dates from all filenames.
112135

113136
Tell the user what you found and that you're beginning the extraction.
114137

138+
**Claude Code fallback mode:** The Plannotator inventory fields above do not apply.
139+
Follow the inventory instructions in
140+
[references/claude-code-fallback.md](references/claude-code-fallback.md) instead —
141+
report the denial-reason dataset assembled by the parser.
142+
115143
## Phase 2: Map — Parallel Extraction
116144

117145
This is the most time-intensive phase. You must read EVERY `*-denied.md` file
@@ -121,6 +149,11 @@ This is the most time-intensive phase. You must read EVERY `*-denied.md` file
121149
files dated after the cutoff date if running incrementally. In incremental mode,
122150
only process files whose embedded YYYY-MM-DD date is strictly after the cutoff.
123151

152+
**Claude Code fallback mode:** The parser output is the clean source dataset. Read
153+
the fallback reference for the extraction prompt and batching strategy specific to
154+
JSON part files. Do not go back to raw `.jsonl` logs unless the parser fails or the
155+
user asks for audit-level verification.
156+
124157
**Important:** Only read `*-denied.md` files. Do NOT read approved plans,
125158
annotation files, or diff files. Each denied file contains the full plan text
126159
followed by a `---` separator and the reviewer's feedback — everything needed
@@ -248,6 +281,10 @@ extraction files and produce the full analysis. This covers most datasets.
248281
merges taxonomies, combines counts, deduplicates patterns, and reconciles any
249282
conflicting categorizations across partials.
250283

284+
**Claude Code fallback mode:** The reduction phase is the same. The only upstream
285+
difference is that extraction files were derived from normalized denial-reason JSON
286+
instead of Plannotator markdown files.
287+
251288
### Reduction Prompt
252289

253290
Give each reduction agent this prompt (adapt file paths for single vs multi-stage):
@@ -427,6 +464,10 @@ one — the flow moves from "what happened" through "why" to "what to do about i
427464
- If the user has < 3 months of data, reduce the evolution section to fewer cards
428465
- If most denied files lack feedback below the `---` (bare denials with no
429466
annotations), note this in the narrative — the analysis will be thinner
467+
- **Claude Code fallback mode:** Explicitly label the report source as Claude Code
468+
`ExitPlanMode` denial reasons. Do not fabricate Plannotator-only fields such as
469+
annotation counts or approved-plan line counts. See the fallback reference for
470+
KPI substitutes and footer/provenance guidance.
430471
- If fewer than 5 denial categories emerge, combine the taxonomy and patterns
431472
sections into one
432473
- If the dataset is very small (< 20 files), the narrative should acknowledge the
@@ -457,6 +498,10 @@ Tell the user:
457498
- Where the report was saved (including version number)
458499
- If incremental: remind the user that earlier findings are in the previous report
459500

501+
**Claude Code fallback mode:** Adapt the summary per the fallback reference —
502+
report human denial reasons analyzed and total `ExitPlanMode` attempts scanned
503+
instead of Plannotator file counts.
504+
460505
## Phase 6: Improvement Hook
461506

462507
After presenting the summary, ask the user if they want to enable an **improvement
@@ -510,6 +555,8 @@ Read the existing file and present the user with a choice:
510555

511556
## Important Notes
512557

558+
- **Data source priority:** Plannotator is the first-class path. Claude Code log
559+
analysis is the secondary path for users without Plannotator archives.
513560
- **Research integrity:** Every file must be read. The value of this analysis comes
514561
from completeness. Sampling or skipping undermines the findings.
515562
- **Real data only:** Never fabricate quotes, percentages, or patterns. If the data

0 commit comments

Comments
 (0)