Cert-Ops copilot

демо · парк синтетический

Инвентарь TLS-сертификатов парка хостов. Считает код: SQL по витрине и детерминированный ранжировщик ротации. Ассистент только объясняет — и каждое число, имя хоста, дата и имя CA в его тексте проверяются против результатов запросов этого хода до того, как вы их увидите.

Спросить копилота

объясняет и планирует · ничего не меняет

Как считали

последний ход

Задайте вопрос — здесь появится исполненный SQL, длительность и число строк.

Результат

Стоимость за сутки

Сводка парка

Истекают по неделям

до 8 недель от опорной даты

Кто выпустил

сертификатов по CA

Ключи и подписи

слабое выделено

Сегменты и дефекты цепочек

хостов · сертификатов

Реальный TLS-скан собственных хостов

единственные настоящие данные на стенде

Сканируются только хосты закрытого списка — имя хоста от пользователя целью подключения стать не может. Порт всегда 443.

Что здесь происходит

Стенд — один статический бинарь на Go (без CGO) и файл витрины SQLite. Парк из 25 000 хостов с инвентарём сертификатов сгенерирован детерминированно по зерну: одно зерно — побайтово один и тот же парк, поэтому показательный ответ можно сверить руками один раз и опираться на него дальше.

Четыре барьера вокруг SQL модели

  1. Токенизатор: один оператор, только SELECT/WITH, без комментариев и служебных слов — по токенам, а не по подстрокам.
  2. Белый список таблиц из каталога схемы и белый список функций: sqlite_master и табличные pragma-функции отсекаются здесь.
  3. Соединение открыто только на чтение — mode=ro плюс query_only.
  4. Внешний LIMIT и таймаут: потолок выдачи обеспечивает движок, а не обещание модели написать LIMIT.

Grounding: ответ не показывается непроверенным

Из результатов инструментов хода собирается индекс фактов — числа, FQDN, даты, серийные номера, имена CA. Черновик ответа сканируется на токены тех же видов, и каждый обязан найтись в индексе. Не нашёлся — модель получает список неподтверждённых значений и одну попытку переписать; второй промах заканчивается отказом, а текст модели выбрасывается целиком. Числа из вашего вопроса подтверждения не требуют: это условие задачи.

Документация

  • docs/ADR-0001-agent-grounding.md — почему валидатор, а не «хороший промпт».
  • docs/ADR-0002-storage.md — SQLite для демо, ClickHouse для парка с историей сканов.
  • docs/ADR-0003-sql-guard.md — барьеры вокруг SQL и границы их применимости.
  • docs/ADR-0004-scan-whitelist.md — почему список хостов закрытый.
  • docs/C4.md — контекст, контейнеры, компоненты (Mermaid).
  • docs/clickhouse-schema.sql — эскиз схемы прод-масштаба.

Парк синтетический и помечен так везде, где показывается. Реальны только строки scan_results: это настоящие рукопожатия с собственными хостами стенда.