Guía de inicio
Simmetric Chat es una plataforma de chat IA local-first y capaz de funcionar sin conexión (air-gap): funciona sin conexión a servicios cloud externos, con LLM local (Ollama), embeddings locales (Xenova) y base vectorial local (LanceDB). Sin embargo, pued…
Simmetric Chat es una plataforma de chat IA local-first y capaz de funcionar sin conexión (air-gap): funciona sin conexión a servicios cloud externos, con LLM local (Ollama), embeddings locales (Xenova) y base vectorial local (LanceDB). Sin embargo, puede usar proveedores cloud (OpenAI, Anthropic, OpenRouter) y una base vectorial remota (Qdrant) cuando estén configurados.
Requisitos previos
- Node.js ≥ 24 y pnpm 11.24.0 (el gestor del monorepo; `corepack enable && corepack prepare [email protected] --activate`)
- PostgreSQL 16 (base de datos principal)
- Ollama (opcional pero recomendado para el LLM local) - https://ollama.com
- Docker + Docker Compose (para el despliegue contenerizado, ver 09 - Deployment)
Verificar:
node -v && pnpm -v && psql --versionInstalación (desarrollo local)
git clone <repo> simmetric-chat
cd simmetric-chat
pnpm installEl monorepo usa pnpm workspaces + Turborepo. Los paquetes viven en packages/: shared, server, frontend, collector, widget, más la app de escritorio src-tauri/.
Variables de entorno
Todos los paquetes leen el `.env` en la raíz del repo (el único archivo de configuración runtime; el antiguo nivel de .env por paquete se eliminó: precedencia process.env > .env raíz > valores por defecto del código). Crea el archivo mínimo:
cp .env.example .envSecrets obligatorios (JWT_SECRET, COLLECTOR_SECRET) y clave del widget:
JWT_SECRET=$(openssl rand -hex 32)
COLLECTOR_SECRET=$(openssl rand -hex 32)
WIDGET_API_KEY=$(openssl rand -hex 32)
DATABASE_URL=postgresql://simmetricchat:simmetricchat@localhost:5432/simmetricchat
LLM_PROVIDER=ollama
LLM_MODEL=gemma4:latest
OLLAMA_BASE_URL=http://localhost:11434WIDGET_API_KEY es requerida por el servicio widget (su propio esquema Zod saca el proceso sin ella); el servidor la registra como clave API de la cuenta widget-service al arrancar (idempotente). Opcionales en desarrollo: API_KEY_HMAC_SECRET (las claves API sk- quedan inutilizables hasta que se defina) y ENCRYPTION_KEY (fallback scryptSync(JWT_SECRET); obligatoria en producción). Un LICENSE_KEY ausente significa build Community.
Tabla completa de variables de entorno: 03 - Configuration.
Base de datos
Crea la base de datos PostgreSQL (p. ej. docker compose -f docker/docker-compose.infra.yml up -d postgres), luego genera el cliente Prisma, aplica las migraciones y el seed:
pnpm db:generate # genera el cliente Prisma (+ fix de symlink Prisma 7/pnpm)
pnpm --filter server db:migrate # aplica las migraciones (interactivo)
pnpm --filter server db:seed # roles por defecto (Admin, Superuser, User), permisos, config, templatesAlternativa al seed manual: en una base vacía, el frontend muestra el asistente de configuración en 4 pasos (admin, proveedor LLM, base vectorial) - o el servidor auto-siembra el admin de bootstrap (SEED_BOOTSTRAP_ADMIN=true por defecto, configurable via SEED_ADMIN_USERNAME / SEED_ADMIN_PASSWORD / SEED_ADMIN_EMAIL, valores por defecto admin / admin123 / [email protected] con mustChangePassword=true). El auto-registro está cerrado por defecto (ALLOW_REGISTRATION=false): un admin crea los usuarios desde Settings o via POST /api/auth/admin-register.
Iniciar el desarrollo
Un único comando arranca todos los servicios mediante Turborepo:
pnpm devPuertos por defecto:
| Service | Puerto | Descripción |
|---|---|---|
| frontend | 5173 | SPA Vite (React 19), proxy /api → server |
| server | 3000 | API Express + Swagger en /api-docs |
| collector | 3210 | Microservicio de ingestión de documentos |
| widget | 3211 | Servicio de widget embebible (Preact) |
Abre http://localhost:5173, inicia sesión con admin / admin123, cambia la contraseña.
Si Ollama no está en ejecución, los chats fallan con un error de conexión. Descarga un
modelo con ollama pull gemma4:latest && ollama serve, o configura un proveedor cloud enSettings → Providers.
Recorrido rápido de la UI
- Sidebar - grupos filtrados por rol: Overview (dashboard), Chat (chat, projects, workspaces), Knowledge (documents, base de conocimiento, uploads), Platform (widgets, marketplace, analytics - admin), System (event log, SSO - admin/enterprise). Las entradas siguen las 13 secciones de menú RBAC.
- Chat - streaming token por token, selección de modelo por chat (paleta
Cmd+K), comparación lado a lado (Cmd+Shift+M), citas RAG, comando slash/model. - Documents - carga drag & drop (PDF, DOCX, XLSX, PPTX, TXT, MD, CSV, imágenes con OCR), estado
pending → processing → completed → failed. - Settings - 5 pestañas principales (Perfil, Proveedores LLM, Apariencia, Seguridad, Avanzado) que anidan las subsecciones: Providers, LLM & Embedding, Vector DB, API Keys, Roles, Users, MCP Connections, Maintenance, Backups, DLP, Widget (página dedicada), OCR, etc.
- Maintenance - reindexación RAG con un clic tras un cambio de modelo de embedding.
Primeros pasos recomendados
- Configura un proveedor - Settings → Providers: añade Ollama (local) u OpenAI/Anthropic.
- Crea un workspace y un proyecto - los documentos y los chats están limitados al workspace.
- Carga un documento - Documents → upload; espera al estado
completed. - Chatea - abre un chat en el workspace y haz preguntas sobre el documento (RAG híbrido).
- (Admin) Explora el marketplace - instala un servidor MCP para extender el agente con herramientas.
Siguientes pasos
- Entender cómo funciona por debajo: 02 - Architecture
- Todas las env vars y feature flags: 03 - Configuration
- Integrar el chat en tu sitio: 06 - Widget Integration