robertoallende/fancy-kanban

Générez des tableaux kanban fancy-kanban valides — des tableaux kanban intégrés en Markdown avec champs typés, couloirs de nage, règles de workflow et configuration de face de carte pour Obsidian et outils compatibles.

Qu'est-ce que fancy-kanban ?

Cette compétence définit un format de tableau kanban basé sur le Markdown, conçu pour être utilisé dans Obsidian et d'autres outils compatibles. Le format utilise un bloc de code `fancy-kanban` qui peut être intégré n'importe où dans une note, ce qui permet d'avoir zéro, un ou plusieurs tableaux dans un même fichier. Chaque bloc contient une section de configuration (de type YAML) avec les champs, les règles de workflow, les options d'affichage (comme les couloirs de nage, les limites de cartes et les champs de carte), et un tableau Markdown avec les données des cartes. Les champs peuvent être de type Texte, Zone de texte, Date, Nombre, Sélection ou Lien, et les cartes sont identifiées de manière stable par un identifiant `_id` unique. Le format est entièrement lisible comme texte brut et permet des transitions de workflow configurables, la gestion des limites de colonnes et la personnalisation de l'affichage des cartes.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add robertoallende/fancy-kanban

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · 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

Schéma de Tableau Kanban Fancy

Une spécification autonome pour le format de tableau kanban basé sur Markdown. Toute application lisant et écrivant des fichiers suivant ce schéma produira des tableaux compatibles.

Aperçu

Chaque tableau se trouve à l'intérieur d'un bloc de code avec l'identifiant fancy-kanban. Cela signifie :

  • Un tableau peut être intégré n'importe où dans une note, au milieu de texte, de liens et d'autres contenus
  • Une note peut contenir zéro, un ou plusieurs tableaux
  • Un fichier constitué d'un seul bloc de tableau est un fichier de tableau autonome
  • Sans le plugin installé, le bloc s'affiche comme un bloc de code non stylisé — le texte brut reste entièrement lisible

Le bloc contient deux sections séparées par --- :

  1. Une section de configuration (de type YAML) définissant les champs, le workflow et les options d'affichage
  2. Un tableau Markdown contenant les lignes de données

Exemple Complet

```fancy-kanban
---
title: Mon Tableau
fields:
  - name: titre,       type: Texte,     label: Titre
  - name: statut,      type: Sélection, options: en_attente|en_cours|terminé, label: Statut, default: en_attente
  - name: responsable, type: Texte,     label: Responsable
  - name: date_début,  type: Date,     label: Date de début
  - name: notes,       type: ZoneTexte, label: Notes
  - name: effort,      type: Nombre,   label: Effort
  - name: docs,        type: Lien,     label: Docs
  - name: équipe,      type: Sélection, options: frontend|backend, label: Équipe
card_fields: responsable, effort
lanes: équipe
workflow: en_attente→en_cours, en_attente→terminé, en_cours→terminé, en_cours→en_attente, terminé→en_cours, terminé→en_attente
---

| _id    | Titre          | Statut     | Responsable | Date de début | Notes                        | Effort | Docs                  | Équipe   |
|--------|----------------|------------|-------------|---------------|------------------------------|--------|-----------------------|----------|
| x7k2a1 | Corriger bug login | en_attente | Alice       | 2026-01-15    | Nécessite investigation      | 3      |                       | backend  |
| m3p9b2 | Refactorisation authentification | en_cours | Bob         |              | Contenu multi-ligne\<br/> ici | 5      | design.md             | backend  |
| q1r4c3 | Configurer CI  | terminé    |             | 2026-01-01    |                              | 1      | setup.md\|guide.md | frontend |
```

Structure du Bloc

Le bloc de code contient exactement deux sections divisées par une ligne --- :

```fancy-kanban
---
{config}
---
{tableau Markdown}

Tout ce qui se trouve avant le premier `---` est ignoré (réservé pour une utilisation future). Tout ce qui se trouve entre les deux lignes `---` est la configuration. Tout ce qui se trouve après le deuxième `---` est le tableau.

## Section de Configuration

Paires clé-valeur de type YAML. Analysé ligne par ligne.

### Clés

| Clé | Requis | Défaut | Description |
|-----|--------|--------|-------------|
| `title` | oui | — | Nom lisible du tableau |
| `fields` | oui | — | Liste des définitions de champs (voir ci-dessous) |
| `version` | non | `1` | Version du format écrite par le plugin ; les tableaux avec une version supérieure à celle supportée par le plugin actuel s'ouvrent en mode lecture seule |
| `workflow` | non | toutes les transitions autorisées | Paires `de→vers` séparées par des virgules |
| `lanes` | non | aucune | Nom du champ à utiliser comme dimension de regroupement par couloir |
| `card_title` | non | détection auto | Nom du champ à utiliser comme titre de la carte ; définir sur une chaîne vide pour n'afficher aucun titre |
| `card_fields` | non | aucun | Liste ordonnée et séparée par des virgules des champs secondaires à afficher sous le titre de la carte |
| `card_labels` | non | `true` | Définir sur `false` pour masquer le préfixe du libellé sur les champs secondaires de la carte |
| `card_limit` | non | `0` (pas de limite) | Nombre maximum de cartes affichées par colonne ; les cartes au-delà de ce nombre sont masquées derrière un bouton « Afficher plus » |

### `card_title`

```yaml
card_title: résumé

Contrôle quel champ est rendu comme titre de la carte :

  • Absent (par défaut) : le premier champ qui n'est ni _id ni un champ de colonne est utilisé automatiquement
  • Défini sur un nom de champ : la valeur de ce champ apparaît comme titre
  • Défini sur une chaîne vide (card_title: ) : aucun titre n'est affiché ; la carte affiche uniquement les champs secondaires

card_fields

card_fields: priorité, échéance, docs

Une liste ordonnée, séparée par des virgules, des noms de champs secondaires à afficher sous le titre de la carte. Ceux-ci apparaissent comme des lignes étiquetées en dessous du titre.

Comportement par défaut : lorsque card_fields est absent, la carte affiche uniquement le champ du titre. Les tableaux existants sans clé card_fields ne sont pas affectés.

Noms inconnus : les noms de champs qui ne correspondent à aucun champ défini sont ignorés silencieusement lors du rendu. La suppression d'un champ de fields: le masque automatiquement de la face de la carte sans erreur d'analyse.

Champs de type Lien : lorsqu'un champ Lien est inclus dans card_fields, ses éléments sont rendus comme une liste horizontale de liens cliquables sur la face de la carte. Les chemins de coffre s'ouvrent dans un nouvel onglet ; les URI externes s'ouvrent dans le navigateur.

card_labels

card_labels: false

Lorsqu'il est défini sur false, le préfixe du libellé est omis des lignes de champs secondaires sur la face de la carte — seule la valeur est affichée. La valeur par défaut est true (libellés visibles). La clé n'est écrite dans la configuration que lorsque sa valeur est false.

card_limit

card_limit: 5

Lorsqu'il est défini sur un entier positif, chaque colonne affiche au maximum ce nombre de cartes. Les cartes au-delà de la limite sont masquées et un bouton Afficher plus (N) apparaît en bas de la colonne. Cliquer dessus révèle toutes les cartes restantes sans recharger le tableau. Définir card_limit: 0 ou omettre la clé désactive complètement la limitation.

Ceci est particulièrement utile pour les tableaux où la colonne terminé accumule de nombreuses cartes terminées au fil du temps — les cartes les plus récemment ajoutées restent visibles en un coup d'œil, tandis que l'historique plus ancien s'efface.

lanes

Lorsqu'il est défini sur un nom de champ (doit être un champ Sélection), le tableau s'affiche comme une matrice :

  • Colonnes — pilotées par l'ordre des options du champ statut
  • Lignes de couloir — pilotées par l'ordre des options du champ lanes

Les cartes sans valeur pour le champ lanes apparaissent dans un pseudo-couloir Non attribué en bas. Changer lanes est uniquement un changement de configuration d'affichage — aucune donnée de ligne n'est affectée.

Définitions de Champs

Chaque entrée dans la liste fields est un ensemble de paires clé: valeur séparées par des virgules sur une seule ligne, précédé de - :

fields:
  - name: titre, type: Texte, label: Titre
  - name: statut, type: Sélection, options: en_attente|en_cours|terminé, label: Statut, default: en_attente

Convention d'ordre des champs : listez titre en premier, puis statut, puis les champs supplémentaires. L'ordre des colonnes du tableau dans la section des données reflète l'ordre de définition des champs, et le titre de carte détecté automatiquement correspond au premier champ qui n'est ni _id ni un champ de colonne — donc placer titre en premier garantit une résolution prévisible du titre sans avoir besoin d'une clé card_title explicite.

Propriétés des Champs

PropriétéRequisDescription
nameouiIdentifiant interne. Minuscules, underscores pour les espaces.
typeouiL'un des : Texte, ZoneTexte, Date, Nombre, Sélection, Lien
labelouiEn-tête de colonne lisible. Doit correspondre exactement à l'en-tête du tableau Markdown.
optionsSélection uniquementListe de valeurs autorisées séparées par des barres verticales (|)
colorsSélection, optionnelPaires nom=hex séparées par des barres verticales assignant une couleur de fond à chaque option (par exemple Haute=#e74c3c|Basse=#27ae60). Les options sans entrée s'affichent en texte brut.
defaultnonValeur par défaut pour les nouvelles cartes

Types de Champs

TypeFormat de StockageDescription
TexteChaîne simpleTexte sur une seule ligne
ZoneTexteChaîne avec <br> pour les retours à la ligneTexte multiligne
DateAAAA-MM-JJDate calendaire
NombreChaîne entière ou décimaleValeur numérique
SélectionUne des valeurs des optionsChoix contraint ; les options peuvent porter des couleurs hexadécimales via la propriété colors
LienListe de chemins ou d'URI séparés par <br>Chemins relatifs à la racine du coffre (notes/doc.pdf) ou URI externes (https://…, ftp://…, mailto:…)

Noms de Champs Spéciaux

NomRôle
titreChamp d'affichage principal. Doit être listé en premier dans fields:. Utilisé comme titre de carte détecté automatiquement lorsque card_title n'est pas défini.
statutRequis. Champ de colonne Kanban. Doit être type: Sélection. Les cartes sont regroupées en colonnes selon cette valeur. L'ordre des colonnes suit l'ordre des options.

Tous les autres champs sont secondaires — affichés comme métadonnées de carte lorsqu'ils sont listés dans card_fields.

Identité des Éléments

Chaque carte a un ID caché stable stocké dans une colonne _id dans le tableau Markdown. L'interface utilisateur n'affiche jamais cette colonne.

  • Généré lors de la création de la carte : chaîne alphanumérique aléatoire courte (par exemple 8 caractères : x7k2a1b3)
  • Préservé à travers tous les aller-retours de sérialisation
  • Survit au réordonnancement, au glisser-déposer et aux renommages de champs
  • Utilisé en interne pour toutes les opérations sur les cartes (déplacer, éditer, supprimer)

Parce que l'identité est basée sur l'ID et non dérivée du contenu, renommer le titre d'une carte n'a aucun effet sur son identité.

Workflow

Définit les transitions de statut autorisées dans l'interface utilisateur :

workflow: en_attente→en_cours, en_attente→terminé, en_cours→terminé, en_cours→en_attente, terminé→en_cours, terminé→en_attente
  • Liste de paires de→vers séparées par des virgules (flèche : →, U+2192)
  • Si workflow est omis, toutes les transitions entre les options de statut sont autorisées
  • Utilisé pour contraindre les choix de l'interface utilisateur (par exemple un menu « Déplacer vers » n'affiche que les cibles valides)
  • Les modifications manuelles du tableau brut contournent la validation du workflow, car il s'agit de texte brut

Modèles de Tableau

Lors de la création d'un nouveau tableau, un ensemble de modèles prédéfinis fournit des ensembles d'options de statut courants. Les modèles ne pré-remplissent que les options du champ statut et le workflow — tous les autres champs sont ajoutés par l'utilisateur.

ModèleOptions de statutWorkflow par défaut
Basiqueen_attente | en_cours | terminéToutes les transitions
Logicielbacklog | à faire | en cours | revue | terminéAvant + un pas en arrière
Contenuidée | brouillon | revue | publiéAvant uniquement
Projetplanification | actif | bloqué | terminéToutes sauf → planification
PersonnaliséDéfini par l'utilisateurDéfini par l'utilisateur

La sélection de Personnalisé ouvre un éditeur libre pour les options de statut et les transitions de workflow.

Tableau Markdown

Le tableau apparaît immédiatement après la fermeture --- de la section de configuration.

Structure

| _id    | En-tête1 | En-tête2 |
|--------|----------|----------|
| abc123 | valeur   | valeur   |
  1. Ligne d'en-tête — la première colonne est toujours _id ; les colonnes restantes sont les libellés des champs dans l'ordre de définition du schéma
  2. Ligne de séparation — séparateur de tableau Markdown standard
  3. Lignes de données — une ligne par carte ; la cellule _id contient l'ID stable de la carte

Règles

  • L'ordre des colonnes dans le tableau doit correspondre à l'ordre de définition des champs (après _id)
  • Les cellules vides sont valides (valeur du champ = chaîne vide)
  • L'ordre des lignes dans un groupe de statut est l'ordre d'affichage
  • Un tableau vide (en-tête + séparation, aucune ligne de données) est valide
  • La colonne _id est toujours en premier et n'est jamais affichée dans le tableau rendu

Échappement

Caractère dans la valeurÉchappé en
| (barre verticale)| (barre verticale précédée d'un antislash)
Nouvelle ligne<br>
Retour chariot<br>

Lors de la lecture : \| → |, <br> → nouvelle ligne. Lors de l'écriture : | → \|, toute nouvelle ligne → <br>.

Algorithme d'Analyse

  1. Extraire la chaîne brute entre les délimiteurs d'ouverture et de fermeture du bloc fancy-kanban
  2. Diviser sur la première ligne --- pour localiser le début de la section de configuration
  3. Diviser sur la deuxième ligne --- pour séparer la configuration du tableau
  4. Analyser la configuration ligne par ligne : extraire title, version, fields, workflow, lanes, card_title, card_fields, card_labels, card_limit
  5. Pour fields, collecter les lignes commençant par - et analyser chacune comme des paires clé: valeur séparées par des virgules ; colors est décodé comme des jetons nom=hex séparés par des barres verticales
  6. Trouver les lignes du tableau dans le corps (lignes commençant par |)
  7. La première ligne du tableau est la ligne d'en-tête — extraire les libellés des colonnes ; _id est toujours en premier
  8. Mapper les libellés d'en-tête restants aux noms de champs via une recherche de libellé insensible à la casse
  9. Analyser chaque ligne de données : diviser sur les | non échappés, couper les cellules, déséchapper \| et <br>
  10. La première cellule de chaque ligne de données est l'_id de la carte
  11. Regrouper les cartes par valeur du champ statut, en initialisant les groupes dans l'ordre des options

Réconciliation du schéma (appliquée après l'analyse) :

  • Champs présents dans le schéma mais manquants dans les données d'une carte : compléter avec la valeur default du champ (ou chaîne vide)
  • Champs présents dans les données de la carte mais supprimés du schéma : préserver comme données cachées orphelines (non supprimées)

Algorithme d'Écriture

  1. Reconstruire la section de configuration à partir du schéma actuel (préserver le formatage original dans la mesure du possible)
  2. Générer la ligne d'en-tête : _id en premier, puis les libellés des champs dans l'ordre de définition du schéma
  3. Générer la ligne de séparation
  4. Générer une ligne de données par carte : _id en premier, puis les valeurs des champs dans l'ordre du schéma, avec les barres verticales et les retours à la ligne échappés
  5. Générer un nouvel _id de carte à l'aide d'une chaîne alphanumérique aléatoire si la carte n'a pas d'ID existant
  6. Reconstruire le bloc complet : délimiteur d'ouverture, configuration, ---, ligne vide, tableau, délimiteur de fermeture

Principe de réécriture : seule la plage de texte du bloc affecté est corrigée dans le fichier source — le contenu environnant n'est jamais réécrit.

Tableau Minimal Viable

```fancy-kanban
---
title: Mon Tableau
fields:
  - name: titre, type: Texte, label: Titre
  - name: statut, type: Sélection, options: en_attente|en_cours|terminé, label: Statut, default: en_attente
workflow: en_attente→en_cours, en_attente→terminé, en_cours→terminé, en_cours→en_attente, terminé→en_cours, terminé→en_attente
---

| _id | Titre | Statut |
|-----|-------|--------|

## Notes de Compatibilité

- Sans le plugin, le bloc s'affiche comme un bloc de code simple — toutes les données sont toujours visibles sous forme de texte brut
- Le tableau Markdown à l'intérieur du bloc est un Markdown valide et lisible dans n'importe quel éditeur de texte
- La section de configuration suit les conventions YAML familières aux générateurs de sites statiques et aux applications de prise de notes
- La suppression du plugin laisse toutes les données intactes et récupérables

## Fonctionnalités Obsolètes

Voir [docs/obsolescences.md](obsolescences.md) pour la liste complète des fonctionnalités supprimées et leurs équivalents modernes.

Skills associés