RecorridoPortalesCiclo ENSAgentesEvalsTelemetríaArquitectura Ver en GitHub
Código abierto · Apache-2.0 · sin actividad comercial desde septiembre de 2026

Una plataforma que implanta el Esquema Nacional de Seguridad de punta a punta. Motores deterministas, IA con evidencia.

Fulkro lleva a una empresa desde la categorización de su sistema hasta la declaración de conformidad que revisa la entidad certificadora: análisis de riesgos MAGERIT, declaración de aplicabilidad, plan de adecuación, evidencias firmadas y cuatro portales conectados.

Las decisiones normativas las toman 44 motores deterministas, trazables ante un auditor. 12 agentes de IA y un copiloto con RAG redactan y explican: cada texto declara su procedencia, cada agente se prueba contra el modelo real y cada llamada queda medida.

44 motores deterministas 12 agentes · evals · telemetría Evidencia firmada Ed25519 6.895 tests en verde
Estado del proyecto

Diseño, código y operación: una sola persona. Como negocio, Fulkro cesó su actividad en septiembre de 2026 por falta de tracción comercial: no presta servicio ni acepta clientes. Como plataforma, está completa, verificada y documentada, y su código se publica entero bajo Apache-2.0 en github.com/Fulkrodev/Fulkrosys, y se levanta en local con un comando y datos de demostración.

1.203 operaciones de API 253 tablas · RLS en 185 123 plantillas documentales RAG · acierto@5 de 0,959 97 páginas WCAG sin fallos graves
El recorrido

Treinta segundos por los tres portales.

Una grabación real del producto sobre el entorno de demostración: el consultor recorre el ciclo ENS en administración, el cliente revisa y firma en su portal y el auditor comprueba la cobertura en modo de sólo lectura. Pulsa un capítulo para saltar a él.

fulkro · entorno de demostración
Capacidades

Todo el Esquema Nacional de Seguridad, en un sistema conectado.

Lo que se decide en riesgos se refleja en las medidas, las medidas piden sus evidencias y las evidencias llegan listas al auditor. Estas son las piezas.

Ciclo ENS completo

Categorización por las cinco dimensiones del Anexo I, MAGERIT v3, declaración de aplicabilidad, plan con Gantt, implantación, simulacro de auditoría y declaración de conformidad.

Motores deterministas

44 motores de dominio. Cada regla normativa vive en uno solo, con tests que impiden duplicarla, y los dos ejes del Anexo II están verificados contra el BOE.

Capa de IA

12 agentes con salida estructurada, evaluados y medidos, y un copiloto que explica cada pantalla, cita el RD 311/2022 y responde en streaming. Cada texto declara su procedencia.

RAG normativo

1.031 fragmentos del RD 311/2022 y de la legislación de la UE, embeddings e5-large de 1024 dimensiones en pgvector y una recuperación elegida por evaluación.

Fábrica documental

123 plantillas (35 políticas, 36 procedimientos, 41 entregables y registros) que salen en DOCX y PDF con los datos del proyecto, versionadas y firmables.

Evidencia con custodia

Antivirus, sello SHA-256 y firma Ed25519 en cada evidencia, guardada en un almacén WORM con retención de 7 años. El auditor ve la cobertura medida contra ella.

Firma electrónica

Firma sobre lienzo (eIDAS art. 25.1) con sello Ed25519, cadena de hashes por documento, verificación por OTP y la firma incrustada en el PDF.

Nube y verificación técnica

Conectores de sólo lectura para Microsoft 365 y Google Workspace, y 13 servidores MCP de verificación (nube, red, web, SAST…) tras un guardián de alcance.

Operación y cumplimiento propio

Métricas Prometheus, coste de cada llamada al modelo, un monitor que aplica el ENS Medio a la propia plataforma, copias cifradas y 20 tareas programadas.

El ciclo ENS

Siete fases con puertas entre ellas, programadas en el código.

Cada fase consume lo que produjo la anterior. Elige una para ver qué motor la resuelve, qué produce y qué hace falta para pasar a la siguiente.

Los cuatro portales

Cada actor, su portal. Pantalla a pantalla.

Capturas reales del producto. El consultor construye el ENS en administración; el cliente ve, autoriza y firma en su portal; el auditor recibe el expediente en sólo lectura; y cualquiera puede verificar una firma sin entrar.

Imágenes reales del producto · datos de demostración

Fulkro aplica el ENS sobre sí misma. La plataforma mantiene su propio cumplimiento con el mismo rigor que implanta en el cliente, para no introducir riesgo en su organización.

El consultor

Administración

Contraseña y WebAuthn o TOTP.

  • 95 páginas, 46 pestañas por proyecto ordenadas según el ciclo
  • Centro de mando de todos los clientes
  • Copiloto que explica cada pantalla
La empresa que implanta

Cliente

Correo, contraseña y MFA.

  • 41 páginas para ver, autorizar, firmar y recibir
  • Avance, tareas, documentos y chat
  • Tono sin jerga, vigilado por tests
La entidad certificadora

Auditor

Enlace Ed25519 y código de un solo uso.

  • Expediente completo de sólo lectura
  • Mapa de cobertura y registro inmutable
  • Anotaciones y aclaraciones en tiempo real
Cualquiera con un enlace

Público

Enlace firmado.

  • Descarga de documentos y firma de terceros
  • Cuestionario de diagnóstico previo
  • Verificación de firmas contra la clave pública
Agentes de IA

Los motores deciden. El modelo redacta, y lo dice.

Ninguna decisión normativa depende de un modelo de lenguaje: la categoría, las medidas que aplican y los plazos los calcula un motor determinista. La IA redacta, resume y explica, con salida estructurada, citas obligatorias y la procedencia de cada texto a la vista.

La capa de IA: el motor decide y produce los entregables firmables; los agentes redactan con salida estructurada y cada texto declara su procedencia

Doce agentes, cada uno con un solo trabajo y su modelo. Once devuelven salida estructurada contra un esquema JSON, con tres reintentos y una plantilla de reserva si la salida no lo cumple.

Redactor de diagnósticosA4m22Sonnet

Las secciones narrativas del diagnóstico E-090; los datos los calcula el motor.

Analista de contratosA6m14Sonnet

Revisa los contratos del cliente con sus proveedores y detecta brechas ENS y RGPD.

Auditor interno virtualA11m10Opus

Añade criterio de auditor sénior al simulacro determinista de 58 preguntas.

Coach del clienteA12m09Sonnet

Evalúa las respuestas del cliente a las preguntas del auditor.

CopilotoA14m11Sonnet

Conversa sobre la pantalla actual con RAG, citas y respuesta en streaming.

Cualificador comercialA17m13Sonnet

Puntúa una oportunidad tras el primer contacto.

Reunión exploratoriaA18m13Sonnet

Recalcula en vivo las conclusiones de la reunión a partir de las notas.

Redactor de propuestasA19m13Opus

Redacta la propuesta sobre la tarifa que calcula el motor.

Negociador contractualA20m14Sonnet

Convierte la propuesta aprobada en el borrador de contrato.

Detector de discrepanciasA21m04determinista

Cruza lo declarado con lo verificado.

Clasificador documentalA27m24Haiku

Ubica los documentos que la heurística determinista no sabe clasificar.

Enriquecedor de la DdAA31m03Sonnet

Propone una justificación con el contexto del cliente para las medidas que no aplican.

modelo

Lo redacta el modelo y la salida cumple su esquema JSON.

plantilla_por_fallo_de_esquema

El modelo contesta, pero la salida no cumple el esquema tras tres reintentos: se entrega la plantilla.

sin_clave_de_api

Sin clave de API no se llama a ningún modelo, y la pantalla lo avisa.

Router de LLM

Tres reintentos ante un 429 (2, 8 y 32 s) y modelo de reserva si el pedido sigue saturado.

Caché de prompts

El prompt de sistema viaja con cache_control efímero y se reutiliza entre llamadas.

Topes de uso

El copiloto tiene cupo diario y mensual: avisa al 80 % y se detiene al 100 %.

Temperatura ≤ 0,2

Fijada por un catálogo que sabe qué modelos la admiten.

Guardia anti-inyección

Filtra instrucciones ocultas en el texto que llega del usuario o de un documento.

Tono al cliente

Un filtro rechaza jerga interna y lenguaje coercitivo en lo que ve el cliente.

RAG normativo

Recuperación medida, respuestas ancladas a la norma.

El copiloto responde con fragmentos del RD 311/2022 y de la legislación europea, y cita cada afirmación. La arquitectura de la recuperación no se elige por intuición: se mide.

RAG: ingesta, fragmentos, embeddings en pgvector, recuperación top-30 a top-5, prompt con reglas, router y validación, y la evaluación

1 · Ingesta

Un parser determinista trocea el BOE por artículos y anexos (con los 73 códigos de medida) y los textos de la UE: 1.031 fragmentos.

2 · Embeddings

multilingual-e5-large, 1024 dimensiones, en pgvector con índice HNSW sobre coseno.

3 · Recuperación

La pregunta y el contexto de la pantalla se vectorizan; 30 candidatos por coseno, se quedan los 5 mejores.

4 · Validación

Citas extraídas, al menos un 30 % de anclaje en los fragmentos y detección de «no está en el corpus».

Evaluación

49 consultas etiquetadas a mano

Las ramas se miden sobre las mismas consultas, con contrastes pareados por bootstrap de 1.000 remuestreos. La vectorial sola gana a la fusión con la rama léxica en las tres métricas, con intervalos que excluyen el cero: por eso la recuperación es vectorial.

vectorial − fusión · acierto@5+0,102IC [+0,020, +0,204]
vectorial − fusión · recall@5+0,157IC [+0,065, +0,255]
vectorial − fusión · MRR+0,125IC [+0,013, +0,246]
acierto@5
vectorial
0,959
fusión
0,857
recall@5
vectorial
0,824
fusión
0,667
MRR
vectorial
0,752
fusión
0,627
Evaluaciones

Cada agente, probado contra el modelo real. Cada umbral, en el repositorio.

Un modelo de lenguaje es una dependencia que puede cambiar sin avisar, y se evalúa como tal: conjuntos dorados curados a mano, umbrales versionados junto al código y una ejecución programada cada semana que detecta la deriva del modelo aunque nadie toque el repositorio.

22/22
agentes y motores probados de punta a punta contra el modelo
40
casos dorados curados a mano, en cuatro conjuntos
49
consultas etiquetadas para medir la recuperación
1.000
remuestreos por bootstrap en cada contraste
1Arnés deterministaen cada PR · sin red ni clave

Cada conjunto carga y valida contra su esquema, tiene su evaluador y su generador de salida sintética, y sus umbrales coinciden con los del repositorio.

2Contra el modelocon la clave de API

Cada conjunto corre contra el modelo de su agente: Haiku 4.5 para el clasificador documental y Sonnet para reuniones, cláusulas y auditoría de entregables.

3Sin verde vacíomínimo de casos evaluados

El gate exige evaluar todas las entradas: un acierto del 100 % sobre cero casos no pasa, y sin clave el job queda saltado, nunca en verde.

4Deriva del modelocada lunes, 07:00 UTC

Programada cada semana: la evaluación vuelve a correr contra el modelo aunque no cambie el código, y un cambio del proveedor se detecta sin esperar a un usuario.

5Historialen administración

Cada ejecución se guarda con su detalle por caso, y se lanza o se consulta desde el panel de observabilidad.

Cada técnica, donde aporta. Los conjuntos dorados cubren los agentes cuya salida es estructura verificable sin juicio: clasificación sobre un catálogo cerrado, extracción con enumerados y rangos, y mapeo de cláusulas según la categoría ENS. La prosa se valida por esquema en cada llamada y se prueba de punta a punta contra el modelo. La recuperación del copiloto tiene su propia evaluación, con intervalos de confianza.
Telemetría

Cada llamada al modelo deja rastro: qué se pide, cuánto cuesta, cuánto tarda y cómo termina.

La plataforma se observa con lo que de verdad sirve para operarla: un registro de cada llamada al modelo, métricas en formato Prometheus, un identificador por petición que atraviesa todos los registros y un panel de coste con alertas. Sin añadir dependencias.

Recorrido de una pregunta al copilotoel mismo X-Request-ID en cada tramo

Esquema del orden de los tramos. Los tiempos reales los expone /metrics; la recuperación, además, está medida en su evaluación.

Métricas en /metrics

Formato de exposición Prometheus, protegido con token.

  • fulkro_llm_llamadas_totalcontadorllamadas al modelo, por estado
  • fulkro_llm_coste_usd_totalcontadorcoste acumulado, en dólares
  • fulkro_llm_tokens_totalcontadortokens consumidos, por estado
  • fulkro_llm_latencia_segundoshistogramalatencia de las llamadas al modelo
  • fulkro_http_duracion_segundoshistogramaduración por método y ruta
  • fulkro_recuperacion_duracion_segundoshistogramaduración de cada rama del buscador
  • fulkro_recuperacion_errores_totalcontadorbúsquedas fallidas, por rama

Panel de observabilidad del modelo

En administración, sobre el registro llm_interaction_log.

  • Coste por periodo: hoy, últimos 7 y 30 días, y todo el histórico.
  • Mayores consumidores, por la función que llama al modelo.
  • Alertas de anomalía: coste alto, latencia alta o llamada fallida, cada una con su motivo.
  • Registro paginado de cada interacción, filtrable por función, modelo, estado y proyecto.
  • Topes del copiloto: aviso al 80 % y parada al 100 % del cupo diario y mensual.

Una línea por petición. Método, ruta, código y duración, con el identificador de la petición en cada línea de registro que se emite mientras dura. Quien ve un error en el navegador tiene el identificador exacto que buscar.

Rutas como plantilla

Se registra /api/v1/projects/{project_id}, no la URL concreta: la cardinalidad de las métricas no crece con cada identificador.

Series siempre presentes

Los cuatro estados del modelo se emiten aunque valgan cero, porque una serie que aparece y desaparece rompe las alertas.

Coste sin duplicar

Las métricas del modelo se leen de la base de datos, así que con dos réplicas el coste del sistema no se cuenta dos veces.

Arquitectura

Una sola puerta, cuarenta y cuatro motores y el aislamiento en la base de datos.

Next.js 15 delante, FastAPI con 1.203 operaciones detrás y PostgreSQL 16 con pgvector y RLS como fuente de verdad. Los procesos no guardan estado: escalar es añadir réplicas, y está medido con dos.

Arquitectura: cuatro portales, Next.js, una sola puerta de autenticación, 44 motores en cuatro grupos, trabajo asíncrono y capa de datos
Next.js 15 · React · TypeScriptTailwind · shadcn/ui · TanStack Query Python 3.12 · FastAPI · SQLAlchemy 2PostgreSQL 16 · pgvector · RLS Celery · Redis · SSEMinIO · Object LockSDK de Anthropic · FastEmbed Docker Compose · Caddy · GHCR
Seguridad y confianza

Una plataforma de seguridad que se aplica su propio estándar.

Fulkro aplica el ENS Medio sobre sí misma. Cada capa refuerza a la anterior.

1IdentidadWebAuthn o TOTP para el consultor, MFA para el cliente, enlaces Ed25519 con código de un solo uso para el auditor.
2SesiónJWT firmado con Ed25519 en cookie httpOnly y verificación CSRF en cada petición que escribe.
3AislamientoRLS en 185 de 253 tablas, 192 políticas y un rol de aplicación sin superusuario.
4IntegridadRegistro de auditoría con cadena SHA-256 por disparador; sin UPDATE ni DELETE posibles.
5CustodiaAntivirus, SHA-256 y firma Ed25519 en cada evidencia; bucket WORM con retención de 7 años.
6OperaciónCopias cifradas, monitor de cumplimiento ENS sobre la plataforma y derechos RGPD integrados.
Calidad y evaluaciones

Cada cifra, con el comando que la reproduce.

La suite completa corre contra PostgreSQL y MinIO reales, los tres portales pasan axe en cada push y cada agente se prueba de punta a punta contra el modelo.

6.895
tests de backend en verde, con base de datos real
413
escenarios E2E con Playwright, sin fallos
97
páginas auditadas con axe, sin fallos críticos ni graves
273
migraciones de esquema versionadas con Alembic
ci.yml

ruff, mypy, tipos del frontend, la suite sin base y el arnés de evaluación en cada PR.

pytest-completo.yml

La suite con base de datos en cuatro trozos, contra PostgreSQL sembrado y MinIO.

admin-polish-empirical.yml

axe (WCAG 2.2 AA) sobre 97 páginas de administración, cliente y auditor.

evals.yml

Los conjuntos dorados de los agentes, y su ejecución contra el modelo con clave.

security-scan.yml

bandit, safety y npm audit.

publish-image.yml

Construye y publica la imagen en GHCR.

Decisiones de arquitectura

Las decisiones que dan forma al sistema, y por qué.

Motores para decidir

Una decisión normativa tiene que poder reproducirse y explicarse ante un auditor, así que nunca la toma un modelo.

Una regla, un motor

Dos copias de una regla acaban divergiendo. Un test impide que una operación normativa exista dos veces.

Procedencia explícita

Nadie debe confundir una plantilla con un texto del modelo, así que cada resultado lo declara y la interfaz lo enseña.

Evaluar antes de elegir

La recuperación es vectorial porque, medida contra la fusión con una rama léxica, gana en las tres métricas con intervalos que excluyen el cero.

RLS en PostgreSQL

El aislamiento entre clientes no depende de que cada consulta recuerde filtrar: lo impone la base.

Nube de sólo lectura

Los conectores detectan brechas sin poder cambiar nada en la cuenta del cliente; la remediación arriesgada exige autorización.

El código

Se levanta con un comando, con datos dentro.

Sin clave de API: la plataforma arranca, siembra un proyecto de categoría MEDIA completo e imprime las credenciales de los tres portales. El README, en español y en inglés, lo explica todo con cifras reproducibles.

terminal
# clonar y levantar el demo
git clone https://github.com/Fulkrodev/Fulkrosys.git
cd Fulkrosys
make demo     # http://localhost:3000
make smoke    # entra en los tres portales y comprueba los datos
Preguntas sobre el proyecto

Lo que suele preguntarse de Fulkro.

¿Qué es el Esquema Nacional de Seguridad y por qué importa?

El Esquema Nacional de Seguridad (Real Decreto 311/2022) es el marco español de ciberseguridad para los sistemas que tratan información o prestan servicios al sector público. Las empresas que trabajan para la Administración deben acreditarlo, y cada vez más pliegos lo piden como requisito de solvencia.

¿Fulkro sigue operando como negocio?

No. La actividad comercial cesó en septiembre de 2026 por falta de tracción comercial: Fulkro no presta servicio ni acepta clientes. La plataforma está completa y verificada, con su suite de tests, sus evaluaciones y un entorno de demostración, y el código se publica entero para que cualquiera pueda estudiarlo o reutilizarlo.

¿Qué hace la IA y qué no?

La IA redacta, resume y explica: diagnósticos, propuestas, análisis de contratos y un copiloto que cita la norma. Lo que no hace es decidir: la categoría, las medidas aplicables y los plazos los calculan motores deterministas, y cada texto generado declara su procedencia.

¿Cómo se sabe que la IA funciona bien?

Con evaluaciones y telemetría. Cada agente se prueba de punta a punta contra el modelo real; los que devuelven estructura tienen conjuntos dorados con umbrales en el repositorio; la recuperación del copiloto está medida sobre 49 consultas etiquetadas; y cada llamada al modelo queda registrada con su coste, sus tokens y su latencia.

¿Fulkro emite el certificado del ENS?

No. En las categorías Media y Alta el certificado lo emite una entidad de certificación acreditada por ENAC, independiente. Fulkro implanta, prepara y entrega al auditor un expediente completo de sólo lectura.

¿Se puede probar?

Sí. Con Docker, make demo levanta la plataforma con un proyecto de demostración completo, sin clave de API. Los datos son ficticios.

Los motores deciden. El modelo redacta, y lo dice.