
Un moteur de recherche d'espaces d'états générique basé sur l'IA, validé d'abord sur des tests de pénétration autonomes.
Cairn est un moteur de résolution de problèmes à usage général.
Il ne définit ni rôles, ni workflows. Étant donné une origine et un objectif, il cherche un chemin à travers un espace d'états inconnu.
Le test d'intrusion IA est l'un de ces problèmes — et il est éprouvé.
Le test d'intrusion est fondamentalement une recherche dirigée à travers un espace d'états quasi infini :
Cette structure n'est pas propre au test d'intrusion. La recherche de vulnérabilités, la preuve mathématique, les défis CTF — tout problème avec un point de départ clair, une condition de succès claire et un chemin inconnu entre les deux partage la même forme.
Cairn est conçu pour cette classe de problèmes. Le test d'intrusion est le premier domaine sur lequel il a été validé.
Le moteur repose sur une architecture de tableau noir (Blackboard Architecture) avec un graphe explicite faits-intentions. Trois primitives suffisent :
| Concept | Signification |
|---|---|
| Fait | Un résultat confirmé et objectif écrit sur le tableau |
| Intention | Une direction d'exploration déclarée, pas encore exécutée |
| Indice | Jugement humain injecté à tout moment ; absorbé par les agents lors de la prochaine lecture |
Le graphe croît de l'origine vers l'objectif. Chaque nouveau Fait est une pierre angulaire ; chaque Intention est un pas dans l'inconnu.
Les Agents Ouvriers (Agent Workers) exécutent une boucle OODA — Observer l'ensemble du graphe, S'orienter vers l'état actuel, Décider des prochaines intentions, Agir pour explorer — et écrivent leurs résultats en tant que nouveaux Faits. Les ouvriers n'ont pas de rôles fixes. Les tâches sont générées à l'exécution à partir de l'état actuel du graphe, et non de descriptions de poste prédéfinies.
Les agents coordonnent exclusivement via le tableau partagé (Stigmergie). Aucune communication directe. Aucun silo d'information.
https://github.com/user-attachments/assets/e557b1ac-dda4-41cb-87dd-9d56dbf05133
Trois types de tâches, toutes exécutées par le même Ouvrier :
| Tâche | Ce qu'elle fait |
|---|
Architecture du système :
┌──────────────────────────────────┐
│ Serveur Cairn │
│ Faits + Intentions + Indices │
└─────────────────┬────────────────┘
│
API Lecture / Écriture
│
┌─────────────────┴────────────────┐
│ Dispatcheur │
│ Planifie les tâches, gère │
│ les conteneurs, écrit le │
│ protocole │
└──────────┬───────────────┬───────┘
│ │
┌───────────────┴──┐ ┌──────┴──────────────┐
│ Conteneur Ouvrier│ │ Conteneur Ouvrier │
│ (Projet A) │ │ (Projet B) │
│ ┌────┐ ┌────┐ │ │ ┌────┐ ┌────┐ │
│ │ O. │ │ O. │ │ │ │ O. │ │ O. │ │
│ └────┘ └────┘ │ │ └────┘ └────┘ │
└──────────────────┘ └─────────────────────┘
Serveur Cairn maintient uniquement la cohérence du graphe.
Dispatcheur Cairn lit le graphe, planifie les tâches, lance et arrête les conteneurs ouvriers, et est le seul à écrire dans le protocole. Chaque projet possède son propre Conteneur Ouvrier ; plusieurs Agents Ouvriers s'exécutent simultanément à l'intérieur. Les Agents Ouvriers reçoivent uniquement une invite et renvoient une sortie structurée.
Backends ouvriers supportés : Claude Code, Codex et Pi.
Tencent Cloud Hackathon · Défi de test d'intrusion IA · 2e édition
610 équipes · 1 345 participants · des meilleures universités et entreprises de sécurité à travers la Chine
| Métrique | Valeur |
|---|---|
| Problèmes résolus | 54 / 54 — seule équipe à AK |
| Classement final | 3e |
Le système n'avait jamais été testé avant la compétition. L'ensemble du pipeline est entré en ligne pour la première fois à 4 heures du matin le jour de la course. Pas d'entraînement, pas de réglage, pas d'outillage spécifique au domaine. Zéro outil MCP, zéro RAG, zéro rôle d'agent prédéfini.
Prérequis
Les deux méthodes d'installation nécessitent l'image du conteneur ouvrier :
docker pull --platform=linux/amd64 ghcr.io/oritera/cairn-worker-container:latest
Créez votre configuration de dispatcheur locale et remplissez vos points de terminaison LLM et vos clés API :
cp dispatch.example.yaml dispatch.yaml
Récupérez l'image de base utilisée pour construire Cairn :
docker pull ghcr.io/astral-sh/uv:python3.13-trixie
docker compose up --build
Cela démarre cairn-server sur le port 8000 et cairn-dispatcher une fois que le serveur a passé son contrôle de santé. Le dispatcheur monte dispatch.yaml depuis la racine du projet et se connecte à Docker via le socket hôte. Les données sont persistées dans ./datas/cairn/.
# Démarrer le serveur
uv run --project cairn cairn serve
# Exécuter le dispatcheur
uv run --project cairn cairn dispatch --config dispatch.yaml
# Exécuter uniquement les contrôles de santé de démarrage
uv run --project cairn cairn dispatch --config dispatch.yaml --startup-healthcheck-only
Exécutez la suite de régression rapide sans Docker ni points de terminaison de modèle en direct :
uv run --project cairn --group dev pytest
Cairn est un moteur de résolution de problèmes à usage général. Bien qu'il prenne en charge les workflows de test d'intrusion, de résolution de CTF, d'évaluation de sécurité et de recherche de vulnérabilités, il est destiné à être utilisé uniquement dans des environnements où vous disposez d'une autorisation explicite d'opérer.
Vous êtes seul responsable de la façon dont vous utilisez ce projet. N'utilisez pas Cairn contre des systèmes, réseaux, applications ou données sans autorisation préalable claire du propriétaire ou de l'exploitant. Les tests de sécurité, l'exploitation ou l'accès aux données non autorisés peuvent être illégaux et causer des dommages.
Les développeurs et contributeurs de ce projet n'approuvent ni n'assument la responsabilité de toute utilisation abusive, dommage, perte ou conséquence juridique découlant de son utilisation. En utilisant ce projet, vous acceptez de veiller à ce que vos activités soient conformes à toutes les lois, réglementations, obligations contractuelles et politiques professionnelles ou organisationnelles applicables dans votre juridiction.
Ce projet est sous licence GNU AGPLv3 pour une utilisation personnelle et éducative.
Utilisation commerciale : Si vous souhaitez utiliser ce projet dans un environnement commercial ou propriétaire sans les obligations open-source de l'AGPL-3.0, veuillez me contacter pour obtenir une licence commerciale.
Contributions : En soumettant une Pull Request, vous acceptez que vos contributions puissent être utilisées à la fois sous l'AGPL-3.0 et sous la licence commerciale du projet.
| Sortie |
|---|
| Bootstrap | Au démarrage du projet, tente de résoudre le problème directement | Fait + éventuel Complete |
| Reason | Lit l'ensemble du graphe : l'objectif est-il atteint ? Que faut-il explorer ensuite ? | Complete / nouvelles Intentions / no-op |
| Explore | Revendique une Intention, exécute l'exploration, rapporte les résultats | Un Fait |