JARVIS/nucleo/datos/acciones.json
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

2179 lines
63 KiB
JSON

{
"version": 1,
"acciones": [
{
"id": "disco_libre",
"grupo": "sistema",
"frases": [
"cuanto espacio queda",
"espacio en disco",
"espacio libre en disco",
"cuanto disco queda",
"cuando espacio queda",
"cuanto espacio quedan"
],
"acuse": "Un momento, lo miro, señor.",
"comando": "df -h / | tail -1",
"host": true,
"respuesta": "Quedan {campo4} libres de {campo2}, al {campo5} de uso, señor.",
"confirmar": false,
"captura": false
},
{
"id": "disco_home",
"grupo": "sistema",
"frases": [
"como esta mi disco",
"cuanto ocupa mi disco",
"espacio de mi disco"
],
"acuse": "Un momento, señor.",
"comando": "df -h ~ | tail -1",
"host": true,
"respuesta": "Su disco esta al {campo5}, con {campo4} libres de {campo2}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "disco_todos",
"grupo": "sistema",
"frases": [
"discos montados",
"particiones",
"unidades montadas"
],
"acuse": "Enseguida, señor.",
"comando": "df -h --output=target,size,pcent -x tmpfs -x devtmpfs | tail -n +2",
"host": true,
"respuesta": "Hay {lineas} unidades montadas. {salida}, señor",
"confirmar": false,
"captura": false
},
{
"id": "memoria",
"grupo": "sistema",
"frases": [
"cuanta memoria",
"memoria libre",
"cuanta ram",
"ram libre"
],
"acuse": "Voy, señor.",
"comando": "free -g | awk '/Mem:/{print $2, $3, $7}'",
"host": true,
"respuesta": "De {campo1} gigas hay {campo2} en uso y {campo3} disponibles, señor.",
"confirmar": false,
"captura": false
},
{
"id": "swap",
"grupo": "sistema",
"frases": [
"como esta la swap",
"memoria de intercambio"
],
"acuse": "Voy, señor.",
"comando": "free -g | awk '/Swap:/{print $2, $3}'",
"host": true,
"respuesta": "Swap: {campo2} gigas usados de {campo1}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "cpu_carga",
"grupo": "sistema",
"frases": [
"carga del sistema",
"como va el procesador",
"carga de cpu"
],
"acuse": "Un segundo, señor.",
"comando": "uptime | sed 's/.*average: //'",
"host": true,
"respuesta": "La carga media es {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "cpu_modelo",
"grupo": "sistema",
"frases": [
"que procesador tengo",
"modelo de procesador",
"que cpu tengo"
],
"acuse": "Enseguida, señor.",
"comando": "lscpu | grep 'Model name' | cut -d: -f2 | xargs",
"host": true,
"respuesta": "Lleva un {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "cpu_nucleos",
"grupo": "sistema",
"frases": [
"cuantos nucleos tengo",
"cuantos hilos tengo"
],
"acuse": "Voy, señor.",
"comando": "nproc",
"host": true,
"respuesta": "Tiene {ultima} hilos disponibles, señor.",
"confirmar": false,
"captura": false
},
{
"id": "temperatura",
"grupo": "sistema",
"frases": [
"que temperatura hay",
"como esta de temperatura",
"se esta calentando",
"que temperatura tiene",
"como esta la temperatura"
],
"acuse": "Lo compruebo, señor.",
"comando": "for z in /sys/class/thermal/thermal_zone*/temp; do cat $z; done | sort -rn | head -1 | awk '{printf \"%.0f\", $1/1000}'",
"host": true,
"respuesta": "El punto mas caliente esta a {ultima} grados, señor.",
"confirmar": false,
"captura": false
},
{
"id": "gpu_estado",
"grupo": "sistema",
"frases": [
"como esta la grafica",
"estado de la gpu",
"uso de la grafica"
],
"acuse": "Un momento, señor.",
"comando": "nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total,temperature.gpu --format=csv,noheader",
"host": true,
"respuesta": "La grafica esta asi: {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "uptime",
"grupo": "sistema",
"frases": [
"cuanto lleva encendido",
"desde cuando esta encendido",
"tiempo encendido"
],
"acuse": "Voy, señor.",
"comando": "uptime -p | sed 's/^up //; s/ days\\?/ dias/; s/ hours\\?/ horas/; s/ minutes\\?/ minutos/; s/,\\([^,]*\\)$/ y\\1/'",
"host": true,
"respuesta": "Lleva encendido {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "bateria",
"grupo": "sistema",
"frases": [
"cuanta bateria queda",
"como esta la bateria",
"nivel de bateria",
"cuanta bateria tengo",
"como va la bateria"
],
"acuse": "Lo miro, señor.",
"comando": "cat /sys/class/power_supply/BAT*/capacity 2>/dev/null | head -1",
"host": true,
"respuesta": "La bateria esta al {ultima} por ciento, señor.",
"confirmar": false,
"captura": false
},
{
"id": "kernel",
"grupo": "sistema",
"frases": [
"que kernel tengo",
"version del kernel",
"que nucleo tengo"
],
"acuse": "Enseguida, señor.",
"comando": "uname -r",
"host": true,
"respuesta": "Kernel {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "distro",
"grupo": "sistema",
"frases": [
"que distribucion tengo",
"que sistema tengo",
"que linux tengo"
],
"acuse": "Voy, señor.",
"comando": "grep PRETTY_NAME /etc/os-release | cut -d'\"' -f2",
"host": true,
"respuesta": "Esta usando {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "fecha",
"grupo": "sistema",
"frases": [
"que hora es",
"que dia es",
"dime la fecha"
],
"acuse": "Voy, señor.",
"comando": "date '+%H:%M del %A %d de %B'",
"host": true,
"respuesta": "Son las {salida}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "procesos_top",
"grupo": "sistema",
"frases": [
"que esta consumiendo",
"que consume mas",
"procesos que mas gastan",
"quien se come la cpu",
"que esta consumiendo mas",
"quien consume"
],
"acuse": "Lo compruebo, señor.",
"comando": "ps -eo pcpu,comm --sort=-pcpu --no-headers | head -5 | awk '{c=$1; $1=\"\"; sub(/^ +/,\"\"); printf \"%s al %s por ciento\\n\", $0, c}'",
"host": true,
"respuesta": "Lo que mas consume es {primera}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "procesos_memoria",
"grupo": "sistema",
"frases": [
"que consume mas memoria",
"quien se come la ram"
],
"acuse": "Lo compruebo, señor.",
"comando": "ps -eo comm,pmem --sort=-pmem --no-headers | head -5",
"host": true,
"respuesta": "Por memoria: {salida}, señor",
"confirmar": false,
"captura": false
},
{
"id": "procesos_cuantos",
"grupo": "sistema",
"frases": [
"cuantos procesos hay",
"cuantos procesos corren"
],
"acuse": "Voy, señor.",
"comando": "ps -e --no-headers | wc -l",
"host": true,
"respuesta": "Hay {ultima} procesos en marcha, señor.",
"confirmar": false,
"captura": false
},
{
"id": "red_ip",
"grupo": "sistema",
"frases": [
"cual es mi ip",
"mi ip local",
"que ip tengo"
],
"acuse": "Un momento, señor.",
"comando": "hostname -I | awk '{print $1}'",
"host": true,
"respuesta": "Su IP local es {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "red_ip_publica",
"grupo": "sistema",
"frases": [
"cual es mi ip publica",
"ip externa"
],
"acuse": "Salgo a mirarlo, señor.",
"comando": "curl -s --max-time 6 ifconfig.me",
"host": true,
"respuesta": "Su IP publica es {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "red_wifi",
"grupo": "sistema",
"frases": [
"a que wifi estoy conectado",
"red wifi",
"como se llama la wifi"
],
"acuse": "Voy, señor.",
"comando": "nmcli -t -f NAME,TYPE connection show --active | grep wireless | cut -d: -f1",
"host": true,
"respuesta": "Conectado a {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "red_velocidad",
"grupo": "sistema",
"frases": [
"cuanto trafico de red",
"trafico de red"
],
"acuse": "Lo miro, señor.",
"comando": "cat /proc/net/dev | awk '/wlp|enp/{rx+=$2; tx+=$10} END{printf \"%.1f %.1f\", rx/1e9, tx/1e9}'",
"host": true,
"respuesta": "Desde el arranque: {campo1} gigas bajados y {campo2} subidos, señor.",
"confirmar": false,
"captura": false
},
{
"id": "red_ping",
"grupo": "sistema",
"frases": [
"hay internet",
"tengo conexion",
"funciona internet"
],
"acuse": "Lo compruebo, señor.",
"comando": "ping -c1 -W2 1.1.1.1 >/dev/null 2>&1 && echo si || echo no",
"host": true,
"respuesta": "Conexion: {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "puertos",
"grupo": "sistema",
"frases": [
"que puertos hay abiertos",
"puertos a la escucha",
"quien esta escuchando"
],
"acuse": "Un momento, señor.",
"comando": "ss -ltnp 2>/dev/null | awk 'NR>1{print $4}' | sort -u | head -8",
"host": true,
"respuesta": "A la escucha: {salida}, señor",
"confirmar": false,
"captura": false
},
{
"id": "servicios_fallidos",
"grupo": "sistema",
"frases": [
"hay servicios caidos",
"servicios con fallos",
"algo ha fallado"
],
"acuse": "Lo reviso, señor.",
"comando": "systemctl --failed --no-legend | wc -l",
"host": true,
"respuesta": "Servicios en fallo: {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "actualizaciones",
"grupo": "sistema",
"frases": [
"hay actualizaciones",
"paquetes por actualizar"
],
"acuse": "Lo compruebo, tarda un poco, señor.",
"comando": "apt list --upgradable 2>/dev/null | tail -n +2 | wc -l",
"host": true,
"respuesta": "Hay {ultima} paquetes por actualizar, señor.",
"confirmar": false,
"captura": false
},
{
"id": "usuarios",
"grupo": "sistema",
"frases": [
"quien esta conectado",
"hay alguien conectado"
],
"acuse": "Voy, señor.",
"comando": "who | wc -l",
"host": true,
"respuesta": "Hay {ultima} sesiones abiertas, señor.",
"confirmar": false,
"captura": false
},
{
"id": "gpu_procesos",
"grupo": "sistema",
"frases": [
"que usa la grafica",
"quien usa la gpu"
],
"acuse": "Lo miro, señor.",
"comando": "O=$(nvidia-smi --query-compute-apps=process_name,used_gpu_memory --format=csv,noheader | awk -F, '{n=split($1,p,\"/\"); printf \"%s%s\\n\", p[n], $2}'); echo \"${O:-nada, la grafica esta libre}\"",
"host": true,
"respuesta": "En la grafica: {primera}, señor",
"confirmar": false,
"captura": false
},
{
"id": "audio_salida",
"grupo": "sistema",
"frases": [
"por donde suena",
"salida de audio",
"que altavoz esta puesto"
],
"acuse": "Voy, señor.",
"comando": "pactl get-default-sink 2>/dev/null",
"host": true,
"respuesta": "La salida es {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "audio_micro",
"grupo": "sistema",
"frases": [
"que microfono hay puesto",
"entrada de audio"
],
"acuse": "Voy, señor.",
"comando": "pactl get-default-source 2>/dev/null",
"host": true,
"respuesta": "La entrada es {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "pantallas",
"grupo": "sistema",
"frases": [
"cuantas pantallas hay",
"monitores conectados"
],
"acuse": "Voy, señor.",
"comando": "n=$(xrandr --listmonitors 2>/dev/null | head -1 | awk '{print $2}'); xrandr --listmonitors 2>/dev/null | tail -n +2 | awk '{print $NF}' | paste -sd', '; echo \"Tiene $n pantalla$([ \"$n\" = 1 ] || echo s) conectada$([ \"$n\" = 1 ] || echo s)\"",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": false
},
{
"id": "dispositivos_usb",
"grupo": "sistema",
"frases": [
"que hay conectado por usb",
"dispositivos usb"
],
"acuse": "Un momento, señor.",
"comando": "lsusb | cut -d' ' -f7- | head -6",
"host": true,
"respuesta": "Por USB: {salida}, señor",
"confirmar": false,
"captura": false
},
{
"id": "bluetooth",
"grupo": "sistema",
"frases": [
"que hay emparejado por bluetooth",
"dispositivos bluetooth"
],
"acuse": "Voy, señor.",
"comando": "bluetoothctl devices 2>/dev/null | cut -d' ' -f3- | head -5",
"host": true,
"respuesta": "Emparejados: {salida}, señor",
"confirmar": false,
"captura": false
},
{
"id": "flatpaks",
"grupo": "sistema",
"frases": [
"que flatpaks tengo",
"aplicaciones flatpak"
],
"acuse": "Voy, señor.",
"comando": "flatpak list --app --columns=name | head -10",
"host": true,
"respuesta": "Instalados: {salida}, señor",
"confirmar": false,
"captura": false
},
{
"id": "docker",
"grupo": "sistema",
"frases": [
"hay contenedores corriendo",
"contenedores docker"
],
"acuse": "Lo miro, señor.",
"comando": "O=$(docker ps --format '{{.Names}}' 2>/dev/null | head -5); echo \"${O:-ninguno en marcha}\"",
"host": true,
"respuesta": "Contenedores: {salida}, señor",
"confirmar": false,
"captura": false
},
{
"id": "git_estado",
"grupo": "sistema",
"frases": [
"como esta el repositorio",
"estado de git"
],
"acuse": "Voy, señor.",
"comando": "cd ~/COFRE/CODERS/JARVIS && git status --short | wc -l",
"host": true,
"respuesta": "Hay {ultima} ficheros con cambios sin guardar, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ollama_estado",
"grupo": "sistema",
"frases": [
"esta ollama funcionando",
"como esta el modelo",
"que modelo hay cargado"
],
"acuse": "Lo compruebo, señor.",
"comando": "M=$(curl -s --max-time 3 http://localhost:11434/api/ps | grep -o '\"name\":\"[^\"]*' | cut -d'\"' -f4 | head -1); echo \"${M:-ninguno ahora mismo}\"",
"host": true,
"respuesta": "Modelo cargado: {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "apagar_pantalla",
"grupo": "sistema",
"frases": [
"apaga la pantalla",
"apagar pantalla"
],
"acuse": "Enseguida, señor.",
"comando": "xset dpms force off",
"host": true,
"respuesta": "Pantalla apagada, señor.",
"confirmar": false,
"captura": false
},
{
"id": "actualizar_lista",
"grupo": "sistema",
"frases": [
"actualiza los repositorios",
"refresca los paquetes",
"actualiza la lista de paquetes"
],
"acuse": "Voy, necesito permiso de administrador, señor.",
"comando": "sudo apt update",
"host": true,
"respuesta": "Repositorios actualizados, señor.",
"confirmar": true,
"captura": false
},
{
"id": "espacio_liberar",
"grupo": "sistema",
"frases": [
"limpia los paquetes viejos",
"libera espacio de apt",
"limpia el cache de paquetes"
],
"acuse": "Necesito permiso para esto, señor.",
"comando": "sudo apt autoclean",
"host": true,
"respuesta": "Cache de paquetes limpiada, señor.",
"confirmar": true,
"captura": false
},
{
"id": "servicio_reiniciar",
"grupo": "sistema",
"frases": [
"reinicia el servicio de red",
"reinicia la red"
],
"acuse": "Necesito permiso de administrador, señor.",
"comando": "sudo systemctl restart NetworkManager",
"host": true,
"respuesta": "Red reiniciada, señor.",
"confirmar": true,
"captura": false
},
{
"id": "fecha_sincronizar",
"grupo": "sistema",
"frases": [
"sincroniza la hora",
"pon la hora en hora"
],
"acuse": "Un momento, con permiso, señor.",
"comando": "sudo systemctl restart systemd-timesyncd",
"host": true,
"respuesta": "Hora sincronizada, señor.",
"confirmar": true,
"captura": false
},
{
"id": "bloquear",
"grupo": "sistema",
"frases": [
"bloquea la sesion",
"bloquear pantalla",
"echa el cerrojo"
],
"acuse": "Ahora mismo, señor.",
"comando": "loginctl lock-session",
"host": true,
"respuesta": "Sesion bloqueada, señor.",
"confirmar": false,
"captura": false
},
{
"id": "volumen_subir",
"grupo": "sistema",
"frases": [
"sube el volumen",
"mas volumen"
],
"acuse": "Voy, señor.",
"comando": "pactl set-sink-volume @DEFAULT_SINK@ +10%",
"host": true,
"respuesta": "Volumen subido, señor.",
"confirmar": false,
"captura": false
},
{
"id": "volumen_bajar",
"grupo": "sistema",
"frases": [
"baja el volumen",
"menos volumen"
],
"acuse": "Voy, señor.",
"comando": "pactl set-sink-volume @DEFAULT_SINK@ -10%",
"host": true,
"respuesta": "Volumen bajado, señor.",
"confirmar": false,
"captura": false
},
{
"id": "volumen_silencio",
"grupo": "sistema",
"frases": [
"silencia el sistema",
"quita el sonido",
"mutea el sistema"
],
"acuse": "Voy, señor.",
"comando": "pactl set-sink-mute @DEFAULT_SINK@ toggle",
"host": true,
"respuesta": "Sonido conmutado, señor.",
"confirmar": false,
"captura": false
},
{
"id": "brillo_subir",
"grupo": "sistema",
"frases": [
"sube el brillo",
"mas brillo"
],
"acuse": "Voy, señor.",
"comando": "brightnessctl set +10% 2>/dev/null || xrandr --output $(xrandr | awk '/ connected/{print $1; exit}') --brightness 1",
"host": true,
"respuesta": "Brillo subido, señor.",
"confirmar": false,
"captura": false
},
{
"id": "captura_pantalla",
"grupo": "sistema",
"frases": [
"hazme una captura",
"captura de pantalla",
"haz una foto de la pantalla"
],
"acuse": "Enseguida se la hago, señor.",
"comando": "D=$(xdg-user-dir PICTURES 2>/dev/null || echo ~); F=$D/captura-$(date +%H%M%S).png; import -window root \"$F\" 2>/dev/null || gnome-screenshot -f \"$F\" 2>/dev/null || ffmpeg -loglevel error -f x11grab -video_size $(xdpyinfo | awk \"/dimensions/{print \\$2}\") -i $DISPLAY -frames:v 1 -y \"$F\" 2>/dev/null; [ -s \"$F\" ] && echo \"$F\"",
"host": true,
"respuesta": "Captura guardada, señor.",
"confirmar": false,
"captura": false
},
{
"id": "papelera_tamano",
"grupo": "sistema",
"frases": [
"cuanto ocupa la papelera",
"papelera llena"
],
"acuse": "Voy, señor.",
"comando": "du -sh ~/.local/share/Trash 2>/dev/null | cut -f1",
"host": true,
"respuesta": "La papelera ocupa {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "descargas_listar",
"grupo": "sistema",
"frases": [
"que hay en descargas",
"ultimas descargas",
"que me he bajado"
],
"acuse": "Voy, señor.",
"comando": "ls -t ~/Downloads 2>/dev/null | head -6",
"host": true,
"respuesta": "Hay {lineas} cosas en descargas, señor",
"confirmar": false,
"captura": false
},
{
"id": "descargas_abrir",
"grupo": "sistema",
"frases": [
"abre la carpeta de descargas",
"abreme descargas",
"abre descargas",
"abreme las descargas"
],
"acuse": "Enseguida se la abro, señor.",
"comando": "xdg-open ~/Downloads",
"host": true,
"respuesta": "Carpeta de descargas abierta, señor.",
"confirmar": false,
"captura": false
},
{
"id": "documentos_abrir",
"grupo": "sistema",
"frases": [
"abre mis documentos",
"abreme documentos"
],
"acuse": "Enseguida, señor.",
"comando": "xdg-open ~/Documents",
"host": true,
"respuesta": "Documentos abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "cofre_abrir",
"grupo": "sistema",
"frases": [
"abre el cofre",
"abreme el cofre"
],
"acuse": "Enseguida, señor.",
"comando": "xdg-open ~/COFRE",
"host": true,
"respuesta": "COFRE abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ficheros_recientes",
"grupo": "sistema",
"frases": [
"que he tocado ultimamente",
"ficheros recientes",
"en que estaba trabajando"
],
"acuse": "Lo miro, señor.",
"comando": "find ~ -maxdepth 3 -type f -mmin -180 -not -path '*/.*' 2>/dev/null | head -6",
"host": true,
"respuesta": "Tocado en las ultimas horas: {salida}, señor",
"confirmar": false,
"captura": false
},
{
"id": "grandes",
"grupo": "sistema",
"frases": [
"que ocupa mas sitio",
"que tengo en descargas",
"que me esta llenando la carpeta"
],
"acuse": "Lo miro, señor.",
"comando": "du -ah ~/Downloads ~/Descargas ~/Documents ~/Desktop 2>/dev/null | sort -rh | head -6",
"host": true,
"respuesta": "Lo mas grande: {salida}, señor",
"confirmar": false,
"captura": false
},
{
"id": "terminal_abrir",
"grupo": "sistema",
"frases": [
"abre una terminal",
"abreme una terminal",
"abre la terminal",
"saca una terminal",
"quiero una terminal"
],
"acuse": "Ahora mismo, señor.",
"comando": "gnome-terminal 2>/dev/null || kgx 2>/dev/null || xterm 2>/dev/null &",
"host": true,
"respuesta": "Terminal abierta, señor.",
"confirmar": false,
"captura": false
},
{
"id": "terminal_aqui",
"grupo": "sistema",
"frases": [
"abre una terminal en el cofre",
"terminal en el cofre"
],
"acuse": "Enseguida, señor.",
"comando": "gnome-terminal --working-directory=$HOME/COFRE 2>/dev/null || kgx 2>/dev/null &",
"host": true,
"respuesta": "Ahi la tiene, en el cofre, señor.",
"confirmar": false,
"captura": false
},
{
"id": "videos_listar",
"grupo": "sistema",
"frases": [
"que peliculas tengo",
"que videos tengo",
"lista mis videos"
],
"acuse": "Un momento, lo miro, señor.",
"comando": "timeout 12 find $HOME/Videos $HOME/Downloads $HOME/Desktop -type f -regextype posix-extended -iregex '.*\\.(mp4|mkv|avi|webm|mov|m4v)$' 2>/dev/null | head -12",
"host": true,
"respuesta": "He encontrado {lineas}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "pelicula_abrir",
"grupo": "sistema",
"frases": [
"pon la pelicula",
"abre la pelicula",
"reproduce el video",
"pon el video",
"quiero ver"
],
"acuse": "Enseguida se la pongo, señor.",
"comando": "v=$(timeout 12 find $HOME/Videos $HOME/Downloads $HOME/Desktop -type f -regextype posix-extended -iregex '.*{argumento}.*\\.(mp4|mkv|avi|webm|mov|m4v)$' 2>/dev/null | head -1); if [ -n \"$v\" ]; then xdg-open \"$v\" >/dev/null 2>&1 & echo \"Poniendo $(basename \"$v\")\"; else echo \"No encuentro ese video\"; fi",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": true
},
{
"id": "ventanas_listar",
"grupo": "ventanas",
"frases": [
"que ventanas tengo abiertas",
"que ventanas hay abiertas",
"lista las ventanas"
],
"acuse": "Un momento, lo miro, señor.",
"comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh listar",
"host": true,
"respuesta": "Tiene {lineas} ventanas abiertas, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ventana_izquierda",
"grupo": "ventanas",
"frases": [
"pon la ventana a la izquierda",
"manda la ventana a la izquierda",
"esta ventana a la izquierda"
],
"acuse": "Ahora mismo, señor.",
"comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh zona esta izquierda",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": false
},
{
"id": "ventana_derecha",
"grupo": "ventanas",
"frases": [
"pon la ventana a la derecha",
"manda la ventana a la derecha",
"esta ventana a la derecha"
],
"acuse": "Ahora mismo, señor.",
"comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh zona esta derecha",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": false
},
{
"id": "ventana_arriba",
"grupo": "ventanas",
"frases": [
"pon la ventana arriba del todo",
"manda la ventana arriba"
],
"acuse": "Voy, señor.",
"comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh zona esta arriba",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": false
},
{
"id": "ventana_abajo",
"grupo": "ventanas",
"frases": [
"pon la ventana abajo del todo",
"manda la ventana abajo"
],
"acuse": "Voy, señor.",
"comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh zona esta abajo",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": false
},
{
"id": "ventana_centrar",
"grupo": "ventanas",
"frases": [
"centra la ventana activa",
"pon la ventana en el centro"
],
"acuse": "Enseguida, señor.",
"comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh zona esta centro",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": false
},
{
"id": "ventana_maximizar",
"grupo": "ventanas",
"frases": [
"maximiza la ventana activa",
"pon la ventana a pantalla completa"
],
"acuse": "Ahora mismo, señor.",
"comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh maximiza esta",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": false
},
{
"id": "ventana_restaurar",
"grupo": "ventanas",
"frases": [
"restaura la ventana activa",
"quita la pantalla completa"
],
"acuse": "Voy, señor.",
"comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh restaura esta",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": false
},
{
"id": "ventana_minimizar",
"grupo": "ventanas",
"frases": [
"minimiza la ventana activa",
"esconde la ventana activa"
],
"acuse": "Voy, señor.",
"comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh minimiza esta",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": false
},
{
"id": "ventana_a_pantalla",
"grupo": "ventanas",
"frases": [
"manda la ventana a la pantalla",
"pasa la ventana a la pantalla"
],
"acuse": "Ahora mismo, señor.",
"comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh mover esta {argumento}",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": true
},
{
"id": "ventana_al_escritorio",
"grupo": "ventanas",
"frases": [
"manda la ventana al escritorio",
"pasa la ventana al escritorio"
],
"acuse": "Voy, señor.",
"comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh escritorio esta {argumento}",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": true
},
{
"id": "pantalla_nombrar",
"grupo": "ventanas",
"frases": [
"a esta pantalla llamala",
"llama a esta pantalla"
],
"acuse": "Anotado, señor.",
"comando": "$HOME/COFRE/CODERS/JARVIS/config/ventanas.sh alias 1 {argumento}",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": true
},
{
"id": "buscar_fichero",
"grupo": "ficheros",
"frases": [
"busca el fichero",
"buscame el fichero",
"encuentra el fichero"
],
"acuse": "Lo busco, señor.",
"comando": "timeout 12 find $HOME/Documents $HOME/Desktop $HOME/COFRE/CODERS $HOME/Downloads -iname '*{argumento}*' -not -path '*/.*' -not -path '*/node_modules/*' -not -path '*venv*' 2>/dev/null | head -12",
"host": true,
"respuesta": "He encontrado {lineas}, señor",
"confirmar": false,
"captura": true
},
{
"id": "buscar_carpeta",
"grupo": "ficheros",
"frases": [
"busca la carpeta",
"encuentra la carpeta"
],
"acuse": "La busco, señor.",
"comando": "find ~ -type d -iname '*{argumento}*' -not -path '*/.*' 2>/dev/null | head -12",
"host": true,
"respuesta": "Carpetas encontradas: {salida}, señor",
"confirmar": false,
"captura": true
},
{
"id": "grep_recursivo",
"grupo": "ficheros",
"frases": [
"busca el texto",
"busca la palabra en mis ficheros",
"donde pone",
"que fichero contiene"
],
"acuse": "Lo busco en sus ficheros, señor.",
"comando": "timeout 12 grep -rIn --exclude-dir='.*' --exclude-dir='*venv*' --exclude-dir=node_modules --exclude-dir=__pycache__ --exclude-dir=modelos --exclude-dir=muestras -m1 {argumento} $HOME/Documents $HOME/Desktop $HOME/COFRE/CODERS 2>/dev/null | head -12",
"host": true,
"respuesta": "{lineas} ficheros lo contienen, señor.",
"confirmar": false,
"captura": true
},
{
"id": "leer_fichero",
"grupo": "ficheros",
"frases": [
"leeme el fichero",
"abre y leeme",
"lee el fichero"
],
"acuse": "Voy a leerlo, señor.",
"comando": "f=$(timeout 12 find $HOME/Documents $HOME/Desktop $HOME/COFRE/CODERS -iname '*{argumento}*' -type f -not -path '*/.*' 2>/dev/null | head -1); [ -n \"$f\" ] && head -c 800 \"$f\" || echo \"no lo encuentro\"",
"host": true,
"respuesta": "{salida}, señor",
"confirmar": false,
"captura": true
},
{
"id": "abrir_fichero",
"grupo": "ficheros",
"frases": [
"abre el fichero",
"abreme el fichero"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "f=$(find ~ -iname '*{argumento}*' -type f -not -path '*/.*' 2>/dev/null | head -1); [ -n \"$f\" ] && xdg-open \"$f\" && echo \"$f\" || echo 'no lo encuentro'",
"host": true,
"respuesta": "Abierto {ultima}, señor.",
"confirmar": false,
"captura": true
},
{
"id": "abrir_carpeta",
"grupo": "ficheros",
"frases": [
"abre la carpeta",
"abreme la carpeta"
],
"acuse": "Enseguida, señor.",
"comando": "a={argumento}; if [ -d \"$a\" ]; then d=\"$a\"; else d=$(timeout 12 find $HOME/Documents $HOME/Desktop $HOME/COFRE $HOME/Downloads -type d -iname \"*$a*\" -not -path \"*/.*\" -not -path \"*/node_modules/*\" 2>/dev/null | head -1); fi; if [ -n \"$d\" ]; then xdg-open \"$d\" >/dev/null 2>&1 & echo \"Abierta $(basename \"$d\")\"; else echo \"No encuentro esa carpeta\"; fi",
"host": true,
"respuesta": "{ultima}, señor",
"confirmar": false,
"captura": true
},
{
"id": "tamano_carpeta",
"grupo": "ficheros",
"frases": [
"cuanto ocupa la carpeta",
"tamaño de la carpeta"
],
"acuse": "Lo calculo, señor.",
"comando": "a={argumento}; if [ -d \"$a\" ]; then d=\"$a\"; else d=$(timeout 12 find $HOME/Documents $HOME/Desktop $HOME/COFRE $HOME/Downloads -type d -iname \"*$a*\" -not -path \"*/.*\" 2>/dev/null | head -1); fi; [ -n \"$d\" ] && du -sh \"$d\" 2>/dev/null | cut -f1 || echo \"no la encuentro\"",
"host": true,
"respuesta": "Ocupa {ultima}, señor.",
"confirmar": false,
"captura": true
},
{
"id": "proceso_buscar",
"grupo": "ficheros",
"frases": [
"esta corriendo",
"se esta ejecutando",
"hay algun proceso de"
],
"acuse": "Lo compruebo, señor.",
"comando": "pgrep -c -f {argumento} 2>/dev/null || echo 0",
"host": true,
"respuesta": "Hay {ultima} procesos que encajan, señor.",
"confirmar": false,
"captura": true
},
{
"id": "proceso_matar",
"grupo": "ficheros",
"frases": [
"mata el proceso",
"cierra el proceso",
"termina el proceso"
],
"acuse": "Antes de matarlo, confirmeme, señor.",
"comando": "pkill -f {argumento}",
"host": true,
"respuesta": "Proceso terminado, señor.",
"confirmar": true,
"captura": true
},
{
"id": "instalado",
"grupo": "ficheros",
"frases": [
"tengo instalado",
"esta instalado"
],
"acuse": "Lo miro, señor.",
"comando": "command -v {argumento} >/dev/null && echo si || echo no",
"host": true,
"respuesta": "Instalado: {ultima}, señor.",
"confirmar": false,
"captura": true
},
{
"id": "manual",
"grupo": "ficheros",
"frases": [
"para que sirve el comando",
"que hace el comando"
],
"acuse": "Voy, señor.",
"comando": "whatis {argumento} 2>/dev/null | head -1",
"host": true,
"respuesta": "{salida}, señor",
"confirmar": false,
"captura": true
},
{
"id": "oasis_corriendo",
"grupo": "oasis",
"frases": [
"esta oasis funcionando",
"esta corriendo oasis",
"oasis esta levantado",
"esta corriendo casis"
],
"acuse": "Lo compruebo, señor.",
"comando": "pgrep -c -f 'oasis|ssb-server|sbot' 2>/dev/null || echo 0",
"host": true,
"respuesta": "Procesos de Oasis en marcha: {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "oasis_sincronizando",
"grupo": "oasis",
"frases": [
"estan sincronizando los pubs",
"como van los pubs",
"se estan sincronizando los pubs",
"estan sincronizando los push",
"estan sincronizando los puos",
"sincronizando los pubs",
"como van los push"
],
"acuse": "Voy a mirar las conexiones, señor.",
"comando": "python3 -c \"import json,time; d=json.load(open('$HOME/.ssb/conn.json')); act=sum(1 for v in d.values() if time.time()*1000-v.get('stateChange',0)<300000); fail=sum(1 for v in d.values() if v.get('failure',0)>0); print(f'{len(d)} pubs, {act} activos hace poco, {fail} con fallos')\"",
"host": true,
"respuesta": "{ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "oasis_conexiones",
"grupo": "oasis",
"frases": [
"cuantos pubs hay conectados",
"conexiones de oasis"
],
"acuse": "Un momento, señor.",
"comando": "cat ~/.ssb/conn.json 2>/dev/null | grep -c 'connected' || echo 0",
"host": true,
"respuesta": "Pubs conectados: {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "oasis_tamano",
"grupo": "oasis",
"frases": [
"cuanto ocupa oasis",
"tamaño de la base de ssb"
],
"acuse": "Lo calculo, señor.",
"comando": "du -sh ~/.ssb 2>/dev/null | cut -f1",
"host": true,
"respuesta": "La base de SSB ocupa {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "oasis_abrir",
"grupo": "oasis",
"frases": [
"abre oasis",
"abreme oasis"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "xdg-open http://localhost:3000 2>/dev/null && echo abierto || echo 'no responde'",
"host": true,
"respuesta": "Oasis: {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "oasis_blobs",
"grupo": "oasis",
"frases": [
"cuanto ocupan los blobs",
"tamaño de los blobs"
],
"acuse": "Voy, señor.",
"comando": "du -sh ~/.ssb/blobs 2>/dev/null | cut -f1",
"host": true,
"respuesta": "Los blobs ocupan {ultima}, señor.",
"confirmar": false,
"captura": false
},
{
"id": "red_dispositivos",
"grupo": "pentest",
"frases": [
"escanea mi red",
"que hay en mi red",
"dispositivos en la red",
"quien esta en la red"
],
"acuse": "Voy a escanear la red local, necesito su permiso, señor.",
"comando": "R=$(ip route | awk '/proto.*src/{for(i=1;i<=NF;i++)if($i~/\\//)print $i; exit}'); sudo nmap -sn ${R:-192.168.1.0/24} | grep -E 'Nmap scan|MAC' | head -30",
"host": true,
"respuesta": "Estos equipos hay en la red, señor: {salida}",
"confirmar": true,
"captura": false
},
{
"id": "puertos_host",
"grupo": "pentest",
"frases": [
"que puertos tiene abiertos",
"escanea los puertos de",
"escanea el host"
],
"acuse": "Un escaneo de puertos, con su permiso, señor.",
"comando": "T={argumento}; echo \"$T\" | grep -qE '^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.|127\\.|localhost)' && nmap -F \"$T\" | grep -E '^[0-9]+/|Nmap scan' | head -20 || echo 'Solo objetivos de la red local, señor.'",
"host": true,
"respuesta": "{salida}, señor",
"confirmar": true,
"captura": true
},
{
"id": "mis_puertos",
"grupo": "pentest",
"frases": [
"que puertos tengo abiertos yo",
"mis puertos abiertos",
"que estoy exponiendo"
],
"acuse": "Lo compruebo, señor.",
"comando": "ss -ltnp 2>/dev/null | awk 'NR>1{print $4}' | sort -u | head -15",
"host": true,
"respuesta": "Tengo {lineas} puertos a la escucha, señor",
"confirmar": false,
"captura": false
},
{
"id": "exploit_buscar",
"grupo": "pentest",
"frases": [
"busca un exploit para",
"busca exploits de",
"hay algun exploit de"
],
"acuse": "Lo busco en la base de exploits, señor.",
"comando": "searchsploit {argumento} 2>/dev/null | grep -vE '^-|Shellcode' | head -12",
"host": true,
"respuesta": "Esto he encontrado, señor: {salida}",
"confirmar": false,
"captura": true
},
{
"id": "dominio_resolver",
"grupo": "pentest",
"frases": [
"resuelve el dominio",
"que ip tiene el dominio",
"a que ip apunta"
],
"acuse": "Lo resuelvo, señor.",
"comando": "dig +short {argumento} 2>/dev/null | head -5",
"host": true,
"respuesta": "Resuelve a: {salida}, señor",
"confirmar": false,
"captura": true
},
{
"id": "dominio_whois",
"grupo": "pentest",
"frases": [
"de quien es el dominio",
"quien registro",
"whois de"
],
"acuse": "Lo consulto, señor.",
"comando": "whois {argumento} 2>/dev/null | grep -iE 'registrar:|creation|expir|org' | head -6",
"host": true,
"respuesta": "{salida}, señor",
"confirmar": false,
"captura": true
},
{
"id": "cabeceras_web",
"grupo": "pentest",
"frases": [
"que servidor usa",
"cabeceras de",
"que tecnologia usa la web"
],
"acuse": "Miro las cabeceras, señor.",
"comando": "curl -sI --max-time 8 {argumento_url} 2>/dev/null | grep -iE 'server:|x-powered|location' | head -6",
"host": true,
"respuesta": "{salida}, señor",
"confirmar": false,
"captura": true
},
{
"id": "hash_identificar",
"grupo": "pentest",
"frases": [
"que tipo de hash es",
"identifica el hash"
],
"acuse": "Lo miro, señor.",
"comando": "H={argumento}; L=${#H}; case $L in 32)echo 'MD5, probablemente';; 40)echo 'SHA1';; 64)echo 'SHA256';; *)echo \"$L caracteres, no lo tengo claro\";; esac",
"host": true,
"respuesta": "{ultima}, señor.",
"confirmar": false,
"captura": true
},
{
"id": "ff_gmail",
"grupo": "firefox",
"frases": [
"abre el correo",
"abre gmail",
"abreme el correo",
"a ver el correo",
"abrir el correo"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://mail.google.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_calendario",
"grupo": "firefox",
"frases": [
"abre el calendario",
"abreme el calendario"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://calendar.google.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_drive",
"grupo": "firefox",
"frases": [
"abre drive",
"abre el drive"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://drive.google.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_maps",
"grupo": "firefox",
"frases": [
"abre el mapa",
"abre google maps",
"abreme los mapas"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://maps.google.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_youtube",
"grupo": "firefox",
"frases": [
"abre youtube",
"abreme youtube",
"abre yo tube",
"abre you tube"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://youtube.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_github",
"grupo": "firefox",
"frases": [
"abre github",
"abreme github"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://github.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_gitea",
"grupo": "firefox",
"frases": [
"abre gitea",
"abre el gitea"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://gitea.laenre.net' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_wikipedia",
"grupo": "firefox",
"frases": [
"abre la wikipedia",
"abreme wikipedia"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://es.wikipedia.org' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_traductor",
"grupo": "firefox",
"frases": [
"abre el traductor",
"abreme el traductor"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://translate.google.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_chatgpt_no",
"grupo": "firefox",
"frases": [
"abre duckduckgo",
"abre el buscador"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://duckduckgo.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_mastodon",
"grupo": "firefox",
"frases": [
"abre mastodon",
"abreme mastodon"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://mastodon.social' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_reddit",
"grupo": "firefox",
"frases": [
"abre reddit"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://reddit.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_hackernews",
"grupo": "firefox",
"frases": [
"abre hacker news",
"abreme hacker news"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://news.ycombinator.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_archwiki",
"grupo": "firefox",
"frases": [
"abre la wiki de arch",
"abre archwiki"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://wiki.archlinux.org' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_stackoverflow",
"grupo": "firefox",
"frases": [
"abre stack overflow",
"abreme stackoverflow"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://stackoverflow.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_flathub",
"grupo": "firefox",
"frases": [
"abre flathub"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://flathub.org' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_openstreetmap",
"grupo": "firefox",
"frases": [
"abre openstreetmap",
"abre el mapa libre"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://openstreetmap.org' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_wetransfer",
"grupo": "firefox",
"frases": [
"abre wetransfer"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://wetransfer.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_bandcamp",
"grupo": "firefox",
"frases": [
"abre bandcamp"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://bandcamp.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_soundcloud",
"grupo": "firefox",
"frases": [
"abre soundcloud"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://soundcloud.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_spotify_web",
"grupo": "firefox",
"frases": [
"abre spotify"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://open.spotify.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_twitch",
"grupo": "firefox",
"frases": [
"abre twitch"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://twitch.tv' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_archive",
"grupo": "firefox",
"frases": [
"abre archive punto org",
"abre internet archive"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://archive.org' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_libgen",
"grupo": "firefox",
"frases": [
"abre la biblioteca",
"abre library genesis"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://libgen.is' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_meteo",
"grupo": "firefox",
"frases": [
"abre el tiempo",
"que tiempo va a hacer",
"abre la meteorologia"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://www.aemet.es' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_renfe",
"grupo": "firefox",
"frases": [
"abre renfe",
"mira los trenes"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://www.renfe.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_idealista",
"grupo": "firefox",
"frases": [
"abre idealista"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://www.idealista.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_wallapop",
"grupo": "firefox",
"frases": [
"abre wallapop"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://es.wallapop.com' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_oasis_web",
"grupo": "firefox",
"frases": [
"abre oasis en el navegador"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'http://localhost:3000' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_router",
"grupo": "firefox",
"frases": [
"abre el router",
"entra en el router"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'http://192.168.1.1' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_localhost",
"grupo": "firefox",
"frases": [
"abre localhost"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'http://localhost' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_correo_local",
"grupo": "firefox",
"frases": [
"abre el webmail"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://webmail.laenre.net' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_nodo50",
"grupo": "firefox",
"frases": [
"abre nodo cincuenta",
"abre nodo50"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://nodo50.org' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_hackmeeting",
"grupo": "firefox",
"frases": [
"abre hackmeeting"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://sindominio.net/hackmeeting' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_reas",
"grupo": "firefox",
"frases": [
"abre reas",
"abre la red de economia alternativa"
],
"acuse": "Enseguida se lo abro, señor.",
"comando": "firefox --new-tab 'https://www.economiasolidaria.org' >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ya lo tiene abierto, señor.",
"confirmar": false,
"captura": false
},
{
"id": "ff_buscar_web",
"grupo": "firefox",
"frases": [
"busca en internet",
"buscame en internet",
"busca en la web"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://duckduckgo.com/?q={argumento_url}\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_duck",
"grupo": "firefox",
"frases": [
"busca en duckduckgo"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://duckduckgo.com/?q={argumento_url}\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_youtube",
"grupo": "firefox",
"frases": [
"busca en youtube",
"buscame en youtube",
"busca en yo tube",
"buscan youtube",
"buscan yo tube",
"busca en you tube"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://www.youtube.com/results?search_query={argumento_url}\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_wikipedia",
"grupo": "firefox",
"frases": [
"busca en la wikipedia",
"buscame en wikipedia"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://es.wikipedia.org/w/index.php?search={argumento_url}\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_github",
"grupo": "firefox",
"frases": [
"busca en github",
"buscame en github"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://github.com/search?q={argumento_url}\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_mapas",
"grupo": "firefox",
"frases": [
"busca en el mapa",
"buscame en el mapa",
"donde esta"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://www.openstreetmap.org/search?query={argumento_url}\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_traducir",
"grupo": "firefox",
"frases": [
"traduce",
"traduceme"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://translate.google.com/?sl=auto&tl=es&text={argumento_url}\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_imagenes",
"grupo": "firefox",
"frases": [
"busca imagenes de",
"buscame imagenes de"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://duckduckgo.com/?q={argumento_url}&iax=images&ia=images\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_paquete",
"grupo": "firefox",
"frases": [
"busca el paquete",
"busca en flathub"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://flathub.org/apps/search?q={argumento_url}\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_precio",
"grupo": "firefox",
"frases": [
"busca el precio de",
"cuanto cuesta"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://duckduckgo.com/?q={argumento_url}+precio\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_receta",
"grupo": "firefox",
"frases": [
"busca la receta de",
"receta de"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://duckduckgo.com/?q=receta+{argumento_url}\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_musica",
"grupo": "firefox",
"frases": [
"busca la cancion",
"busca en bandcamp"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://bandcamp.com/search?q={argumento_url}\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_stack",
"grupo": "firefox",
"frases": [
"busca en stack overflow",
"como se hace en codigo"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://stackoverflow.com/search?q={argumento_url}\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_manual",
"grupo": "firefox",
"frases": [
"busca la documentacion de",
"documentacion de"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://duckduckgo.com/?q={argumento_url}+docs\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_buscar_noticia",
"grupo": "firefox",
"frases": [
"busca noticias de",
"noticias sobre"
],
"acuse": "Lo busco, señor.",
"comando": "firefox --new-tab \"https://duckduckgo.com/?q={argumento_url}&iar=news&ia=news\" >/dev/null 2>&1 &",
"host": true,
"respuesta": "Buscando {argumento}, señor. Ya lo tiene en pantalla.",
"confirmar": false,
"captura": true
},
{
"id": "ff_firefox_abrir",
"grupo": "firefox",
"frases": [
"abre el navegador",
"abre firefox",
"abreme el navegador"
],
"acuse": "Voy, señor.",
"comando": "firefox >/dev/null 2>&1 &",
"host": true,
"respuesta": "Navegador abierto.",
"confirmar": false,
"captura": false
},
{
"id": "ff_firefox_privado",
"grupo": "firefox",
"frases": [
"abre una ventana privada",
"modo incognito",
"navegacion privada"
],
"acuse": "Voy, señor.",
"comando": "firefox --private-window >/dev/null 2>&1 &",
"host": true,
"respuesta": "Ventana privada abierta.",
"confirmar": false,
"captura": false
},
{
"id": "ff_firefox_cerrar",
"grupo": "firefox",
"frases": [
"cierra el navegador",
"cierra firefox"
],
"acuse": "Voy, señor.",
"comando": "pkill -f 'firefox' ",
"host": true,
"respuesta": "Navegador cerrado.",
"confirmar": true,
"captura": false
},
{
"id": "ff_firefox_pestanas",
"grupo": "firefox",
"frases": [
"cuantas pestañas tengo abiertas",
"cuantas pestañas hay"
],
"acuse": "Voy, señor.",
"comando": "ls ~/.mozilla/firefox/*/sessionstore-backups/recovery.jsonlz4 2>/dev/null | wc -l",
"host": true,
"respuesta": "Tengo {ultima} sesiones guardadas; el numero exacto de pestañas solo lo sabe el navegador.",
"confirmar": false,
"captura": false
}
]
}