Asistente conversacional que corre completamente en tu máquina.
Conectado a LM Studio, Ollama o OpenRouter, controlable por terminal y por Telegram, con memoria persistente, tareas programadas y herramientas del sistema.
Sin suscripciones. Sin APIs de pago. Sin datos en la nube.
| Capacidad | Descripción |
|---|---|
| 💬 Conversación | Chat fluido con cualquier modelo local cargado en LM Studio u Ollama, o en la nube con OpenRouter |
| 🧠 Memoria persistente | Recuerda información entre sesiones via MEMORY.md |
| 🎭 Personalidades (SOULs) | Cambia de rol en cualquier momento: dev, ejecutivo, hacking ético, o el que crees |
| 📅 Tareas programadas | Cron integrado: notificación, LLM o shell. Horario fijo o aleatorio dentro de un rango |
| 🛠️ Herramientas del sistema | Ejecuta comandos, lee ficheros, abre apps, inspecciona el sistema |
| 🎙️ Audio y voz (entrada) | Transcripción automática de notas de voz y audios con Whisper local |
| 🔊 Voz (salida) | Responde con voz clonada (Coqui XTTS-v2) o con la voz del sistema (say/espeak) |
| 🖼️ Generación de imágenes | Si el modelo genera imágenes, las guarda en downloads/ y las envía por Telegram |
| 📄 Documentos | Procesa PDFs, imágenes y ficheros de texto enviados por Telegram |
| 🔌 Multi-backend | Cambia entre LM Studio, Ollama y OpenRouter con /motorllm sin reiniciar |
| 🔒 Seguridad | Filtro de comandos peligrosos en dos niveles |
| 📱 Telegram | Bot completo con los mismos comandos que la terminal |
- Python 3.9+ (3.10 si usas voz clonada con Coqui)
- LM Studio, Ollama o cuenta en OpenRouter
- Token de bot de Telegram (opcional)
git clone https://github.com/arcopante/asistente-local.git
cd asistente-localEdita start.sh con tus datos:
nano start.shVariables esenciales:
export TELEGRAM_TOKEN="TU_TOKEN_AQUI"
export TELEGRAM_ALLOWED_USERS="123456789"
export AGENT_MODE="both"
export BACKEND="lmstudio" # lmstudio | ollama | openrouterchmod +x setup.sh
./setup.sh # instalación base
./setup.sh --voz # base + clonación de voz (requiere Python 3.10)LM Studio:
- Abre LM Studio → pestaña Local Server → Start Server
- Carga el modelo que quieras usar
Ollama:
ollama serve
ollama pull llama3.2OpenRouter:
export BACKEND="openrouter"
export OPENROUTER_API_KEY="sk-or-..."
export OPENROUTER_MODEL="mistralai/mistral-7b-instruct"Ver modelos disponibles en openrouter.ai/models.
chmod +x start.sh
./start.shasistente-local/
├── start.sh # ⚙️ Configuración y punto de entrada
├── setup.sh # 📦 Instalador de dependencias
├── agent.py # 🧠 Lógica principal
├── requirements.txt # 📄 Dependencias Python
│
├── SOUL.md # 🎭 Personalidad por defecto
├── MEMORY.md # 🧠 Memoria persistente (no subir a git)
├── souls/ # 🎭 Personalidades adicionales
│ ├── trabajo.md
│ ├── dev.md
│ └── hacking.md
│
├── history.db # 🗃️ Historial SQLite (no subir a git)
├── cron_jobs.json # 📅 Tareas programadas (no subir a git)
├── downloads/ # 🖼️ Ficheros generados por el LLM
├── audios/ # 🔊 Historial de audios TTS (no subir a git)
│
└── core/
├── database.py # 🗃️ Historial en SQLite
├── llm_client.py # 🔌 Cliente LLM (LM Studio / Ollama / OpenRouter)
├── commands.py # ⌨️ Comandos slash (terminal)
├── cron_manager.py # ⏰ Gestor de tareas programadas
├── telegram_bot.py # 📱 Bot de Telegram
├── tools.py # 🛠️ Herramientas del sistema
├── transcriber.py # 🎙️ Transcripción de audio (Whisper)
├── tts_engine.py # 🔊 Síntesis de voz (clonada o sistema)
└── downloads.py # 🖼️ Gestión de ficheros generados por el LLM
Los mismos comandos funcionan en terminal y en Telegram.
| Comando | Descripción |
|---|---|
/list |
Modelos disponibles en el backend activo |
/load <modelo> |
Carga un modelo |
/unload |
Descarga el modelo activo |
/motorllm [backend] |
Cambia el motor LLM en caliente (lmstudio, ollama, openrouter) |
/status |
Estado actual: backend, modelo, sesión, soul activo |
/reset |
Nueva sesión (mantiene memoria y soul) |
| Comando | Descripción |
|---|---|
/memory <texto> |
Guarda información en la memoria persistente |
/compact |
El asistente resume la conversación y la guarda en memoria |
/search <texto> |
Busca en todo el historial de conversaciones |
| Comando | Descripción |
|---|---|
/sessions |
Lista las últimas sesiones |
/sessionsdel <id> |
Borra una sesión por ID |
/sessionsclear |
Borra todas las sesiones excepto la actual y renumera desde 1 |
| Comando | Descripción |
|---|---|
/souls |
Lista las personalidades disponibles |
/soul <nombre> |
Cambia de personalidad |
/soul |
Vuelve a la personalidad por defecto |
Crea tus propias personalidades añadiendo ficheros .md en souls/. SOULs incluidos: trabajo.md, dev.md, hacking.md.
| Comando | Descripción |
|---|---|
/run <cmd> |
Ejecuta un comando de shell |
/open <app> |
Abre una aplicación o fichero |
/read <ruta> |
Lee y muestra un fichero |
/ls [ruta] |
Lista un directorio |
/sysinfo |
Información del sistema |
/download <ruta> |
(Telegram) Envía un fichero al chat |
El cron es interno al agente. Las tareas sobreviven a reinicios mientras exista cron_jobs.json.
Tres tipos de tarea:
/cron 09:00 Buenos días # 🔔 Texto fijo a hora exacta
/cron 08:00-10:00 Buenos días # 🔔 Texto fijo a hora aleatoria en el rango
/cron */1h llm: Dame un consejo aleatorio # 🤖 El LLM genera el mensaje
/cron 23:00 shell: ~/scripts/backup.sh # ⚙️ Ejecuta un scriptFormatos de horario: HH:MM · HH:MM-HH:MM (aleatorio) · */Nm · */Nh
| Comando | Descripción |
|---|---|
/cronlist |
Lista las tareas activas |
/crondel <id> |
Elimina una tarea |
/cronclear |
Borra todas las tareas y el fichero cron_jobs.json |
| Comando | Descripción |
|---|---|
/voz clonada |
Activa respuestas con voz clonada (Coqui XTTS-v2) |
/voz sistema |
Activa respuestas con voz del sistema (say en macOS / espeak en Linux) |
/voz off |
Desactiva la voz |
/voz |
Muestra el modo activo, voz y velocidad configuradas |
| Comando | Descripción |
|---|---|
/help / /ayuda |
Ayuda completa |
/exit |
Cierra el asistente |
El asistente puede responder con voz de dos formas distintas:
Clona tu propia voz a partir de un fichero WAV de muestra. 100% local, sin enviar datos a internet.
- Graba 10-30 segundos de tu voz en WAV y ponlo en el directorio raíz del agente
- Configura en
start.sh:
export TTS_VOICE_SAMPLE="voz_origen.wav"
export TTS_LANGUAGE="es"- Instala las dependencias (requiere Python 3.10):
./setup.sh --voz- Activa con
/voz clonada
Usa el motor TTS nativo del sistema operativo. No requiere instalación adicional.
- macOS: usa
saycon las voces instaladas en el sistema - Linux: usa
espeakoespeak-ng
Configura en start.sh:
export TTS_SYSTEM_VOICE="Paulina" # macOS: Paulina, Monica, Jorge...
export TTS_SYSTEM_RATE="175" # palabras por minutoActiva con /voz sistema.
Cada audio generado se guarda en
audios/con nombreaudio_YYYYMMDD_HHMMSS_sN.wav.
En Telegram, el asistente transcribe automáticamente notas de voz y ficheros de audio con faster-whisper, completamente local.
| Modelo | Tamaño | Velocidad | Precisión |
|---|---|---|---|
tiny |
~75 MB | ⚡⚡⚡ | ★★☆☆ |
base |
~145 MB | ⚡⚡ | ★★★☆ |
small |
~466 MB | ⚡ | ★★★★ |
medium |
~1.5 GB | 🐢 | ★★★★★ |
Si el modelo genera imágenes (modelos multimodales), el asistente las detecta automáticamente, las guarda en downloads/ y las envía al chat de Telegram.
Bloqueados siempre: rm, sudo, shutdown, reboot, mkfs, dd, killall, escritura en /etc/, /boot/, /System/...
Requieren confirmación (solo terminal, bloqueados en Telegram): kill, pip install, brew install, apt install, systemctl, crontab...
| Variable | Por defecto | Descripción |
|---|---|---|
BACKEND |
lmstudio |
Motor LLM: lmstudio, ollama o openrouter |
TELEGRAM_TOKEN |
— | Token del bot (de @BotFather) |
TELEGRAM_ALLOWED_USERS |
vacío (todos) | IDs de usuario separados por coma |
TELEGRAM_MAX_FILE_MB |
20 |
Tamaño máximo de fichero |
LMSTUDIO_HOST |
http://localhost:1234 |
URL del servidor LM Studio |
OLLAMA_HOST |
http://localhost:11434 |
URL del servidor Ollama |
OPENROUTER_API_KEY |
— | API key de OpenRouter |
OPENROUTER_MODEL |
— | Modelo de OpenRouter, ej: mistralai/mistral-7b-instruct |
LMSTUDIO_DEFAULT_MODEL |
vacío | Modelo al arrancar |
LMSTUDIO_MAX_TOKENS |
2048 |
Tokens máximos por respuesta |
LMSTUDIO_TEMPERATURE |
0.7 |
Temperatura del modelo |
LMSTUDIO_CONTEXT_MESSAGES |
30 |
Mensajes de historial enviados al LLM |
AGENT_MODE |
terminal |
terminal · telegram · both |
AGENT_LOG_LEVEL |
WARNING |
DEBUG · INFO · WARNING · ERROR |
WHISPER_MODEL |
base |
Modelo Whisper: tiny, base, small, medium |
WHISPER_DEVICE |
cpu |
cpu o cuda |
WHISPER_LANGUAGE |
vacío (auto) | Código de idioma: es, en, fr... |
TTS_ENABLED |
false |
Modo voz: false, clonada o sistema |
TTS_VOICE_SAMPLE |
— | Ruta al WAV de muestra (modo clonada) |
TTS_LANGUAGE |
es |
Idioma de síntesis (modo clonada) |
TTS_DEVICE |
cpu |
cpu o cuda (modo clonada) |
TTS_SYSTEM_VOICE |
— | Voz del sistema, ej: Paulina en macOS |
TTS_SYSTEM_RATE |
175 |
Velocidad en palabras por minuto |
| Paquete | Uso |
|---|---|
httpx |
Comunicación con LM Studio / Ollama / OpenRouter |
rich |
Terminal con colores y tablas |
python-telegram-bot |
Bot de Telegram |
pypdf |
Extracción de texto de PDFs |
faster-whisper |
Transcripción de audio local |
TTS (opcional) |
Clonación de voz con Coqui XTTS-v2 |
torch / torchaudio (opcional) |
Motor de inferencia para TTS |
GPL-3.0 — puedes usar, modificar y distribuir este software, pero cualquier obra derivada debe publicarse bajo la misma licencia. Ver LICENSE para más detalles.