De dónde sale mi 18/100: cómo se calcula la nota de exposición

Also in English: rosmarops.com/blog/how-the-agent-posture-score-works/

Publicar que mi máquina sacó un 18 sobre 100 tiene un problema evidente: ¿18 de qué? Si leyera eso en el blog de otro, lo primero que querría saber es cómo se calcula, y si podría hacer la cuenta yo mismo. Si no puedo, el número no vale gran cosa. Así que aquí va todo: qué pesa cada cosa, la fórmula y lo que se queda fuera.

RosmarOps no le pone una nota a la máquina, se la pone a cada agente. Claude Code tiene la suya y Cursor la suya. Van de 0 a 100, y más alto es mejor. La nota nunca contradice al semáforo del agente, porque su peor aviso fija la banda y la nota se mueve dentro. Rojo va de 0 a 49 (expuesto), amarillo de 50 a 79 (huecos abiertos) y verde de 80 a 100 (contenido).

Lo quise así a propósito. Me parecía absurdo un informe que dijera «rojo» arriba y «72» abajo. Un 79 sigue siendo amarillo. No está «casi bien»: le quedan huecos.

Qué pesa cada cosa

Cada aviso suma un peso, y no todos pesan igual. Los rojos son los que más:

  • una credencial de privilegio alto que el agente puede leer y sacar fuera: 20;
  • poder cambiar la configuración de otro agente: 15;
  • poder cambiar la suya: 15;
  • una credencial de privilegio alto guardada en un repositorio git: 20, o 30 si ese repositorio tiene un remoto.

Por debajo van los amarillos:

  • una credencial media que puede leer y sacar (o una que RosmarOps no sabe clasificar), o una alta que solo puede leer: 8;
  • poder reescribir las instrucciones de otro agente: 6;
  • las suyas: 4;
  • una credencial media guardada en git: 8.

Y tres matices. Si un aviso de credencial alcanza a cualquier proyecto y no solo a uno, su peso se multiplica por 1,5. Una credencial en git cuenta en la nota de todos los agentes, porque no depende de ninguno. Y las credenciales medias que un agente puede leer pero no sacar no son avisos, pero cada una suma 2.

Hay dos cosas que decidí no mezclar con el peso. La primera es la confianza. Cuando RosmarOps tiene que suponer algo, lo dice, pero una suposición no hace más ligera la exposición. Bajar el peso cuando no hay certeza sería hacerse trampas al solitario. La segunda es el número de copias: el mismo aviso en 27 proyectos pesa lo mismo que en uno, porque el alcance ya se cuenta.

La cuenta

Se suman los pesos: eso es P. Dentro de la banda, la nota baja al crecer P:

nota = suelo de la banda + anchura de la banda × 80 / (80 + P), redondeado hacia abajo.

Las anchuras son 49 en rojo, 29 en amarillo y 20 en verde.

Dicho así es árido, así que vamos con un agente inventado. Tiene cuatro avisos:

  • una credencial alta alcanzable desde cualquier proyecto (30);
  • acceso de escritura a la configuración de otro agente (15);
  • una credencial media alcanzable desde cualquier proyecto (12);
  • sus propios ficheros de instrucciones (4).

Suman 61. Banda roja, nota 27. Si arreglas solo la credencial alta, sube a 35. Si lo arreglas todo, a 100.

La fórmula tiene tres propiedades que me importaban más que la cifra exacta. Arreglar algo nunca baja la nota, y añadir un problema nunca la sube. Como se redondea hacia abajo, un arreglo pequeño no siempre cambia la cifra cuando queda mucho. Y solo hay 100 cuando no se encontró nada.

En mi caso, el ajuste que me proponía el informe me subía de 18 a 22. Cuatro puntos, y sigo en rojo. Me parece justo: un ajuste no arregla una máquina.

Lo que no cuenta

Hay ajustes que parecen un arreglo y se quedan a medias. Si un ajuste recorta la exposición pero, según la propia documentación del fabricante, no la cierra, la nota no se mueve. El informe te dice qué queda abierto. Prefiero una nota que no sube a una que sube por algo que no cierra nada.

La fórmula tiene versión. Si algún día cambio un peso, el informe separa lo que cambió en tu máquina de lo que cambió en el método. Y cuando cambian los agentes evaluados, o el número de proyectos baja más de un 10 %, dice que las dos ejecuciones no son comparables. La nota sirve para compararte contigo mismo, no con nadie más.

Y no lo mide todo. No entran los agentes que RosmarOps aún no evalúa, ni lo que hace un agente mientras trabaja (solo lee la configuración en reposo), ni lo que hace por dentro una herramienta MCP, ni el almacén de credenciales de Windows. Por eso un 100 significa una sola cosa: no se encontró exposición en lo que se leyó. Ni más ni menos.

Escrito con asistentes de IA. La máquina, los hallazgos y la decisión de publicar son míos.