skills/meeting-report/SKILL.md
Génère automatiquement un compte-rendu de réunion en français à partir d'une transcription Teams (.vtt) et optionnellement d'un rapport de présence (.csv). Propose ensuite optionnellement de créer des issues de suivi GitLab/GitHub à partir du compte-rendu. Agnostique par défaut, avec un mode enrichi auto-détecté pour le projet hexagone-monorepo. À utiliser quand l'utilisateur dépose un ou deux chemins de fichiers Teams dans le prompt et demande la génération d'un compte-rendu.
npx skillsauth add dedalus-erp-pas/foundation-skills meeting-reportInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate a structured French meeting report from a Microsoft Teams .vtt transcript, optionally enriched with a Teams .csv attendance report.
The skill works on any project. It auto-detects the hexagone-monorepo project and, when detected, applies project-specific rules (sub-domain classification, sub-folder routing, foundation date-only naming). On any other project, it falls back to a generic single-folder output.
After the report is written, the skill can optionally propose follow-up GitLab/GitHub issues derived from the report (Step 12).
Steps 1–11 require no external tooling. Step 12 (optional issue creation) uses a Git platform CLI — these are soft dependencies: if the CLI is absent or unauthenticated, Step 12 simply skips and the report is unaffected.
gh (GitHub CLI) — required only to create GitHub issues from the report. Install: https://cli.github.comglab (GitLab CLI) — required only to create GitLab issues from the report. Install: https://gitlab.com/gitlab-org/cliActivate when the user:
.vtt Teams dans le prompt.csv de présence Teams (optionnel)The skill expects one or two file paths dropped in the user prompt:
.vtt file — Teams meeting transcript in WebVTT format.csv file — Teams attendance reportDetection: inspect file extensions in the user prompt. If both are present, .vtt is the transcript and .csv is the attendance report. If only one file is dropped, it must be the .vtt.
Before processing, decide whether the current working directory is the hexagone-monorepo project. This sets the routing behavior for the rest of the workflow.
Run these checks (any one of them is sufficient to enter hexagone-monorepo mode):
docs/reports/foundation/ AND docs/reports/interoperability/ both existgit remote -v mentions hexagone-monorepopackage.json has a name containing hexagone-monorepoIf none match → generic mode.
The user may also explicitly override:
State the detected mode in one short sentence to the user before producing the report (e.g. « Mode détecté : hexagone-monorepo. » or « Mode détecté : générique. »).
.vtt and .csv extensions).vtt is found → stop and ask the user to provide one.vtt content entirely.csv content if providedTeams .vtt file structure:
WEBVTT
NOTE
Meeting metadata may appear here (date, title, organizer)
00:00:01.000 --> 00:00:04.000
<v Speaker Name>Speech content</v>
00:00:05.000 --> 00:00:08.000
Anonymous speech without voice tag
Extract:
NOTE header content containing a date pattern (ISO YYYY-MM-DD or French DD/MM/YYYY)20260410_...vtt → 2026-04-10)<v Speaker Name>...</v> voice tags (may be absent)Priority order:
If .csv attendance report provided → parse it and extract the Name column. Teams attendance CSVs typically contain columns like Name, First Join, Last Leave, Duration, Role, Email. Use names only for the ## Participants section.
Else if <v> voice tags are present in the .vtt → extract unique speaker names
Else → stop and ask the user to provide the participants list before continuing:
« La transcription est anonyme et aucun fichier de présence n'est fourni. Peux-tu me donner la liste des participants ? »
Skip this step in generic mode. In generic mode, there is no domain classification — the report goes to a single output folder (see Step 10).
In hexagone-monorepo mode, analyze transcript content for domain signals using the table below (case-insensitive keyword matching):
| Folder | Signals (French / technical keywords) |
|---|---|
| foundation/ | sprint, rétro, rétrospective, point équipe, stand-up, daily, foundation, équipe foundation |
| core/ | architecture transversale, cross-domain, LDAP, S3A, S3A settings, permissions utilisateur, rôles, authentification |
| interoperability/ | Hexaflux, interopérabilité, interop, HL7, HL7 v2, HL7 v2.5, FHIR, IHE, PAM, ADT, segment, PID, PV1, PV2, NK1, OBX, EVN, MSH, HPK, flux, intégration, message, mapping, broker, Mirth, Rhapsody |
| gap/ | admission, patient, venue, séjour, dossier patient, pré-admission, AMO, AMC, débiteur, couverture sociale, facturation, valorisation, portail patient, ROC, serveur d'actes, actes, urgences, Diapason |
| grh/ | RH, ressources humaines, employé, salarié, contrat, paie, MyRHConnect, RH Dossier |
| gef/ | pharmacie, M21, contentieux, emprunts, trésorerie, HA GHT, immobilisations, achats, fournisseurs, comptabilité générale, Hélios, export comptable |
| ui-ux/ | design, maquette, Figma, atelier UX, atelier UI, wireframe, écran, prototype, UX/UI |
Classification rule:
Classification is by project/domain, not by team org. The Hexaflux team is organizationally part of the Foundation team but works exclusively on the Hexaflux project (domain = interoperability), so their recurring meetings land in interoperability/, not foundation/. Always check project-specific signals before the generic Foundation standup rule.
interoperability/foundation/interoperability/. Only classify as gap/ when the discussion is about the functional/business side (UI, portail patient, facturation, workflows métier admission) without a technical HL7/message layer.Atelier UX/UI Recherche Patient)-atelier-ux-ui-recherche-patientStyle: Heavy rewrite, grouped by topic, not chronological, not verbatim.
### Décisions subsection)### Point d'attention subsection)### Problèmes identifiés subsection)**bold** emphasis on key terms inside decision bullets## 1. <Topic>, ## 2. <Topic>, etc.Add a mermaid diagram only when the content genuinely benefits from visualization. Good triggers:
Prefer these diagram types:
flowchart LR or flowchart TD for processes and decisionssequenceDiagram for inter-actor interactionstimeline for project phasesPlace the diagram inside the relevant topic section, not at the top of the report.
Default: no diagram. When in doubt, skip it. A report without a diagram is the norm, not the exception.
Use this exact template:
# Compte-rendu — <Type de réunion> <Sujet>
**Date :** DD/MM/YYYY
**Organisateur :** <Nom> (<Rôle>)
## Participants
<Nom1>, <Nom2>, <Nom3>, ...
---
## 1. <Topic 1>
### Décisions
- **<Key term>** : <decision>
- ...
### Point d'attention
<Optional paragraph — only when there is an ambiguity or unresolved item>
### Problèmes identifiés
- <Optional bullet list — only when problems were raised>
---
## 2. <Topic 2>
### Décisions
- ...
---
<...as many topics as needed...>
Rules:
DD/MM/YYYY in the body (ISO only in the filename)**Organisateur :** Nom (Rôle). If not identifiable, write **Organisateur :** À préciser--- horizontal rule separator between topicshexagone-monorepo mode:
foundation/ folder) → YYYY-MM-DD.md (date only, no slug — one standing team meeting per day maximum)YYYY-MM-DD-<slug>.mdGeneric mode:
YYYY-MM-DD-<slug>.mdThe filename always uses the ISO date format YYYY-MM-DD, different from the French DD/MM/YYYY used in the report body.
hexagone-monorepo mode:
docs/reports/<sub-domain>/<filename>.mdls docs/reports/<sub-domain>/). If missing, create it.Generic mode:
docs/reports/docs/meetings/meetings/reports/docs/reports/ and use it.<chosen-folder>/<filename>.mdCommon to both modes:
-2, -3, etc. before writing (do NOT overwrite)Show a concise summary:
hexagone-monorepo or genericgit add, git commit, or git push — the user commits the report manually after review.Then proceed to Step 12.
After the report is written and reported, optionally offer to create follow-up GitLab/GitHub issues from it. This step must never block, delay, or alter the report — the report of Step 11 is already delivered. It runs in both modes (generic and hexagone-monorepo).
Run these checks. If any one fails, print a single short line stating why and stop — do NOT show a prompt:
git remote -v in the current directory must resolve to exactly one platform: a GitHub remote (github.com) OR a GitLab remote. No remote, or both platforms present → skip.gh auth status for GitHub, glab auth status for GitLab. Missing or unauthenticated → skip.Skip messages (one line, French), e.g.: « Aucune issue proposée : pas de remote git détecté. » / « Aucune issue proposée : glab non authentifié. » / « Aucune issue proposée : aucune décision actionnable dans le compte-rendu. »
From the report just written (not the raw transcript), extract actionable follow-up items:
### Problèmes identifiés and ### Point d'attention bullets.### Décisions bullets only when the decision implies follow-up work (e.g. « on a décidé de migrer X » → the migration is the candidate). A settled fact is not an issue.Problèmes identifiés → bug; Point d'attention / Décisions → taskAskUserQuestion option limit). If more survive the filter, keep the 4 highest-signal and tell the user the rest can be created on a re-run.Use a single AskUserQuestion with multiSelect: true:
<owner/repo> (<host>). Lesquelles créer ? » — this is both the selection and the target confirmation.For each selected candidate, inline the platform CLI — do NOT route through the gitlab-issue / github-issues skills (those are interactive consoles and would re-ask everything already resolved here):
gh issue list --search "<title>" / glab issue list --search "<title>". If a near-identical open issue exists, surface it and let the user confirm or skip that candidate.gh issue create --title "<title>" --body "<body>"glab issue create --title "<title>" --description "<body>"bug). Never create a new label; omit the label if none fits.Print a per-issue result: the created issue URLs, and for any failure the candidate title + the error. Offer to re-run for the items that failed or were not shown.
Notes for Step 12:
docs/reports/<sub-domain>/ routing only apply when the hexagone-monorepo project is detected.git add, git commit, or git push.triage-issue skill, not here..vtt French transcripts routinely miss accents and punctuation.YYYY-MM-DD-<slug>.md..csv first, then <v> voice tags, then ask the user. Never invent names.User: crée un compte-rendu de cette transcription Teams /tmp/kickoff.vtt
→ Detection: no docs/reports/foundation/ found → generic mode
→ Skill reads the .vtt
→ Parses <v> voice tags → 5 speakers
→ Extracts date 2026-04-22
→ Picks docs/reports/ (exists) as output folder
→ Writes docs/reports/2026-04-22-kickoff-projet.md
→ Reports: « Mode détecté : générique. »
User: génère le compte-rendu /tmp/atelier.vtt /tmp/attendees.csv
→ Detection: generic mode
→ No docs/reports/, no docs/meetings/, no meetings/, no reports/ → creates docs/reports/
→ Writes docs/reports/2026-04-15-atelier-architecture.md
→ Reports: « Mode détecté : générique. Dossier docs/reports/ créé. »
User: crée un compte-rendu de cette transcription Teams /tmp/atelier_recherche_patient.vtt /tmp/attendees.csv
→ Detection: docs/reports/foundation/ + interoperability/ exist → hexagone-monorepo mode
→ Skill reads both files
→ Extracts date from .vtt NOTE header: 2026-03-18
→ Participants from .csv: Chloé Julenon, Richard Gill, Adrien Marcos, Myriam Fatoux, Damien Battistella
→ Detects ui-ux signals (atelier, écran, maquette, recherche patient)
→ Classifies as ui-ux/
→ Writes docs/reports/ui-ux/2026-03-18-atelier-recherche-patient.md
User: génère le compte-rendu de cette réunion /tmp/sprint_review.vtt
→ Detection: hexagone-monorepo mode
→ Parses <v Speaker> voice tags → extracts 4 speakers
→ Extracts date from NOTE header: 2026-04-10
→ Detects foundation signals (sprint, rétro, point équipe)
→ Classifies as foundation/
→ Uses date-only naming
→ Writes docs/reports/foundation/2026-04-10.md
User: transforme cette transcription en rapport /tmp/meeting.vtt
→ No <v> tags found
→ No .csv provided
→ Stops and asks: « La transcription est anonyme et aucun fichier de présence n'est fourni. Peux-tu me donner la liste des participants ? »
→ Waits for the user, then continues with the provided names
User: crée un compte-rendu /tmp/hexaflux_weekly.vtt
→ Detection: hexagone-monorepo mode
→ Detects HL7 / ADT / PID / PV1 / NK1 / OBX / segment / mapping signals
→ Patient and admission keywords are present BUT tied to HL7 message segments, not business workflows
→ Applies the interop-vs-gap disambiguation rule → picks interoperability/
→ Writes docs/reports/interoperability/2026-04-17-hexaflux-weekly.md
User: génère le compte-rendu /tmp/sprint.vtt
→ Report written to docs/reports/2026-05-12-sprint-planning.md and reported (Steps 1–11)
→ Step 12a preflight: git remote → github.com/Dedalus-ERP-PAS/foo, `gh` authenticated → pass
→ Step 12b: derives 3 quality candidates from Problèmes identifiés + Point d'attention
→ Step 12c: AskUserQuestion « Les issues seront créées sur Dedalus-ERP-PAS/foo (github.com). Lesquelles créer ? »
→ User selects 2 of 3
→ Step 12d: `gh issue create` ×2 (duplicate search first, no label invented)
→ Step 12e: reports the 2 created issue URLs
User: transforme cette transcription en rapport /tmp/atelier.vtt
→ Report written and reported (Steps 1–11)
→ Step 12a preflight: `git remote -v` empty → no platform
→ Prints « Aucune issue proposée : pas de remote git détecté. » and stops
databases
Exécute des requêtes SQL en lecture seule sur plusieurs bases de données PostgreSQL. À utiliser pour : (1) interroger des bases PostgreSQL, (2) explorer les schémas/tables, (3) exécuter des requêtes SELECT pour l'analyse de données, (4) vérifier le contenu des bases. Supporte plusieurs connexions avec descriptions pour une sélection automatique intelligente. Bloque toutes les opérations d'écriture (INSERT, UPDATE, DELETE, DROP, etc.) par sécurité.
development
Automatisation complète du navigateur et tests web avec Playwright. Détecte automatiquement les serveurs de développement, gère le cycle de vie des serveurs, écrit des scripts de test propres dans /tmp. Tester des pages, remplir des formulaires, capturer des screenshots, vérifier le responsive design, valider l'UX, tester les flux de connexion, vérifier les liens, déboguer des webapps dynamiques, automatiser toute tâche navigateur. À utiliser quand l'utilisateur veut tester des sites web, automatiser des interactions navigateur, valider des fonctionnalités web ou effectuer tout test basé sur le navigateur.
documentation
Boîte à outils complète pour la manipulation de PDF : extraction de texte et tableaux, création de nouveaux PDF, fusion/découpage de documents et gestion de formulaires. Quand Claude doit remplir un formulaire PDF ou traiter, générer ou analyser des documents PDF de manière programmatique et à grande échelle.
testing
Lance une réunion simulée avec plusieurs personas experts pour analyser un sujet sous des perspectives diverses, prendre une décision et proposer une solution avant implémentation. Peut optionnellement publier l'analyse de la réunion sur une issue GitLab ou GitHub liée.