
自律ペネトレーションテストで初めて検証された、AIによる汎用状態空間探索エンジン。
Cairnは汎用的な問題解決エンジンです。
役割もワークフローも定義しません。起点と目標が与えられると、未知の状態空間を通る経路を探索します。
AIペネトレーションテストはそのような問題の一つであり、実証済みのものです。
ペネトレーションテストは本質的に、ほぼ無限の状態空間を対象とした方向性のある探索です:
この構造はペネトレーションテストに固有のものではありません。脆弱性研究、数学的証明、CTFチャレンジ — 明確な出発点、明確な成功条件、そしてその間の未知の経路を持つあらゆる問題が同じ形状を共有しています。
Cairnはこのクラスの問題のために構築されています。ペネトレーションテストは、その有効性が確認された最初の領域です。
エンジンは、明示的な事実-意図グラフを持つブラックボードアーキテクチャ上に構築されています。必要なプリミティブは次の3つだけです:
| 概念 | 意味 |
|---|---|
| Fact | ボードに書き込まれた確認済みの客観的な発見 |
| Intent | 宣言された探索の方向性(未実行) |
| Hint | いつでも注入される人間の判断。エージェントが次回読み取り時に取り込む |
グラフは起点から目標に向かって成長します。新しい事実(Fact)は足がかりであり、意図(Intent)は未知への一歩です。
エージェントワーカーはOODAループ(Observe: グラフ全体を観察、Orient: 現在の状態に方向づけ、Decide: 次の意図を決定、Act: 探索を実行)を実行し、発見事項を新しい事実(Fact)として書き戻します。ワーカーに固定の役割はありません。タスクは事前定義されたジョブ記述からではなく、グラフの現在の状態から実行時に生成されます。
エージェントは共有ボード(スティグマジー)を通じてのみ協調します。直接通信はありません。情報サイロもありません。
https://github.com/user-attachments/assets/e557b1ac-dda4-41cb-87dd-9d56dbf05133
3つのタスクタイプ、すべて同じワーカーによって実行されます:
| タスク | 動作 | 出力 |
|---|---|---|
| Bootstrap | プロジェクト開始時に問題を直接解決しようとする | Fact + 可能性のあるComplete |
システムアーキテクチャ:
┌──────────────────────────────────┐
│ Cairnサーバー │
│ Fact + Intent + Hint │
└─────────────────┬────────────────┘
│
Read / Write API
│
┌─────────────────┴────────────────┐
│ Dispatcher │
│ タスクをスケジュール、コンテナを管理、 │
│ プロトコルを書き込む │
└──────────┬───────────────┬───────┘
│ │
┌───────────────┴──┐ ┌──────┴──────────────┐
│ Worker Container│ │ Worker Container │
│ (Project A) │ │ (Project B) │
│ ┌────┐ ┌────┐ │ │ ┌────┐ ┌────┐ │
│ │ W. │ │ W. │ │ │ │ W. │ │ W. │ │
│ └────┘ └────┘ │ │ └────┘ └────┘ │
└──────────────────┘ └─────────────────────┘
Cairnサーバーはグラフの一貫性のみを維持します。
Cairnディスパッチャーはグラフを読み取り、タスクをスケジュールし、ワーカーコンテナの起動と停止を行い、プロトコルへの唯一の書き込み権限を持ちます。各プロジェクトは独自のワーカーコンテナを持ち、その中で複数のエージェントワーカーが同時に実行されます。エージェントワーカーはプロンプトを受け取り、構造化された出力を返すだけです。
対応ワーカーバックエンド:Claude Code、Codex、Pi。
Tencent Cloud Hackathon · AI Penetration Testing Challenge · 2nd Edition
610チーム · 1,345名の参加者 · 中国全土のトップ大学およびセキュリティ企業
| 指標 | 値 |
|---|---|
| 解決した問題数 | 54 / 54 — only team to 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のオープンソース義務なしで商用またはプロプライエタリな環境で使用したい場合は、商用ライセンスを取得するために私に連絡してください。
コントリビューション: プルリクエストを提出することにより、あなたのコントリビューションがAGPL-3.0およびプロジェクトの商用ライセンスの両方の下で使用されることに同意するものとします。
| Reason | グラフ全体を読み込む:目標は達成されたか?次に何を探索すべきか? | Complete / 新しいIntents / no-op |
| Explore | 1つの意図を取得し、探索を実行し、発見事項を報告する | 1つのFact |