agentleFS
KirKruglovKirKruglov/claude-project-manager/skills/generate-plan-fact-report/SKILL.md

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'.

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
  1. Very specific:

    If the request is in Russian → use templates with -ru suffix

    line 11
  2. Distinctive:

    All output (headings, labels, comments, instructions) must match the detected language.

    line 14
  3. Distinctive:

    If required data is missing — request it:

    line 30
  4. Distinctive:

    Check input data: Verify project plan and actual data are present.

    line 47
  5. Distinctive:

    Structure actual data: If free-form — organize across three dimensions: timelines (milestone dates), budget (costs by line), scope …

    line 48
  6. Very specific:

    Check for data conflicts: If plan data in chat conflicts with project-plan.md — do NOT resolve independently.

    line 49
  7. Distinctive:

    Do not include internal file paths.

    line 62
  8. Distinctive:

    Always notify, regardless of report type and variance statuses: "Plan-vs-actual report approved.

    line 68
  9. Very specific:

    If a milestone is not complete — enter not complete in "Actual Date." Variance — dash.

    line 103
  10. Very specific:

    If a cash flow plan (breakdown by period) is unavailable — use linear distribution of budget over project duration, note estimated in …

    line 113
  11. Distinctive:

    Before presenting the result to the user — verify:

    line 192
  12. Very specific:

    After approval, the user must upload plan-fact-report.md to project knowledge so it is available for generate-closure-report.

    line 220

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

generate-plan-fact-report

Language Detection

Determine the language of the user's request:

  • If the request is in Russian → use templates with -ru suffix
  • Otherwise → use templates with -en suffix

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

DataRequiredSourceNotes
Project planyesknowledge (project-plan.md)Milestones, timelines, budget. If budget is missing — Section 3 is not generated
Actual datayeschatUser provides: actual milestone completion dates, actual costs by budget line, deliverable status. Free-form — agent structures it
Project charternoknowledge (project-charter.md)For deliverables list (Section 1, scope). If unavailable — request the list from the user
Report typenochatinterim (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

  1. 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.
  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.
  3. 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.
  4. Determine report period. From actual data: project start → date of last recorded fact. If the user specified a period explicitly — use it.
  5. Read the template plan-fact-report-ru.md or plan-fact-report-en.md from project knowledge (based on detected language).
  6. Extract planned data from project-plan.md: milestones with dates, budget lines with amounts, deliverables list.
  7. Compare plan vs. actual. For each row: calculate variance (absolute and %), assign status per §3 reference table.
  8. Fill template sections per Section 3 rules.
  9. 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 attention or critical (including scope with incomplete deliverables) → fill Section 4. Only if all three are on track → remove Section 4 entirely.
  10. Validate the result using the checklist in Section 5.
  11. 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."
  12. 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?"
  13. After approval:
    • Offer the user text for log.md and project-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?"

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 (or project-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 complete in "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 estimated in 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 attention or critical — formulate a recommended action.
  • Specify the owner (from project data) and deadline (if determinable from context). If not — [clarify].
  • Minimum 1 recommendation per critical variance.

Header Metadata

  • Version: 1.0
  • Date: current generation date
  • File: plan-fact-report.md
  • Document 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")

4. Placeholder Reference

Placeholders {{}} in the template are fill targets, not auto-substitution variables. Replace each with the corresponding value from input data.

PlaceholderRequiredSourceAllowed Values
{{project_name}}yesplan / chartertext
{{date}}yessystemYYYY-MM-DD
{{start_date}}yesplan / chatYYYY-MM-DD
{{end_date}}yeschatYYYY-MM-DD
{{report_type}}yeschat (default: interim)interim / final
{{source_plan}}yescontextfilename of planned data source
{{source_fact}}yescontextdescription of actual data source
{{planned_duration}}yesplannumber + unit (days / working days)
{{actual_duration}}yesactualnumber + unit
{{delta_time}}yescalculatedsigned number
{{delta_time_pct}}yescalculatedsigned %
{{status_time}}yescalculatedon track / attention / critical
{{currency}}yesplan / chatcurrency symbol (₽, $, €)
{{planned_budget}}noplannumber
{{actual_budget}}noactualnumber
{{delta_budget}}nocalculatedsigned number
{{delta_budget_pct}}nocalculatedsigned %
{{status_budget}}nocalculatedon track / attention / critical
{{planned_scope}}yescharter / plannumber (deliverable count)
{{delivered_scope}}yesactualnumber (delivered count)
{{delta_scope}}yescalculatedsigned number
{{delta_scope_pct}}yescalculatedsigned %
{{status_scope}}yescalculatedon track / attention / critical
{{milestone_name}}yes (≥1)planmilestone name
{{planned_date}}yesplanYYYY-MM-DD
{{actual_date}}noactualYYYY-MM-DD or not complete
{{delta_days}}nocalculatedsigned day count or dash
{{reason}}noactual / agenttext or [clarify]
{{cost_item}}noplancost line name
{{planned_cost}}noplannumber
{{actual_cost}}noactualnumber
{{delta}}nocalculatedsigned number
{{delta_pct}}nocalculatedsigned %
{{comment}}noactual / agenttext
{{total_plan}}nocalculatedsum of planned rows
{{total_fact}}nocalculatedsum of actual rows
{{total_delta}}nocalculateddifference of totals
{{total_delta_pct}}nocalculated% variance of total
{{issue_N}}noagentissue / observation description
{{action_N}}noagentrecommended action
{{owner_N}}noproject dataowner or [clarify]
{{deadline_N}}noagentdeadline 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/critical variances; absent if all on track
  • All agent assumptions listed when presenting the result
  • Document status = draft
  • File: plan-fact-report.md stated in header

6. Dependencies

Consumes (input):

  • project-plan.md — from skill generate-project-plan (milestones, budget, timelines)
  • project-charter.md — from skill generate-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

DateVersionChange
2026-03-271.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-261.0Skill created. Output format .md. Status calculation rules, conditional Section 4, scope metric — deliverables

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.