
Общий поисковый движок пространства состояний на основе ИИ, впервые протестированный на автономном тестировании на проникновение.
Cairn — это универсальный движок для решения задач.
Он не определяет роли и не задаёт рабочие процессы. Имея начальную точку и цель, он ищет путь через неизвестное пространство состояний.
AI-пентестинг — одна из таких задач, и она уже проверена на практике.
По своей сути пентестинг — это направленный поиск в почти бесконечном пространстве состояний:
Такая структура не уникальна для пентестинга. Исследование уязвимостей, математическое доказательство, задачи CTF — любая проблема с чёткой начальной точкой, чётким условием успеха и неизвестным путём между ними имеет ту же форму.
Cairn создан для этого класса задач. Пентестинг — первая предметная область, на которой он был проверен.
Движок построен на архитектуре чёрной доски с явным графом фактов и намерений. Для работы ему нужны всего три примитива:
| Понятие | Значение |
|---|---|
| Факт | Подтверждённый объективный результат, записанный на доску |
| Намерение | Объявленное направление исследования, ещё не выполненное |
| Подсказка | Экспертная оценка, введённая в любой момент; поглощается агентами при следующем чтении |
Граф растёт от начальной точки к цели. Каждый новый Факт — это ступенька; каждое Намерение — шаг в неизвестность.
Рабочие агенты выполняют цикл OODA — Observe (наблюдают полный граф), Orient (оценивают текущее состояние), Decide (принимают решения о следующих намерениях), Act (выполняют исследование) — и записывают свои находки как новые Факты. У рабочих агентов нет фиксированных ролей. Задачи генерируются во время выполнения на основе текущего состояния графа, а не из заранее определённых должностных инструкций.
Агенты координируются исключительно через общую доску (стигмергия). Без прямого общения. Без информационных «силосов».
https://github.com/user-attachments/assets/e557b1ac-dda4-41cb-87dd-9d56dbf05133
Три типа задач, все выполняются одним и тем же рабочим агентом:
| Задача | Что делает | Результат |
|---|
Архитектура системы:
┌──────────────────────────────────┐
│ Сервер 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
Cairn — это универсальный движок для решения задач. Хотя он поддерживает пентестинг, решение CTF, оценку безопасности и исследование уязвимостей, его следует использовать только в средах, где у вас есть явное разрешение на действия.
Вы несёте полную ответственность за то, как вы используете этот проект. Не используйте Cairn против систем, сетей, приложений или данных без чёткого предварительного разрешения владельца или оператора. Несанкционированное тестирование безопасности, эксплуатация уязвимостей или доступ к данным могут быть незаконными и могут причинить вред.
Разработчики и участники этого проекта не одобряют и не несут ответственности за любое неправильное использование, злоупотребление, ущерб, потери или правовые последствия, возникающие в результате его использования. Используя этот проект, вы соглашаетесь обеспечить соответствие вашей деятельности всем применимым законам, нормативным актам, договорным обязательствам, а также профессиональным или организационным политикам вашей юрисдикции.
Этот проект лицензирован под GNU AGPLv3 для личного и образовательного использования.
Коммерческое использование: Если вы хотите использовать этот проект в коммерческой или проприетарной среде без обязательств, налагаемых AGPL-3.0, свяжитесь со мной для получения коммерческой лицензии.
Вклад: Отправляя Pull Request, вы соглашаетесь с тем, что ваш вклад может быть использован как под AGPL-3.0, так и под коммерческой лицензией проекта.
| Bootstrap | При запуске проекта пытается решить проблему напрямую | Факт + возможно Complete |
| Reason | Читает полный граф: достигнута ли цель? Что исследовать дальше? | Complete / новые Намерения / бездействие |
| Explore | Захватывает одно Намерение, выполняет исследование, сообщает результаты | Один Факт |