
Customer Assurance Operating System. Responde los cuestionarios de seguridad que te envían tus clientes, una sola vez.
Responde una sola vez a los cuestionarios de seguridad que te envían tus clientes.
Toda empresa que maneja datos de clientes recibe las mismas solicitudes una y otra vez: cuestionarios de seguridad, evaluaciones de privacidad, revisiones de riesgo de proveedores, debida diligencia de compras, solicitudes de evidencia. La mayoría de las organizaciones las responden a mano: una hoja de cálculo del cliente, una carpeta de políticas, un hilo de correo electrónico y la memoria de alguien sobre lo que dijo la última vez.
CAOS convierte eso en un sistema de registro. Los cuestionarios se convierten en trabajo estructurado y respondible. Las respuestas terminadas y tus documentos de cumplimiento se convierten en un corpus buscable y citable. El siguiente cuestionario parte de lo que ya dijiste, con cada afirmación trazable al documento o respuesta anterior de la que proviene.
Es autohospedado. Tus políticas, tus respuestas y los cuestionarios de tus clientes permanecen en tu infraestructura.
Estado: v0. CAOS se ejecuta en producción, pero este repositorio es recientemente público. Las interfaces, el esquema y la configuración aún están en movimiento. Las contribuciones externas aún no están abiertas; consulta Contribuciones.
Lee cuestionarios sin adivinar. Sube un XLSX de un cliente y CAOS lo renderiza fielmente: hojas, filas, celdas, columnas ocultas, listas desplegables de validación. Luego marcas qué filas se pueden responder y qué celdas completar, por rangos y no de una en una. No existe un analizador por cliente, porque no hay un estándar: una fila en negrita puede ser una pregunta, una columna en blanco puede ser el destino de la respuesta, y toda heurística que acierta con un libro de trabajo falla con confianza con otro.
Crea un corpus a partir del trabajo que ya terminaste. Cerrar un cuestionario publica sus filas respondidas como preguntas y respuestas reutilizables. Las políticas, certificaciones e informes subidos se convierten en pasajes citables. Ambos tienen versiones inmutables, por lo que una respuesta que enviaste el trimestre pasado todavía se explica en relación con el documento vigente en ese momento.
Encuentra la respuesta anterior correcta. La recuperación ejecuta búsqueda léxica y semántica en conjunto, fusiona sus clasificaciones y reordena los mejores candidatos. El lenguaje de cumplimiento necesita ambas: tokens exactos como "SOC 2 Type II" que los embeddings difuminan, y paráfrasis que la búsqueda por palabras clave pierde por completo.
Redacta respuestas fundamentadas. Opcional. El modelo busca en tu corpus a través de herramientas acotadas y de lista permitida, y redacta una respuesta con citas, además de una etiqueta que indica de dónde proviene su autoridad: Knowledge grounded, Mixed, General guidance o Based on current answer. Una respuesta de General guidance no hace ninguna afirmación sobre tu organización, y lo dice.
Responde en Google Chat. Un comando de barra /ciso usa el mismo corpus fundamentado, con un enlace de regreso a una conversación persistente en la aplicación web.
Exporta de vuelta al libro de trabajo del propio cliente. Las respuestas se escriben en la estructura de archivo original, en las celdas que mapeaste, no en una aproximación con la forma de CAOS.
Registra todo. Un registro de auditoría de solo añadidura con inmutabilidad impuesta por la base de datos, que conserva los valores exactos de las respuestas antes y después.
CAOS está organizado en nueve módulos de dominio. Tres de ellos — Evidence, Knowledge y Tasks — son globales: no pertenecen a proyectos, porque su valor proviene de atravesar compromisos.
| Module | Responsible for | Docs |
|---|---|---|
| Identity | Modos de autenticación, sesiones, roles, usuarios, vinculaciones de sujetos externos | docs |
| Projects | El contenedor del compromiso; cascada de cierre | docs |
| Questionnaires | Lectura de libros de trabajo, mapeo de filas, espacio de trabajo de respuestas, exportación | docs |
| Evidence | Repositorio global de artefactos de cumplimiento reutilizables | docs |
| Knowledge | Fuentes, pasajes, embeddings, recuperación, exclusiones, citas | docs |
| AI | Conversaciones del CISO, generaciones, etiquetas de fundamentación | docs |
| Chat | Verificación de Google Chat, vinculación de identidad, entrega | docs |
| Tasks | Trabajo humano solicitado entre módulos | docs |
| Audit | Registro de eventos de solo añadidura | docs |
Internet
│
┌─────┴─────┐
│ nginx │ TLS · static frontend · /api proxy
└─────┬─────┘
┌──────────────┼──────────────┐
│ │ │
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴──────┐
│ Frontend │ │ API │ │ Taskiq │
│ React │ │ FastAPI │ │ workers │
│ static │ │ :18800 │ │ │
└───────────┘ └─────┬─────┘ └─────┬──────┘
│ │
┌─────┴──────────────┴─────┐
│ │
┌─────┴──────┐ ┌──────┴─────┐
│ PostgreSQL │ │ Redis │
│ pgvector │ │ queue+cache│
└────────────┘ └────────────┘
│
┌─────┴─────┐
│ Providers │ Bedrock · local models · Google Chat
└───────────┘
Backend — Python 3.12+, FastAPI, SQLAlchemy 2 async, PostgreSQL con pgvector, Redis, workers de Taskiq. Cada módulo se divide en domain → application → infrastructure → presentation, con dependencias unidireccionales. domain no depende de nada.
Frontend — React 19, TypeScript, Vite, Tailwind v4, shadcn/ui, Zustand. El estado de sesión y de la interfaz de toda la aplicación vive en src/app; el estado de funcionalidades y de caché del servidor vive en los stores de funcionalidades; los flujos de página de larga duración viven en los controladores de funcionalidades.
Ambos canales de recuperación viven en PostgreSQL. No hay una base de datos vectorial separada: un solo almacén significa un único límite de transacción y una única copia de seguridad.
Los proveedores externos se mantienen a distancia. Cada integración separa un Protocolo de Plataforma (lo que CAOS espera, en lenguaje de producto), un Protocolo de Adaptador y una Implementación de Proveedor — la única capa que importa el SDK. Por eso los embeddings y el reranking se ejecutan en modelos locales fijados o en Bedrock sin que el código de la aplicación sepa cuál.
Detalle: arquitectura · límites de integración