Claude-skills-kit generate-closure-report
git clone https://github.com/KirKruglov/claude-skills-kit
T=$(mktemp -d) && git clone --depth=1 https://github.com/KirKruglov/claude-skills-kit "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/project-management-kit/generate-closure-report" ~/.claude/skills/kirkruglov-claude-skills-kit-generate-closure-report && rm -rf "$T"
skills/project-management-kit/generate-closure-report/SKILL.mdgenerate-closure-report
Triggers
Russian: «сформируй отчёт о закрытии», «закрой проект», «подготовь closure report», «отчёт о закрытии проекта» English: "generate closure report", "close project", "project closure report", "prepare closure report"
Language Detection
Determine the language of the user's request:
- If the request is in Russian → use templates with
suffix-ru - Otherwise → use templates with
suffix-en
All output (headings, labels, comments, instructions) must match the detected language.
1. Input Data
| Data | Required | Source | Notes |
|---|---|---|---|
| Project charter | yes | knowledge () | Goal, deliverables, team, sponsor, budget, timeline |
| Plan-fact report | yes | knowledge () | Deviation summary, actual dates/budget/scope. If multiple files — use the latest by date |
| Lessons learned | yes | chat | User provides in any format: retrospective results, questionnaire answers, free text. Agent structures and assigns categories |
| Risk register | no | knowledge () | For section 4. If unavailable — agent asks the user about realized risks |
| Open items | no | chat | Tasks/questions remaining after closure. If not provided — replace section with "All items closed" |
| Lessons source | no | chat | / / . Default: |
If required data is missing — request it (system-prompt-draft.md §3.2):
To generate the project closure report, the following is needed: 1. Project charter (project-charter.md) — in knowledge or paste in chat. 2. Plan-fact report (plan-fact-report.md) — in knowledge or paste in chat. 3. Project lessons — in any format: — team retrospective results; — questionnaire answers; — free-form description: what went well, what went wrong, what to do differently. Available data: [list what is present]. Missing: [specify].
2. Execution Algorithm
- Verify input data. Check for minimum: charter, plan-fact report, lessons from user. Missing → request using the template from §1. Do NOT generate a stub report, template, or example — respond ONLY with a data request. Present → step 2.
- Structure lessons. If data is free-form — categorize into: Processes, Technologies, Communications, Resources, Risks. For each lesson — formulate a recommendation. Count: 1 to 5, only those supported by data. Do not pad artificially.
- Check data for contradictions. If charter data conflicts with plan-fact report (e.g., different planned dates or budget) — do NOT choose independently. List the discrepancies, ask which data is current. Exception: if the user explicitly corrects in chat — use the correction.
- Read the template
from project knowledge. Select the file with the appropriate language suffix based on Language Detection.closure-report - Fill section 1 (general information): planned data from charter, actual data from plan-fact report (summary).
- Fill section 2 (project results): list of deliverables from charter (section 2, "Project Result"). Actual status from plan-fact report (scope data) or from user. Split into "Delivered" / "Not delivered / deferred". For each incomplete deliverable — state the reason. If reason not provided — use
.[clarify] - Fill section 3 (plan-fact deviations): copy the summary table from plan-fact-report.md (section 1). Data: plan, actual, deviation — without recalculation. Rephrase the "Comment" column in a closing tone (1 sentence per metric). At the bottom — reference: "Details — in
."plan-fact-report.md - Fill section 4 (realized risks):
- If
is available → extract risks with status "realized" or mentioned in user data. Verify: each risk in section 4 must have an ID from the register.risk-register.md - If
is unavailable → use data from user. If user did not specify realized risks — ask: "Which planned risks were realized? If none — I will note 'No realized risks'."risk-register.md - If no risks occurred → replace the table with: "No realized risks".
- If
- Fill section 5 (lessons learned): 1 to 5 lessons, structured in step 2. Category from the reference in §3.
- Fill section 6 (open items) and section 7 (closure approval):
- Section 6: if user provided open items → fill in. If not → replace the table with: "All items closed".
- Section 7: names from charter (Sponsor, PM). Dates — empty.
- Verify the result against the checklist (section 5 of this spec). Present the result in chat. Format (system-prompt-draft.md §3.4):
- What was done: "Generated project closure report based on [list sources]".
- Assumptions: list all (if any).
- Key outcomes: 1–3 lines — main results (delivered X of Y, budget, timeline).
- Required: "Approve, provide comments, or reject".
- Do not show system file paths. Use name only: "Report saved as closure-report.md".
- Wait for user response (system-prompt-draft.md §3.5).
- Approval → produce the final text.
- Comments → revise, show updated version. After the 3rd iteration — ask: "Continue revising or finalize the current version?"
- After approval:
- Offer the user text to insert into log.md and project-state.md (system-prompt-draft.md §11).
- State: "Closure report approved. Project completed." This is the final skill in the MVP chain — no subsequent tasks.
3. Section Fill Rules
Section 1. General Information
- Project goal — from charter (section 1). Copy as-is, do not rephrase.
- Sponsor — from charter (section 5 or header).
- Start and end dates (planned) — from charter (section 3).
- End date (actual) — from plan-fact report (last actual date) or from user. If project closes early — state the actual date with a note.
- Budget (planned) — from charter (section 4). Budget (actual) — from plan-fact report (summary).
Section 2. Project Results
- Delivered: each deliverable from charter (section 2, "Included") that is complete. Format:
.deliverable — brief result description - Not delivered / deferred: deliverables that are incomplete or deferred. Format:
. If reason not provided by user —deliverable — reason: [explanation]
.[clarify] - Status source: plan-fact report (scope data) > user data in chat.
- If a deliverable is partially complete — list under "Delivered" with a "partial" note and description of what was excluded.
Section 3. Plan-Fact Deviations
- Direct transfer of the summary table from plan-fact-report.md (section 1, 3 rows: timeline, budget, scope). Do not recalculate data.
- "Comment" column — rephrase from plan-fact report in a closing tone. One sentence per metric. Example: "Delay +1 week due to Safari hotfix" → "Project completed with a +1 week delay; root cause — Safari incident during launch phase".
- If budget was absent in plan-fact report — replace the budget row with "Budget — data unavailable".
- Below the table — in italics: Details — in
.plan-fact-report.md
Section 4. Realized Risks
Conditional section.
- If risks were realized — table with columns: ID, Risk, Project Impact, Response Result.
- ID — from risk-register.md (if available). If register unavailable — leave empty or assign R1, R2, ...
- Project Impact — specific: what happened, what consequences (delay, overrun, scope change).
- Response Result — what was done: did the response plan work, what actions were taken.
- If no risks occurred → replace the table with: "No realized risks".
- Do not include risks that were in the register but did not materialize.
Section 5. Lessons Learned
- 1 to 5 lessons. Count is determined by user data — do not pad artificially.
- Columns: #, Lesson, Category, Recommendation.
- Category — from reference:
/Processes
/Technologies
/Communications
/Resources
.Risks - Lesson — a fact or observation. Wording: what happened and why it matters.
- Recommendation — a concrete action for future projects. Not an abstraction.
- If user provided lessons without categories — agent assigns based on content.
Section 6. Open Items and Handover
Conditional section.
- If open items exist — table: #, Item/Task, Owner, Deadline.
- Owner — from user data. If not specified —
.[clarify] - Deadline — specific date (YYYY-MM-DD). If not specified —
.[clarify] - If no open items → replace the table with: "All items closed".
Section 7. Closure Approval
- Sponsor and PM — from charter (section 5). Date — empty (filled upon approval).
Header Metadata
: 1.0Version
: current generation date.Date
:Fileclosure-report.md
:Document status
(on generation). After approval —draft
.approved
: from charter.Project manager
: from input data. Default:Lessons source
.PM input in chat
4. Placeholder Table
Placeholders
in the template are fill guides, not auto-substitution variables. Replace each with the corresponding value from input data.{{}}
| Placeholder | Required | Source | Allowed Values |
|---|---|---|---|
| yes | charter | text |
| yes | system | YYYY-MM-DD |
| yes | charter | name |
| yes | chat (default: ) | / / |
| yes | charter (section 1) | text |
| yes | charter | name |
| yes | charter (section 3) | YYYY-MM-DD |
| yes | charter (section 3) | YYYY-MM-DD |
| yes | plan-fact report / chat | YYYY-MM-DD |
| no | charter (section 4) | number + currency |
| no | plan-fact report | number + currency |
| yes (≥1) | charter (section 2) | deliverable name |
| yes | plan-fact report / chat | brief result description |
| no | charter / plan-fact report | undelivered deliverable name |
| no | chat / plan-fact report | reason or |
| yes | plan-fact report (summary) | number + unit |
| yes | plan-fact report (summary) | number + unit |
| yes | plan-fact report (summary) | text (e.g., "+1 week (+8%)") |
| yes | agent (based on plan-fact report) | closing comment, 1 sentence |
| no | plan-fact report (summary) | text (e.g., "-$3,600 (-4.5%)") |
| no | agent (based on plan-fact report) | closing comment, 1 sentence |
| yes | plan-fact report (summary) | number + unit (deliverables) |
| yes | plan-fact report (summary) | number + unit |
| yes | plan-fact report (summary) | text (e.g., "-1 deliverable") |
| yes | agent (based on plan-fact report) | closing comment, 1 sentence |
| no | risk-register / agent | ID (e.g., R001) or empty |
| no | risk-register / chat | risk description |
| no | chat / agent | specific project impact |
| no | chat / agent | response result |
| yes (≥1) | chat (structured by agent) | text — fact/observation |
| yes | agent | / / / / |
| yes | agent | concrete action |
| no | chat | question or task |
| no | chat | owner or |
| no | chat | YYYY-MM-DD or |
5. Validation Checklist
Before presenting the result to the user — verify:
- All required placeholders replaced with values
- No
placeholders remain in text (except removed optional rows){{}} - Section 1: planned data matches charter, actual data matches plan-fact report
- Section 2: all deliverables from charter listed (delivered + undelivered)
- Section 2: each undelivered deliverable has a reason (or
)[clarify] - Section 3: data matches plan-fact report summary (no recalculation)
- Section 3: reference to
presentplan-fact-report.md - Section 4: if conditional — correctly filled or replaced with "No realized risks"
- Section 5: 1 to 5 lessons, each with category and recommendation
- Section 6: if conditional — correctly filled or replaced with "All items closed"
- All agent assumptions listed when presenting result
- Document status =
draft - File:
stated in headerclosure-report.md
6. Dependencies
Consumes (input):
— from skillproject-charter.md
(goal, deliverables, team, budget, timeline)generate-charter
— from skillplan-fact-report.md
(deviation summary, actual data)generate-plan-fact-report
— from skillrisk-register.md
(optional, for realized risks)generate-risk-register- Lessons and open items — from user (via chat)
Produces (output): project closure report — the final artifact. Not consumed by other MVP skills.
In Product 1: additionally consumes data from
generate-questionnaire (team lessons via questionnaire).
After report approval, user should upload
closure-report.md to project knowledge for archival.
7. Example Invocation
User command:
Generate the project closure report. Charter and plan-fact report are in knowledge. Risk register too. Lessons: — Underestimated DB filter complexity, lost a week. Need to budget buffer for unknown tasks. — Formalized change request saved us from scope creep — CEO wanted to add Intercom, but impact assessment stopped it. — Safari testing was done only before release — needs to happen earlier. Open items: — Email integration assigned to Dmitry, deadline July 31. — Pricing — on me, by August 1.
Agent response (after generation):
Generated project closure report for "ClientBoard" based on: charter, plan-fact report, risk register, lessons from chat.
Assumptions:
- Lessons source: PM input in chat.
- Realized risks identified based on risk-register.md and PM data.
Key outcomes:
- Delivered 4 of 5 deliverables (email integration deferred).
- Budget: $76,400 of $80,000 (4.5% savings).
- Timeline: +1 week (13 instead of 12).
Required: approve, provide comments, or reject.
[report text]
Changelog
| Date | Version | Change |
|---|---|---|
| 2026-03-26 | 1.0 | Skill created. Aggregation from charter + plan-fact report + lessons. Conditional sections 4/6. 1 to 5 lessons |