
Движок поиска в пространстве состояний на основе LLM для автономного тестирования на проникновение, решения CTF и исследования уязвимостей. Использует архитектуру чёрной доски с агентами-исполнителями для исследования неизвестных путей от начальной точки до цели.
Cairn — это универсальный движок для решения задач.
Он не определяет роли и не задаёт рабочие процессы. Имея начальную точку и цель, он ищет путь через неизвестное пространство состояний.
AI-пентестинг — одна из таких задач, и она уже проверена на практике.
По своей сути пентестинг — это направленный поиск в почти бесконечном пространстве состояний:
Такая структура не уникальна для пентестинга. Исследование уязвимостей, математическое доказательство, задачи CTF — любая проблема с чёткой начальной точкой, чётким условием успеха и неизвестным путём между ними имеет ту же форму.
Cairn создан для этого класса задач. Пентестинг — первая предметная область, на которой он был проверен.
Движок построен на архитектуре чёрной доски с явным графом фактов и намерений. Для работы ему нужны всего три примитива:
| Понятие | Значение |
|---|---|
| Факт | Подтверждённый объективный результат, записанный на доску |
| Намерение | Объявленное направление исследования, ещё не выполненное |
| Подсказка | Экспертная оценка, введённая в любой момент; поглощается агентами при следующем чтении |
Граф растёт от начальной точки к цели. Каждый новый Факт — это ступенька; каждое Намерение — шаг в неизвестность.
Рабочие агенты выполняют цикл OODA — Observe (наблюдают полный граф), Orient (оценивают текущее состояние), Decide (принимают решения о следующих намерениях), Act (выполняют исследование) — и записывают свои находки как новые Факты. У рабочих агентов нет фиксированных ролей. Задачи генерируются во время выполнения на основе текущего состояния графа, а не из заранее определённых должностных инструкций.
Агенты координируются исключительно через общую доску (стигмергия). Без прямого общения. Без информационных «силосов».
https://github.com/user-attachments/assets/e557b1ac-dda4-41cb-87dd-9d56dbf05133
Три типа задач, все выполняются одним и тем же рабочим агентом:
| Задача | Что делает | Результат |
|---|---|---|
| Bootstrap | При запуске проекта пытается решить проблему напрямую | Факт + возможно Complete |
| Reason | Читает полный граф: достигнута ли цель? Что исследовать дальше? | Complete / новые Намерения / бездействие |
| Explore | Захватывает одно Намерение, выполняет исследование, сообщает результаты | Один Факт |
Архитектура системы:
┌──────────────────────────────────┐
│ Сервер Cairn │
│ Факты + Намерения + Подсказки │
└─────────────────┬────────────────┘
│
Чтение/Запись API
│
┌─────────────────┴────────────────┐
│ Диспетчер │
│ Планирует задачи, управляет │
│ контейнерами, пишет протокол │
└──────────┬───────────────┬───────┘
│ │
┌───────────────┴──┐ ┌──────┴──────────────┐
│ Контейнер рабочих│ │ Контейнер рабочих │
│ (Проект A) │ │ (Проект B) │
│ ┌────┐ ┌────┐ │ │ ┌────┐ ┌────┐ │
│ │ Аг.│ │ Аг.│ │ │ │ Аг.│ │ Аг.│ │
│ └────┘ └────┘ │ │ └────┘ └────┘ │
└──────────────────┘ └─────────────────────┘
Сервер Cairn поддерживает только согласованность графа.
Диспетчер Cairn читает граф, планирует задачи, запускает и останавливает контейнеры с рабочими агентами и является единственным писателем протокола. Каждый проект получает собственный контейнер для рабочих агентов; внутри него параллельно работают несколько агентов. Агенты получают только промпт и возвращают структурированный вывод.
Поддерживаемые бэкенды для рабочих агентов: Claude Code, Codex и Pi.
Хакатон Tencent Cloud · Задача AI-пентестинга · 2-й выпуск
610 команд · 1 345 участников · ведущие университеты и компании по безопасности со всего Китая
| Показатель | Значение |
|---|---|
| Решено задач | 54 / 54 — единственная команда с AK |
| Место в финале | 3-е |
Система никогда не тестировалась до соревнования. Полный конвейер был запущен впервые в 4 утра в день соревнования. Никакого обучения, никакой настройки, никаких специализированных инструментов. Ноль MCP-инструментов, ноль RAG, ноль предопределённых ролей агентов.
Необходимые компоненты
Оба способа установки требуют образ контейнера рабочих агентов:
docker pull --platform=linux/amd64 ghcr.io/oritera/cairn-worker-container:latest
Создайте свою локальную конфигурацию диспетчера и укажите конечные точки LLM и API-ключи:
cp dispatch.example.yaml dispatch.yaml
Скачайте базовый образ для сборки Cairn:
docker pull ghcr.io/astral-sh/uv:python3.13-trixie
docker compose up --build
Это запускает cairn-server на порту 8000 и cairn-dispatcher после того, как сервер пройдёт проверку работоспособности. Диспетчер монтирует dispatch.yaml из корня проекта и подключается к Docker через хост-сокет. Данные сохраняются в ./datas/cairn/.
# Запуск сервера
uv run --project cairn cairn serve
# Запуск диспетчера
uv run --project cairn cairn dispatch --config dispatch.yaml
# Только проверки работоспособности при запуске
uv run --project cairn cairn dispatch --config dispatch.yaml --startup-healthcheck-only
Запустите быстрый регрессионный набор без Docker и живых конечных точек моделей:
uv run --project cairn --group dev pytest