Saltar al contenido principal

Piloto automático

El piloto automático​

Un interruptor en la barra superior (✈️). Con él encendido JMAX hace la tarea entera sin pedir permiso, y solo se detiene ante algo de lo que no se vuelve.

Para qué​

Una tarea larga —revisar cien archivos, montar un despliegue, recorrer un sitio— muere si cada paso abre un cuadro de confirmación. Con voz es todavía peor: nadie va a contestar veinte veces «sí».

Qué levanta​

Sin pilotoCon piloto
Acciones con efecto (escribir, borrar, enviar, ejecutar)preguntano pregunta
Ratón y tecladosegún el modo controlno pregunta
Carpetas permitidas (fs_write_roots)acotano acota
Lista blanca de la consolaacotano acota
Encadenar órdenes (`, >, &&`)prohibido

Se decidió así a propósito: autonomía completa. Las carpetas y la lista blanca no son un cuadro de diálogo, pero sí son un límite, y con el piloto encendido dejan de estarlo.

Qué NO levanta: el peligro vital​

jmax/security/peligro.py. Son las acciones que pueden dejar a JMAX inservible. Si JMAX se apaga a mitad de una tarea, no queda nadie para terminarla ni para contarlo.

MotivoQué caza
apagar_o_reiniciarshutdown, reboot, Restart-Computer, logoff, systemctl poweroff
borrar_lo_suyocualquier ruta bajo la instalación, o con nombre propio de JMAX (config, data, secrets.env, master.key, licencias…)
borrar_del_sistemaC:/Windows, /etc, C:/Users/<alguien>, la raíz de una unidad
borrado_masivorm -rf, Remove-Item -Recurse, del /s, comodines
formatear_discodiskpart, mkfs, format c:, Clear-Disk
matar_su_propio_procesotaskkill/Stop-Process sobre python, jmax o uvicorn
registro_criticoclaves de HKLM\System y reg delete

Se clasifica por lo que la acción HACE, no por cómo se llama. Los conectores MCP traen herramientas con nombres que nadie conoce de antemano, y pc_powershell es inofensivo o letal según lo que lleve dentro. Se miran el nombre y los argumentos: la orden de consola, y las rutas, tanto en los parámetros como escritas dentro del propio comando.

Este peligro manda sobre todo lo demás, incluida la válvula never_confirm y los permisos concedidos a un agente.

Cuando pregunta, dice por qué​

Con el piloto encendido nadie espera una pregunta, así que el cuadro lleva el motivo en la misma frase: «ATENCIÓN: va a apagar o reiniciar el equipo.» Un «¿seguro?» a secas no deja decidir nada.

Reiniciar pasó de «ni pidiéndolo» a «con tu permiso»​

_POWERSHELL_BLOQUEADO rechazaba de plano apagar y reiniciar. Eso hacía que JMAX pidiera permiso y luego se negara igual —lo peor de las dos cosas—. Ahora son peligro vital: se detienen, preguntan, y decides tú.

Lo que sigue prohibido de plano, porque no es «la vida de JMAX» sino un control de seguridad, y ninguna tarea legítima lo necesita a mitad de camino: formatear un volumen, borrar un usuario local, abrir la política de ejecución y descargar-y-ejecutar (Invoke-WebRequest -OutFile, Start-BitsTransfer). Por eso no se pregunta por ellas: un cuadro de confirmación sobre algo ya decidido solo sirve para hacer creer al usuario que manda él.

Arranca siempre apagado​

Y no se guarda en ningún ajuste. Un piloto que sobreviviera al reinicio dejaría a JMAX trabajando solo desde el primer segundo de un arranque que nadie está mirando, quizá días después de haberlo encendido. Si hace falta, se enciende.

Se ve desde la puerta​

El botón encendido va en ámbar con un latido suave, no con el cambio de color discreto de los demás. No darse cuenta de que está activo es exactamente lo que no puede pasar. Quien tenga desactivadas las animaciones del sistema ve el fondo ámbar sin el latido.

El estado lo manda el servidor, no la ventana. El botón no se pinta al pulsarlo: envía el mensaje y espera la respuesta. Antes se pintaba primero, y si el socket no estaba abierto —al arrancar, tras una reconexión— el envío fallaba en silencio y el botón se quedaba encendido con el guardián apagado. Un interruptor de seguridad que miente sobre su estado es peor que no tenerlo. Sin conexión, avisa y no cambia nada.

Alcance​

Vale para toda la casa —ventana y canales—: es un interruptor de la máquina, no de una conversación.

Lo que esto NO es​

No es un aislamiento. No detecta un borrado destructivo disfrazado: un script que JMAX escribe y luego ejecuta, una orden ofuscada, un comando que llama a otro. Es una red que caza lo evidente, y con el piloto apagado no hace falta porque entonces todo pregunta.

Probarlo​

python -m pytest tests/test_piloto_automatico.py -q

32 casos: que con el piloto lo corriente no pregunta, que el peligro vital pregunta siempre, y —tan importante como lo anterior— que el trabajo corriente no se marca como peligro. Un piloto que pregunta por todo no sirve para nada.