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