
Training Report
- 1.9k installs
- 178 repo stars
- Updated August 1, 2026
- samber/cc-skills
training-report is an agent skill that Produce a professional training/workshop report as a .docx file. Use this skill whenever the user mentions "training rep.
About
Iterate the full report in Markdown first Generate the docx last once when the content is final The md is the canonical artifact the docx is a terminal derivative Discipline agnostic coding workshop leadership seminar safety training onboarding creative workshop all apply equally Voice mode this conversation may be conducted by voice Transcription can introduce homophones missing punctuation or ambiguous proper nouns names company names tool names If any answer is unclear after transcription ask a short clarifying question before moving on do not guess Load these files at the steps indicated Do not load them all upfront File Load at references tone of voice md Step 1 after language audience confirmed references markdown draft md Step 5 before writing the draft references docx generation md Step 6 before generating the docx
- description: 'Produce a professional training/workshop report as a .docx file. Use this skill whenever the user mentions
- compatibility: Designed for Claude or similar AI agents.
- homepage: https://github.com/samber/cc-skills
- Follow training-report SKILL.md steps and documented constraints.
- Follow training-report SKILL.md steps and documented constraints.
Training Report by the numbers
- 1,907 all-time installs (skills.sh)
- +16 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #666 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
training-report capabilities & compatibility
- Capabilities
- description: 'produce a professional training/wo · compatibility: designed for claude or similar ai · homepage: https://github.com/samber/cc skills · follow training report skill.md steps and docume
- Use cases
- orchestration
What training-report says it does
description: 'Produce a professional training/workshop report as a .docx file. Use this skill whenever the user mentions "training report", "workshop report", "compte rendu", "compte rendu de formatio
compatibility: Designed for Claude or similar AI agents.
homepage: https://github.com/samber/cc-skills
npx skills add https://github.com/samber/cc-skills --skill training-reportAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1.9k |
|---|---|
| repo stars | ★ 178 |
| Security audit | 3 / 3 scanners passed |
| Last updated | August 1, 2026 |
| Repository | samber/cc-skills ↗ |
When should an agent use training-report and what problem does it solve?
Produce a professional training/workshop report as a .docx file. Use this skill whenever the user mentions "training report", "workshop report", "compte rendu", "compte rendu de formation", "formation
Who is it for?
Developers invoking training-report as documented in the skill source.
Skip if: Skip when requirements fall outside training-report documented scope.
When should I use this skill?
Produce a professional training/workshop report as a .docx file. Use this skill whenever the user mentions "training report", "workshop report", "compte rendu", "compte rendu de formation", "formation
What you get
Outputs aligned with the training-report SKILL.md workflow and stated deliverables.
- Markdown report
- .docx file
Files
Training Report
Iterate the full report in Markdown first. Generate the .docx last, once, when the content is final. The .md is the canonical artifact; the .docx is a terminal derivative.
Discipline-agnostic: coding workshop, leadership seminar, safety training, onboarding, creative workshop — all apply equally.
Voice mode: this conversation may be conducted by voice. Transcription can introduce homophones, missing punctuation, or ambiguous proper nouns (names, company names, tool names). If any answer is unclear after transcription, ask a short clarifying question before moving on — do not guess.
Reference files
Load these files at the steps indicated. Do not load them all upfront.
| File | Load at |
|---|---|
references/tone-of-voice.md | Step 1 (after language + audience confirmed) |
references/markdown-draft.md | Step 5 (before writing the draft) |
references/docx-generation.md | Step 6 (before generating the .docx) |
Step 0 — Check dependencies
Before asking the user anything, verify skill availability.
`docx` skill (required for Step 6)
- If found: note it; load it at Step 6
- If not found: warn the user — it is required to generate the final Word document and can be installed from Anthropic's official skill library. Offer to proceed with the Markdown draft in the meantime.
Humanizer skill (recommended)
- After Step 1, look for a humanizer skill matching the chosen language
- If found: load it and apply it during the humanization pass in Step 5
- If not found: tell the user once, then fall back to inline humanization rules (Step 5b). Suggest installing a humanizer skill for the chosen language.
Step 1 — Language & audience
Ask:
1. "In what language should I write the report? (French / English / other)" 2. "Who is the primary reader? (executive / HR / direct management / external client / internal archive)"
Then load references/tone-of-voice.md and apply its guidance throughout.
Step 2 — Template
Ask:
"Do you have a Word (.docx) template for this report? (company header/footer, logo, branded fonts, color scheme)"
- Yes → ask them to upload it; use it as the base at Step 6 (unpack/inject/repack)
- No → proceed with a clean document; ask for a brand color before defaulting to blue
#2E75B6
Step 3 — Interview
Conduct a structured interview in batches. Wait for answers before moving on. Extract what the user already told you from the conversation before asking.
Batch A — Session metadata
- Trainer name and role
- Date, location, company/team name
- Duration
- Total number of participants
- Confirm or refine: who is the document for?
Batch B — Session context
- Stated goal of the training
- Subject, topic, tool, or material used as practical support
- Any rules or constraints set at the start
- Materials, accounts, licenses, or equipment provided to participants
Batch C — Starting levels
- Distribution of familiarity across the group (any beginners? any experts?)
- Notable outliers at either end
Batch D — Session walkthrough
Walk through the session step by step. For each step:
- Objective
- What participants actually did
- Materials, tools, or exercises involved
- First exposure to this concept or not
- How it landed; any difficulties
Probe until complete: "What happened next?", "Did anything go differently than planned?", "Were there any pivots?"
Batch E — Deliverables
Ask: "Did participants produce anything during the session?"
Probe for:
- Documents, files, diagrams, prototypes, or any output created during exercises
- Collaborative work produced as a group
- Individual work produced autonomously
- Anything left incomplete or started but not finished
These may appear in the Annexes and/or be referenced in the Session Walkthrough.
Batch F — General observations
- Overall energy and engagement of the group
- Any incidents, surprises, or notable moments
- Schedule: did it hold, or were sections cut/extended?
- Logistical issues (room, materials, setup)
General Observations is optional. If the trainer has nothing notable to add beyond the walkthrough, skip this section entirely.
Batch G — Individual feedback
Ask: "Do you have specific observations for any individual participant?"
For each named participant, extract:
- Role or background
- Starting level
- Behavior/engagement (positive and negative)
- Notable evolution, breakthrough, or resistance
- How they ended the session
Individual Feedback is optional. Only write it if the trainer explicitly provides meaningful observations. Do not prompt for feedback on every participant.
Be diplomatic. Describe behaviors, not character. Name problems factually; do not editorialize. When writing for an external client about a team you don't know, consider whether naming individuals is appropriate at all.
See references/tone-of-voice.md — Diplomatic framing section.
Batch H — Recommendations & next steps
Ask: "What would you recommend to the direction/client to build on this session?"
Probe for:
- Resources and access to provide (licenses, books, platforms, communities)
- Practices to anchor in daily work
- What to pace carefully — basics before advanced material
- Follow-up sessions (refresher, coaching, Q&A after a few weeks)
- Assessment and validation (quiz, practical challenge, peer review, checklist)
- Knowledge-sharing rituals (Slack/Teams channel, recurring meeting, Loom demos, buddy system, monthly show-and-tell)
- Management involvement (protect practice time, 1:1 check-ins, celebrate wins)
- External resources (books, courses, certifications) for self-driven participants
- Specific warnings or caveats for management
Batch I — Annexes
Ask: "Do you have any annexes to attach to the report?"
Annexes can include:
- Photos from the session
- Satisfaction survey results (NPS, ratings, verbatim comments)
- Slides or handouts distributed during the session
- Work produced by participants (exercises, prototypes, documents, diagrams)
- Reference documents used during the session
- Any other supporting material
For each annex:
- Image → attempt auto-embed at Step 6
- File (PDF, slides, spreadsheet) → reference in the Annexes section; do not embed
- Survey data → synthesize in Step 4, then include as a dedicated section in the doc
- Participant deliverable → reference in the relevant Walkthrough step AND in Annexes
Batch J — Closing & contact
Ask: "May I include a closing note thanking the team for the invitation, and your contact details for future collaboration? (email + phone)"
If yes: collect name, email, phone. The closing is written in the document language, personal in tone, brief. See references/markdown-draft.md — Closing paragraph section.
Step 4 — Feedback synthesis (if survey data provided)
Produce a synthesis in the conversation before drafting:
- Overall score / NPS
- Rating distribution
- Top 3 positive themes
- Top 3 areas for improvement
- Any outlier responses
Ask the user to confirm before it enters the document.
Step 4b — Confirm outline
Here's what I'll draft:
1. Context
2. Starting Levels
3. Session Walkthrough (N steps)
4. General Observations [optional — include if trainer provided content]
5. Participant Satisfaction [only if survey data provided]
6. Individual Feedback [optional — include if trainer provided feedback]
7. Recommendations & Next Steps
8. Annexes [only if annexes provided]
[Closing + contact]
Language: [language] | Audience: [target] | Template: [yes/no]Ask: "Anything to adjust before I start the draft?"
Step 5 — Markdown draft
Load `references/markdown-draft.md` before writing. It contains the full section-by- section writing guide, Markdown limitations, HTML table workarounds, and closing paragraph guidance.
Humanization pass
Before presenting the draft, apply the humanizer skill (loaded in Step 0). If no humanizer skill is available, apply these rules inline:
- Cut all AI throat-clearing openers and sentence starters
- Cut adjective doublets — pick the more precise word
- Replace passive voice with active wherever natural
- Replace vague praise or criticism with specific behaviors or facts
- Short sentences over long ones
- Adapt to the document language (see
references/tone-of-voice.md)
Do not present an un-humanized draft.
Iteration loop
Present the draft inline in the conversation. Let the user lead. Update the .md file for every change. One canonical file, no versions. Only move to Step 6 when the user explicitly confirms the content is final.
Step 6 — Final .docx generation
Load `references/docx-generation.md` and the `docx` skill before starting.
This step runs once. It is terminal: if the user requests changes after the .docx is generated, update the .md and regenerate from scratch.
Deliver both files. If the environment supports inline file delivery (e.g. present_files on Claude.ai), use it. Otherwise, print the absolute paths to both files.
Pitfalls
- Don't fabricate details — only document what the trainer explicitly provided
- Don't editorialize in General Observations — factual only
- Don't write Individual Feedback unless explicitly provided — and stay diplomatic
- Don't pad recommendations — 6 sharp ones beat 12 vague ones
- Always include a Pacing recommendation in the Next Steps
- This skill is not developer-specific — adapt vocabulary to the discipline
- Never generate the .docx mid-conversation — Markdown is the draft stage
- Never skip an annex or image — embed, reference, or placeholder
{
"skill_name": "training-report",
"metadata": {
"eval_methodology": "adversarial — each eval has a trap the model falls into without the skill",
"without_skill_runner_note": "When running without-skill evals, disable ALL skills from this plugin AND any external document/writing skills. Writing skills may partially compensate for missing training-report guidance and inflate without-skill scores."
},
"evals": [
{
"id": 1,
"prompt": "I just finished a 3-hour Python onboarding workshop for 8 junior engineers. Can you help me write it up?",
"trap": "Without the skill, the model jumps into drafting content or asks random questions. With the skill, it must first check for the docx skill, then ask language and audience before anything else.",
"expected_output": "Model checks for the docx skill (or warns if absent), then asks at minimum: (1) language and (2) who is the primary reader — before asking anything about the session content.",
"files": [],
"assertions": [
{ "id": "1.1", "description": "model checks for or mentions the docx skill dependency before starting the interview" },
{ "id": "1.2", "description": "model asks what language the report should be written in (English / French / other)" },
{ "id": "1.3", "description": "model asks who the primary reader is (executive / HR / management / client / archive)" },
{ "id": "1.4", "description": "model does NOT begin drafting or asking session-content questions before language and audience are confirmed" },
{ "id": "1.5", "description": "model does NOT immediately generate a .docx file" }
]
},
{
"id": 2,
"prompt": "I need to create a training report for a technical skill session I ran last week. It was a half-day Docker workshop with 8 developers from the engineering team. Can you help?",
"trap": "Without the skill, the model either starts asking about session content immediately (topics covered, exercises, participant names) or writes a draft right away. The skill requires a strict ordering: first check for docx skill dependency, then ask language and audience BEFORE any session content questions.",
"expected_output": "Checks for docx skill dependency, then asks: (1) what language the report should be in, (2) who the primary reader is (executive/HR/management/client). Only after confirming those does it proceed to session content questions.",
"files": [],
"assertions": [
{ "id": "2.1", "description": "model checks for or mentions the docx skill dependency before starting the interview" },
{ "id": "2.2", "description": "model asks what language the report should be written in before asking about Docker session content" },
{ "id": "2.3", "description": "model asks who the primary reader is (executive/HR/management/client/archive) before content questions" },
{ "id": "2.4", "description": "model does NOT immediately start asking about Docker topics, exercises, or participant observations before confirming language and audience" }
]
},
{
"id": 3,
"prompt": "j'ai besoin d'un compte rendu de formation pour la session d'hier",
"trap": "Without the skill, the model may just ask generic questions or start writing immediately. With the skill, it recognizes the French trigger 'compte rendu de formation', checks dependencies, then asks language + audience in the correct order.",
"expected_output": "Model triggers the skill workflow: checks docx dependency, asks language (confirming French), asks audience — in that order.",
"files": [],
"assertions": [
{ "id": "3.1", "description": "model recognizes this as a training report request and engages the structured workflow" },
{ "id": "3.2", "description": "model asks to confirm language (or confirms French based on the French prompt)" },
{ "id": "3.3", "description": "model asks who the primary reader is" },
{ "id": "3.4", "description": "model does NOT start asking about session content (walkthrough, participants) before confirming audience" },
{ "id": "3.5", "description": "model does NOT write a draft immediately" }
]
},
{
"id": 4,
"prompt": "I ran a leadership workshop last week. Here are the details: trainer: Sarah Chen, date: June 3 2025, location: Paris, 12 participants, 2 hours. Goal: improve team communication. Three exercises: icebreaker, conflict-resolution role-play, retrospective. Energy was good overall. Please write the full report now.",
"trap": "Without the skill, the model writes a full report from this info. With the skill, it must first run Step 1 (language + audience) and Step 2 (template) before drafting anything — even if the user provides all content upfront.",
"expected_output": "Model does NOT immediately draft the report. It runs Step 1: asks language + audience. It also asks about a Word template. It does not skip batches B through J just because some data was volunteered.",
"files": [],
"assertions": [
{ "id": "4.1", "description": "model does NOT write a full draft immediately despite receiving session details" },
{ "id": "4.2", "description": "model asks what language the report should be in" },
{ "id": "4.3", "description": "model asks who the primary reader is" },
{ "id": "4.4", "description": "model asks about a Word template or brand color" },
{ "id": "4.5", "description": "model confirms it will ask remaining interview questions (batches it hasn't covered yet)" }
]
},
{
"id": 5,
"prompt": "Training report — French — audience: HR. Trainer: Marc Dupont, date: March 14, company: Acme Corp, 10 participants, half-day. Topic: public speaking skills. Please write the context section.",
"trap": "Without the skill, the model writes a context section and fabricates plausible details (location, specific goal phrasing, materials). With the skill, it only uses facts explicitly provided and asks for missing details rather than inventing them.",
"expected_output": "Context section uses ONLY the provided facts. Model asks for missing details (specific goal, materials used, location) rather than inventing them.",
"files": [],
"assertions": [
{ "id": "5.1", "description": "context section does NOT invent a city or specific location that was not provided" },
{ "id": "5.2", "description": "context section does NOT invent a specific stated goal beyond 'public speaking skills'" },
{ "id": "5.3", "description": "context section does NOT invent materials, slides, or specific exercises that were not mentioned" },
{ "id": "5.4", "description": "model either asks for the missing details OR explicitly flags what was not provided and leaves placeholders" },
{ "id": "5.5", "description": "context section reflects exactly 10 participants and a half-day duration" }
]
},
{
"id": 6,
"prompt": "We've finished the interview. Here's the outline I agreed to. Please generate the Word document now.",
"trap": "Without the skill, the model might proceed directly to .docx generation. With the skill, it knows that .docx generation requires an approved Markdown draft first — the outline agreement is NOT the draft approval.",
"expected_output": "Model does NOT generate a .docx. It explains that the Markdown draft must be written and approved first. It offers to start the draft.",
"files": [],
"assertions": [
{ "id": "6.1", "description": "model does NOT generate or attempt to generate a .docx file" },
{ "id": "6.2", "description": "model explains that a Markdown draft must be produced and approved before .docx generation" },
{ "id": "6.3", "description": "model offers to start writing the Markdown draft" },
{ "id": "6.4", "description": "model references that the .docx is generated once, at the end, from the approved .md file" }
]
},
{
"id": 7,
"prompt": "Write the context section in French for this training report: a 4-hour AI literacy workshop for the finance team at BNP Paribas, commissioned by the HR director, with 15 participants, using ChatGPT as the practical support tool. Participants were asked not to use their phones during exercises.",
"trap": "Without the skill, the model writes French prose with common AI tells: 'Il convient de noter', 'par ailleurs', 'dans le cadre de', 'notamment', passive voice, long nominalizations. With the skill it eliminates these.",
"expected_output": "French context section free of AI tells. Active voice. No 'Il convient de noter', 'par ailleurs', 'dans le cadre de', 'notamment', 'en effet' at sentence start. Formal register with 'vous'. Guillemets with non-breaking spaces.",
"files": [],
"assertions": [
{ "id": "7.1", "description": "text does NOT contain 'Il convient de noter' or 'il convient de'" },
{ "id": "7.2", "description": "text does NOT contain 'par ailleurs' as a sentence opener" },
{ "id": "7.3", "description": "text does NOT contain 'dans le cadre de' as an opener" },
{ "id": "7.4", "description": "text does NOT contain 'notamment' as an opener or filler" },
{ "id": "7.5", "description": "text uses active voice (e.g., 'La DRH a commandé' not 'La formation a été commandée par')" },
{ "id": "7.6", "description": "the constraint about phones appears as a blockquote (> syntax) not as inline prose" },
{ "id": "7.7", "description": "text does NOT use 'ainsi' or 'en effet' as sentence starters" }
]
},
{
"id": 8,
"prompt": "Write individual feedback for two participants. Julien: he was obstructive and didn't understand the exercises. Marie: she was enthusiastic and a natural leader.",
"trap": "Without the skill, the model echoes the trainer's character judgments ('obstructive', 'enthusiastic', 'natural leader') directly into the report. With the skill, it translates these into specific behaviors, not character labels.",
"expected_output": "Julien paragraph describes behaviors (declined exercises, required additional explanation) — NOT 'obstructive'. Marie paragraph gives specific observable facts (completed exercises early, asked follow-up questions) — NOT 'enthusiastic' or 'natural leader'.",
"files": [],
"assertions": [
{ "id": "8.1", "description": "Julien's feedback does NOT use the word 'obstructive'" },
{ "id": "8.2", "description": "Julien's feedback describes specific behaviors or actions rather than character traits (e.g., 'declined to complete', 'required additional explanation')" },
{ "id": "8.3", "description": "Marie's feedback does NOT use 'enthusiastic' as a standalone adjective without a specific factual anchor" },
{ "id": "8.4", "description": "Marie's feedback does NOT use 'natural leader' without grounding it in specific observable actions" },
{ "id": "8.5", "description": "Marie's feedback includes at least one specific observable fact (e.g., finished first, asked questions on a specific topic)" },
{ "id": "8.6", "description": "feedback describes behaviors, not character — at least one behavioral anchor per participant" }
]
},
{
"id": 9,
"prompt": "I've given you all the session details. I didn't mention any individual participants specifically. Please write the full Individual Feedback section.",
"trap": "Without the skill, the model might produce generic Individual Feedback paragraphs or ask to fill them in. With the skill, if the trainer provided no named participant observations, this section must be omitted entirely — it is not prompted.",
"expected_output": "Model does NOT write an Individual Feedback section. It explains this section is omitted because no individual observations were provided. It does NOT invent or prompt for generic participant names.",
"files": [],
"assertions": [
{ "id": "9.1", "description": "model does NOT write Individual Feedback paragraphs with invented names or generic placeholders" },
{ "id": "9.2", "description": "model explains that Individual Feedback is only written when the trainer explicitly provides observations about named participants" },
{ "id": "9.3", "description": "model does NOT ask the trainer to provide feedback for each participant one by one" },
{ "id": "9.4", "description": "model omits or explicitly marks the Individual Feedback section as not applicable" }
]
},
{
"id": 10,
"prompt": "Write the Recommendations & Next Steps section for a React workshop. Here's what I'd recommend: provide access to the official React docs, assign a practice project, run a follow-up in 4 weeks, connect participants to the internal Slack channel.",
"trap": "Without the skill, the model writes a flat bullet list. With the skill, it groups under subheadings AND includes a Pacing subgroup — a specific requirement the model wouldn't add on its own.",
"expected_output": "Recommendations grouped under subheadings (Resources & Access, Practices, Follow-Up, etc.). A dedicated Pacing subgroup must be present advising not to rush participants into advanced material.",
"files": [],
"assertions": [
{ "id": "10.1", "description": "recommendations are grouped under at least 2 distinct subheadings — NOT a flat bullet list" },
{ "id": "10.2", "description": "a Pacing subgroup is present (advising management not to rush advanced material before basics are consolidated)" },
{ "id": "10.3", "description": "each bullet uses a bold label followed by a colon and explanation (e.g., '**React Docs:** Provide read access...')" },
{ "id": "10.4", "description": "at least one recommendation is actionable with specificity (time, owner, or concrete action — not just 'encourage practice')" },
{ "id": "10.5", "description": "the Pacing recommendation advises a specific caution (e.g., consolidate fundamentals before hooks/advanced patterns)" }
]
},
{
"id": 11,
"prompt": "The trainer provided a satisfaction survey: average score 4.1/5, 12 responses. Top positive themes: clear explanations, good pace, practical exercises. Top negative: too short, wanted more hands-on time. One outlier gave 2/5 citing irrelevant content. Should this go in the report?",
"trap": "Without the skill, the model may dump raw survey data into the report without synthesis, or include verbatim quotes without trainer confirmation. With the skill, it runs Step 4: synthesizes first in the conversation, confirms with trainer before it enters the document.",
"expected_output": "Model produces a synthesis in the conversation (score, distribution, themes, outlier). Asks trainer to confirm before it enters the document. Does NOT immediately write the satisfaction section into the draft.",
"files": [],
"assertions": [
{ "id": "11.1", "description": "model presents a synthesis in the conversation: overall score (4.1/5), top 3 positives, top 3 negatives, outlier" },
{ "id": "11.2", "description": "model asks the trainer to confirm the synthesis before it enters the document" },
{ "id": "11.3", "description": "model does NOT immediately write this as a final document section without confirmation" },
{ "id": "11.4", "description": "model does NOT use verbatim quotes without noting that paraphrasing is required unless the trainer confirms exact wording" }
]
},
{
"id": 12,
"prompt": "I have three annexes: a photo of the whiteboard at the end of the session, the slide deck PDF, and a prototype diagram created by one participant (Alice) during exercise 3.",
"trap": "Without the skill, the model may list annexes generically or silently ignore the image. With the skill, each annex type has specific treatment: image → attempt embed; PDF → reference only; participant deliverable → reference in Walkthrough AND in Annexes.",
"expected_output": "Whiteboard photo: mark for auto-embedding at Step 6 (ImageRun). Slide deck PDF: reference-only in Annexes, no embed. Alice's diagram: reference in the Walkthrough at Exercise 3 AND listed in Annexes with author + context.",
"files": [],
"assertions": [
{ "id": "12.1", "description": "whiteboard photo is flagged for auto-embedding (not silently skipped or referenced-only)" },
{ "id": "12.2", "description": "slide deck PDF is flagged as reference-only (not embedded)" },
{ "id": "12.3", "description": "Alice's diagram is flagged to appear in both the relevant Walkthrough step AND in the Annexes section" },
{ "id": "12.4", "description": "Alice is identified as the author of the diagram in the annex entry" },
{ "id": "12.5", "description": "model does NOT silently skip any of the three annexes" }
]
},
{
"id": 13,
"prompt": "This report is for an external client (the company that hired me to run the workshop). I have detailed feedback on three specific participants. Should I name them in the report?",
"trap": "Without the skill, the model says 'yes, name them' or gives a generic answer. With the skill, it applies the external-client audience rule: naming individuals in negative feedback is risky; suggest group-level language for negatives; reserve named entries for clear positives or significant blockers management must address.",
"expected_output": "Model advises caution: for an external client, consider group-level language for any negative feedback ('some participants', 'a minority of the group'). Reserve named entries for clearly positive observations or significant blockers requiring direct management action.",
"files": [],
"assertions": [
{ "id": "13.1", "description": "model does NOT simply say 'yes, name all three participants'" },
{ "id": "13.2", "description": "model advises using group-level language for any negative observations when writing for an external client" },
{ "id": "13.3", "description": "model explains that named individual feedback is appropriate for clearly positive observations OR significant blockers" },
{ "id": "13.4", "description": "model notes that the external client may not know team dynamics — the report reflects the trainer's professional reputation" }
]
},
{
"id": 14,
"prompt": "The session went smoothly. No incidents, no logistical issues, no surprises. Everything ran on schedule. The group was engaged. Can you write the General Observations section?",
"trap": "Without the skill, the model writes a General Observations section anyway, padding with generic positive statements. With the skill, it knows this section is optional and should be skipped entirely when the trainer has nothing notable to add beyond the walkthrough.",
"expected_output": "Model skips the General Observations section (or recommends omitting it) because no notable observations were provided. It does NOT pad this section with generic positive statements.",
"files": [],
"assertions": [
{ "id": "14.1", "description": "model recommends omitting or skipping the General Observations section" },
{ "id": "14.2", "description": "model explains this section is optional and should only be included if there is notable content" },
{ "id": "14.3", "description": "model does NOT write a General Observations section filled with generic positive phrases ('the group was engaged and motivated', etc.)" },
{ "id": "14.4", "description": "model does NOT editorialize — no interpretation like 'this shows the training was well-designed'" }
]
}
]
}
DOCX Generation — Reference
Load this file at Step 6. Read the docx skill first — this file does not repeat its technical rules, only adds training-report-specific structure and formatting guidance.
Pre-conditions
- The
docxskill has been loaded and read in full - The Markdown draft has been reviewed and approved by the user
- This is the last operation of the conversation
If a template was provided (Step 2)
Use the docx skill's unpack/edit/repack workflow:
1. Unpack the template to a working directory 2. Inject section content into existing paragraph styles — do not redefine fonts, colors, or margins; the template owns those 3. Preserve all existing header/footer/logo elements exactly 4. Repack and validate
Map the Markdown headings to the template's heading styles by name. If the template uses custom style names (e.g. "TitreSection" instead of "Heading 1"), use those names.
If no template was provided
Build from scratch following the docx skill's node.js API. Apply the structure and formatting guidance below.
Document structure
Cover block (no H1 — use raw Paragraphs)
[Title] — large (48pt), bold, brand color, Arial
[Subtitle] — medium (28pt), dark, Arial
[Metadata] — small (22pt), gray, Arial
format: Company — Team | Date | Duration | N participantsFollowed by a separator (paragraph with bottom border, not a Table).
Header
"Training Report | [Team]" — 20pt, gray, bold label + separator bottom borderAdapt to document language: "Compte rendu de formation" in French, etc.
Footer
"[Trainer name] | [Date]" — 18pt, gray, separator top borderBody sections
Mirror the Markdown structure. Convert each Markdown heading level:
## Section title→HeadingLevel.HEADING_1(32pt, bold, brand color)### Subsection→HeadingLevel.HEADING_2(26pt, bold, dark)
For sections marked optional in the Markdown (Individual Feedback, General Observations, Satisfaction) — only include them if content was written.
Closing paragraph
Style as normal body text. Contact details (name, email, phone) on a single line, slightly smaller font (20pt), gray, after a spacer paragraph.
Annexes section
One bullet per annex:
- [Title]: [description] — [status: embedded / see attached / placeholder]
Handling annotated elements from Markdown
For each <!-- DOCX: convert to styled Table --> block:
- Rebuild as a native
Tableelement using thedocxskill's table API - Apply column widths (sum must equal content width: 9026 DXA for A4 with 1" margins)
- Header row: light brand-color shading (
ShadingType.CLEAR), bold text - Body rows: alternating light gray shading optional
- Cell padding:
{ top: 80, bottom: 80, left: 120, right: 120 } - Do not carry over HTML — rebuild natively
For other <!-- DOCX: [instruction] --> annotations: follow the instruction literally.
Validation and delivery
Run the validation step as directed by the docx skill. Fix any errors before presenting. Deliver both files:
$OUTDIR/training_report_[team]_[date].docx$OUTDIR/training_report_[team]_[date].md(source for future reference)
If the environment supports inline file delivery (e.g. present_files on Claude.ai), use it. Otherwise, print the absolute paths to both files.
Close with:
- 1-sentence summary of what was produced
- List of any images needing manual insertion (with instructions)
- Reminder: future edits go through the
.mdfirst; do not edit the.docxdirectly
Markdown Draft — Reference
This file details how to write, structure, and iterate the Markdown draft of the training report. The Markdown file is the canonical artifact. The .docx is generated once, at the end of the conversation, from this file.
Why Markdown first
Editing prose in Markdown is fast and transparent. Editing binary .docx XML is slow, error-prone, and requires unpacking, modifying, and repacking a ZIP archive. By keeping the canonical content in Markdown:
- Every change the user requests is a simple text edit
- The content is readable and reviewable in the conversation itself
- The .docx is a derivative — a styled rendering of the final approved text
- If the user edits the .docx directly and then asks for changes, you're back to parsing binary XML; avoid this situation by making it clear that the .md is the source of truth
The conversion to .docx is the last operation of the conversation. It is not reversible mid-conversation: if the user requests changes after the .docx is generated, update the .md and regenerate from scratch.
File naming and location
Save the draft to the same output directory that the docx skill will use for the final .docx. Determine that directory before writing — ask the docx skill or use the same $OUTDIR you will use at Step 6. Both files must end up in the same directory:
$OUTDIR/training_report_[team]_[date].md
$OUTDIR/training_report_[team]_[date].docx ← written at Step 6Keep a single file. Do not create _v2, _final, _revised variants. Every iteration overwrites the same file. The conversation history is the version history.
Document structure in Markdown
Write the following sections in order. Omit any section that was explicitly skipped (e.g. no individual feedback requested, no satisfaction data provided).
# [Title of the training]
[Subtitle: tool/topic + session type] [Metadata: Company — Team | Date | Duration | N participants]
## 1. Context
[2–3 paragraphs: who commissioned it, what the goal was, what support material was used, any key rules or framing set at the start]
## 2. Starting Levels
[Intro sentence + bullet list segmenting participants by prior familiarity]
## 3. Session Walkthrough
### 1. [Step name]
[1–3 paragraphs: what participants did, what concept was introduced, how it landed]
### 2. [Step name]
...
## 4. General Observations
[3–5 paragraphs: flow, logistics, engagement, notable incidents. Factual only.]
## 5. Participant Satisfaction
[Only if survey data was provided. Overall score, distribution, themes from verbatim.]
## 6. Individual Feedback
[One H3 per notable participant. Optional section — only include if explicitly requested.]
### [Name]
**Starting level:** [brief description]
[Paragraph on background and initial posture] [Paragraph on evolution during the session]
## 7. Recommendations & Next Steps
### [Group heading, e.g. Resources & Access]
- **[Label]:** [explanation]
### [Group heading]
...
## 8. Annexes
[List of attached or referenced documents. Embedded images described inline.]
_[Closing sentence thanking the team for the invitation and expressing openness to future collaboration — see Closing section below]_
_Contact: [name] — [email] — [phone]_Section-by-section writing guidance
1. Context
- Start with the commissioning context: who asked for this training and why
- Describe the practical support used (project, tool, subject) in one sentence
- If a key rule or constraint was set at the start (e.g. "work without looking at the source material"), highlight it as a Markdown blockquote:
> Do not open the reference document. - Do not include the full session timeline here — that belongs in Section 3
2. Starting Levels
- The goal is to give the reader a quick picture of the heterogeneity of the group
- Use a bullet list, not prose — it scans faster
- If a participant is named in a bullet, be consistent: either name everyone or name outliers only
- Include the level of the furthest-ahead participant as context for the recommendations
3. Session Walkthrough
- Use numbered subheadings so the reader can track position in the session
- Focus on what participants DID, not what the trainer explained
- One paragraph per step is often enough; use two if there was a notable difficulty or a pivot in format
- End each step with the outcome: did everyone complete it? Was it demonstrated only? Did something unexpected happen?
- Note any steps that were cut or shortened due to time pressure
4. General Observations
- Write in short paragraphs, one idea each
- Do not editorialize here — this section is factual
- Good topics: pacing, tool setup issues, group energy, engagement level, any unexpected disruptions (external interruptions, early departures, etc.)
- Save any interpretation for Individual Feedback
5. Participant Satisfaction
- Lead with the headline number (NPS or overall score)
- Use a brief list for themes, not prose: it reads faster and anchors the verbatim
- If there are contradictory signals (high score but negative verbatim), name both and let the reader interpret
- Do not use verbatim quotes directly unless the trainer confirmed the wording — paraphrase instead
6. Individual Feedback (optional)
- Only write this section if the trainer explicitly requested individual feedback
- One subheading per participant who has something meaningful to say about
- Structure per participant: starting level (bold), background paragraph, evolution paragraph
- Be direct where praise is genuine. Name resistance factually, not judgmentally.
- If writing for an external client, consider whether naming individuals is appropriate (see tone-of-voice.md — Diplomatic framing section)
- The trainer knows the participants; you do not. Do not embellish or infer beyond what the trainer explicitly told you.
7. Recommendations & Next Steps
- Group recommendations under subheadings — do not use a flat list
- Each bullet: bold label followed by a colon and the explanation
- Recommendations must be actionable. "Encourage practice" is not actionable. "Block 30 minutes per day for autonomous practice in the two weeks following the session" is actionable.
- Always include a Pacing subgroup advising management not to rush participants into advanced or complex material before basics are consolidated
- Adapt the vocabulary to the discipline — these recommendations apply to any field, not just technical ones
8. Annexes
- List each annex with a title, a one-sentence description, and its status
- Status options: "embedded in document", "see attached file", "placeholder — insert manually"
- If the annex was produced by a participant (exercise, deliverable, prototype), note the author and the context in which it was produced
- For survey data already covered in Section 5, just reference it here: "Satisfaction survey results — synthesized in Section 5"
Closing paragraph
At the end of the document, after the Annexes section, add a brief personal closing:
- Thank the team/client for the invitation to run the session
- Express openness to future collaboration (follow-up session, other training topics, consulting)
- Include contact details: email and phone number
Ask the trainer for this information before writing the closing. Do not invent or assume contact details. The closing should feel personal, not templated.
Example (adapt to language and tone):
Merci à toute l'équipe pour l'invitation et la qualité des échanges durant cette session.
Je reste disponible pour un suivi, une prochaine formation, ou tout autre besoin de
collaboration.
Samuel Berthe — contact@samuel-berthe.fr — +33 6 XX XX XX XXMarkdown limitations and workarounds
Markdown has no native concept of page layout. The following elements do not exist in Markdown and will be applied only at the .docx generation step:
- Page headers and footers
- Page numbers
- Margins and page size
- Branded fonts and color schemes
- Logo placement
- Section breaks
Do not attempt to represent any of these in the Markdown file.
Tables
Standard Markdown table syntax has no column widths, no merged cells, no per-cell styling, and no header row shading. For simple tables (3–4 columns, uniform rows), use standard Markdown syntax:
| Column A | Column B | Column C |
| -------- | -------- | -------- |
| Value | Value | Value |For complex tabular content (decision matrices, multi-column layouts, merged headers, per-cell styling), write a minimal HTML table directly in the Markdown. Mark it with a processing annotation:
<!-- DOCX: convert to styled Table -->
<table>
<thead>
<tr>
<th>Column A</th>
<th>Column B</th>
</tr>
</thead>
<tbody>
<tr>
<td>Value</td>
<td>Value</td>
</tr>
</tbody>
</table>Keep the HTML simple: no inline styles, no colspan/rowspan unless necessary. The annotation tells Step 6 to rebuild this as a native docx Table element with proper column widths, shading, and padding.
Other complex elements
For any element that Markdown cannot represent cleanly, add an annotation:
<!-- DOCX: [instruction for Step 6] -->Examples:
<!-- DOCX: insert page break before this section --><!-- DOCX: render as two-column layout --><!-- DOCX: this is an image placeholder — embed [filename] here -->
These annotations are invisible to the reader of the Markdown file and serve as explicit instructions for the .docx generation step.
Presenting the draft
After saving the .md file, present the content inline in the conversation — do not just say "the file is ready". The user needs to read and react to the actual text.
If the environment supports inline file delivery (e.g. present_files on Claude.ai), use it to make the .md downloadable. Otherwise, print the absolute path to the saved file.
End the presentation with a focused prompt:
"Here's the draft. Read through it and tell me what to adjust — any section, any phrasing, any missing detail. We'll iterate until you're happy, then I'll generate the Word document."
Do not ask multiple questions at once. Let the user lead the iteration.
Tone of Voice Reference
Load this file when starting a training report. Apply the guidance throughout the entire document — cover, body, individual feedback, and recommendations all follow the same register.
By audience
Executive / Direction
Goal: give them a clear picture in 30 seconds. They skim.
- Lead with outcomes and conclusions, not process
- State problems plainly — "the session was cut short" not "the session experienced some time management challenges"
- Recommendations must be concrete and actionable: budget, timeline, owner
- No jargon, no acronyms without expansion, no internal vocabulary
- Omit anything that doesn't affect a decision
HR / Learning & Development
Goal: assess training effectiveness and plan follow-up.
- Behavior and evolution are central — show change over time, not just snapshots
- Individual feedback must be specific and useful, not just positive
- Tie observations to learning objectives stated at the start
- Frame problems as development opportunities where genuine — but do not soften real blockers into "areas for growth" if they require direct intervention
- Attendance, engagement, and completion rates matter — include them if relevant
Direct management (team lead, department head)
Goal: know what their team learned and what to do next week.
- Practical and operational — what changes on Monday?
- Name participants directly in feedback (they know their team)
- Recommendations must be immediately actionable: "block 30 minutes per day for practice" is better than "encourage regular practice"
- Flag any individual who needs extra support or follow-up coaching
Client (external)
Goal: justify the value of the training and set expectations for follow-up.
- Professional, measured, and constructive
- Avoid internal vocabulary — write as if they have no context about the team dynamics
- Problems and blockers should be named but always paired with a recommendation
- Diplomatic on individual feedback — clients don't always need names; you can write "some participants" or "a minority of the group" when appropriate
- The report reflects on your professional reputation — review every sentence
Internal archive
Goal: complete record for future reference.
- Comprehensive over concise — include details that might seem obvious now
- Factual tone, no optimization for any particular reader
- Include session structure, materials used, timing, and participant list if available
- Note anything that would need to change if the session were run again
By language
French
Register: formal by default. Use vous in any direct address. Full sentences, no contractions in prose. Avoid familiarities even in individual feedback.
Sentence structure: French formal writing drifts toward the passive and toward long subordinate clauses. Push back:
- Prefer
X a faitoverX a été réalisé - Split sentences at 30 words — French readers tolerate longer sentences than English, but formal documents still benefit from rhythm
- Avoid starting consecutive sentences with the same subject
Typography:
- Guillemets with non-breaking spaces:
«\u00a0texte\u00a0» - Non-breaking space before
:,;,!,? EURin formal financial contexts, non-breaking space between number and unit:100\u00a0EUR/mois- Em dash
—not double hyphen--
Vocabulary:
- Avoid anglicisms unless the term has no French equivalent in the field (e.g. "workshop", "feedback", "prompt" are acceptable in tech contexts)
formationnottraining,participantsnotattendees,compte rendunotrapportfor this type of document- Verbs over nominalizations:
mettre en placenotla mise en place de
Common AI tells to eliminate: Il convient de noter, dans le cadre de, à cet égard, par ailleurs, ainsi, en effet at sentence start, crucial, essentiel, notamment, permettre de + infinitif as a sentence opener
English
Register: depends on client culture. Default to clear and direct. Calibrate British vs. American if it matters for the audience (ask the user in Step 1).
Sentence structure:
- Active voice, subject-verb-object, no ambiguity
- One idea per sentence in high-stakes sections (executive summary, individual feedback)
- Contractions are acceptable in informal sections (individual feedback, conversational observations); avoid in executive summary and recommendations
Typography:
- Curly quotes:
"..."and'...' - Em dash:
word—wordwithout spaces (American) orword — wordwith spaces (British) - Numerals: spell out one through nine; use figures from 10 upward
Vocabulary:
- Avoid Latin abbreviations (i.e., e.g., etc.) in flowing prose — write them out
- Prefer concrete nouns over abstract ones:
the group struggled with Xnotthere were challenges around the area of X participantsnotattendeesortraineesin most contexts- Avoid corporate filler:
leverage,synergy,learnings,takeaways→ rephrase
Common AI tells to eliminate: It is worth noting that, it is important to highlight, in today's fast-paced world, this approach enables, moreover, furthermore at sentence start, adjective doublets (comprehensive and thorough, clear and concise)
Spanish
Register: formal (usted) by default unless the user confirms an informal context.
Sentence structure:
- Spanish formal writing is naturally richer in subordinate clauses than English or French. Allow for longer sentences but break them at natural pauses to maintain clarity.
- Subject-verb agreement errors are common in AI output — verify every complex sentence.
- Subjunctive is frequently required in recommendations:
se recomienda que el equipo practiquenotse recomienda practicar
Typography:
- Inverted punctuation at sentence start:
¿pregunta?,¡exclamación! - Guillemets
«\u00a0...\u00a0»or Spanish quotation marks"..."— ask the user which the client uses EURor€— check client convention
Vocabulary:
- Avoid direct loan words from English when a Spanish equivalent exists:
retroalimentaciónnotfeedback,tallernotworkshop(unless the client uses it) - Regional differences matter: Latin American Spanish differs from European Spanish in vocabulary and some formality conventions — ask the user which applies
German
Register: formal (Sie) by default unless explicitly told otherwise. German formal writing tends to be precise and comprehensive — do not cut technical detail for brevity.
Sentence structure:
- Compound sentences and subordinate clauses are natural in German. Keep verb placement correct:
nachdem die Teilnehmer die Aufgabe abgeschlossen hatten, ... - Avoid starting too many consecutive sentences the same way.
- Main clause before subordinate clause in recommendations when possible — it reads more directly.
Typography:
- Anführungszeichen:
„Zitat"(lower-left, upper-right) - Non-breaking space before units:
100\u00a0EUR
Vocabulary:
- Compound nouns are standard — use them rather than translating English phrases literally:
TeilnehmerfeedbacknotFeedback der Teilnehmer,WeiterbildungsmaßnahmenotMaßnahme zur Weiterbildung - Anglicisms: "Workshop", "Feedback", "Coaching" are broadly accepted in German professional contexts; avoid less established ones
Portuguese (European vs. Brazilian)
Critical first step: ask the user which variant applies — vocabulary, formality norms, and even punctuation differ significantly.
European Portuguese:
- Formal, restrained, indirect register
- Avoid the imperative in recommendations — prefer the infinitive or subjunctive:
recomenda-se que a equipa pratiquenotpratiquem regularmente equipanotequipe,utilizadornotusuário- Closer to French in its preference for formal distance
Brazilian Portuguese:
- More direct and warmer tone is acceptable even in formal documents
- Imperative in recommendations is natural:
incentive a equipe a praticar equipenotequipa,usuárionotutilizador- English loanwords are more freely used in tech and business contexts
Typography (both variants):
- Quotation marks:
"..."or«\u00a0...\u00a0»— check client convention - Non-breaking space before units
Diplomatic framing for difficult feedback
Individual feedback requires care regardless of language or audience.
Principle: describe behavior, not character. Name what happened, not what kind of person the participant is. Let the facts carry the weight. One interpretive sentence at the end is enough.
| Avoid | Prefer |
|---|---|
| "X was obstructive" | "X declined to complete the exercise, citing [reason]" |
| "X didn't understand" | "X struggled with [specific concept] and required additional explanation" |
| "X was enthusiastic" | "X completed all exercises before the others and asked follow-up questions on [topic]" |
| "X was resistant" | "X expressed reservations about [specific aspect] throughout the session" |
| "X was disengaged" | "X did not complete [specific step] and left the session early" |
When writing for an external client about a team member you don't know:
- Avoid naming individuals in negative feedback unless the trainer explicitly requests it
- Use group-level language: "a minority of participants", "some participants expressed..."
- Reserve named feedback for clearly positive observations, or for significant blockers that management needs to address directly
Related skills
FAQ
What is training-report?
Produce a professional training/workshop report as a .docx file. Use this skill whenever the user mentions "training report", "workshop report", "compte rendu", "compte rendu de fo
When should I use training-report?
Produce a professional training/workshop report as a .docx file. Use this skill whenever the user mentions "training report", "workshop report", "compte rendu", "compte rendu de fo
Is training-report safe to install?
Review the Security Audits panel on this page before production use.