Displays Plan-Build-Run project status dashboard, progress, blockers from .planning files, and suggests next actions.
From pbrnpx claudepluginhub sienklogic/plan-build-run --plugin pbrThis skill is limited to using the following tools:
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
STOP — DO NOT READ THIS FILE. You are already reading it. This prompt was injected into your context by Claude Code's plugin system. Using the Read tool on this SKILL.md file wastes ~7,600 tokens. Begin executing Step 1 immediately.
Before ANY tool calls, display this banner:
╔══════════════════════════════════════════════════════════════╗
║ PLAN-BUILD-RUN ► PROJECT STATUS ║
╚══════════════════════════════════════════════════════════════╝
Then proceed to Step 1.
You are running the status skill. Your job is to read the project state and present a clear, actionable status dashboard. You suggest the most logical next action based on where the project is.
This skill runs inline and is read-only — it never modifies any files.
Show the user where they are and what to do next. The status display should be a quick glance, not a wall of text. Surface problems and route to the right action.
Tooling shortcut: Instead of parsing multiple files manually, you can run:
node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js state load
and
node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js state check-progress
These return structured JSON with config, state, roadmap, and filesystem-verified progress. Falls back gracefully if the script is missing — parse files manually in that case.
Read the following files (skip any that don't exist):
.planning/config.json — Project settings
╔══════════════════════════════════════════════════════════════╗
║ ERROR ║
╚══════════════════════════════════════════════════════════════╝
No Plan-Build-Run project found.
**To fix:** Run `/pbr:begin` to start a new project, or `/pbr:scan` to analyze an existing codebase.
.planning/STATE.md — Current position, progress, blockers
.planning/ROADMAP.md — Phase overview
.planning/PROJECT.md — Project metadata (if exists)
.planning/REQUIREMENTS.md — Requirements (if exists)
After loading config.json, check local_llm.enabled. If true:
node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js llm status
node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js llm metrics
Parse both JSON responses. Capture:
status.model — model namemetrics.total_calls — lifetime total callsmetrics.tokens_saved — lifetime frontier tokens savedmetrics.cost_saved_usd — lifetime cost estimatemetrics.avg_latency_ms — lifetime average latencyAlso run session-scoped metrics if .planning/.session-start exists:
node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js llm metrics --session <content-of-.session-start>
If local_llm.enabled is false or commands fail, skip this step silently.
Run:
node ${CLAUDE_PLUGIN_ROOT}/scripts/pbr-tools.js context-triage
Parse the JSON response. Capture:
tier — one of PEAK / GOOD / DEGRADING / POOR / CRITICALpercentage — numeric 0-100 (or null if unavailable)recommendation — PROCEED / CHECKPOINT / COMPACTStore these for use in Step 4 display and Step 5 routing.
.planning/CONTEXT.md (project-level, if exists)
Check existence of the three project-level documents and record their status for Step 4 display:
.planning/PROJECT.md — exists or not.planning/REQUIREMENTS.md — exists or not.planning/CONTEXT.md — exists or notFor each phase listed in ROADMAP.md:
Check if the phase directory exists in .planning/phases/
If exists, scan for:
CONTEXT.md — discussion happened*-PLAN.md or PLAN.md files — plans exist*-SUMMARY.md or SUMMARY.md files — plans were executedVERIFICATION.md — phase was reviewed.continue-here.md — paused workCalculate phase status:
| Condition | Status |
|---|---|
| No directory | Not started |
| Directory exists, no plans | Discussed only |
| Plans exist, no summaries | Planned (ready to build) |
| Some summaries, not all | Building (in progress) |
| All summaries exist | Built (ready to review) |
| VERIFICATION.md exists, status=passed | Verified (complete) |
| VERIFICATION.md exists, status=gaps_found | Needs fixes |
Count lines in .planning/STATE.md. If over 150 lines, add a warning to the dashboard:
Warning: STATE.md is {N} lines (limit: 150). Run any build/review command to auto-compact it.
Discrepancy check: Compare STATE.md phase/plan/status claims against the filesystem:
Warning: STATE.md references Phase {N} but no directory exists.Warning: STATE.md says {X} plans but filesystem has {Y}.VERIFICATION.md exists: Warning: STATE.md says "verified" but no VERIFICATION.md found.If any discrepancy found, add: Run /pbr:resume to auto-reconcile STATE.md.
.continue-here.md files in .planning/phases/VERIFICATION.md files with gaps_found statusdependency_fingerprints in plan frontmatter:
/pbr:plan {N}.".planning/debug/ for files with status: active.planning/todos/pending/ for pending todo filesIdentify the single next-blocking item — the one phase or plan whose completion unblocks the most downstream work.
Logic:
depends_on (direct + transitive).Store: criticalPhase (number + name), criticalPlan (plan ID or null if phase not yet planned), criticalCount (number of downstream phases blocked).
.planning/notes/ directory for note files (individual .md files)promoted: true)~/.claude/notes/ for global notes.planning/quick/ for recent quick tasksPresent the status in this format:
Project: {name from PROJECT.md or config.json}
Phase: {current} of {total} -- {current phase name}
Progress: [{progress bar}] {percentage}%
Phase Status:
| Phase | Status | Plans | Progress |
|-------|--------|-------|----------|
| 1. {name} | {status indicator} {status text} | {completed}/{total} | {percentage}% |
| 2. {name} | {status indicator} {status text} | {completed}/{total} | {percentage}% |
| ...
**Project documents:**
| File | Status |
|------|--------|
| PROJECT.md | {exists / not found — run /pbr:begin} |
| REQUIREMENTS.md | {exists / not found — run /pbr:begin} |
| CONTEXT.md | {exists / not found — run /pbr:discuss --project} |
{If context tier is DEGRADING, POOR, or CRITICAL:}
⚠ Context: {percentage}% used ({tier}) — {recommendation_text}
Run `/compact` to reclaim context before spawning more agents.
Where `{recommendation_text}` maps:
- DEGRADING → "quality may degrade on complex agents"
- POOR → "context window is filling up"
- CRITICAL → "STOP — compact before continuing"
{If criticalPhase is identified AND criticalCount >= 1 AND there are 2+ unverified phases with dependencies:}
Critical Path: Phase {N} — {phase name}{, Plan {criticalPlan} is next} [BLOCKING {criticalCount} downstream phase(s)]
{Else: omit — not meaningful when only one phase remains or no inter-phase dependencies exist}
{If blockers exist:}
Blockers:
- {blocker 1}
- {blocker 2}
{If no blockers:}
Blockers: None
{If paused work:}
Paused: Phase {N} has a checkpoint at plan {M}. Run `/pbr:resume` to continue.
{If verification gaps:}
Gaps: Phase {N} verification found {count} gaps. Run `/pbr:plan {N} --gaps` to address.
{If cross-phase re-planning needed:}
Warning: Phase {N} was planned before Phase {M} was built. Consider re-planning with `/pbr:plan {N}`.
{If active debug sessions:}
Debug: {count} active session(s). Run `/pbr:debug` to continue.
{If pending todos:}
Todos: {count} pending. Run `/pbr:todo list` to see them.
{If notes exist:}
Notes: {count} quick capture(s). `/pbr:note list` to review.
{If local_llm.enabled AND total_calls > 0:}
Local LLM: enabled ({model}, avg {avg_ms}ms)
This session: {session_calls} calls, ~{session_tokens} frontier tokens saved
Lifetime: {total_calls} calls, ~{tokens_saved} tokens saved (~{cost_str} at $3/M)
{If local_llm.enabled AND total_calls == 0:}
Local LLM: enabled ({model}) — no calls yet this session
The Local LLM block is advisory only — it never affects the routing decision or Next Up suggestion.
Generate a 20-character progress bar:
[████████████████████] 100% (all filled)
[████████████████░░░░] 80% (16 filled, 4 empty)
[████████░░░░░░░░░░░░] 40% (8 filled, 12 empty)
[░░░░░░░░░░░░░░░░░░░░] 0% (all empty)
Use Unicode block characters:
█ (full block, U+2588)░ (light shade, U+2591)Use indicators from references/ui-formatting.md:
| Status | Indicator |
|---|---|
| Complete/Verified | checkmark |
| In Progress | half-filled circle |
| Not started | empty circle |
| Needs fixes | warning triangle |
| Blocked | blocked symbol |
Based on the project state, suggest the single most logical next action:
Decision tree:
1. Is there paused work (.continue-here.md)?
YES → "Resume your work: `/pbr:resume`"
2. Is there a verification with gaps?
YES → "Fix verification gaps: `/pbr:plan {N} --gaps`"
3. Is the current phase planned but not built?
YES → "Build the current phase: `/pbr:build {N}`"
4. Is the current phase built but not reviewed?
YES → "Review what was built: `/pbr:review {N}`"
5. Is the current phase verified (complete)?
YES → Is there a next phase?
YES → Was next phase already planned?
YES → Does it need re-planning? (dependency phase changed)
YES → "Re-plan with updated context: `/pbr:plan {N+1}`"
NO → "Build the next phase: `/pbr:build {N+1}`"
NO → "Plan the next phase: `/pbr:plan {N+1}`"
NO → Check for existing `*-MILESTONE-AUDIT.md` in `.planning/`:\n IF audit passed → "All phases complete and audited! `/pbr:milestone complete` to archive and tag."\n IF audit has gaps → "Audit found gaps. `/pbr:milestone gaps` to address them."\n IF no audit → "All phases complete! `/pbr:milestone audit` to verify cross-phase integration (recommended), then `/pbr:milestone complete`."
6. Is the current phase not started?
YES → Has it been discussed?
YES → "Plan this phase: `/pbr:plan {N}`"
NO → "Start with a discussion: `/pbr:discuss {N}` or jump to `/pbr:plan {N}`"
7. Active debug sessions?
YES → "Continue debugging: `/pbr:debug`"
8. Nothing active?
→ "Start your project: `/pbr:begin`"
If only one reasonable next action exists, present it with branded routing:
╔══════════════════════════════════════════════════════════════╗
║ ▶ NEXT UP ║
╚══════════════════════════════════════════════════════════════╝
**{brief explanation}**
`{suggested command}`
{If context percentage > 40% OR tier is DEGRADING/POOR/CRITICAL:}
<sub>`/clear` first → fresh context window ({percentage}% used)</sub>
{Else: omit the /clear hint entirely}
{If `percentage` is null (no context data): omit the hint}
If multiple reasonable next actions exist (2-3 alternatives), use the action-routing pattern (see skills/shared/gate-prompts.md):
Use AskUserQuestion: question: "What would you like to do next?" header: "Next Step" options: - label: "{primary action}" description: "{brief explanation}" - label: "{alternative 1}" description: "{brief explanation}" - label: "{alternative 2}" description: "{brief explanation}" - label: "Something else" description: "Enter a different command" multiSelect: false
Build options dynamically from the decision tree results. Always include "Something else" as the last option. Generate 1-3 real options based on the state analysis.
After user selects an option:
/pbr:{action} {args}" so they can execute it.planning/ directory at all/pbr:begin to start a new project/pbr:scan if there's an existing codebase to analyze first*-MILESTONE-AUDIT.md in .planning/
/pbr:milestone complete to archive (audit already done)/pbr:milestone gaps to address issues/pbr:milestone audit to verify cross-phase integration (recommended first)/pbr:milestone complete to archive the milestone and tag it/pbr:milestone new to start the next set of featuresThis skill should be fast. It's a status check, not an analysis.
DO:
DO NOT:
pbr-tools llm calls only when local_llm.enabled: true) and Step 1c (pbr-tools context-triage, always run but skip on error)