From project-manager
Generates a plan-vs-actual report comparing planned and actual project data across three dimensions: timelines, budget, and scope (deliverables). Part of the Closing phase. Output feeds into generate-closure-report. Format: .md, manual data input via chat. Triggers RU: «сформируй план-факт», «подготовь отчёт план/факт», «сравни план и факт». Triggers EN: 'generate plan-fact report', 'plan vs actual', 'variance report'.
npx claudepluginhub kirkruglov/claude-project-managerThis skill uses the workspace's default tool permissions.
Determine the language of the user's request:
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
Determine the language of the user's request:
-ru suffix-en suffixAll output (headings, labels, comments, instructions) must match the detected language.
Russian: «сформируй план-факт», «подготовь отчёт план/факт», «сравни план и факт» English: "generate plan-fact report", "plan vs actual", "variance report"
| Data | Required | Source | Notes |
|---|---|---|---|
| Project plan | yes | knowledge (project-plan.md) | Milestones, timelines, budget. If budget is missing — Section 3 is not generated |
| Actual data | yes | chat | User provides: actual milestone completion dates, actual costs by budget line, deliverable status. Free-form — agent structures it |
| Project charter | no | knowledge (project-charter.md) | For deliverables list (Section 1, scope). If unavailable — request the list from the user |
| Report type | no | chat | interim (default) or final. Affects header label only — logic is identical |
If required data is missing — request it:
To generate the plan-vs-actual report, the following are needed:
1. Project plan (project-plan.md) — in knowledge or paste into chat.
2. Actual data — in any format:
— milestone completion dates (completed, not completed, actual date);
— actual costs by budget line;
— which deliverables have been delivered and which have not.
Available: [list what is present].
Missing: [specify].
project-plan.md — do NOT resolve independently. List the conflicts and ask which data is current. Exception: if the user explicitly corrects the plan in chat — apply the correction.plan-fact-report-ru.md or plan-fact-report-en.md from project knowledge (based on detected language).project-plan.md: milestones with dates, budget lines with amounts, deliverables list.attention or critical (including scope with incomplete deliverables) → fill Section 4. Only if all three are on track → remove Section 4 entirely.log.md and project-state.md.Applied to each parameter in Section 1 (summary) and to rows in Sections 2–3.
| Variance, % (absolute value) | Status |
|---|---|
| ≤ 10% | on track |
| 11–25% | attention |
| > 25% | critical |
Sign convention: positive = overrun / delay / shortfall; negative = savings / ahead of schedule / surplus.
Three rows — aggregated variances across three dimensions.
project-plan.md (or project-charter.md). Actual — sum of actual costs. Currency from input data.project-charter.md, Section 2 "Project Deliverables"). Plan — total count. Actual — delivered count. If charter unavailable — request the deliverables list from the user.For each row: calculate absolute variance, variance %, status per reference table.
Summary commentary — required text block after the table. 1–2 sentences per dimension: nature of variance and its cause. If status is on track — state the fact without detailed analysis.
Row-by-row comparison of milestones from project-plan.md.
not complete in "Actual Date." Variance — dash.actual_date - planned_date. Positive = delay, negative = ahead of schedule.[clarify].Row-by-row comparison of cost lines from project-plan.md (or project-charter.md).
estimated in comment. State as assumption.If budget is missing from the project plan and charter — Section 3 is not generated. Replace with note: "Budget section not included: planned budget data unavailable." In the summary (Section 1), replace the budget row with: "Budget — data unavailable."
Conditional section. Generate only if at least one of the three dimensions (Timelines, Budget, Scope) has status attention or critical. Scope is an independent dimension — its critical/attention status triggers Section 4 independently, even if timelines and budget are on track. If all three are on track — remove Section 4 entirely.
attention or critical — formulate a recommended action.[clarify].critical variance.Version: 1.0Date: current generation dateFile: plan-fact-report.mdDocument status: draft (at generation). After approval — approved.Period: {{start_date}} — {{end_date}}Report type: interim or final (from input; default interim)Planned data source: filename (e.g. project-plan.md)Actual data source: source description (e.g. "PM data provided in chat")Placeholders
{{}}in the template are fill targets, not auto-substitution variables. Replace each with the corresponding value from input data.
| Placeholder | Required | Source | Allowed Values |
|---|---|---|---|
{{project_name}} | yes | plan / charter | text |
{{date}} | yes | system | YYYY-MM-DD |
{{start_date}} | yes | plan / chat | YYYY-MM-DD |
{{end_date}} | yes | chat | YYYY-MM-DD |
{{report_type}} | yes | chat (default: interim) | interim / final |
{{source_plan}} | yes | context | filename of planned data source |
{{source_fact}} | yes | context | description of actual data source |
{{planned_duration}} | yes | plan | number + unit (days / working days) |
{{actual_duration}} | yes | actual | number + unit |
{{delta_time}} | yes | calculated | signed number |
{{delta_time_pct}} | yes | calculated | signed % |
{{status_time}} | yes | calculated | on track / attention / critical |
{{currency}} | yes | plan / chat | currency symbol (₽, $, €) |
{{planned_budget}} | no | plan | number |
{{actual_budget}} | no | actual | number |
{{delta_budget}} | no | calculated | signed number |
{{delta_budget_pct}} | no | calculated | signed % |
{{status_budget}} | no | calculated | on track / attention / critical |
{{planned_scope}} | yes | charter / plan | number (deliverable count) |
{{delivered_scope}} | yes | actual | number (delivered count) |
{{delta_scope}} | yes | calculated | signed number |
{{delta_scope_pct}} | yes | calculated | signed % |
{{status_scope}} | yes | calculated | on track / attention / critical |
{{milestone_name}} | yes (≥1) | plan | milestone name |
{{planned_date}} | yes | plan | YYYY-MM-DD |
{{actual_date}} | no | actual | YYYY-MM-DD or not complete |
{{delta_days}} | no | calculated | signed day count or dash |
{{reason}} | no | actual / agent | text or [clarify] |
{{cost_item}} | no | plan | cost line name |
{{planned_cost}} | no | plan | number |
{{actual_cost}} | no | actual | number |
{{delta}} | no | calculated | signed number |
{{delta_pct}} | no | calculated | signed % |
{{comment}} | no | actual / agent | text |
{{total_plan}} | no | calculated | sum of planned rows |
{{total_fact}} | no | calculated | sum of actual rows |
{{total_delta}} | no | calculated | difference of totals |
{{total_delta_pct}} | no | calculated | % variance of total |
{{issue_N}} | no | agent | issue / observation description |
{{action_N}} | no | agent | recommended action |
{{owner_N}} | no | project data | owner or [clarify] |
{{deadline_N}} | no | agent | deadline or [clarify] |
Before presenting the result to the user — verify:
{{}} placeholders remaining in the text (except removed optional rows)attention/critical variances; absent if all on trackdraftplan-fact-report.md stated in headerConsumes (input):
project-plan.md — from skill generate-project-plan (milestones, budget, timelines)project-charter.md — from skill generate-charter (deliverables for scope metric)Produces (output): plan-vs-actual report → consumed by:
generate-closure-report — Phase 6, ClosingAfter approval, the user must upload plan-fact-report.md to project knowledge so it is available for generate-closure-report.
User command:
Generate a plan-vs-actual report. Project plan is in knowledge. Actual data: — M1 (Go/No-Go): completed 11.04, on time. — M2 (Plan approved): completed 25.04, on time. — M3 (Prototype): completed 12.05, 3-day delay — design approval. — M4 (Development): not complete. — Budget: AWS — $10,400 (planned $8,000), design — $10,000 (on plan), rest on plan. — Deliverables: 3 of 5 delivered.
Agent response (after generation):
Plan-vs-actual report generated for period 07.04.2026 — 12.05.2026 based on: project-plan.md (knowledge), actual data from chat.
Assumptions:
- Budget lines without explicit data: actual = planned.
- Duration: actual — 35 days (from start to report date), planned — 63 days (full project). Project not complete.
Key variances:
- Scope: 3/5 deliverables (−40%) — status
critical.- AWS budget: +$2,400 (+30%) — status
critical.Required: approve, revise, or reject.
[report text]
| Date | Version | Change |
|---|---|---|
| 2026-03-27 | 1.1 | §2 step 9: scope is an independent trigger for Section 4 (all three dimensions listed explicitly); §2 step 13: generate-closure-report offer is mandatory regardless of statuses; §3 Section 4: clarified that scope independently activates the section |
| 2026-03-26 | 1.0 | Skill created. Output format .md. Status calculation rules, conditional Section 4, scope metric — deliverables |