generate-plan-fact-report
Skill6 starsChanged 7 months agoMITView on GitHub
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'.
In this repository20 other files it gives its agents.
- coordinate-executorsSkill
- coordinate-meetingSkill
- generate-approval-letterSkill
- generate-budgetSkill
- generate-change-impactSkill
- generate-charterSkill
- generate-checklistSkill
- generate-closure-reportSkill
- generate-comm-planSkill
- generate-comparison-tableSkill
- generate-estimateSkill
- generate-meeting-protocolSkill
- generate-project-planSkill
- generate-questionnaireSkill
- generate-resource-planSkill
- generate-response-planSkill
- generate-risk-registerSkill
- generate-stakeholder-mapSkill
- monitor-progressSkill
- send-emailSkill
The file
We split this skill into the rules it gives an agent
12 rules. About 0 are common, 7 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 11
If the request is in Russian → use templates with -ru suffix
- Distinctive: line 14
All output (headings, labels, comments, instructions) must match the detected language.
- Distinctive: line 30
If required data is missing — request it:
- Distinctive: line 47
Check input data: Verify project plan and actual data are present.
- Distinctive: line 48
Structure actual data: If free-form — organize across three dimensions: timelines (milestone dates), budget (costs by line), scope …
- Very specific: line 49
Check for data conflicts: If plan data in chat conflicts with project-plan.md — do NOT resolve independently.
- Distinctive: line 62
Do not include internal file paths.
- Distinctive: line 68
Always notify, regardless of report type and variance statuses: "Plan-vs-actual report approved.
- Very specific: line 103
If a milestone is not complete — enter not complete in "Actual Date." Variance — dash.
- Very specific: line 113
If a cash flow plan (breakdown by period) is unavailable — use linear distribution of budget over project duration, note estimated in …
- Distinctive: line 192
Before presenting the result to the user — verify:
- Very specific: line 220
After approval, the user must upload plan-fact-report.md to project knowledge so it is available for generate-closure-report.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
generate-plan-fact-report
Language Detection
Determine the language of the user's request:
- If the request is in Russian → use templates with
-rusuffix - Otherwise → use templates with
-ensuffix
All output (headings, labels, comments, instructions) must match the detected language.
Triggers
Russian: «сформируй план-факт», «подготовь отчёт план/факт», «сравни план и факт» English: "generate plan-fact report", "plan vs actual", "variance report"
1. Input Data
| 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].2. Execution Algorithm
- Check input data. Verify project plan and actual data are present. Missing → request using the template in §1. Do NOT generate a placeholder report. Present → proceed to step 2.
- Structure actual data. If free-form — organize across three dimensions: timelines (milestone dates), budget (costs by line), scope (deliverables). Note ambiguities and clarify with the user.
- Check for data conflicts. If plan data in chat conflicts with
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. - Determine report period. From actual data: project start → date of last recorded fact. If the user specified a period explicitly — use it.
- Read the template
plan-fact-report-ru.mdorplan-fact-report-en.mdfrom project knowledge (based on detected language). - Extract planned data from
project-plan.md: milestones with dates, budget lines with amounts, deliverables list. - Compare plan vs. actual. For each row: calculate variance (absolute and %), assign status per §3 reference table.
- Fill template sections per Section 3 rules.
- Evaluate whether Section 4 is needed. Check statuses for all three dimensions independently: Timelines, Budget, Scope. Scope is a full dimension equal to timelines and budget. If at least one of the three has status
attentionorcritical(including scope with incomplete deliverables) → fill Section 4. Only if all three areon track→ remove Section 4 entirely. - Validate the result using the checklist in Section 5.
- Present the result in chat:
- What was done: "Plan-vs-actual report generated for period [dates] based on [list sources]."
- Assumptions: list all (if any).
- Key variances: brief (1–3 lines) — main discrepancies and their statuses.
- Required action: "Approve, revise, or reject."
- Do not include internal file paths. Filename only: "Report saved as plan-fact-report.md."
- Wait for user response.
- Approval → finalize the document.
- Revisions → revise and present updated version. After the 3rd iteration — ask: "Continue revising or lock current version?"
- After approval:
- Offer the user text for
log.mdandproject-state.md. - Always notify, regardless of report type and variance statuses: "Plan-vs-actual report approved. Next task available: generate-closure-report (project closure report). Start?"
- Offer the user text for
3. Section Fill Rules
Reference: Variance Status Calculation
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.
Section 1. Summary
Three rows — aggregated variances across three dimensions.
- Timelines: Plan — total project duration (working days or calendar days). Actual — actual duration as of report date. If project is not complete — show actual duration with note "project not complete."
- Budget: Plan — total from
project-plan.md(orproject-charter.md). Actual — sum of actual costs. Currency from input data. - Scope: Unit — number of deliverables from project charter (
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.
Section 2. Timelines
Row-by-row comparison of milestones from project-plan.md.
- Include all milestones from the plan — not only completed ones.
- If a milestone is not complete — enter
not completein "Actual Date." Variance — dash. - Variance in days:
actual_date - planned_date. Positive = delay, negative = ahead of schedule. - "Variance reason" — fill from user-provided actual data. If reason not stated — enter
[clarify].
Section 3. Budget
Row-by-row comparison of cost lines from project-plan.md (or project-charter.md).
- Include all cost lines from the plan. If no actual data for a line — actual = 0, note "data not provided" in comment.
- Last row — Total: sum of all rows. Verify: total actual = sum of actual rows.
- If a cash flow plan (breakdown by period) is unavailable — use linear distribution of budget over project duration, note
estimatedin comment. State as assumption. - Currency — uniform across the entire report, from input data.
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."
Section 4. Recommendations / Next Steps
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.
- For each variance with status
attentionorcritical— formulate a recommended action. - Specify the owner (from project data) and deadline (if determinable from context). If not —
[clarify]. - Minimum 1 recommendation per
criticalvariance.
Header Metadata
Version: 1.0Date: current generation dateFile:plan-fact-report.mdDocument status:draft(at generation). After approval —approved.Period:{{start_date}} — {{end_date}}Report type:interimorfinal(from input; defaultinterim)Planned data source: filename (e.g.project-plan.md)Actual data source: source description (e.g. "PM data provided in chat")
4. Placeholder Reference
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] |
5. Validation Checklist
Before presenting the result to the user — verify:
- All required placeholders replaced with values
- No
{{}}placeholders remaining in the text (except removed optional rows) - Report period is valid: start_date < end_date
- Section 1 (summary) contains exactly 3 rows: timelines, budget, scope (if budget missing — 2 rows + note)
- Variance statuses calculated per §3 reference table (≤10% / 11–25% / >25%)
- Section 2: all milestones from the plan included (not only completed)
- Section 2: incomplete milestones show "not complete," variance is a dash
- Section 3: total = sum of rows (verify arithmetic)
- Section 3: if budget missing — section replaced with note
- Section 4: present if any
attention/criticalvariances; absent if allon track - All agent assumptions listed when presenting the result
- Document status =
draft - File:
plan-fact-report.mdstated in header
6. Dependencies
Consumes (input):
project-plan.md— from skillgenerate-project-plan(milestones, budget, timelines)project-charter.md— from skillgenerate-charter(deliverables for scope metric)- Actual data — from the user (via chat)
Produces (output): plan-vs-actual report → consumed by:
generate-closure-report— Phase 6, Closing
After approval, the user must upload plan-fact-report.md to project knowledge so it is available for generate-closure-report.
7. Usage Example
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]
Changelog
| 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 |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

