Aapastech Session Backlog : ne perdez jamais une tâche
Les sessions longues et les invites multitâches font perdre le fil aux assistants IA. Les premières demandes s'effacent tandis qu'un tour ultérieur se penche sur un détail. Ce skill corrige cela avec un backlog qui vit sur l'ordinateur de l'utilisateur. La mémoire de la conversation n'est pas la source de vérité ; le backlog l'est. Une tâche qui n'est pas dans le backlog n'existe pas, et une tâche dans le backlog n'est pas terminée tant qu'elle n'est pas marquée comme Terminée ou Abandonnée.
Il fonctionne avec tout assistant ou agent capable d'exécuter des commandes shell sur l'ordinateur de l'utilisateur ou d'appeler des outils MCP. Chaque session sur cet ordinateur, depuis n'importe quel outil ou modèle, partage le même backlog.
Règle de confidentialité : les données de tâche restent sur l'appareil qui exécute le travail. Ne copiez jamais le backlog vers un service cloud, une page hébergée, un connecteur ou un document partagé. Si aucun appareil utilisateur n'est accessible, utilisez le mode Hors ligne (section 9) à la place.
1. Trouver le backlog et exécuter le moteur
Si votre liste d'outils contient des outils backlog_* (le serveur MCP, section 11), utilisez-les. Ils correspondent un-à-un aux commandes ci-dessous et gèrent le dossier, l'encodage et les mises à jour pour vous. Sautez le reste de cette section.
Sinon, le backlog est un dossier contenant bl.py (le moteur), config.json, tasks/ (un fichier JSON par tâche), sessions/, board.html et BOARD.md. Cherchez-le dans cet ordre :
- Un emplacement que l'utilisateur vous a indiqué, dans ses préférences, sa mémoire ou ses instructions de projet.
- La variable d'environnement
BACKLOG_DIR, si elle est définie. ~/Documents/Aapastech-Backlog(le dossier par défaut).~/Documents/Claude-Backlog(le nom de dossier utilisé avant la v3 ; continuez à l'utiliser si c'est là que se trouvent les tâches de l'utilisateur).
L'exécuter. Dans ce document, bl <commande> est un raccourci. Tapez toujours la commande complète ; ne la stockez jamais dans une variable shell ($BL … échoue dans zsh, le shell par défaut de macOS).
| Shell | Commande |
|---|---|
| macOS / Linux (bash, zsh) | python3 ~/Documents/Aapastech-Backlog/bl.py <commande> … |
| Windows PowerShell | py -3 "$HOME\Documents\Aapastech-Backlog\bl.py" <commande> … (si py est manquant, essayez python) |
| Windows cmd | py -3 "%USERPROFILE%\Documents\Aapastech-Backlog\bl.py" <commande> … |
| Git Bash sur Windows | py -3 ~/Documents/Aapastech-Backlog/bl.py <commande> … |
bl where affiche le dossier et la version du moteur utilisés. Sur Windows, Documents est souvent déplacé dans OneDrive (%USERPROFILE%\OneDrive\Documents). Si ~\Documents n'existe pas, cherchez là-bas et proposez de définir BACKLOG_DIR pour que chaque session trouve le même dossier.
Python. Le moteur nécessite Python 3.8+ et rien d'autre.
- macOS : le premier appel à
python3sur un Mac neuf peut ouvrir la boîte de dialogue "installer les outils de développement en ligne de commande" d'Apple. Dites à l'utilisateur que c'est normal et sûr d'accepter, ou installez Python depuis python.org. - Windows : Python n'est généralement pas installé. Si
py -3etpythonéchouent tous les deux, demandez à l'utilisateur d'installer Python 3 depuis python.org avec "Ajouter python.exe au PATH" coché, ouwinget install Python.Python.3.12. N'utilisez pas d'autre méthode.
2. Premier démarrage sur un appareil (bootstrap)
Si aucun backlog n'existe encore :
- Créez le dossier
~/Documents/Aapastech-Backlog(ou l'emplacement choisi par l'utilisateur). - Copiez
scripts/bl.pydepuis le dossier de ce skill dans ce dossier. C'est un fichier Python unique, ne dépendant que de la bibliothèque standard, avec le tableau intégré. - Posez une question courte à l'utilisateur : quel nom afficher pour les tâches qui l'attendent, et dans quels domaines s'inscrit son travail (3 à 8 domaines, par exemple clients, produits, administration, personnel). Suggérez des domaines à partir de ce que vous savez déjà de lui. Exécutez ensuite :
bl init --owner "<nom>" --areas "Domaine1,Domaine2,…,Personnel,IA-Ops"Ajoutez--title "<Titre du tableau>"s'il souhaite un nom de tableau personnalisé (par défaut "Aapastech Backlog"). - Dites-lui l'emplacement du tableau :
file://…/Aapastech-Backlog/board.html. Proposez de l'ouvrir (bl board --open) et suggérez d'épingler l'onglet. - Suggérez de rendre le skill permanent, par exemple dans les préférences personnelles de l'assistant ou un fichier d'instructions : "Chargez toujours le skill session-backlog au début de chaque session et avant toute tâche comportant du travail."
Mises à jour : si bl version affiche une version inférieure à celle de scripts/bl.py de ce skill (cherchez VERSION = "…"), copiez le nouveau bl.py sur l'ancien. Les données de tâche et la configuration ne sont pas touchées.
3. Identité de session (une fois par session)
Choisissez un identifiant de session stable et réutilisez-le à chaque appel :
- Si votre plateforme donne un URL ou un id à la session, utilisez-le et transmettez l'URL via
--url. - Sinon :
<surface>-<AAAA-MMJJ-HHMM>en utilisant l'heure de début de session, par ex.desktop-20261018-1652,code-20261018-0910,api-20261018-1200,sched-20261019-0600.
bl session --id <SID> --label "<Surface> · <sujet principal>" --surface code|desktop|cloud|api|scheduled [--url <lien>]
Ceci affiche les tâches ouvertes de la session ainsi que les tâches non réclamées ou périmées d'ailleurs. Mentionnez les tâches en retard ou en attente de l'utilisateur en une ligne. Ne déversez pas toute la liste.
4. La boucle de tour (chaque tour avec du travail)
A. Relecture d'abord. Au début de chaque tour après le premier, exécutez bl open --session <SID>. Faites-le surtout lorsque l'invite est une plongée profonde dans une sous-tâche. Cette étape empêche que d'autres travaux soient oubliés. Ne l'ignorez jamais.
B. Capture avant le travail. Chaque nouvelle demande est capturée en un lot avant que tout travail ne commence. Cela inclut les apartés comme "aussi…", "rappelle-moi…", "plus tard…", "n'oublie pas…". Écrivez le lot dans un fichier JSON avec votre outil d'écriture de fichier, puis transmettez le chemin. Un fichier fonctionne dans tous les shells ; passer du JSON via echo échoue dans les shells Windows et déforme le texte non ASCII.
[
{"title":"Refondre la page de tarifs","area":"Produit","eta":"1h","priority":"P1",
"source":"invite 16:52 : refaire la page de tarifs","next":"Récupérer la copie actuelle",
"children":[{"title":"Auditer la copie actuelle","eta":"10m"},
{"title":"Esquisser 2 maquettes","eta":"30m"},
{"title":"Publier la maquette choisie","eta":"20m"}]},
{"title":"Répondre au fournisseur","area":"Admin","eta":"15m","status":"waiting_user","next":"L'utilisateur doit confirmer la quantité"}
]
bl batch --session <SID> <chemin-vers-fichier.json> (mettez le fichier dans votre espace de travail temporaire, pas dans le projet de l'utilisateur).
Rejouez la capture en une ligne compacte pour que l'utilisateur puisse la corriger :
Capturé : T-0042 Page de tarifs (1h) → T-0043 audit (10m), T-0044 maquettes (30m), T-0045 publication (20m) ; T-0046 Réponse fournisseur (en attente de vous).
Vérifiez bl list d'abord, et mettez à jour une tâche existante au lieu d'en créer une double. Ajoutez "parent":"T-0042" (ou --parent T-0042 sur bl add) pour placer une sous-tâche sous une tâche existante.
C. Revendiquer, puis travailler. Exécutez bl claim <ID> --session <SID> [--eta 20m] avant de commencer chaque tâche. Si la revendication est refusée parce qu'une autre session active la possède, laissez-la tranquille. Les revendications sont verrouillées, donc deux sessions ne peuvent jamais gagner la même. Travaillez en parallèle si possible. La session organisatrice met à jour le backlog pour ses sous-agents, en passant à chaque sous-agent son ID de tâche.
D. Mettre à jour au fur et à mesure.
bl update <ID> --session <SID> --log "décision / constatation" [--next "…"] [--output <chemin ou lien>] [--status blocked|waiting_user|ready]
- Enregistrez les décisions de l'utilisateur dans ses propres mots.
- Chaque fichier ou lien que vous produisez va dans
--output. - En attente de l'utilisateur signifie
--status waiting_user --next "<exactement ce dont vous avez besoin>".
E. Clôturer honnêtement. Exécutez bl done <ID> --session <SID> --log "livré …" --output … seulement après avoir vérifié le résultat. Une tâche parente ne peut pas être fermée tant que ses sous-tâches sont ouvertes. Pour abandonner une tâche, exécutez bl drop <ID> --session <SID> --reason "…". Ne supprimez jamais rien.
F. Pied de page. Terminez chaque réponse qui a impliqué du travail par la sortie en une ligne de bl footer --session <SID> [--exclude <IDs que vous venez de rapporter>].
5. Domaines
Chaque tâche de premier niveau reçoit un domaine de config.json (bl areas les liste). Les sous-tâches héritent du domaine de leur parent. Choisissez la correspondance la plus proche. Ajoutez un nouveau domaine (bl areas --add "Nom") uniquement lorsqu'une nouvelle ligne de travail continue apparaît clairement, et mentionnez-le lorsque vous le faites. bl areas --rename ANCIEN NOUVEAU renomme un domaine dans la configuration et sur chaque tâche.
6. ETA (chaque tâche en a une)
- L'ETA est le temps réel nécessaire à l'assistant pour terminer, en supposant un travail parallèle. C'est généralement 5 à 60 minutes, parfois des heures, rarement des jours. Format :
10m,45m,2h,1h30m,1d. - Incluez le temps de vérification du résultat.
- Le décompte commence à la revendication ou à la création. Le tableau signale en rouge les tâches en retard.
- Lorsque vous dépasserez, réestimez immédiatement :
--eta 1h --eta-reason "…". Ne laissez jamais une tâche passer en retard en silence. - Pour une tâche
waiting_user, l'ETA est le temps pour terminer après la réponse de l'utilisateur.
7. Règles inter-sessions
- Une revendication reste active tant que sa session continue de mettre à jour la tâche. Après 24 heures sans modification, elle est périmée, et toute session peut la reprendre (la reprise est enregistrée).
- N'utilisez jamais
--forcesur une revendication active sans l'accord de l'utilisateur. - Avant la fin d'une longue période de travail, laissez chaque tâche revendiquée avec un
--nextqu'une nouvelle session pourrait exécuter à froid. Libérez le travail non terminé avec--status ready --log "libéré : <état>". - Pour "qu'est-ce qui est ouvert", "où en sommes-nous" ou "qu'a fait l'autre session", répondez à partir de
bl list(--all,--area X,--session Y), pas de la mémoire de la conversation. - Le backlog appartient à un seul appareil. Les sessions sur d'autres appareils, ou dans le cloud, l'utilisent uniquement via un lien vers cet appareil.
- Si une commande indique qu'une tâche est occupée, une autre session l'écrit à cet instant. Réessayez une fois après un moment.
8. Quand ignorer la capture
Ignorez la capture uniquement pour une question ponctuelle répondue entièrement dans la même réponse. Capturez tout le reste : tout ce qui a un livrable, tout ce qui s'étend sur plus d'un tour, et tout ce qui est différé. En cas de doute, capturez-le.
9. Mode Hors ligne (aucun appareil utilisateur accessible)
- Miroir les tâches dans la propre liste de tâches de votre plateforme si elle en a une, ou une liste de vérification dans votre réponse sinon.
- Mettez en file chaque opération
bl.pyprévue, un objet JSON par ligne, dansbacklog-pending.jsonldans votre espace de travail temporaire (jamais dans le projet de l'utilisateur) :{"cmd":"add","args":{…},"at":"<iso>"}. - Dites à l'utilisateur une fois : "Votre ordinateur n'est pas accessible, donc les mises à jour du backlog sont mises en file d'attente et seront synchronisées lorsqu'il sera de nouveau disponible."
- Réessayez l'appareil à chaque tour. Une fois qu'il est accessible, rejouez la file d'attente dans l'ordre et exécutez
bl open. - Si la session se termine avant la synchronisation, la dernière réponse doit lister les tâches non synchronisées en entier.
10. Le tableau
board.html se régénère à chaque écriture et se rafraîchit toutes les 30 secondes. Il montre :
- des couloirs par domaine, avec les colonnes À faire / En cours / Bloqué / En attente de <propriétaire> / Terminé
- l'ETA et le compte à rebours sur chaque carte, avec les tâches en retard en rouge
- quelle session a créé, travaillé et terminé chaque tâche
- un clic pour accéder au journal complet et aux sorties
BOARD.md est le même tableau en texte.
Quand l'utilisateur demande à le voir ("montre mon backlog", "ouvre le tableau", "qu'est-ce qui est ouvert ?") :
- Sur l'ordinateur qui détient le backlog, exécutez
bl board --openpour l'ouvrir dans le navigateur par défaut. - Lorsqu'aucun navigateur sur cet ordinateur n'est accessible (par exemple, un chat sur téléphone), collez un court résumé de
bl listgroupé par domaine, avec les tâches en retard et en attente de l'utilisateur en premier. - Le tableau est un fichier local. Il n'est jamais publié, téléchargé ou partagé.
11. Notes sur les plateformes
- Clients MCP (tout assistant ou framework d'agent).
scripts/backlog_mcp.pyest un serveur MCP stdlib sur stdio exposantbacklog_session,backlog_open,backlog_add,backlog_claim,backlog_update,backlog_done,backlog_drop,backlog_list,backlog_show,backlog_footer,backlog_board,backlog_initetbacklog_where. Enregistrez-le avec la commandepython3(Windowspy, args-3 <chemin>) et les arguments<chemin vers backlog_mcp.py>, éventuellement avec l'environnementBACKLOG_DIR. Il exécute le mêmebl.py, donc les routes shell et MCP partagent un seul backlog. - Agents pilotés par API. Un modèle appelé via une API n'a pas accès aux fichiers de l'utilisateur par lui-même. Le développeur exécute le serveur MCP (ou
bl.pyderrière son propre outil) sur la machine qui possède le backlog et donne ces outils au modèle. Les sandbox de code hébergé sont temporaires, donc un backlog là-bas est perdu lorsque le sandbox se termine ; ne le conservez pas là. - Sessions Claude desktop / cloud / téléphone liées à l'ordinateur de l'utilisateur (outils d'appareil tels que
device_bash,device_request_folder_access,device_commit_files; chargez-les via votre recherche d'outil s'ils sont différés). Le dossier de backlog ou son parent (par exemple~/Documents) doit être un dossier connecté ; sinon, appelezdevice_request_folder_accessune fois avec la raison "pour conserver votre backlog de tâches sur cet ordinateur". Ensuite, exécutez les commandes viadevice_bashen utilisant le chemin connecté (par exemplepython3 $HOME/mnt/Documents/Aapastech-Backlog/bl.py …). Pour installerbl.pyvia le pont, préparez le fichier et envoyez-le à l'appareil (device_commit_files). - Claude Code / Codex / Cursor / autres agents de codage exécutent le moteur directement dans leur shell, selon le tableau de la section 1.
Référence des commandes
bl init [--owner NOM] [--areas "A,B,C"] [--title T] configuration initiale / changement de propriétaire, domaines ou titre du tableau
bl version version du moteur
bl where dossier du backlog, version du moteur, lien du tableau
bl areas [--add NOM …] [--rename ANCIEN NOUVEAU] lister / ajouter / renommer des domaines
bl session --id SID --label L --surface S [--url U] enregistrer une session ; affiche les tâches ouvertes
bl open --session SID tâches ouvertes de cette session + non réclamées
bl batch --session SID fichier.json|- ajouter plusieurs tâches ("children" imbriqués = sous-tâches)
bl add --session SID --title T --area A --eta 20m [--parent ID] [--status S] [--next N] [--priority P1]
bl claim ID --session SID [--eta 20m] [--force]
bl update ID --session SID [--status S] [--eta E --eta-reason R] [--next N] [--log L] [--output O] [--area A] [--title T]
bl done ID --session SID [--log L] [--output O] [--force]
bl drop ID --session SID --reason R
bl list [--all] [--area A] [--session SID] [--json]
bl show ID
bl footer --session SID [--exclude ID1,ID2]
bl board [--open]
bl where
Référence rapide du tableau des commandes MCP
| Fonction | Outil MCP | Shell bl … |
|---|---|---|
| Démarrer une session | backlog_session | session |
| Voir les tâches ouvertes | backlog_open | open |
| Ajouter une tâche | backlog_add | add |
| Ajouter par lot qui hérite de la session, de l'ETA, de la priorité | — | batch |
| Revendiquer une tâche | backlog_claim | claim |
| Mettre à jour l'état / le journal / le résultat | backlog_update | update |
| Marquer comme terminé | backlog_done | done |
| Abandonner | backlog_drop | drop |
| Lister les tâches | backlog_list | list |
| Afficher une tâche | backlog_show | show |
| Raccourci de pied de page | backlog_footer | footer |
| Ouvrir le tableau | backlog_board | board --open |
| Initialiser le backlog | backlog_init | init |
| Vérifier le dossier / la version | backlog_where | where |