Gestión de proyectos

Cómo el agente planifica, sigue y documenta un proyecto de programación largo.

1. La idea

En un proyecto largo, cada conversación empieza sin memoria. ZeroChat guarda esa memoria en ficheros del propio proyecto y se la entrega al agente al principio de cada chat: las normas, dónde está cada cosa y en qué punto está el trabajo. El agente la mantiene al día mientras trabaja.

Las normas, incluido cómo mantener la memoria, viven en AGENTS.md, el fichero que leen también Codex, Cursor, Copilot y otros agentes. Así cualquier agente que trabaje en el proyecto sigue el mismo plan y lo mantiene igual.

Funciona con el servidor local: el proyecto es su directorio de trabajo, al principio el directorio desde el que se lanza zerochat.py. Puedes cambiarlo sin reiniciar desde el panel de Razonamiento, con el icono de editar junto a la ruta. El agente no puede cambiarlo: un cd solo vale dentro de su propio comando, y el siguiente vuelve a empezar en el proyecto.

2. El ciclo de trabajo

  1. Inicializar, una vez. El agente revisa AGENTS.md, los ficheros de otros agentes (CLAUDE.md, .cursorrules…) y la documentación, y te dice qué cubre ya la planificación y el registro de decisiones. Después propone los cambios y espera tu aprobación: crear AGENTS.md si no existe o añadirle la sección Project memory, y que los ficheros de otros agentes remitan a él. Si el proyecto no tiene plan, te pregunta su propósito, que anota en README.md, y su primer hito. Después crea, a partir de plantillas, el plan, el registro y el estado, y termina con el script .zerochat/task.py.
  2. Trabajar. Cada chat arranca con las normas y el estado actual. El agente consulta el plan y el registro solo cuando los necesita.
  3. Registrar. Antes de empezar un trabajo que no está en el plan, el agente lo añade como tarea. Justo al terminar cada tarea, antes de empezar la siguiente, la marca en el plan, anota sus decisiones no evidentes en el registro y pone la siguiente tarea en el estado. Lo hace todo con un solo comando de .zerochat/task.py; si no hay Python, edita los ficheros a mano. Así, si la sesión se corta, la memoria refleja lo hecho.
  4. Cerrar un hito y simplificar memoria. El agente te pregunta antes de cerrar un hito o de abrir uno nuevo, que siempre lleva objetivo y criterio de cierre. Al cerrarlo, lo deja en una línea en el plan, mueve su sección a .zerochat/archive/M<n>.md y actualiza el estado. Nada se resume ni se borra: se mueve. El registro de decisiones se mantiene activo para que las decisiones sigan vigentes. Con el paso de los hitos, si la memoria crece demasiado, el botón Simplificar memoria encarga al agente archivar decisiones de hitos antiguos en .zerochat/archive/ y condensar los hitos cerrados lejanos del plan en una sola línea de referencia.
  5. Retomar. El siguiente chat, aunque sea días después o con otro modelo, empieza donde se quedó el anterior.

3. Los ficheros

FicheroPara qué sirve
AGENTS.mdNormas del proyecto para todos los agentes; si los detalles están en otros documentos, los enlaza. Su sección Project memory explica cómo mantener la memoria. Va en cada chat.
.zerochat/state.mdHito en curso, siguiente tarea y fecha de la última actualización, en menos de 30 líneas. Va en cada chat.
.zerochat/plan.mdHitos y sus tareas, si el proyecto no tiene el plan en otro sitio. Se lee cuando hace falta.
.zerochat/log.mdRegistro de decisiones, una línea por decisión. Solo se añade y se consulta buscando. Al simplificar la memoria, las decisiones de hitos antiguos pueden archivarse en .zerochat/archive/.
.zerochat/archive/La sección del plan de cada hito cerrado y, si se simplifica la memoria, los registros de decisiones antiguas archivados. Se consulta buscando.
.zerochat/task.pyScript de Python, sin dependencias, que actualiza plan, registro y estado en un solo paso. Creado por la inicialización; su existencia indica que el proyecto está inicializado.

CLAUDE.md y los ficheros de otros agentes solo remiten a AGENTS.md; en CLAUDE.md se usa la línea @AGENTS.md, que lo importa. Los planes y registros nunca se guardan en AGENTS.md, que los agentes cargan en cada sesión.

ZeroChat no decide si .zerochat/ se versiona. Lo recomendable es versionarlo y no ignorarlo en git, y hacer commit de sus cambios junto con el trabajo que registran: así cualquier agente o copia del repositorio parte de la misma memoria.

Tareas y decisiones

Cada tarea ocupa una línea con un identificador numerado dentro de su hito. Para marcarla como hecha basta editar esa línea:

- [ ] M2-T3 Exportar la conversación a PDF
- [x] M2-T3 Exportar la conversación a PDF (2026-10-09)

Los identificadores no se renumeran ni se reutilizan, y el plan y el registro no se reescriben enteros. Las decisiones se añaden al registro con su propio identificador y la tarea que las motivó: - 2026-10-09 M2-D1 Usar la impresión del navegador (M2-T3). Solo se registran las decisiones de diseño o arquitectura; los cambios rutinarios que el propio código explica no necesitan entrada.

El script task.py

Hace en un solo paso lo que, a mano, son tres ediciones. Por ejemplo, para cerrar la tarea anterior con su decisión:

python3 .zerochat/task.py done M2-T3 -d "Usar la impresión del navegador"

Marca la tarea con la fecha de hoy, añade la decisión al registro con el siguiente identificador (M2-D1, M2-D2…) y pone en el estado la siguiente tarea pendiente del hito.

OrdenQué hace
done <tarea>Marca la tarea como hecha. -d registra una decisión; -n fija la siguiente tarea en lugar de tomar la siguiente pendiente; --drop "motivo" la marca como descartada; --date cambia la fecha.
add-task M2 "descripción"Añade una tarea al hito con el siguiente número libre.
next <tarea>Cambia la siguiente tarea del estado.
statusMuestra el estado actual.

El agente lo ejecuta como cualquier otro comando, así que sigue la política de autorización vigente. Abrir o cerrar un hito no tiene orden propia: el agente te pregunta y edita el plan.

4. En la interfaz

5. Detalles y límites