Cairn 拆解:不定义角色、不写工作流,让 Agent 自己在状态空间里搜路

一、速览:值不值得你花时间

推荐指数:★★★★☆(4 / 5)

给到这个分数的理由:它是我最近看到的、思路上最不一样的一个开源 AI 安全项目。绝大多数同类工具做的是「把渗透流程拆成角色和阶段,然后让 Agent 各司其职」;Cairn 反过来 —— 不定义角色、不定义工作流,只给一个起点和一个终点,让引擎自己在近乎无限的状态空间里搜路径。而且它不是纸上谈兵:腾讯云黑客松 AI 渗透测试挑战赛第二届,610 支队伍里唯一 AK(54/54)

扣掉的一颗星在三个地方:项目只有 5 个月(2026-04 才开源);AGPL-3.0 且 README 额外挂了一条「商用需联系作者」的声明(合规上要留意);Worker 后端依赖 Claude Code / Codex / Pi,跑一次完整搜索的 token 账单不会好看。

关键数据(截至 2026-09-20)

语言 Python(≥ 3.12,uv 管理依赖)
Star / Fork 2,859 / 384
许可证 AGPL-3.0(README 另声明「个人与教育用途」,商用需单独联系作者拿商业授权)
活跃度 最近提交 2026-09-07(13 天前);Open Issues 10
首次发布 2026-04-19(约 5 个月)
Worker 后端 Claude Code / Codex / Pi
官方标签 ai-agent、penetration-testing、blackbox-testing、ctf、ctf-tools、red-teaming、llm

适合谁

人群 匹配度 说明
红队 / 渗透工程师 ★★★★☆ 黑盒场景(没源码)比「读源码派」更贴合;代价是出结果慢、模型成本高
AI 安全研究员 ★★★★★ 黑板 + 事实意图图 + Stigmergy 协作,是当下少见的「非角色流水线」范式,很值得拆
企业安全运营 ★★☆☆☆ 太年轻 + AGPL 商用授权未明 + 依赖商业模型 CLI,短期不建议进生产
CTF 选手 ★★★★☆ 官方标签直接写了 ctf / ctf-tools,黑客松成绩也是在解题场景里打出来的
个人 / 独立开发 ★★★☆☆ Python + uv 起步不难,但要跑出效果得有 Claude Code 或 Codex 的订阅

二次开发

允许吗? AGPL-3.0 允许改、允许自用,对外提供服务需要开源你的改动。README 里额外那句「个人与教育用途,商用请联系我」是作者单方面加的 —— AGPL 本身不区分个人与商用,合规时两条都要顾及,真要落地建议先问作者。

难不难? 分三层:

  • 换模型后端 / 改配置:★☆☆☆☆dispatch.yaml 里填 LLM endpoint 和 worker 类型即可)
  • 改集成:★★★☆☆(Server 提供读写的 HTTP API,接外部系统不难,但协议由 Dispatcher 独占写入)
  • 改内核:★★★★☆(黑板图、调度策略、Stigmergy 协调都在内核,Python 写的但抽象层次高,得先吃透 OODA 和三类任务)

二、先说它是什么,不是什么

不是「又一个 AI 渗透测试工具」。README 第一句就写清楚了:Cairn 是一个通用问题求解引擎,渗透测试只是它被验证过的第一个问题域。

作者给的定义是这样的:

渗透测试本质上是一次在近乎无限的状态空间里的定向搜索:起点已知(目标 IP、目标系统),终点明确(拿 shell、拿 flag),路径未知

这个结构不是渗透测试独有的 —— 漏洞研究、数学证明、CTF 题目,凡是「起点清楚、成功条件清楚、中间路径未知」的问题,都是同一个形状。

拿第 2 期的 Shannon 对比一下就很直观:Shannon 是「读源码 → 找攻击面 → 真打一遍 → 验证 → 出报告」,角色和阶段是写死的;Cairn 是零角色、零工作流,你只给 origin 和 goal,路径由引擎自己长出来。


三、黑板架构:Fact / Intent / Hint 三件套

引擎建在 Blackboard Architecture 上,配一张显式的事实—意图图。整个系统只有三个原语:

概念 含义
Fact 已被确认的客观发现,写进黑板
Intent 声明的探索方向,尚未执行
Hint 人在任意时刻注入的判断,Agent 下次读黑板时吸收

图从 origingoal 生长。每个新 Fact 是一块踏脚石,每个 Intent 是迈向未知的一步。

Agent Worker 跑的是 OODA 循环:Observe(读整张图)→ Orient(定位当前状态)→ Decide(决定下一步 Intent)→ Act(去探索),然后把发现写回成新的 Fact。

协作方式也值得单独说:Agent 之间没有任何直接通信,只通过共享黑板读写来间接协调 —— 也就是 Stigmergy。好处是没有信息孤岛,也不用付「Agent 互传上下文」的成本;坏处是单个 Agent 看不到别人的推理过程,只能看到别人留下的结论。


四、三类任务:角色是运行时长出来的

三类任务,全部由同一个 Worker 执行:

任务 做什么 产出
Bootstrap 项目启动时,尝试直接求解问题 Fact + 可能的 Complete
Reason 读全图:目标达成了吗?下一步该探什么? Complete / 新 Intents / no-op
Explore 认领一个 Intent,执行探索,回报发现 一个 Fact

注意这里没有「侦察 Agent」「利用 Agent」「报告 Agent」这种固定分工 —— 任务是从图的当前状态在运行时生成的,不是从预定义的工作描述里派发的。这是 Cairn 和绝大多数 Multi-Agent 框架最本质的区别。


五、系统架构:Server / Dispatcher / Worker 三层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
     ┌──────────────────────────────────┐
│ Cairn Server │
│ Facts + Intents + Hints │
└─────────────────┬────────────────┘

Read / Write API

┌─────────────────┴────────────────┐
│ Dispatcher │
│ 调度任务、管理容器、写协议 │
└──────────┬───────────────┬───────┘
│ │
┌───────────────┴──┐ ┌──────┴──────────────┐
│ Worker Container│ │ Worker Container │
│ (Project A) │ │ (Project B) │
└──────────────────┘ └─────────────────────┘
  • Cairn Server:只维护图的一致性,别的都不管。
  • Cairn Dispatcher:读图、调度任务、拉起和销毁 Worker 容器,并且是协议的唯一写入方
  • Worker Container:每个项目一个,里面多个 Agent Worker 并发跑。Worker 只收一个 prompt,返回结构化输出。

不想开 Docker 的话有 local mode:不开容器,直接在调度主机上复用你已经登录好的 claude / codex / pi CLI,配置文件里也不用放 API key。代价是 Agent 以你的用户权限运行、没有沙箱 —— 别在主力机上无脑开。


六、战绩:腾讯云黑客松 54/54 唯一 AK

腾讯云黑客松 · AI 渗透测试挑战赛 · 第二届

610 支队伍 · 1,345 名参赛者 · 来自国内顶尖高校和安全厂商

指标 结果
解题数 54 / 54 —— 唯一 AK 的队伍
最终排名 第 3

比名次更有意思的是 README 里那句坦白:

系统在赛前从未完整测试过。整条流水线是比赛当天凌晨 4 点第一次跑起来的。没有训练、没有调优、没有领域专用工具。零 MCP 工具、零 RAG、零预定义 Agent 角色。

换句话说,AK 不是靠堆工具链和提示词调出来的,而是这套「状态空间搜索」本身在陌生题目上的泛化能力。这恰恰是它想证明的东西。


七、上手

前置:macOS 或 Linux、Python ≥ 3.12、Docker(仅容器模式需要)。

1
2
3
4
5
6
7
8
9
# 1. 拉 Worker 容器镜像
docker pull --platform=linux/amd64 ghcr.io/oritera/cairn-worker-container:latest
docker pull ghcr.io/astral-sh/uv:python3.13-trixie

# 2. 建配置,填你的 LLM endpoint 和 API key
cp dispatch.example.yaml dispatch.yaml

# 3. 起服务
docker compose up --build

docker compose 会先起 cairn-server(:8000),健康检查通过后再起 cairn-dispatcher,数据落在 ./datas/cairn/

不想用 Docker(local mode)

1
2
3
cp dispatch.local.example.yaml dispatch.yaml   # runtime.execution: local
uv run --project cairn cairn serve
uv run --project cairn cairn dispatch --config dispatch.yaml

启动时 dispatcher 会检查每个 worker CLI 是否已安装、可运行,并提醒你必须已经登录。

跑测试(不需要 Docker 和真实模型 endpoint):

1
uv run --project cairn --group dev pytest

八、边界与风险(这几条别跳过)

  1. AGPL-3.0 + 商用授权声明:想在公司里用,先想清楚合规;真要落地建议直接联系作者拿商业授权。
  2. 会真动手:和 Shannon 一样会改变目标系统状态,只在明确授权的环境里跑
  3. 模型成本:Worker 后端是 Claude Code / Codex / Pi,一次完整搜索的 token 消耗不是小数目,先小规模试。
  4. 太年轻:2026-04 才开源,5 个月,API 和内部结构都可能变。
  5. local mode 无沙箱:Agent 以你的用户权限运行,别在存了重要东西的机器上裸跑。

九、一句话结论

如果你想看的是「AI 怎么在没有剧本的情况下自己找路」,Cairn 是目前开源里最接近答案的项目之一;如果你要的是「今天就能接进 CI 的渗透报告」,它还太年轻,Shannon 那种固定流水线更实际。

评论Comments