Claude
Skills
Sign in
Back

meeting-report

Included with Lifetime
$97 forever

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.

AI Agents

What this skill does


# Meeting Report

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

## Prerequisites

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.com
- **`glab`** (GitLab CLI) — required only to create GitLab issues from the report. Install: https://gitlab.com/gitlab-org/cli

## When to Use This Skill

Activate when the user:
- Dépose un chemin vers un fichier `.vtt` Teams dans le prompt
- Dit « crée un compte-rendu de cette transcription Teams »
- Dit « génère le compte-rendu de cette réunion »
- Dit « transforme cette transcription en rapport »
- Dépose en plus un fichier `.csv` de présence Teams (optionnel)

## Inputs

The skill expects **one or two file paths** dropped in the user prompt:

- **Required:** `.vtt` file — Teams meeting transcript in WebVTT format
- **Optional:** `.csv` file — Teams attendance report

Detection: 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`.

## Project Mode Detection

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):

1. **Folder layout** — `docs/reports/foundation/` AND `docs/reports/interoperability/` both exist
2. **Git remote** — `git remote -v` mentions `hexagone-monorepo`
3. **Package name** — root `package.json` has a `name` containing `hexagone-monorepo`

If none match → **generic mode**.

The user may also explicitly override:
- « mode générique » / « generic mode » → force generic
- « mode hexagone » → force hexagone-monorepo (only valid if the layout exists)

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. »).

## Workflow

### Step 1: Locate and Read the Files

1. Parse the user prompt for file paths (look for `.vtt` and `.csv` extensions)
2. Verify each file exists using Read
3. If no `.vtt` is found → stop and ask the user to provide one
4. Read the `.vtt` content entirely
5. Read the `.csv` content if provided

### Step 2: Parse the Transcript

Teams `.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:

1. **Meeting date** — try in this order:
   - **(a)** `NOTE` header content containing a date pattern (ISO `YYYY-MM-DD` or French `DD/MM/YYYY`)
   - **(b)** Filename date pattern (e.g. `20260410_...vtt` → `2026-04-10`)
   - **(c)** Today's date as fallback
2. **Speakers** — parse `<v Speaker Name>...</v>` voice tags (may be absent)
3. **Content blocks** — each timestamped segment is a speaker turn

### Step 3: Resolve Participants

Priority order:

1. **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.
2. **Else if `<v>` voice tags are present in the `.vtt`** → extract unique speaker names
3. **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 ? »

### Step 4: Classify the Sub-Domain (hexagone-monorepo mode only)

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

1. If the meeting is the **Hexaflux team recurring meeting** (mentions « Hexaflux », or a weekly/standup/rétro involving the HL7/interop scope) → `interoperability/`
2. Else if the meeting is a **Foundation team recurring meeting** working on the horizontal/transverse platform (sprint, rétro, daily, point équipe, stand-up — without project-specific scope) → `foundation/`
3. **Interoperability vs. GAP disambiguation.** HL7 messages carry patient data (PID, PV1, NK1, etc.) so GAP keywords (patient, admission, séjour, venue) will naturally appear. When HL7/interop signals are present alongside GAP signals, the meeting is about **integration**, not patient business workflows → classify as `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.
4. Otherwise, count keyword matches per domain folder and pick the **folder with the highest count** (dominant domain)
5. On a tie, prefer the folder whose signals appear earliest in the transcript
6. If no signals match at all → ask the user to confirm the target folder

### Step 5: Extract Meeting Title and Slug

1. Read the first minutes of the transcript for explicit subject references (greetings usually mention the meeting title)
2. Infer a clean French meeting title (e.g. `Atelier UX/UI Recherche Patient`)
3. Generate a kebab-case slug from the title:
   - Lowercase, ASCII only (strip accents)
   - Replace spaces and punctuation with `-`
   - Max ~60 characters
   - Example: `atelier-ux-ui-recherche-patient`

### Step 6: Rewrite Content by Topic

**Style:** Heavy rewrite, grouped by topic, **not** chronological, **not** verbatim.

1. Identify the main topics discussed — cluster speaker turns into thematic groups (topic detection, not s

Related in AI Agents