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 下次读黑板时吸收 |
图从 origin 朝 goal 生长。每个新 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 | ┌──────────────────────────────────┐ |
- 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 | # 1. 拉 Worker 容器镜像 |
docker compose 会先起 cairn-server(:8000),健康检查通过后再起 cairn-dispatcher,数据落在 ./datas/cairn/。
不想用 Docker(local mode):
1 | cp dispatch.local.example.yaml dispatch.yaml # runtime.execution: local |
启动时 dispatcher 会检查每个 worker CLI 是否已安装、可运行,并提醒你必须已经登录。
跑测试(不需要 Docker 和真实模型 endpoint):
1 | uv run --project cairn --group dev pytest |
八、边界与风险(这几条别跳过)
- AGPL-3.0 + 商用授权声明:想在公司里用,先想清楚合规;真要落地建议直接联系作者拿商业授权。
- 会真动手:和 Shannon 一样会改变目标系统状态,只在明确授权的环境里跑。
- 模型成本:Worker 后端是 Claude Code / Codex / Pi,一次完整搜索的 token 消耗不是小数目,先小规模试。
- 太年轻:2026-04 才开源,5 个月,API 和内部结构都可能变。
- local mode 无沙箱:Agent 以你的用户权限运行,别在存了重要东西的机器上裸跑。
九、一句话结论
如果你想看的是「AI 怎么在没有剧本的情况下自己找路」,Cairn 是目前开源里最接近答案的项目之一;如果你要的是「今天就能接进 CI 的渗透报告」,它还太年轻,Shannon 那种固定流水线更实际。