priscilarwagner/meeting-digest

Génère un résumé structuré de toutes les réunions d'une journée donnée, en extrayant les décisions, actions et blocages à partir du calendrier et des notes de réunion configurées.

Qu'est-ce que meeting-digest ?

Cette compétence (skill) pour agent IA permet de traiter l'ensemble des réunions d'une journée cible — par défaut aujourd'hui, ou la veille sur demande — en utilisant le calendrier comme source unique de vérité et les sources de notes configurées (pièces jointes, notes de réunion, descriptions d'événements) pour le contenu. L'agent exécute une séquence d'étapes : récupération des événements calendaires, filtrage des réunions réelles, vérification d'idempotence (évite de retraiter les notes déjà résumées), analyse du contenu pour extraire décisions, actions et blocages, puis écriture d'un fichier structuré au format Markdown dans `Context/Meeting Notes/`. Le résumé est également affiché dans le chat, et l'agent propose de mettre à jour un journal des décisions dans un document PRD. La compétence utilise le fichier `Context/agent-config.md` pour la configuration (fuseau horaire, répertoire de base, exclusions). Elle est conçue pour des plateformes comme Claude Code, Cursor ou Codex, et s'appuie sur des outils (steps call role operations) pour interagir avec le calendrier, les documents, les fichiers et les communications.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/priscilarwagner/pmshipping/tree/HEAD/.claude/skills/meeting-digest

Installed? Explore more Productivité et collaboration skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Digest de réunions

Outils : opérations par rôle d'étape (pm.*, email.*, calendar.*, docs.*, files.*, comms.*). Résolvez chaque opération via Context/agent-config.md → Pile d'outils et l'adaptateur qu'elle nomme (.claude/adapters/README.md). Un rôle défini à none → ignorer cette étape.

Récupérez toutes les réunions d'un jour cible, trouvez les notes ou la transcription de chacune, produisez un résumé structuré et enregistrez-le localement. Le jour cible par défaut est aujourd'hui ; passez "yesterday" pour traiter le jour précédent.

Configuration

Lisez Context/agent-config.md au début. Utilisez :

  • timezone — pour tous les calculs de date
  • base_directory — pour la construction des chemins de fichiers et la vérification d'idempotence
  • calendar_exclusions — liste de motifs de titres de réunions à ignorer
  • Pile d'outils → Notes de réunion — d'où provient le contenu des réunions

Lisez le fichier d'objectifs (chemin dans agent-config) pour reconnaître les noms de projets et jalons à l'étape 4.


Instructions

Exécutez toutes les étapes en séquence. Ne demandez pas de confirmation entre les étapes sauf indication explicite de pause.


Étape 1 — Récupérer toutes les réunions non traitées du jour cible

Phase A — Calendrier : obtenir la liste des réunions

  1. Calculez la date cible dans le fuseau horaire de l'utilisateur. Par défaut = aujourd'hui ; si l'utilisateur a passé "yesterday", soustrayez un jour.

  2. calendar.events(début de la date cible, fin de la date cible) dans le fuseau horaire de l'utilisateur.

  3. Filtrez pour ne garder que les vraies réunions. Supprimez tout événement où :

    • summary correspond à un motif dans calendar_exclusions
    • c'est un bloc de concentration ou de lieu de travail
    • la liste attendees est vide ou ne contient que l'utilisateur (blocs solo)
  4. Triez chronologiquement (du plus ancien au plus récent). C'est la liste ordonnée des réunions à traiter.

Phase B — Vérification d'idempotence

Pour chaque réunion :

  1. Déduisez le nom de fichier attendu : YYYY-MM-DD - [Nom de la réunion].md en utilisant summary de l'événement calendrier. Assainissez le nom : remplacez /, \, : et | par -, supprimez les emojis, réduisez les espaces répétés.
  2. Vérifiez si un fichier portant ce nom existe déjà dans [base_directory]/Context/Meeting Notes/.
  3. S'il existe et contient déjà une section ## Summary → ignorez cette réunion. Sortie : "Des notes existent déjà pour [nom de la réunion] — ignorée."
  4. S'il existe en tant que notes brutes (pas de ## Summary) → utilisez son contenu comme source et continuez.
  5. S'il n'existe pas → passez à la Phase C.

Phase C — Trouver le contenu de la réunion

Consultez les sources dans cet ordre et utilisez la première qui a du contenu :

  1. Fichier de notes brutes — de l'étape 4 de la Phase B.
  2. Sources configurées — chaque entrée dans agent-config → Sources de notes de réunion, dans l'ordre. Typiques :
    • Pièces jointes au calendrier — un document de notes attaché à l'événement → files.read avec son ID de fichier. "Introuvable" signifie qu'il n'est pas partagé avec l'utilisateur — ignorez silencieusement
    • docs.meeting_notes(date) — correspondance sur le titre ou la fenêtre de temps (±30 min) ; lisez avec docs.read
  3. Description de l'événement calendrier — utilisez-la seulement si elle contient de vraies notes, pas seulement un ordre du jour ou un lien vidéo.
  4. Demandez à l'utilisateur — listez les réunions qui n'ont toujours pas de contenu dans un seul message : "Aucune note trouvée pour : [liste]. Collez des notes ou une transcription pour celles que vous souhaitez traiter, ou dites skip."

Si une réunion n'a toujours pas de contenu → marquez-la comme "aucune note disponible" et ignorez-la.

Phase D — Rapport

Après avoir traité toutes les réunions, rapportez :

  • Combien ont été traitées
  • Combien ont été ignorées (avec la raison : existe déjà / aucune note)

Étape 2 — Lire le contexte

Avant de traiter le contenu des notes, lisez :

  • GOALS.md — pour comprendre les projets et objectifs actifs
  • Context/Memory/brain.md — pour comprendre comment l'utilisateur pense, son vocabulaire, et ce qu'il considère comme une décision vs. une discussion

Étape 3 — Analyser le contenu des notes

Pour chaque réunion avec contenu, extrayez quatre éléments :

A. Résumé 2–3 phrases. Priorité au signal : de quoi parlait la réunion et quel a été le résultat ou changement clé. Pas une liste de sujets abordés — un énoncé de résultat cohérent. Utilisez la voix de l'utilisateur : direct, sans formulation d'effort, axé sur le résultat.

B. Décisions Engagements explicites qui ont changé de direction, verrouillé quelque chose, ou clos une question ouverte. Seules les vraies décisions — pas des suggestions, pas des "peut-être". Format : ce qui a été décidé, et qui a pris la décision (si attribuable).

C. Éléments d'action Prochaines étapes concrètes avec un responsable nommé. Appliquez cette logique par élément :

  • Si la note nomme une personne spécifique comme responsable avec une confiance élevée → attribuez à cette personne
  • Si la responsabilité est ambiguë ou partagée → attribuez à l'utilisateur
  • N'incluez un élément ou un projet de gestion de projet que s'il a été explicitement mentionné dans la réunion (par clé, nom ou référence claire). N'inférez pas et ne devinez pas — si rien n'a été mentionné, laissez la colonne Projet vide (—)
  • Notez la date d'échéance suggérée si mentionnée dans la réunion, sinon laissez vide

D. Questions ouvertes / blocages Questions non résolues, blocages soulevés, ou sujets mis en attente pour une réunion future. Ceux-ci vont uniquement dans le fichier de notes.


Étape 4 — Références de projet

N'enregistrez une clé d'élément ou un nom de projet que lorsqu'il a été explicitement mentionné dans la réunion — par clé (ex. ENG-123), par nom (ex. "le jalon de refonte de l'intégration"), ou par référence sans ambiguïté.

N'inférez pas, ne cherchez pas et ne devinez pas les projets à partir du contexte de la réunion. Il vaut mieux laisser vide que d'en attribuer un erroné.


Étape 5 — Écrire le fichier de notes de réunion

Enregistrez le résumé dans Context/Meeting Notes/ en utilisant ce format de nom de fichier : YYYY-MM-DD - [Nom de la réunion].md

Utilisez summary de l'événement calendrier comme nom de la réunion.

Format du fichier :

# [Nom de la réunion]
*[YYYY-MM-DD] | [Durée si disponible] | [Participants du calendrier si disponible]*

## Résumé
[Résumé de 2–3 phrases priorité au signal. Ce qui s'est passé et ce qui a changé.]

## Décisions
- [Décision 1 — qui l'a prise si connu]
- [Décision 2]

## Éléments d'action
| # | Tâche | Responsable | Projet | Échéance |
|---|------|-------|---------|-----|
| 1 | [Description de la tâche] | [Nom / moi] | [Nom du projet (KEY-123) ou —] | [Date ou —] |
| 2 | ... | ... | ... | ... |

## Questions ouvertes & Blocages
- [Question ou blocage — ce qui n'est pas résolu et pourquoi c'est important]

## Contexte
[Tout contexte, liens ou cadre de la réunion utile pour référence future. Limitez à 3–5 puces max.]

Si les notes brutes étaient la source (Phase B étape 4), conservez-les sous une section ## Notes brutes en bas — ne supprimez jamais les notes de l'utilisateur.

Avant d'enregistrer, ajoutez des [[wiki-liens]] à la note pour la connectivité du graphe Obsidian :

  • Toutes les personnes mentionnées par leur nom → [[Nom]]
  • Toutes les clés d'élément → [[KEY-123]]
  • Concepts clés, projets et thèmes récurrents dans les notes → [[Concept]]
  • Liez uniquement les mentions significatives — pas chaque mot, pas à l'intérieur des blocs de code ou des URL

Confirmez à l'utilisateur : "Notes de réunion enregistrées dans Context/Meeting Notes/[nom du fichier].md"


Étape 6 — Connexion contextuelle

Après l'enregistrement :

  1. Vérifiez si une décision ou un blocage de cette réunion est lié à une tâche ouverte dans Tasks/ — si oui, notez-le en ligne.
  2. Si un blocage a été soulevé qui existe déjà dans GOALS.md comme blocage connu, signalez-le : "Ce blocage ([nom]) a également été soulevé dans [contexte précédent]. Réfléchissez s'il est systémique."
  3. Si la réunion est un 1:1 récurrent avec une personne nommée qui a un document dans Context/121s/, ajoutez une entrée de journal de session à son document : date, résumé d'une ligne, toutes les boucles ouvertes ajoutées.

Les notes de réunion contiennent des données personnelles et ne sont jamais commitées ni poussées.


Étape 7 — Afficher le résumé dans le chat

Après avoir enregistré toutes les notes localement, affichez un résumé combiné pour le digest complet de la journée.

Structure : réunion → sujet → décisions + actions sous chaque sujet.

📝 **Digest de réunions terminé — [YYYY-MM-DD]** | [N] traitées | [N] ignorées

*[Nom de la réunion]*
  [Sujet / objectif ou jalon]
    Décisions
      - [Décision]
      - [Décision]
    Éléments d'action
      - [tâche] → [responsable] [échéance si connue]

  [Sujet 2]
    Décisions
      - [Décision]
    Éléments d'action
      - [tâche] → [responsable]

Notes enregistrées dans `Context/Meeting Notes/`

Règles de regroupement :

  • Premier niveau : nom de la réunion
  • Deuxième niveau : sujet, objectif ou jalon discuté dans cette réunion — utilisez le nom simple, jamais une clé de ticket nue
  • Troisième niveau : Décisions et Éléments d'action en sous-sections étiquetées sous chaque sujet
  • Si un sujet n'a pas de décisions, omettez la sous-section Décisions. S'il n'a pas d'éléments d'action, omettez la sous-section Éléments d'action.
  • Si une réunion n'a qu'un seul sujet, affichez quand même le nom du sujet — ne le réduisez pas
  • Omettre la colonne Projet des éléments d'action dans le résumé du chat — elle appartient au fichier de notes uniquement

Étape 8 — Proposer la mise à jour du journal des décisions

Cette étape ne s'exécute que si au moins une décision a été extraite de toutes les réunions traitées.

Demandez une fois, dans un seul message :

"Voulez-vous enregistrer certaines de ces décisions dans un journal des décisions d'un PRD ?

Décisions d'aujourd'hui :

[Nom de la réunion] [Sujet] 1. [Décision] 2. [Décision]

Si oui, dites-moi quel document (un fichier local dans Context/Document Hub/ ou une page dans l'outil de documentation) et quels numéros de décision ajouter."

Numérotez les décisions séquentiellement dans toutes les réunions afin que l'utilisateur puisse s'y référer par numéro.

Attendez la réponse de l'utilisateur.

  • Si non / ignorer : terminez la compétence.
  • Si oui : exécutez les étapes ci-dessous pour chaque document spécifié.

Pour chaque document fourni :

A. Récupérez le document

  • Fichier local → lisez-le.
  • Page de l'outil de documentation → docs.read.

B. Localisez le journal des décisions

Scannez une section dont l'en-tête contient "Decision Log", "Decisions Log" ou "Decisions" (insensible à la casse).

  • Si une section Journal des décisions avec un tableau existe : de nouvelles lignes y seront ajoutées.
  • Si une section Journal des décisions existe mais sans tableau : insérez le tableau juste après l'en-tête.
  • Si aucune section Journal des décisions n'existe : insérez une nouvelle section ## Journal des décisions et un tableau en bas du document.

C. Construisez les lignes

Pour chaque décision sélectionnée par l'utilisateur, créez une ligne de tableau :

| [YYYY-MM-DD] | [Texte de la décision] | [Statut] |
  • Date : la date de la réunion.
  • Décision : texte exact du résumé — ne paraphrasez pas.
  • Statut : Décidée si explicite et final. En attente si le texte contient "TBD", "à confirmer", "en attente", "dans l'attente de", ou a été marqué comme non résolu.

Si le tableau n'existe pas encore, créez-le d'abord avec cette ligne d'en-tête :

| Date | Décision | Notes/Statut |
|------|----------|--------------|

D. Prévisualisez, puis mettez à jour

Affichez les lignes à ajouter. Pour un fichier local, écrivez-les. Pour une page d'outil de documentation, attendez l'accord explicite de l'utilisateur, puis docs.update(ref, "Journal des décisions", lignes) — modifiez uniquement cette section.

E. Confirmez

"Journal des décisions mis à jour sur [titre du document] — [N] décision(s) ajoutée(s)."


Cas particuliers

  • Aucune décision trouvée : Écrivez "Aucune décision prise — réunion de discussion/mise à jour." N'inventez pas de décisions.
  • Aucun élément d'action trouvé : Écrivez "Aucun élément d'action."
  • La réunion est un standup ou dure <5 min : Exécutez quand même le résumé, mais limitez le résumé à une phrase.
  • Plusieurs notes correspondent au même événement : Utilisez celle la plus proche de l'heure de début de l'événement.
  • Une source est indisponible : Ignorez-la silencieusement et passez à la suivante dans la Phase C.
  • Page de documentation introuvable (Étape 8) : Signalez l'erreur, demandez à l'utilisateur de vérifier l'URL et proposez de réessayer.
  • Section Journal des décisions ambiguë (Étape 8) : Si plusieurs en-têtes pourraient correspondre (ex. "Décisions clés" et "Journal des décisions"), affichez les deux et demandez à laquelle ajouter.
  • Décisions en double (Étape 8) : Avant d'insérer, scannez les lignes existantes. Si le même texte de décision apparaît déjà, ignorez-le et notez l'ignorance.

Skills associés