- global CLAUDE.md (time tracking via MCP lesstime) - workspace CLAUDE.md (dev_malio inventory) - commands : ticket-writer, push-tickets-lesstime, full-project-review, bump-version - MCP install guide (Code + Desktop) + .mcp.json.example - scripts/install.sh + sync.sh
12 KiB
name, description
| name | description |
|---|---|
| ticket-writer | Skill pour rediger des tickets de gestion de projet (features) a partir d'ecrans Figma et du contexte projet. Utiliser ce skill des que l'utilisateur mentionne "ticket", "feature", "tache", "user story", "creer un ticket", "ecrire un ticket", ou demande de transformer un ecran/maquette en ticket de developpement. Aussi declencher quand l'utilisateur uploade des screenshots Figma et veut les convertir en specifications fonctionnelles. Ce skill est concu pour des projets CRM/ERP mais fonctionne pour tout projet. |
Ticket Writer — Redacteur de tickets projet
Quand utiliser ce skill
- L'utilisateur demande de creer/ecrire un ou plusieurs tickets
- L'utilisateur fournit des ecrans Figma et veut des tickets
- L'utilisateur veut transformer une feature en ticket structure
- L'utilisateur mentionne "ticket", "feature", "tache", "story", "spec"
Workflow
1. Collecter le contexte
Avant d'ecrire quoi que ce soit, rassemble ces informations :
- Ecrans Figma : L'utilisateur doit fournir des captures d'ecran ou images des maquettes. Si une URL Figma est fournie, utilise
get_design_contextouget_screenshotdu MCP Figma pour recuperer le design. Analyse en detail (champs, boutons, navigation, etats, modale, etc.) - CLAUDE.md / Context projet : Lis le fichier
CLAUDE.mda la racine du projet s'il existe. Il contient la stack technique, les conventions, les patterns utilises, les dependances, etc. - Infos complementaires : Demande a l'utilisateur ce qui manque — quel module du CRM/ERP ? Quel role utilisateur ? Quelles regles metier ?
2. Analyser les ecrans Figma
Quand tu recois une image Figma, extrais systematiquement :
- Les elements d'interface : champs de formulaire, boutons, tableaux, filtres, menus, modales, onglets
- Les donnees affichees : colonnes de tableau, labels, placeholder, valeurs par defaut
- Les actions possibles : CTA, liens, navigation, tri, recherche, pagination
- Les etats : vide, charge, erreur, loading, succes, hover, disabled
- Les relations : liens entre ecrans, flux de navigation
3. Rediger le ticket
Utilise strictement cette structure pour chaque ticket :
## [Titre court et explicite de la feature]
### Description
Explication claire en 2-3 phrases de CE QUE fait la feature, POUR QUI, et POURQUOI.
### Ecran(s) de reference
Reference aux maquettes Figma concernees (nom de l'ecran ou lien).
### Comportement attendu
Description detaillee du comportement fonctionnel :
- Quand l'utilisateur fait X, il se passe Y
- Les donnees affichees sont Z
- Le formulaire contient les champs : [liste]
- La validation fait : [regles]
### Regles metier
- Regle 1
- Regle 2
- Conditions specifiques
### Cas limites / Edge cases
- Que se passe-t-il si la liste est vide ?
- Que se passe-t-il si l'utilisateur n'a pas les droits ?
- Que se passe-t-il en cas d'erreur serveur ?
- Donnees manquantes ou invalides ?
### Tips & Rappels projet
> Cette section est generee a partir du contexte projet (CLAUDE.md, stack, conventions).
- Rappels sur les composants UI a reutiliser
- Conventions de nommage ou patterns a respecter
- Endpoints API existants a utiliser ou a creer
- Gestion d'etat (store, context, etc.)
- Contraintes de permissions / roles
- Points d'attention performance (pagination, lazy loading, etc.)
- Internationalisation (i18n) si applicable
- Tests a prevoir
### Criteres d'acceptation
- [ ] Critere 1
- [ ] Critere 2
- [ ] Critere 3
4. Les Tips & Rappels — Comment les generer
C'est la section la plus importante. Elle doit contextualiser le ticket par rapport au projet reel. Pour la remplir :
- Lis CLAUDE.md : extrais la stack (React, Vue, Next, etc.), l'ORM, le style (Tailwind, CSS Modules), la structure des dossiers
- Identifie les patterns recurrents : si le projet utilise un pattern pour les formulaires, les tableaux, les modales -> rappelle-le
- Mentionne les composants existants : "Reutiliser le composant
<DataTable>deja utilise sur la page Contacts" - Pointe les API : "L'endpoint
GET /api/v1/clientsexiste deja pour la liste, verifier s'il faut un filtre supplementaire" - Permissions : "Verifier les roles — cette page est reservee aux admins et managers"
- Pieges courants : "Attention au debounce sur la recherche", "Ne pas oublier le loading state sur les actions async"
5. Validation et push vers Lesstime
Apres avoir presente les tickets a l'utilisateur, demande confirmation avant de pousser :
- Affiche un resume des tickets rediges (titre + priorite)
- Demande : "Veux-tu pousser ces tickets dans Lesstime ?"
- Si oui, execute la phase Push (voir ci-dessous)
Integration Lesstime — Push des tickets
Connexion via le MCP lesstime
Tout passe par les outils MCP mcp__lesstime__*. Pas de curl, pas de JWT a gerer manuellement, pas d'IRI.
Le MCP expose les operations suivantes :
| Operation | Tool MCP |
|---|---|
| Lister projets | mcp__lesstime__list-projects |
| Lister users | mcp__lesstime__list-users |
| Lister statuts (globaux) | mcp__lesstime__list-statuses |
| Lister priorites (globales) | mcp__lesstime__list-priorities |
| Lister efforts (globaux) | mcp__lesstime__list-efforts |
| Lister tags (globaux) | mcp__lesstime__list-tags |
| Lister groupes d'un projet | mcp__lesstime__list-groups (projectId optionnel) |
| Creer un groupe | mcp__lesstime__create-group |
| Creer une tache | mcp__lesstime__create-task |
| Mettre a jour une tache | mcp__lesstime__update-task |
Champs create-task
| Champ | Type | Description |
|---|---|---|
projectId |
int (required) | Cible du ticket |
title |
string (required) | Titre du ticket |
description |
string | Markdown complet |
statusId |
int | Defaut "A faire" = 1 |
priorityId |
int | Voir list-priorities |
effortId |
int | S/M/L — voir list-efforts |
assigneeId |
int | User assignee |
collaboratorIds |
int[] | Collaborateurs |
groupId |
int | Groupe (per-project) |
tagIds |
int[] | Tags globaux |
deadline |
string (ISO date) | Optionnel |
scheduledStart / scheduledEnd |
string (ISO datetime) | Optionnel |
Tous les IDs sont des entiers, pas des IRI. Le MCP gere la conversion en interne. Le piege historique group vs taskGroup n'existe plus : c'est simplement groupId.
IDs verifies (cache — toujours reconfirmer via les outils list-*)
| Type | Label | ID |
|---|---|---|
| Statut | A faire | 1 |
| Statut | En cours | 2 |
| Statut | Bloque | 3 |
| Statut | En attente de validation | 4 |
| Statut | Termine | 5 |
| User | admin | 2 |
| User | Tristan | 3 |
| User | Lucile | 4 |
| User | Matthieu | 5 |
| User | matteo | 6 |
| User | kevin | 7 |
| User | geoffrey | 8 |
| User | Julie | 10 |
| Projet | Lesstime | 5 |
| Projet | Coltura | 6 |
| Projet | Inventory | 7 |
| Projet | Ferme | 8 |
| Projet | Malio UI | 11 |
| Projet | SIRH | 12 |
| Projet | Infrastructure | 13 |
| Projet | Qualiopi | 14 |
| Projet | ADMIN | 16 |
| Projet | Maintenance-LIOT | 17 |
| Projet | Vaultwarden | 18 |
| Projet | ednotif-bundle | 19 |
| Projet | Formation | 20 |
Notion de Groupe dans Lesstime
Les groupes dans Lesstime organisent visuellement les taches a l'interieur d'un projet (sections/categories sur le board). Ils sont per-projet.
Utilisation des groupes pour les tickets :
- Un groupe par ecran/feature : pour des tickets issus d'ecrans Figma. Ex: "Repertoire Clients", "Fiche Client", "Commandes Fournisseurs".
- Un groupe par module : si les tickets couvrent un module entier. Ex: "Commerciale - Clients", "Logistique - Reception".
- Un groupe par priorite : pour les reviews de code. Ex: "P0 - Urgents", "P1 - Importants".
Workflow groupes :
mcp__lesstime__list-groupsavecprojectIdpour voir les groupes existants- Si un groupe correspondant existe, reutiliser son
id - Sinon
mcp__lesstime__create-groupavecprojectId,title, et optionnellementcolor - Passer
groupIda chaquecreate-taskpour ranger la tache
IMPORTANT : Toujours demander a l'utilisateur comment organiser les groupes avant de creer :
- Par ecran Figma (recommande pour les features)
- Par module/section de l'app
- Par priorite (recommande pour les reviews)
- Sans groupe (tout a plat)
Process de push
digraph push_flow {
rankdir=TB;
"1. User valide les tickets" -> "2. Discovery MCP (projects/users/statuses/groups/tags)";
"2. Discovery MCP (projects/users/statuses/groups/tags)" -> "3. Demander projet + groupes + assignee + tags";
"3. Demander projet + groupes + assignee + tags" -> "4. create-group si besoin";
"4. create-group si besoin" -> "5. create-task pour chaque ticket";
"5. create-task pour chaque ticket" -> "6. Resume au user + lien my-tasks";
}
Phase 1 — Discovery MCP (appels paralleles) :
mcp__lesstime__list-projectsmcp__lesstime__list-usersmcp__lesstime__list-statusesmcp__lesstime__list-tagsmcp__lesstime__list-groupsavecprojectIdcible
Phase 2 — Demander configuration :
- Quel projet cible (projectId) ?
- Comment organiser les groupes ? (par ecran / par module / par priorite / sans)
- Statut initial ? (defaut "A faire" = 1)
- Assigner a quel user (assigneeId) ?
- Tags a ajouter (tagIds) ?
Phase 3 — Creer les groupes manquants via mcp__lesstime__create-group avec projectId, title et color.
Phase 4 — Creer les taches : boucler sur la liste et appeler mcp__lesstime__create-task pour chaque ticket avec :
title: prefixe numero d'ordreX/N - Titre(ex:1/5 - Entites Permission). L'ordre reflete les dependances.description: corps complet du ticket en markdown.projectId,statusId,assigneeId,groupId,tagIds.
Phase 5 — Resume : nombre de taches creees, lien http://project.malio-dev.fr/my-tasks si assignee correspond au user login, eventuelles erreurs.
Principes de redaction
- Sois precis, pas vague : "Un champ texte pour le nom du client (max 255 car)" > "Un champ pour le nom"
- Decris le QUOI, pas le COMMENT : Le ticket decrit la feature, pas l'implementation (sauf dans Tips)
- Un ticket = une feature atomique : Si c'est trop gros, decoupe en sous-tickets
- Pense aux cas limites : C'est souvent ce qu'on oublie et qui cree les bugs
- Les tips doivent etre actionnables : Pas de conseil generique, que du concret lie au projet
Exemple rapide
Si l'utilisateur donne un ecran de liste de contacts avec recherche et filtres :
Titre : Liste des contacts avec recherche et filtres
Comportement : L'ecran affiche un tableau pagine de contacts. Une barre de recherche en haut permet de filtrer par nom/email. Des filtres dropdown permettent de filtrer par statut (actif/inactif) et par entreprise.
Tips : "Le composant <SearchInput> du design system gere deja le debounce. Utiliser useQuery avec les params de filtre. L'endpoint GET /api/contacts supporte deja ?search=&status=&company_id=&page=&limit=."
Common Mistakes
- Bypasser le MCP : ne jamais retomber sur curl + JWT REST quand le MCP
lesstimeest disponible. Signaler le probleme a l'utilisateur s'il est down. - Oublier la phase Discovery : les IDs de projets/statuts/groupes/users peuvent varier — toujours
list-*avant de creer. - Ne pas demander confirmation avant push : toujours valider les tickets ET la config Lesstime (projet, groupes, assignee, tags) avec l'utilisateur avant de creer.
- Creer sans groupes : les groupes rendent la vue Lesstime beaucoup plus lisible, toujours proposer.
- Description trop courte dans Lesstime : inclure le corps complet du ticket (comportement + regles + edge cases + tips), pas juste le titre.
- Oublier les groupes existants : toujours
list-groupsavantcreate-grouppour eviter les doublons. - Ne pas gerer les erreurs : si un
create-taskechoue, continuer avec les suivants et reporter a la fin.