Saltar al contenido principal

Tareas desde tu agente de código

Pasas una hora con tu agente de código decidiendo qué hacer después. Desde la 1.4.4, la última frase de esa hora puede ser: crea una tarea por cada cosa que dijimos que haríamos. El agente las archiva en el widget Todo Backlog de tu lienzo, en el orden acordado, bajo los pasos que nombraste. No vuelves a teclear nada.

Funciona desde Claude Code, Cursor, Antigravity, Hermes Agent y desde cualquier IDE o agente que hable MCP, por el mismo puente @mnemosyne_os/mcp que les da acceso a tu memoria. La herramienta se llama mnemosyne_todo_add.

Cómo se ve​

Tú, al final de una sesión:

Crea una tarea por cada cosa que dijimos que haríamos, en una lista nueva llamada Sprint 12, agrupadas por paso.

El agente llama a la herramienta una vez y te lee la respuesta:

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

Abre el widget (Ctrl+4, o la base) y las tareas están ahí, con una cabecera en cada cambio de paso.

Antes de que funcione​

  1. Mnemosyne OS 1.4.5 o posterior

    Con la ventana abierta, el almacén del widget aplica el cambio. Con la ventana cerrada, la app escribe el archivo ella misma, con las mismas guardas. En una instalación dev, el demonio sin ventana sirve también las herramientas con la app cerrada; una instalación npm no tiene demonio y necesita la app en marcha, y lo dice en vez de no escribir nada en silencio.

  2. El MCP conectado

    Sigue Conectar Claude a Mnemosyne OS. La herramienta llegó en @mnemosyne_os/mcp 1.7.0. La configuración recomendada lanza el paquete con npx -y, que obtiene la versión actual; si tu agente aún lista 14 herramientas, reinícialo para recargar el servidor.

  3. Ningún diálogo de permiso que esperar

    El puente MCP es de primera parte y declara él mismo el ámbito todo:write, así que nada aparece en la app. Un cartucho que instales tiene que pedirte ese ámbito, como cualquier otro permiso.

Qué decir​

La herramienta se niega a adivinar, así que una buena petición nombra tres cosas:

  • La lista. Di en En curso, en mi lista Blog, o en una lista nueva llamada X. Los nombres coinciden con las etiquetas que ves en el widget, las mayúsculas no importan, y las tres listas originales responden también a su nombre traducido. Si nombras una lista que no existe sin pedir que se cree, el agente recibe un rechazo con los nombres que sí existen, así que su siguiente llamada elige una en vez de adivinar. Si no dices nada sobre la lista, las tareas van a la primera lista original, En curso.
  • Los pasos. Di agrupadas por paso, o nómbralos tú. Cada paso se convierte en una cabecera dentro de la lista, dibujada donde cambia el grupo. Un paso es un título sobre las tareas, no una lista aparte.
  • El orden. El orden que envía el agente es el orden que obtienes. Pide el orden de ejecución si la conversación no lo zanjó.

Un color para una lista nueva es opcional; si no, la app toma el siguiente tono.

Dicho así, esto es lo que envía el agente:

{
"tasks": [
{ "text": "Redactar las tres maquetas", "group": "Step 1 · Mockup" },
{ "text": "Elegir una juntos", "group": "Step 1 · Mockup" },
{ "text": "Cortar los tokens CSS", "group": "Step 2 · Build" }
],
"list": "Sprint 12",
"create_list": true
}

Las tareas que comparten un group se dibujan bajo una sola cabecera, en el orden que ves aquí.

El argumento se escribe create_list, en snake case, y vale false por defecto: sin él, un nombre de lista desconocido se rechaza en vez de crearse.

Lo que el agente lee de vuelta​

Cada respuesta es una frase sobre la que el agente puede actuar, y cada fallo dice que nada se escribió. Esas frases están en inglés, el idioma de la herramienta:

SituaciónLa frase
ArchivadoFiled 9 tasks into "Sprint 12" (list created). They appear in the To-do widget in the order given, under their steps.
Lista desconocidaNo list by that name. Lists that exist: "En curso", "Personal", "Otros", "Blog". Pick one of them, or call again with create_list: true to make a new one — never assume a default.
Nombre de lista vacíoThe list name was empty. Name an existing list or pass create_list: true with a name.
Solo tareas vacíasNothing to file: every task was blank after trimming.
Sin app, instalación 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.
Sin respuesta en 15 sThe app did not answer in time. Nothing was written. Is the canvas open? Try again once the window is up.
Escritura rechazadaThe app refused the write — the backlog file was not readable yet, or the disk said no. Nothing was written; try again in a moment.

Leer, cambiar, quitar (1.4.5)​

Hasta la 1.4.4 la puerta solo sabía añadir, así que cada corrección volvía a ti. Desde la 1.4.5, @mnemosyne_os/mcp 1.9.0 le da al agente el resto:

HerramientaQué hace
mnemosyne_todo_listRelee el backlog: las listas, y cada tarea con el id necesario para cambiarla.
mnemosyne_todo_updateedit, complete, move, remove una tarea. remove archiva (recuperable); permanent: true borra para siempre y hay que pedirlo.
mnemosyne_todo_categoriesCrear, renombrar, recolorear o quitar una lista. Una lista que aún tiene tareas se rechaza, con su cuenta.
mnemosyne_agenda_addPone una cita o una fecha límite en el widget Agenda, con recordatorio y recurrencia opcionales.
mnemosyne_agenda_listRelee el calendario, con los ids.
mnemosyne_agenda_updateMueve, renombra, cambia la hora o el recordatorio de una cita.
mnemosyne_agenda_removeQuita citas. El calendario no tiene archivo, así que cada una se nombra por título y hora de inicio en la respuesta.

Cada cambio nombra un id que devolvió la lectura, nunca un título. «Borra la tarea de la factura» es como se va la tarea equivocada, en una frase que se lee perfectamente en ambos sentidos; las herramientas lo dicen en su propia descripción, así que el modelo está avisado antes de adivinar. Un lote se aplica en orden como un solo guardado, y cada operación informa de su propio resultado: un id caducado no hunde a los demás.

La petición, al final de una revisión:

Relee mi To-do, marca las dos tareas que terminamos y mueve la de la factura a Semana que viene.

El agente llama a mnemosyne_todo_list, luego a mnemosyne_todo_update con los ids leídos, y te lee una línea por operación.

Límites​

  • Una lista por llamada, hasta 200 tareas, 300 caracteres por tarea, 80 por nombre de paso. El texto más largo se corta, las líneas vacías se descartan.
  • Sin detección de duplicados. Pedirlo dos veces archiva dos veces.
  • El plan entero es una sola escritura: o aterriza cada tarea o ninguna. No hay un plan a medio importar que desenredar.

La misma puerta desde el chat​

La ventana de chat tiene la misma función sin agente: el botón de la caja de herramientas Tareas desde esta conversación (Convierte lo que esta conversación decidió hacer en un plan de tareas ordenado. Lo revisas, eliges la lista y solo entonces se crean las tareas.). El modelo redacta un plan a partir de la conversación, con el recuerdo de memoria apagado para que no se cuele nada de lo que nunca hablasteis, y un diálogo titulado Nuevas tareas desde esta conversación lo muestra primero: Nada se crea hasta pulsar Crear. Edita, quita, elige una lista. Si la conversación no decidió nada, lo dice: No se encontró nada que hacer en esta conversación.

Para quien construye un cartucho​

La misma puerta es una llamada del SDK, sdk.todo.add, en el servidor SDK local (puerto 7799). Recibe tasks (cadenas, o { text, group }), una list opcional, createList (false por defecto) y color, y responde { ok, added, created, listLabel } o { ok: false, error, lists } con los códigos de la tabla de arriba. Exige el ámbito todo:write en tu manifiesto; tener permiso de escritura en las bóvedas no le da a una app el backlog.

Desde la 1.4.5 la puerta tiene cuatro llamadas más: sdk.todo.read y sdk.todo.apply (ámbitos todo:read, todo:write), sdk.agenda.read y sdk.agenda.apply (agenda:read, agenda:write). Leer el backlog de alguien no es el mismo acto que escribir en él, así que los ámbitos de lectura van aparte: una app que quiere ambos pide ambos. sdk.agenda.add archiva una cita.

Tu backlog sigue siendo tuyo​

Nunca hay más de un escritor. Con la ventana abierta, la petición se entrega al almacén del widget, único escritor de ese archivo mientras está en pie, y se aplican las mismas guardas que cuando tecleas una tarea tú mismo: nada se escribe antes de que el archivo se haya leído, y nada se escribe si la ventana no respondió. Con la ventana cerrada no hay almacén ni nada que guarde encima, así que la app aplica las mismas funciones puras directamente sobre el archivo, mediante un archivo temporal y un renombrado: un proceso matado a medias deja tu backlog anterior, nunca la mitad del nuevo. Un JSON legible que no es un archivo To-do se deja intacto. Lo que el agente archiva es exactamente lo que ves.