
Customer Assurance Operating System. Отвечайте на опросники по безопасности, которые присылают вам ваши клиенты, всего один раз.
Отвечайте на опросники по безопасности, которые присылают ваши клиенты, один раз.
Каждая компания, работающая с данными клиентов, получает одни и те же запросы снова и снова: опросники по безопасности, оценки конфиденциальности, проверки рисков поставщиков, due diligence закупок, запросы доказательств. Большинство организаций отвечают на них вручную — электронная таблица от клиента, папка с политиками, переписка по email и чья-то память о том, что они говорили в прошлый раз.
CAOS превращает это в систему учёта. Опросники становятся структурированной, исполняемой работой. Готовые ответы и ваши документы по комплаенсу становятся доступным для поиска и цитирования корпусом. Следующий опросник начинается с того, что вы уже говорили, при этом каждое утверждение прослеживается до документа или предыдущего ответа, из которого оно взято.
Это самостоятельно размещаемая система. Ваши политики, ваши ответы и опросники ваших клиентов остаются на вашей инфраструктуре.
Статус: v0. CAOS работает в продакшене, но этот репозиторий стал публичным недавно. Интерфейсы, схема и конфигурация всё ещё меняются. Внешниеcontributions пока не открыты — см. Contributing.
Читает опросники без угадывания. Загрузите XLSX клиента, и CAOS отобразит его точно — листы, строки, ячейки, скрытые столбцы, раскрывающиеся списки валидации. Затем вы отмечаете, какие строки подлежат ответу и какие ячейки заполнять, диапазонами, а не по одной. Нет парсера под каждого клиента, потому что нет стандарта: жирная строка может быть вопросом, пустой столбец — целью ответа, и каждая эвристика, которая правильно обрабатывает одну книгу, с уверенностью ошибается на другой.
Строит корпус из уже выполненной работы. Закрытие опросника публикует его отвеченные строки как многоразовые вопросы и ответы. Загруженные политики, сертификаты и отчёты становятся цитируемыми фрагментами. И то, и другое версионируется неизменяемо, поэтому ответ, отправленный в прошлом квартале, по-прежнему объясняет себя относительно документа, который действовал тогда.
Находит правильный предыдущий ответ. Поиск выполняет лексический и семантический поиск вместе, объединяет их ранжирования и повторно ранжирует лучших кандидатов. Язык комплаенса требует обоих: точных токенов, таких как «SOC 2 Type II», которые размывают эмбеддинги, и перефразировок, которые полностью пропускает поиск по ключевым словам.
Создаёт черновики обоснованных ответов. Опционально. Модель ищет по вашему корпусу с помощью
ограниченных, внесённых в белый список инструментов и создаёт черновик ответа с цитатами — плюс метку,
указывающую, откуда взяты полномочия: Knowledge grounded, Mixed, General guidance или Based on current answer.
Ответ General guidance не делает утверждений о вашей организации и прямо об этом говорит.
Отвечает в Google Chat. Слэш-команда /ciso обращается к тому же обоснованному корпусу со ссылкой
обратно в постоянную беседу в веб-приложении.
Экспортирует обратно в собственную рабочую книгу клиента. Ответы записываются в исходную структуру файла, в те ячейки, которые вы сопоставили, — а не в приближённую копию в формате CAOS.
Записывает всё. Добавляемый только журнал аудита с защищённой базой данных неизменяемостью, содержащий точные значения ответов до и после.
CAOS организован в девять доменных модулей. Три из них — Evidence, Knowledge и Tasks — глобальные: они не принадлежат проектам, потому что их ценность возникает при пересечении engagements.
| Модуль | Владеет | Документация |
|---|---|---|
| Identity | Режимы аутентификации, сессии, роли, пользователи, внешние привязки субъектов | docs |
| Projects | Контейнер engagement; каскад закрытия | docs |
| Questionnaires | Чтение рабочих книг, сопоставление строк, рабочее пространство ответов, экспорт | docs |
| Evidence | Глобальный репозиторий многоразовых комплаенс-артефактов | docs |
| Knowledge | Источники, фрагменты, эмбеддинги, поиск, исключения, цитаты | docs |
| AI | Беседы CISO, генерации, метки обоснованности | docs |
| Chat | Проверка Google Chat, привязка идентичности, доставка | docs |
| Tasks | Запрашиваемая человеческая работа между модулями | docs |
| Audit | Журнал событий только для добавления | 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
└───────────┘
Бэкенд — Python 3.12+, FastAPI, SQLAlchemy 2 async, PostgreSQL с pgvector, Redis, Taskiq
workers. Каждый модуль разделён на domain → application → infrastructure → presentation, с
однонаправленными зависимостями. domain ни от чего не зависит.
Фронтенд — React 19, TypeScript, Vite, Tailwind v4, shadcn/ui, Zustand. Общеприкладное состояние
сессии и оболочки живёт в src/app; состояние функций и серверного кэша — в сторах функций; длительные
страничные рабочие процессы — в контроллерах функций.
Оба канала поиска живут в PostgreSQL. Нет отдельной векторной базы данных — одно хранилище означает одну границу транзакций и одну резервную копию.
Внешние поставщики держатся на расстоянии. Каждая интеграция разделяет Platform Protocol (что CAOS ожидает, на языке продукта), Adapter Protocol и Vendor Implementation — единственный слой, импортирующий SDK. Именно поэтому эмбеддинги и повторное ранжирование работают на закреплённых локальных моделях или на Bedrock, и ни один код приложения не знает, какой из вариантов используется.
Подробнее: архитектура · границы интеграций
Документ становится доступным для поиска. Загрузка → неизменяемая версия → надёжная задача ингestion → commit → отправка в worker → извлечение фрагментов ≤1500 символов, каждый с локатором цитаты (страница PDF, абзац DOCX, лист/строка/ячейка XLSX) → генерация эмбеддингов → доступность для поиска. Задача фиксируется до отправки, поэтому сбой очереди становится видимым повторяемым состоянием, а не невидимой ожидающей строкой.