Aller au contenu principal

Des tâches depuis votre agent de code

Vous passez une heure avec votre agent de code à décider de la suite. Depuis la 1.4.4, la dernière phrase de cette heure peut être : mets-moi une tâche sur tout ce qu'on doit faire suivant notre discussion. L'agent les dépose dans le widget Todo Backlog de votre plateau, dans l'ordre convenu, sous les étapes que vous avez nommées. Vous ne retapez rien.

Ça marche depuis Claude Code, Cursor, Antigravity, Hermes Agent, et depuis tout IDE ou agent qui parle MCP, par le même pont @mnemosyne_os/mcp qui leur donne accès à votre mémoire. L'outil s'appelle mnemosyne_todo_add.

À quoi ça ressemble​

Vous, en fin de session :

Mets-moi une tâche sur tout ce qu'on doit faire suivant notre discussion, dans une nouvelle liste Sprint 12, groupées par étape.

L'agent appelle l'outil une fois et vous lit la réponse :

Filed 9 tasks into "Sprint 12" (list created). They appear in the To-do widget in the order given, under their steps.

Ouvrez le widget (Ctrl+4, ou le dock) : les tâches y sont, avec un en-tête à chaque changement d'étape.

Avant que ça marche​

  1. Mnemosyne OS 1.4.5 ou plus

    Fenêtre ouverte, c'est le magasin du widget qui applique le changement. Fenêtre fermée, l'app écrit le fichier elle-même, avec les mêmes gardes. Sur une install dev, le démon sans fenêtre sert aussi les outils app fermée ; une install npm n'a pas de démon et a besoin de l'app lancée, et le dit au lieu de ne rien écrire en silence.

  2. Le MCP connecté

    Suivez Connecter Claude à Mnemosyne OS. L'outil est arrivé dans @mnemosyne_os/mcp 1.7.0. La config recommandée lance le paquet par npx -y, qui récupère la version courante ; si votre agent liste encore 14 outils, redémarrez-le pour recharger le serveur.

  3. Aucun dialogue de permission à attendre

    Le pont MCP est first-party et déclare lui-même la portée todo:write, donc rien ne surgit dans l'app. Une cartouche que vous installez doit vous demander cette portée, comme n'importe quelle permission.

Quoi dire​

L'outil refuse de deviner, donc une bonne demande nomme trois choses :

  • La liste. Dites dans En cours, dans ma liste Blog, ou dans une nouvelle liste X. Les noms correspondent aux libellés que vous voyez dans le widget, la casse n'a pas d'importance, et les trois listes d'origine répondent aussi à leur nom traduit. Si vous nommez une liste qui n'existe pas sans demander sa création, l'agent est refusé et reçoit les noms qui existent, donc son appel suivant en choisit une au lieu de deviner. Si vous ne dites rien sur la liste, les tâches vont dans la première liste d'origine, En cours.
  • Les étapes. Dites groupées par étape, ou nommez-les vous-même. Chaque étape devient un en-tête dans la liste, dessiné là où le groupe change. Une étape est un titre posé sur les tâches, pas une liste à part.
  • L'ordre. L'ordre envoyé par l'agent est l'ordre que vous obtenez. Demandez l'ordre d'exécution si la conversation ne l'a pas tranché.

Une couleur pour une liste neuve est facultative ; sinon l'app prend la teinte suivante.

Dit comme ça, voici ce que l'agent envoie :

{
"tasks": [
{ "text": "Rédiger les trois maquettes", "group": "Step 1 · Mockup" },
{ "text": "En choisir une ensemble", "group": "Step 1 · Mockup" },
{ "text": "Couper les jetons CSS", "group": "Step 2 · Build" }
],
"list": "Sprint 12",
"create_list": true
}

Les tâches qui partagent un group sont dessinées sous un seul en-tête, dans l’ordre que vous voyez ici.

L'argument s'écrit create_list, en snake case, et vaut false par défaut : sans lui, un nom de liste inconnu est refusé et non créé.

Ce que l'agent lit en retour​

Chaque réponse est une phrase sur laquelle l'agent peut agir, et chaque échec dit que rien n'a été écrit. Ces phrases sont en anglais, la langue de l'outil :

SituationLa phrase
DéposéFiled 9 tasks into "Sprint 12" (list created). They appear in the To-do widget in the order given, under their steps.
Liste inconnueNo list by that name. Lists that exist: "En cours", "Perso", "Autre", "Blog". Pick one of them, or call again with create_list: true to make a new one — never assume a default.
Nom de liste videThe list name was empty. Name an existing list or pass create_list: true with a name.
Que des tâches videsNothing to file: every task was blank after trimming.
Sans app, install npmThe backlog lives in the Mnemosyne OS app window and no window is open. Start the app (Infinity Edition) and call again; the headless daemon cannot show a To-do.
Pas de réponse en 15 sThe app did not answer in time. Nothing was written. Is the canvas open? Try again once the window is up.
Écriture refuséeThe app refused the write — the backlog file was not readable yet, or the disk said no. Nothing was written; try again in a moment.

Lire, modifier, retirer (1.4.5)​

Jusqu'à la 1.4.4, la porte ne savait qu'ajouter, donc chaque correction vous revenait. Depuis la 1.4.5, @mnemosyne_os/mcp 1.9.0 donne le reste à l'agent :

OutilCe qu'il fait
mnemosyne_todo_listRelit le backlog : les listes, et chaque tâche avec l'identifiant qu'il faut pour la changer.
mnemosyne_todo_updateedit, complete, move, remove une tâche. remove archive (récupérable) ; permanent: true supprime pour de bon et doit être demandé.
mnemosyne_todo_categoriesCréer, renommer, recolorer ou retirer une liste. Une liste qui porte encore des tâches est refusée, avec son compte.
mnemosyne_agenda_addPose un rendez-vous ou une échéance dans le widget Agenda, avec rappel et récurrence facultatifs.
mnemosyne_agenda_listRelit le calendrier, avec les identifiants.
mnemosyne_agenda_updateDéplace, renomme, redate ou change le rappel d'un rendez-vous.
mnemosyne_agenda_removeRetire des rendez-vous. Le calendrier n'a pas d'archive, donc chacun est nommé par titre et heure de début dans la réponse.

Chaque changement nomme un identifiant rendu par la lecture, jamais un titre. « Supprime la tâche sur la facture », c'est comme ça que la mauvaise tâche part, dans une phrase qui se lit parfaitement dans les deux sens ; les outils le disent dans leur propre description, donc le modèle est prévenu avant de deviner. Un lot s'applique dans l'ordre en une seule sauvegarde, et chaque opération rapporte son propre résultat : un identifiant périmé ne coule pas les autres.

La demande, en fin de revue :

Relis mon To-do, coche les deux tâches qu'on a finies, et déplace celle de la facture dans Semaine prochaine.

L'agent appelle mnemosyne_todo_list, puis mnemosyne_todo_update avec les identifiants lus, et vous lit une ligne par opération.

Limites​

  • Une liste par appel, jusqu'à 200 tâches, 300 caractères par tâche, 80 par nom d'étape. Le texte plus long est coupé, les lignes vides sont écartées.
  • Aucune détection de doublon. Demander deux fois dépose deux fois.
  • Le plan entier est une seule écriture : soit chaque tâche atterrit, soit aucune. Il n'y a pas de plan à moitié importé à démêler.

La même porte depuis le chat​

La fenêtre de chat a la même fonction sans agent : le bouton de la boîte à outils Tâches depuis cette conversation (Transforme ce que cette conversation a décidé de faire en un plan de tâches ordonné. Tu le relis, tu choisis la liste, et seulement ensuite les tâches sont créées.). Le modèle rédige un plan depuis la conversation, rappel mémoire coupé pour que rien dont vous n'avez jamais parlé ne s'y glisse, et un dialogue titré Nouvelles tâches depuis cette conversation le montre d'abord : Rien n'est créé avant d'appuyer sur Créer. Modifie, retire, choisis une liste. Si la conversation n'a rien décidé, il le dit : Rien à faire n'a été trouvé dans cette conversation.

Pour ceux qui construisent une cartouche​

La même porte est un appel SDK, sdk.todo.add, sur le serveur SDK local (port 7799). Il prend tasks (des chaînes, ou { text, group }), une list facultative, createList (false par défaut) et color, et répond { ok, added, created, listLabel } ou { ok: false, error, lists } avec les codes de la table ci-dessus. Il exige la portée todo:write dans votre manifeste ; avoir le droit d'écrire dans les coffres ne donne pas le backlog à une app.

Depuis la 1.4.5, la porte a quatre appels de plus : sdk.todo.read et sdk.todo.apply (portées todo:read, todo:write), sdk.agenda.read et sdk.agenda.apply (agenda:read, agenda:write). Lire le backlog de quelqu'un n'est pas le même acte qu'y écrire, donc les portées de lecture sont à part : une app qui veut les deux demande les deux. sdk.agenda.add pose un rendez-vous.

Votre backlog reste le vôtre​

Il n'y a jamais plus d'un rédacteur. Fenêtre ouverte, la demande est remise au magasin du widget, seul rédacteur de ce fichier tant qu'elle est là, et les mêmes gardes s'appliquent que quand vous tapez une tâche vous-même : rien n'est écrit avant que le fichier ait été lu, et rien n'est écrit si la fenêtre n'a pas répondu. Fenêtre fermée, il n'y a pas de magasin et rien qui sauvegarderait par-dessus, donc l'app applique les mêmes fonctions pures directement sur le fichier, par un fichier temporaire et un renommage : un processus tué à mi-chemin laisse votre backlog d'avant, jamais la moitié du nouveau. Un JSON lisible qui n'est pas un fichier To-do est laissé intact. Ce que l'agent dépose est exactement ce que vous voyez.