Tracker — suivre le travail qui avance
Quand utiliser cette compétence
Question signature : « Quel est le statut de… ? » ou « Qui possède ceci ? »
Un tracker = des éléments qui passent d'un état à un autre, avec un responsable, un calendrier et un historique qui mérite d'être conservé.
Le test de routage
Vous avez besoin d'au moins deux de ces critères pour justifier un tracker :
- Un statut qui change au fil du temps (pas un attribut — du mouvement)
- Un responsable humain
- Une date d'échéance
- Une hiérarchie : groupe → sous-groupe → élément
Moins de deux ? → registry. ⚠️ Le défaut est toujours le registre.
Comment c'est construit
Un moteur, plusieurs schémas.
<tracker-dir>/
schema.json statuts, priorités, étiquettes de hiérarchie, champs supplémentaires
tracker.db SQLite : éléments + groupes + item_history
Moteur : engine/tracker.py (à côté de ce SKILL.md) · Python 3.9+ · zéro dépendance (sqlite3 intégré).
Hiérarchie : group → subgroup → item. Les étiquettes changent selon le domaine — pour les tâches ce sera projet → module → tâche, pour les bugs ce sera produit → composant → bug, pour les factures ce sera client → abonnement → facture.
Travailler avec l'utilisateur
- Exécutez le test de routage. Une liste plate →
registry. - Proposez un schéma : quels statuts, ce qui est considéré comme « fermé », quelles priorités, quelle est la hiérarchie, quels champs supplémentaires. Présentez-le et demandez approbation.
- Vérifiez s'il existe un préréglage dans
presets/. - Créez avec
init, ajoutez des groupes, puis enregistrez le tracker dans l'indexregistries.jsonau niveau de l'espace de travail. - Expliquez que les mises à jour peuvent être signalées en langage naturel — l'agent les traduit en commandes.
Commandes
Les chemins sont relatifs à la racine de l'espace de travail. Ajustez SKILL_DIR à l'emplacement d'installation de cette compétence (par ex. .pi/skills/tracker).
T=<SKILL_DIR>/engine/tracker.py
D=trackers/bugs
python3 $T --dir $D init --preset bugs
python3 $T --dir $D group add webapp --name "Web App"
python3 $T --dir $D group add checkout --name "Checkout" --parent webapp
python3 $T --dir $D add "Double réservation dans le calendrier" --group webapp --subgroup checkout \
--assignee dana --priority sev2 --client acme --due 2026-08-05
python3 $T --dir $D update 3 --status in-progress --notes "reproduit"
python3 $T --dir $D list --assignee dana --group-by status
python3 $T --dir $D list --status blocked
python3 $T --dir $D show 3
python3 $T --dir $D history 3
python3 $T --dir $D report # résumé : par statut, par responsable, en retard, bloqué
python3 $T --dir $D delete 3 --yes # ⚠️ suppression définitive
list sans filtre masque automatiquement les éléments fermés. --all affiche tout.
Préréglages disponibles
tasks tâches · bugs bugs et problèmes clients · invoices factures et recouvrement ·
features pipeline de fonctionnalités
Ordre de résolution des préréglages
init --preset <nom> résout <nom>.json dans cet ordre — le premier trouvé l'emporte :
<workspace>/trackers/presets/<nom>.json— préréglages locaux à l'espace, relatifs au répertoire de travail depuis lequel le moteur s'exécute<SKILL_DIR>/presets/<nom>.json— les préréglages intégrés listés ci-dessus
Un préréglage local à l'espace avec le même nom qu'un préréglage intégré le masque. Un préréglage manquant
liste chaque nom disponible depuis les deux emplacements, étiqueté [espace] / [intégré].
Créer un préréglage local à l'espace : déposez un schéma JSON (même format que schema.json,
voir les exemples intégrés) dans trackers/presets/. Ce répertoire n'est lu
qu'avec un --preset <nom> explicite — les autres fichiers y sont ignorés.
Règles absolues
- 📊 Le tracker est la source de vérité — ne conservez jamais les statuts dans la mémoire de l'agent. Interrogez toujours.
- ⛔ Un statut
blockednécessite une raison dans les notes — sinon le blocage ne sert à rien. - 🗑️ La suppression nécessite
--yeset une confirmation explicite de l'utilisateur. Il n'existe pas de statut « annulé » par défaut — si nécessaire, ajoutez-le au schéma au lieu de supprimer. - 📜 Chaque changement est enregistré dans
item_history— ne modifiez jamais la base à la main. - 🔁 Trois statuts ou moins sans responsable ni date d'échéance = cela aurait dû être un registre.