"Take the power back into your hands. Know what's running on your machine, even when you're not looking."
El modo daemon convierte Process Tracker en un centinela permanente. En lugar de escanear una vez y salir, el daemon vigila tu sistema en un loop continuo:
Iniciar → Escanear procesos → ¿Conocido? → Sí: dejarlo
→ No: registrar alerta
→ ¿Sistema sobrecargado? → alertar
→ Dormir → Repetir ∞
Cada proceso pasa por tres filtros:
| Filtro | ¿Qué evalúa? | Acción si no pasa |
|---|---|---|
| Self-check | ¿Es el propio tracker? | Ignorar (nunca alertar sobre sí mismo) |
| Sistema macOS | ¿Vive en /System/, /usr/, /sbin/? |
Monitorear recursos, nunca matar |
| Allowlist/Perfil | ¿Está en la lista blanca activa? | Registrar como desconocido |
# Escanea cada 2 segundos, registra desconocidos en audit.log
process_tracker --daemon --config allowlist.txt --audit-log audit.log --interval 2000Revisa el log:
cat audit.logAgrega procesos legítimos a tu allowlist:
echo "name:Brave Browser" >> allowlist.txt
echo "path:/Applications/Docker.app/Contents/MacOS/Docker Desktop" >> allowlist.txtRepite hasta que audit.log muestre cero falsos positivos.
Tu allowlist ahora cubre todos los procesos normales de tu Mac.
# Ahora sí: mata procesos realmente desconocidos
process_tracker --daemon --config allowlist.txt --audit-log audit.log --enforce
⚠️ Solo usar enforce cuando confías en tu allowlist. macOS tiene ~488 procesos de sistema. Con una allowlist inmadura,--enforcepodría matar procesos del SO y dejar tu Mac inestable.
El daemon reconoce automáticamente los procesos del sistema operativo por su ruta de ejecutable:
/System/Library/... → Sistema
/usr/libexec/... → Sistema
/usr/sbin/... → Sistema
/usr/bin/... → Sistema
/sbin/... → Sistema
/Library/Apple/... → Sistema
Todo lo demás → Usuario (requiere allowlist)
Esto cubre ~87% de los procesos sin necesidad de agregarlos manualmente.
Los procesos de sistema no se matan, pero si uno supera los umbrales de CPU o RAM, el daemon te alerta:
system-overload pid=371 name=mds cpu=95.20 ram=12.30
Puedes ajustar los umbrales:
process_tracker --daemon --cpu-threshold 90 --ram-threshold 25 ...Para monitorear procesos de sistema como cualquier otro (sin auto-detección):
process_tracker --daemon --no-ignore-system ...Un perfil es simplemente un archivo de allowlist con un nombre descriptivo.
Viven en el directorio profiles/:
profiles/
├── reposo.txt # Solo SO — nada de usuario
├── sin-distracciones.txt # Terminal + editor, nada más
├── escritura.txt # Terminal + editor + browser (docs)
└── compilando.txt # Todo lo de desarrollo
# Equivale a: --config profiles/sin-distracciones.txt
process_tracker --daemon --profile sin-distraccionesUsa el mismo formato de allowlist.txt:
# profiles/sin-distracciones.txt
name:iTerm2
name:nvim
name:tmux
path:/Applications/Cursor.app/Contents/MacOS/Cursor# profiles/compilando.txt
name:iTerm2
name:nvim
name:cargo
name:rustc
name:node
path:/Applications/Docker.app/Contents/MacOS/Docker Desktop
path:/Applications/Brave Browser.app/Contents/MacOS/Brave Browser# profiles/reposo.txt
# Vacío o solo con procesos críticos de usuario
# Todos los procesos de sistema ya se detectan automáticamente
name:Finder ┌───────────────────┐
│ Descubre tu Mac │
│ (modo observar) │
└────────┬──────────┘
│
┌────────▼──────────┐
│ Clasifica apps │
│ por actividad │
└────────┬──────────┘
│
┌──────────────┼──────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────┐ ┌────────────┐
│ reposo │ │ escribir │ │ compilar │
│ (mínimo) │ │ (medio) │ │ (amplio) │
└──────────────┘ └──────────┘ └────────────┘
- Corre el daemon en modo observar y revisa qué procesos usa tu Mac
- Clasifica cada app según en qué perfil debe estar
- Crea los perfiles y úsalos según lo que estés haciendo
El audit log registra dos tipos de eventos:
{"ts":1708300000,"kind":"audit","pid":1234,"uid":501,"ppid":1,"name":"SuspiciousApp","path":"/tmp/suspicious","action":"logged"}{"ts":1708300000,"kind":"system-overload","pid":371,"name":"mds","path":"/System/.../mds","cpu":95.20,"ram":12.30}El archivo también se exporta en CSV si usas --export-csv.
El daemon no te spamea. Cada proceso desconocido se reporta una sola vez. Si el proceso desaparece y vuelve a aparecer, se reporta de nuevo.
# Primer scan: alerta
unknown pid=1234 name=SuspiciousApp path=/tmp/sus
# Segundo scan: silencio (ya reportado)
# ... proceso 1234 muere ...
# Proceso reaparece con nuevo PID:
unknown pid=5678 name=SuspiciousApp path=/tmp/sus
process_tracker --daemon [OPTIONS]
Opciones del daemon:
--daemon Activar modo daemon (loop continuo)
--profile NAME Cargar profiles/NAME.txt como allowlist
--audit-log [FILE] Log de eventos (default: audit.log)
--no-ignore-system No auto-detectar procesos de macOS
--interval MS Intervalo de escaneo en ms (default: 1000)
--enforce Matar procesos desconocidos
Opciones de umbrales (para alertas de sistema):
--cpu-threshold PCT Umbral de CPU para alerta (default: 80)
--ram-threshold PCT Umbral de RAM para alerta (default: 20)
Opciones existentes:
--config FILE Archivo de allowlist (default: allowlist.txt)
--stealth Modo stealth (anomalías, independiente del daemon)
--export-csv [FILE] Exportar CSV
--export-jsonl [FILE] Exportar JSONL
Este daemon sigue las reglas del proyecto al pie de la letra:
- Un solo trabajo: observar, clasificar, y (opcionalmente) terminar procesos
- Minimalismo: cero dependencias nuevas, cero frameworks
- Sin comportamiento oculto: todo se activa con flags explícitos
- CLI-first, scriptable:
process_tracker --daemon --profile reposo & - Rápido y liviano:
starts_with()sobre strings,sleep()entre scans - Fail fast: errores precisos, sin estados ambiguos