JARVIS/PRIVACIDAD.md
sito 8e4bc8ad94 JARVIS: asistente de voz local para Linux
Nucleo propio: oye con whisper.cpp, piensa con un modelo de Ollama, habla
con Piper, y hace RAG sobre los apuntes del usuario. 100% local, sin
cuentas ni claves.

Escrito bajo una restriccion dura, 4 GB de VRAM: el cerebro y whisper
comparten tarjeta y solo caben porque estan dimensionados para ello. El
RAG usa embeddings estaticos con busqueda hibrida; la voz clonada se sirve
de una cache de frases.

Incluye instalador (install.sh), requisitos, y documentacion del stack,
del manejo de root y de las acciones. Los apuntes indexados y el diario NO
se incluyen: son privados y el .gitignore los bloquea.
2026-08-16 15:34:37 +02:00

2 KiB

Privacidad

La premisa del proyecto es que nada sale de la máquina. No es un eslogan: se verifica, y este documento dice qué es local, qué podría salir y qué se ha dejado deliberadamente fuera de este repositorio.

Qué es local

Pieza Dónde corre
Cerebro (modelo) Ollama en 127.0.0.1:11434
Escucha (STT) whisper.cpp, en la propia máquina
Voz (TTS) Piper / XTTS, en la propia máquina
Memoria de conversación ficheros locales
RAG índice local sobre apuntes locales

Ninguna de estas piezas necesita una cuenta ni una clave. El asistente funciona con la máquina desconectada de internet.

Qué puede salir, y no es un fallo

  • La búsqueda web, solo si el modelo decide usarla para una pregunta que lo pide. Es una herramienta que se invoca, no una fuga de fondo, y se avisa.

Fuera de eso, no hay tráfico saliente durante el uso normal.

Qué NO está en este repositorio, a propósito

Este código es público; los datos del usuario no. El .gitignore bloquea, y nunca se deben añadir:

  • nucleo/datos/saber.jsonl y sus derivados (cosecha.jsonl, sintesis.jsonl): contienen el TEXTO de los apuntes indexados. Publicarlos publicaría los apuntes.
  • nucleo/datos/diario.jsonl: es lo que el usuario le ha dicho al asistente por voz.
  • voz/ref/ y las cachés de audio: la voz de referencia y las frases sintetizadas son personales.
  • Entornos, modelos y datasets: se reconstruyen; no son código.

Lo único de nucleo/datos/ que sí va es acciones.json (el catálogo de lo que el asistente sabe hacer) y su generador: definen capacidades, no datos.

Cómo comprobarlo

  • Que nada nuestro escuche fuera de loopback: ss -ltnp | grep -vE '127\.0\.0\.1|\[::1\]'
  • Que el cerebro apunta a local: revisar el endpoint en nucleo/cerebro/.
  • Que no hay claves en el repo: no hay ningún fichero de credenciales; el manejador de sudo (nucleo/manos/sudo_root.py) guarda la contraseña solo en memoria durante la sesión y la borra al terminar.