Proyecto y aprendizaje

Proyecto personal de aprendizaje, de libre uso, y lecciones de la serie 10.x.

ZeroChat es un proyecto personal de aprendizaje sobre clientes de IA y ejecución agéntica. El trabajo combina objetivos claros, revisión de decisiones y validación de resultados.

1. Aprender a construir un cliente de chat

ZeroChat es un proyecto personal para experimentar con modelos y comprender las piezas de un cliente de IA: perfiles, streaming, adjuntos, almacenamiento, contexto, recuperación documental y herramientas.

La implementación permite probar estas funciones juntas, pero sus resultados dependen del modelo, del proveedor y del equipo. No pretende sustituir la revisión de respuestas ni las herramientas de desarrollo especializadas.

  • Chat: adaptación de APIs, razonamiento expuesto y visión cuando el modelo los admite.
  • Documentos: extracción de texto y búsqueda léxica local con Orama.
  • Herramientas: ejecución en navegador, backend local, MCP y permisos.
  • Contexto: estimaciones, datos de uso del proveedor y puntos de control.
  • Interfaz: controles compartidos para escritorio y móvil, sujetos a las capacidades del navegador.

2. Aprender a trabajar con agentes de codificación

El desarrollo ha servido para practicar cómo definir tareas, revisar propuestas y comprobar cambios generados con ayuda de agentes.

  • Acotar el objetivo y decidir qué comportamiento debe conservarse.
  • Mantener normas y contratos cerca del código que describen.
  • Revisar y simplificar las propuestas antes de incorporarlas.
  • Comprobar los cambios con las pruebas aplicables y revisión manual cuando sea necesaria.

Pruebas

La suite comprueba casos concretos de lógica, arquitectura, integración, infraestructura y navegador. Pasarla no demuestra compatibilidad universal ni ausencia de errores.

3. La lección amarga: normas sin pruebas

Tras publicar la 9.0.0, el 11 de octubre de 2026, hubo que dedicar 26 commits en día y medio a limpiar el código; 17 de ellos son refactorizaciones incompatibles (refactor!). Solo en js/, css/ y py/ se retiraron unas 16.500 líneas y se escribieron 7.600, y se modificaron 83 archivos de pruebas. Salvo una mejora de edit_file y un arreglo de desplazamiento, no hubo funcionalidad nueva: se quitó lo que nunca debió entrar. Los nueve commits previos a la publicación ya habían empezado esa limpieza.

Lo que se retiró tenía un patrón común:

  • respaldos para módulos que siempre están cargados (window.X || require(...), envoltorios propios de t(), textos alternativos tras una traducción);
  • guardas que comprobaban si existía un elemento que siempre existe, y código de compatibilidad con formatos y claves antiguos;
  • funciones exportadas solo para las pruebas, y pruebas con elementos simulados mediante objetos que obligaban al código a tolerar elementos incompletos;
  • colores literales, valores de respaldo en var() y style.display repartidos por los estilos;
  • except Exception: pass y capturas genéricas en el backend.

Ninguno de esos cambios era absurdo por sí solo: cada sesión con un agente hacía algo localmente razonable para que su tarea funcionara. Pero no había una norma escrita que lo prohibiera ni una prueba que lo detectara, así que nada impedía que se acumulara. Las normas sobre código muerto, duplicado y de compatibilidad, y la primera prueba de higiene (test_code_hygiene.js), llegaron el mismo día en que se publicó la 9.0.0; las de estilos y backend (test_style_hygiene.js, test_backend_hygiene.js), durante la propia limpieza.

Qué se aprende

  • Una norma sin prueba es un deseo. Un agente lee AGENTS.md cuando le conviene; una prueba de arquitectura falla siempre.
  • La norma y su prueba se escriben juntas, con el primer caso, no cuando el problema ya ocupa miles de líneas. Cuanto antes, más barata.
  • Cada limpieza deja su prueba, para que el mismo tipo de problema no pueda volver sin que la suite lo diga.
  • Las pruebas no deben pedir concesiones al código. Simular el DOM con objetos parecía cómodo, pero obligaba a escribir respaldos; con un DOM real desaparecieron.
  • Lo que no se puede comprobar con una prueba se revisa a mano en cada cambio, y se dice explícitamente que no está protegido.

Las revisiones de la 9.1.0 aplican esta lección: cada norma de AGENTS.md se contrasta con la prueba que la protege, y las que no tienen prueba se señalan como pendientes.

4. Estado y uso

ZeroChat sigue siendo un proyecto personal. Se publica con licencia MIT: cualquiera puede usarlo, modificarlo o reutilizar sus partes si le sirven, sin soporte ni garantía.

El objetivo actual de la serie 10.x es usarlo como frontend único de modelos locales, servidos con una API compatible con OpenAI u Ollama; el modelo cambia según la tarea. Las mejoras se orientan a ese uso; esta ayuda describe lo implementado y no anuncia una hoja de ruta.

Esta ayuda documenta el uso actual.