Engine
One orchestrator owns four loops. The snapshot vector sits behind a mutex; detail and
hash requests ride condition-variable work queues so a slow reputation call never stalls
the scanner.
| Thread | Cadence | Job |
| scannerLoop | ~1.5 s | Snapshot → enrich → classify → ML score → mitigate |
| detailsLoop | on demand | Modules, handles, connections, registry for the selected PID |
| hashLoop | on demand | SHA-256 / MD5 via BCrypt, then reputation lookup |
| OnlineTrainer | ~30 s | Retrain the forest and hot-swap it in |
| Bridge push | ~1.5 s | The snapshot, posted to the page as a web message rather than a megabyte of script to evaluate; nothing is drawn while the window is hidden |
Closing the window does not stop it: MLPA stays in the tray, keeps writing the
timeline, and warns through Windows notifications. The startup task starts it there at
sign-in.
The same engine runs without a window. MLPA.exe --cli --fail-on-threat
exits 20 on any malicious verdict and 10 on any suspicious one, which makes it a scheduled-task
or CI gate rather than something you have to sit and watch.