Descubre cómo funciona ZeroChat como aplicación web autónoma, independiente de servidor y 100% portable.
ZeroChat está diseñado bajo una premisa fundamental: máxima simplicidad, velocidad y control sin dependencias pesadas.
La aplicación web se sirve de forma directa y estática por HTTPS desde GitHub Pages como zerochat.html, cargando sus módulos css/ y js/ sin proceso de empaquetado. El Service Worker permite reutilizar recursos disponibles sin sustituir la conexión cuando sea necesaria.
Toda la interacción con el sistema local se canaliza a través del ejecutable zerochat instalado desde PyPI o del script zerochat.py. Ambos abren la misma interfaz de GitHub Pages y autentican las sesiones mediante tokens diarios de seguridad.
ZeroChat está concebido para ofrecer dos experiencias complementarias según el contexto de uso: una aplicación web universal y autónoma (ideal para movilidad y uso diario sin instalación) y una estación de trabajo local (para desarrollo y control directo del sistema operativo).
zerochat.html)Disponible directamente en la web (GitHub Pages) o abriendo el archivo localmente. Es una aplicación completa y autosuficiente que no requiere Python, terminal, servidores auxiliares ni instalación.
null, CSP restrictivo sin red y Web Worker con terminación forzada), generación de gráficas interactivas SVG, búsqueda en la web y lectura de páginas públicas.
zerochat.py)Diseñado para puestos de escritorio (Linux, macOS, Windows) donde el agente de IA necesita actuar como asistente de desarrollo sobre el sistema operativo. También se ha probado en Android mediante Termux:
read_file, edit_file, list_directory).
execute_command).
~/zerochat/ contiene el token, configuración y servicios. Sus dependencias Python se aíslan en ~/zerochat/.venv/, sin modificar el Python global.
| Capacidad / Característica | zerochat.html (Web / PWA) |
zerochat.py (Backend local) |
|---|---|---|
| Conexión con proveedores de IA comerciales (OpenAI, Claude, Gemini, etc.) | ✅ Sí | ✅ Sí |
| Inferencia 100% local en navegador con WebLLM y WebGPU | ✅ Sí | ✅ Sí |
| Base de conocimiento RAG documental (Orama en navegador) | ✅ Sí | ✅ Sí |
| Modo Agente con sandbox JS, búsqueda web y gráficas SVG | ✅ Sí | ✅ Sí |
| Persistencia privada en IndexedDB y exportación/importación | ✅ Sí | ✅ Sí |
| Uso directo en móviles (Android / iOS) sin terminal ni Python | ✅ Nativo (PWA) | ⚠️ Requiere Python (Termux o escritorio) |
| Lectura, edición y navegación de archivos en el disco local | ❌ No disponible | ✅ Sí (herramientas locales) |
| Ejecución de comandos de terminal y shell en el host | ❌ No disponible | ✅ Sí (bash/shell) |
| Servidores MCP externos (Playwright, memoria, LSP) | ❌ No disponible | ✅ Sí (gestor MCP integrado) |
ZeroChat se sirve de manera estática y universal a través de la web:
https://albalday.github.io/zerochat/zerochat.html). Toda la ejecución de interfaz, renderizado y llamadas a APIs de inferencia ocurre en el navegador con acceso a APIs modernas de persistencia como navigator.storage.persist() y almacenamiento seguro en IndexedDB.
zerochat tras instalarlo desde PyPI, o python3 zerochat.py tras descargar el script, el servidor local arranca en 127.0.0.1:6388 y abre GitHub Pages. La aplicación consume el token de sesión una sola vez, lo elimina de la barra de direcciones y lo conserva en una cookie del mismo origen web.
python3 zerochat.py directamente dentro del repositorio clonado, el script detecta automáticamente el entorno de desarrollo y sirve la interfaz local en http://127.0.0.1:6388/zerochat.html sin necesidad de servidores auxiliares ni parámetros.
python3 zerochat.py: Arranca el backend y abre automáticamente la interfaz local de desarrollo en el navegador.python3 zerochat.py --test: Ejecuta la autocomprobación interna rápida de herramientas del sistema (lectura, listado y comandos).npm test: Ejecuta la suite completa automatizada (unitarias, integración, arquitectura, infraestructura y navegador con Playwright).npm run test:browser: Ejecuta exclusivamente las pruebas de interfaz visual y navegador.La instalación con pip install zerochat distribuye únicamente el ejecutable Python. La descarga directa distribuye ese mismo ejecutable como zerochat.py. Ninguna incluye HTML, JavaScript o CSS: ambas abren la interfaz publicada en GitHub Pages, por lo que el almacenamiento web y la cookie de sesión comparten un único origen.
En el directorio personal del usuario, los dos modos crean la misma estructura:
~/zerochat/
├── .venv/ Entorno aislado para dependencias MCP Python
├── config/ Token y preferencias de servicios
└── services/ Servidores MCP y sus dependenciasEl ejecutable de PyPI permanece gestionado por pip y el archivo descargado permanece donde lo guardaste. Borrar ~/zerochat/ elimina el estado local y los MCP, sin tocar ninguno de los dos ejecutables.
Las versiones usan mayor.menor.parche. El parche actualiza solo la interfaz de GitHub Pages; 7.11.0 es compatible con 7.11.x. Un salto de 7.11 a 7.12 actualiza el backend: ZeroChat avisa y muestra el comando correspondiente, python -m pip install --upgrade zerochat para PyPI o la descarga de zerochat.py para curl.
Auditoría de ZeroChat 7.11.0 (25 de septiembre de 2026), con evidencia local y límites de verificación:
La arquitectura de datos de ZeroChat sigue el principio de soberanía del usuario. La aplicación nunca envía historiales de conversación, credenciales ni documentos a ningún servidor centralizado de telemetría.
Para evitar fugas de memoria o desincronizaciones entre componentes, ZeroChat utiliza un almacén de estado único y centralizado denominado ChatState.
Todo cambio en el ciclo de vida de la aplicación (cambio de sesión, inserción de un mensaje por streaming, progreso de inferencia o invocación de herramientas) se realiza mediante mutadores atómicos de dominio (como appendMessage, replaceMessages o saveSessionMetadata). De este modo, la interfaz se actualiza de manera reactiva y consistente en todo momento.
Las respuestas nuevas y restauradas comparten componentes visuales de bloques y copia. El streaming conserva su cursor durante la generación. Los errores de conexión utilizan una vista común que escapa el mensaje recibido y la URL antes de incorporarlos al HTML.
La configuración activa se obtiene de ChatConfig. Las interfaces de perfiles y catálogo consultan al proveedor WebLLM para conocer los modelos completados, sin interpretar por separado sus metadatos almacenados.
El estado, el motor y las vistas reutilizan las reglas de message-turns.js para identificar turnos y reconocer mensajes iniciales de fecha. La eliminación de turnos comparte un algoritmo de saneamiento; ChatState conserva el bloqueo durante la generación y la actualización atómica del historial.