El problema
Cada vez que un proyecto necesitaba demostrar seguridad (ISO 27001), privacidad (RGPD), calidad (ISO 25010) o accesibilidad (WCAG), yo reescribía lo mismo desde cero: detectores de secretos, validadores de HTML, cifrado de campos sensibles… Y cuando empecé a programar con agentes de IA apareció un segundo problema: cada agente aplicaba «buenas prácticas» a su manera, sin criterio común y sin forma de comprobarlo.
Además, no todos los proyectos necesitan todas las normas. Auditar accesibilidad en una CLI sin HTML, o la ley europea de ciberresiliencia en un script interno, produce fallos que no significan nada y que acaban ignorándose.
La solución
kit-iso convierte el cumplimiento normativo en código: una librería Python con CLI que se instala en cualquier proyecto con una línea, decide qué normas le aplican y audita controles técnicos verificables. Empezó como un toolkit de 5 módulos (v0.1) y hoy es una herramienta que uso en mis propios proyectos, con GitHub Action y 249 tests.
1. Triaje con evidencia
kit-iso init --detectar hace siete preguntas de sí o no y las rellena por adelantado mirando el propio repositorio: ¿tiene HTML?, ¿base de datos?, ¿campos como email, dni o iban?, ¿librerías de IA?, ¿se distribuye como producto? Enseña la evidencia, yo (o el agente, pidiendo confirmación) decido, y la decisión queda escrita en kit-iso.toml con su porqué. Los controles que no aplican salen en el informe como omitidos, no como fallos.
2. Instrucciones para cualquier agente de IA
init instala además una skill en formato Agent Skills y un bloque en AGENTS.md, de forma que el kit queda preparado para Claude Code, Cursor, Antigravity, Codex y OpenCode. Basta con decirle al agente «aplica el kit-iso según kit-iso.toml»: lee el triaje, aplica solo los módulos activos, corrige con el formato veredicto / hallazgo / remediación y verifica con kit-iso auditar.
3. Auditoría en cada push
kit-iso init --ci genera un workflow que usa la GitHub Action del propio repositorio: instala el kit, audita, vuelca el informe en el resumen del job y lo falla si algún control no pasa.
Una norma, un módulo
Dónde se ejecuta
Módulos y normas
| Módulo | Norma | Qué aporta |
|---|---|---|
seguridad | ISO 27001 | Cifrado Fernet, detector de secretos (8 patrones + entropía de Shannon), contraseñas con argon2/bcrypt, cabeceras de seguridad y TLS |
base_datos | ISO 27001 | SQL parametrizado con lista blanca de tablas y columnas |
privacidad | ISO 27701 + RGPD | Detector de datos personales (DNI/NIE, IBAN, teléfonos…) y enmascarado de logs |
calidad | ISO 25010 | Complejidad ciclomática, cobertura y rendimiento |
iso_5055 | ISO/IEC 5055 | Hallazgos de bandit traducidos a debilidades CWE |
iso_25012 | ISO/IEC 25012 | Calidad de datos: completitud, exactitud y consistencia |
usabilidad | ISO 9241 | Validaciones de interfaz eficaz y eficiente |
accesibilidad | WCAG 2.1 / ISO 40500 | Seis criterios verificados sobre el HTML real |
ai_act | AI Act + ISO 42001 | Clasificación de riesgo, aviso de transparencia (art. 50), registro de decisiones y documentación técnica |
cra | Cyber Resilience Act | SBOM CycloneDX, política de divulgación de vulnerabilidades y checklist de seguridad por diseño |
Decisiones técnicas
- Una norma, un módulo. Importas solo lo que necesitas y añadir una norma no toca las demás.
- Dependencias opcionales. Los drivers de base de datos y las herramientas de auditoría van en extras (
[bd],[auditoria]). Instalar el kit en un proyecto no arrastrapsycopg2nimysql-connectorsi no los usa. - La heurística propone y la persona decide. El triaje nunca activa módulos por su cuenta: enseña la evidencia y deja escrita la decisión.
- Honestidad sobre lo que es. El kit ayuda a implementar y demostrar controles técnicos, pero no certifica nada: ISO 27001 o 42001 certifican sistemas de gestión, no código. Lo dejo escrito en el README para que nadie lo venda como un sello.
- Versionado semántico y tags. Cada proyecto fija una versión (
@v1.1.0) y actualiza cuando decide. El changelog sigue Keep a Changelog.
Stack desglosado
- Lenguaje: Python 3.10+, CLI propia y API pública tipada (
py.typed). - Auditoría:
bandit(CWE),radon(complejidad), parser HTML para WCAG. - Seguridad:
cryptography(Fernet), argon2 y bcrypt. - CI: GitHub Actions con matriz Python 3.10 y 3.12,
pip-audit, autoauditoría y prueba de la Action contra el propio repositorio. - Distribución: GitHub Action composite + skill en formato Agent Skills para cinco agentes.
Resultados y aprendizajes
Lo que funcionó: usarlo en mis propios proyectos. Mi asistente de Telegram pasa los controles de ISO 27001, 5055, 25010, 27701 y CRA con este kit, y cada hallazgo aceptado tiene su porqué documentado. Probarlo con un proyecto real me enseñó más que cualquier test.
Lo que aprendí: las normas suenan abstractas hasta que las conviertes en comprobaciones concretas. Cuando tienes «ningún secreto en el código», «alt en cada imagen», «SBOM generado» y «aviso de que hablas con una IA», el cumplimiento deja de ser papeleo y se convierte en ingeniería.
Trabajo futuro: el módulo del Esquema Nacional de Seguridad (ENS), obligatorio para el sector público español y sus proveedores, y más criterios de WCAG.