Claude Plan Status Review
Quick start
Generate a status-review report:
python3 scripts/status_review.py --out /Users/karlchow/.claude/plans/PLAN_STATUS_REVIEW.mdNotes:
- The report includes Frontmatter Fixups (Copy-Paste) for
review_neededplans; tune with--max-fixups. - If you already wrote a scan snapshot (recommended for scheduled runs), reuse it:
--scan ~/.claude/plans/PLAN_SCAN.json. claude-planctlruns (scan/archive) can take a couple minutes with GitHub checks; avoid short timeouts.archive_candidateis not the same as “eligible to archive” (checkeligibleForArchive/gate:*reasons in the report).
The report includes:
- Plan title + any YAML frontmatter (
repo,status,pr,updated,owner) - Any in-body
Status: ...line (common in older plans) - Checkbox counts
- Basic codebase verification: extracts referenced repo paths (e.g.
apps/...) and checks if they exist onorigin/HEADfor the local repo checkout (default~/Desktop/code/<repo>). - A full Plan Index section (not truncated) for keyword/topic search across all plans (title + plan path + a few extracted path tokens like
packages/<token>).
- The report includes Frontmatter Fixups (Copy-Paste) for
Triage the report (oldest first) and update plans you touched:
- Add/update frontmatter:
repo,status,pr,updated,owner - Promote/demote:
active↔follow_upas blockers change - Mark
implementedonly when you can point to merged code/PR
- Add/update frontmatter:
If items are implemented, hand off archiving to
claude-planctl(dry-run first):claude-planctl archive --dry-run --cooldown-days 7 --min-score 85
Workflow
1) Build a review queue
Use claude-planctl scan as the source of truth for classification and GitHub state:
claude-planctl scan --format table
Prioritize:
- Oldest
activeandfollow_up - Any
review_needed - Any plan where a linked PR is
closed/mergedbut the plan is stillactive/follow_up
2) Verify against latest codebase
For each plan you review:
- Identify repo + PR:
- Prefer frontmatter
repo/pr - Else use
claude-planctlrecord fields (repo,prNumber,prUrl,primaryPrSource)
- Prefer frontmatter
- Validate GitHub state:
- Prefer
claude-planctlGitHub check results - When needed:
gh pr view <N> --repo <owner/repo>
- Prefer
- Validate against current code:
cdinto the repo andgit fetch --all --prune- Search for the plan’s key files/symbols (
rg) to confirm whether work exists inmain
- Decide status:
active: still relevant + actionable nowfollow_up: blocked/deferred; capture the blocker in the plan bodyimplemented: clearly done (usually merged PR/code on default branch)review_needed: ambiguous; do not guess
3) Update plan metadata (gradual adoption)
If a plan already has YAML frontmatter, update/add fields:
repo: owner/repostatus: active | follow_up | implementedpr: 123(when known)updated: YYYY-MM-DDowner: karlchow
If frontmatter is missing, add it only when you are already editing the plan for a real review.
Template:
---
repo: owner/repo
status: active | follow_up | implemented
pr: 123
updated: 2026-02-18
owner: karlchow
---
4) Archive implemented plans (conservative)
Defer to claude-planctl for archive moves (dry-run first, keep cooldown 7 days):
claude-planctl archive --dry-run --cooldown-days 7 --min-score 85
claude-planctl archive --apply --cooldown-days 7 --min-score 85
Tip: if claude-planctl archive says “No eligible archive candidates”, check the report for gate:cooldown_not_met and re-run after the cooldown window.
For archive gate logic and status signal definitions, consult:
/Users/karlchow/.codex/skills/claude-plan-ops/references/status-signals.mdreferences/review-rubric.md
Outputs
scripts/status_review.pywrites a prioritized report toPLAN_STATUS_REVIEW.md.
Useful flags:
--max-items 10to keep the report short--max-fixups 10to reduce copy-paste frontmatter suggestions--limit 200to reduce scan time--index-max-keywords 3to reduce Plan Index keyword noise per plan--repo-dir owner/repo=/abs/pathto override local repo checkout paths--no-github-checkto skip GitHub API checks (faster, but less accurate PR state)--no-git-fetchto skipgit fetch(faster, less “latest-codebase” accurate)