Revisión 2: Funcionalidades

ZeroChat 9.11.0 como frontend único de modelos locales. Actualizada el 24 de octubre de 2026.

1. Objetivo y método

El objetivo del proyecto es que ZeroChat sea el único frontend de modelos locales servidos aparte con APIs compatibles con OpenAI (vLLM, llama.cpp, LM Studio, SGLang) u Ollama. La revisión recorre las capacidades de la versión 9.11.0 (commit 170ee03) en el código, no en la documentación.

Desde la 9.2.3 las novedades más relevantes son la ejecución desatendida (zerochat --prompt), los perfiles de configuración con sus servicios MCP y su navegador, Playwright MCP con motores propios o el navegador del usuario, el visor de diferencias, el estado vivo del servidor local con reconexión automática y la conexión remota con identificación por la cuenta del sistema.

Cada capacidad indica qué la protege: [test] prueba automatizada o [lectura] revisión del código.

2. Capacidades

ÁreaQué ofreceProtecciónLímite
Conexión con el modeloAdaptadores OpenAI compatible, Ollama, OpenRouter, Claude, Gemini, WebLLM y Espejo; descubrimiento de modelos y diagnóstico de capacidades con el inspector.[test] test_providers.js, test_inspector.js, browser_inspector.test.jsLa visión y el razonamiento se deducen de lo que publica el servidor o del adaptador.
Contexto y cachéLectura de la capacidad publicada (n_ctx, max_model_len…) o ajuste manual; compactación del historial y prefijo estable para la caché de contexto.[test] test_context_manager.js, test_token_telemetry.js, test_context_cache_architecture.jsUna capacidad asumida se marca con * y ajusta los umbrales.
RazonamientoBloque plegable, niveles de Ninguno a Máximo, etiquetas <think> y reenvío del razonamiento entre pasos del agente.[test] test_providers.js, test_agent_runtime.js, test_api_utils.jsEl servidor debe separar el razonamiento en su respuesta para reenviarlo.
Herramientas y agente12 herramientas nativas, llamadas nativas o en texto (<tool_call>), agente sin tope de pasos con detección de bucles y subagentes de solo lectura (delegate_task).[test] test_builtin_tools.js, test_text_tool_calls.js, test_agent_core.js, test_delegate_task.jsUn bucle con argumentos siempre distintos requiere pulsar Detener.
DocumentosWord, PowerPoint, Excel (lector XLSX nativo), OpenDocument, los binarios antiguos .doc y .xls, y PDF con extractor propio, como adjuntos y en RAG.[test] test_office_parser.js, test_office_documents.js, test_file_parser.js, browser_documents.test.jsTopes por hoja y por archivo, con aviso de truncado.
Generación y exportaciónDocumentos HTML, SVG y CSV en el chat con visor aislado; exportación de la conversación (también en HTML tal como se ve).[test] test_export.js, browser_conversation.test.jsLos documentos se abren en un Blob con noopener.
WebBúsqueda en DuckDuckGo y lectura de páginas por el servidor local o, sin él, por Jina Reader; descarga de documentos e imágenes web para modelos con visión.[test] test_web_tools.js, py/test_network.pySin servidor local, la lectura depende de un servicio externo.
Servidor localArchivos, run_command y check_command con tarjeta viva y segundo plano, visor gráfico de diferencias con configuración guiada y servicios MCP externos gestionados.[test] py/test_run_command.py, py/test_file_tools.py, py/test_diff_tool.py, py/test_mcp_services.py, test_local_server.jsEn Android (Termux) no hay Playwright.
Estado vivo y reconexiónEl servidor informa del directorio, los comandos en marcha, Playwright y los servicios externos; la página reconecta sola cuando el servidor vuelve, sin recargar.[test] test_mcp.js, test_ui_mcp.js, browser_mcp_panel.test.jsCon --keep-server el estado se relee al volver a la pestaña, no cada 10 s.
Navegación del modelobrowser_action o Playwright MCP, con motores propios (Chromium, Firefox, WebKit) que se instalan y quitan desde Ajustes, o el Chrome, Edge o Chromium del usuario mediante la extensión.[test] py/test_browser.py, py/test_browser_config.py, test_ui_browser.jsLa extensión pide aceptar cada conexión salvo con su token.
Perfiles de configuraciónProveedor, modelo y comportamiento por perfil, con los servicios MCP que arranca y el navegador que exige; claves de API cifradas y exportación de perfiles.[test] test_profiles.js, test_ui_profiles.js, browser_profiles_settings.test.jsLas claves de API se protegen con la contraseña de cifrado si se activa.
Ejecución desatendidazerochat --prompt ejecuta un prompt en la interfaz y devuelve la respuesta en stdout, con perfil, exportación, ventana oculta y códigos de salida.[test] test_backend_run_mode.js, browser_run_mode.test.js, test_run_mode.jsNecesita un navegador de escritorio; sin ventana es de mejor esfuerzo.
Conexión remotaAjustes › Conexión con la URL del servidor, túnel SSH o proxy inverso con su clave, e identificación con la cuenta del sistema cuando falta el token o caduca.[test] test_mcp.js, browser_connection.test.js, py/test_login.py, test_local_server.jsUna sola cuenta del sistema: la que ejecuta zerochat.
Modo proyectoMemoria en .zerochat/ (plan, decisiones y estado) que el modelo mantiene con task.py.[test] test_project_context.js, test_task_helper.jsDepende de que el modelo siga el protocolo.
RAG léxicoÍndice Orama en IndexedDB con ramas, imágenes de documentos y búsqueda filtrada.[test] test_rag_index.js, test_rag_service.js, test_ingestion_engine.jsBúsqueda léxica, sin embeddings.
DepuraciónInterceptor que detiene cada petición al modelo para revisar o editar el JSON antes de enviarlo.[test] test_api_utils.jsNo intercepta el tráfico con el servidor local.
WebLLMInferencia en el navegador con WebGPU en un Web Worker.[test] test_webllm.jsPara modelos compactos.

3. Buenas prácticas con un servidor de modelos local

AspectoRecomendaciónBeneficio en ZeroChat
Capacidad de contextoPublicar el contexto real (meta.n_ctx en llama.cpp, max_model_len en vLLM).Los umbrales de compactación se calculan sobre el límite real y no sobre uno asumido.
RazonamientoActivar el analizador de razonamiento del servidor.El razonamiento va a su bloque y se reenvía entre pasos sin mezclarse con la respuesta.
Llamadas a herramientasActivar la plantilla de herramientas del servidor (por ejemplo, --jinja).Llamadas estructuradas; sin ella, ZeroChat extrae los bloques <tool_call> del texto.
StreamingRespuestas en streaming.Texto token a token y cancelación inmediata.
Acceso remotoTúnel SSH o proxy inverso con HTTPS, nunca --host público.El servidor sigue escuchando solo en el propio equipo y exige identificación.

4. Coherencia con la ayuda

Se ha contrastado la ayuda con el código:

test_help_pages.js comprueba que cada página tiene su traducción enlazada, la serie de versión 10.x, un título y una descripción únicos, y que el sitemap está al día.

5. Límites

  • Monousuario: una sola cuenta del sistema, la que ejecuta zerochat; sin roles.
  • Datos en el navegador: conversaciones, perfiles y RAG viven en IndexedDB y localStorage; conviene exportarlos.
  • Origen compartido en GitHub Pages, riesgo aceptado.
  • RAG léxico, sin similitud vectorial.
  • Navegadores: Chromium y Firefox; WebKit (Safari y los navegadores de iPhone e iPad) no está soportado.
  • Windows: funciona, pero sus rutas propias no se prueban de forma automática.
  • Privacidad de la web: con un LLM local el chat no sale del equipo, pero las herramientas web consultan servicios externos.

6. Dictamen

Frontend maduro para modelos locales y ahora también para un servidor remoto. ZeroChat 9.11.0 cubre el trabajo técnico diario con un modelo local: agente con herramientas del equipo, documentos y PDF, navegación con Playwright, perfiles que preparan cada entorno y ejecución desatendida desde la terminal. La conexión remota unificada, con túnel o proxy inverso, permite usarlo desde el móvil o desde otro equipo sin exponer el servidor local.

Autoría

  • Revisión y redacción: Claude Opus 5.5 en Claude Code, a partir del código en el commit 170ee03 y la suite de pruebas.