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

51 lines
2 KiB
Markdown

# 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.