本项目是"网络空间安全综合实践"课程作品。项目以开源仓库 Cairn(上游提交 4939e8a)为通用状态空间搜索基座,在此基础上完成 CTF 领域化改造——将原本通用的 Fact / Intent 图特化为可解释的 OODA 解题链路,将 Worker 后端固定为 Claude Code agent,并围绕 X-BOW / 本地靶场补齐题目创建、目标白名单、工具调用审计、Flag 验证、中文 Writeup 与 WebUI 演示闭环。
系统仅在授权靶场、课程环境、X-BOW benchmark 与本地 Docker 服务中运行,不面向未授权真实目标。
| 项 | 内容 |
|---|---|
| 项目名称 | Asimon(基于 OODA 循环的自主 Web CTF 解题智能体系统) |
| 开源基座 | Cairn,提交 4939e8a |
| Python 包名 | asimon(v0.2.1),已从上游 cairn 包名完成迁移 |
| 正式 Worker | Claude Code agent,通过 DeepSeek Anthropic 兼容接口调用模型 |
| 默认模型 | deepseek-v4-flash(可在 WebUI 扩展配置切换为 deepseek-v4-pro) |
| 调度模式 | Bootstrap / Reason / Explore 三阶段,映射为 OODA 五步循环 |
| 完成条件 | 正确 Flag + 完整中文 Markdown Writeup 均产生后才标记项目完成 |
| WebUI | 新建题目、OODA 图谱、Flag 结果、Writeup 预览/编辑/下载、工具调用审计、中英文切换 |
| 验证靶场 | X-BOW benchmark(推荐 XBEN-005-24、XBEN-010-24)、本地 Docker Web CTF |
| 测试覆盖 | 11 个测试文件、50 项单元测试通过、2 项 Docker 环境依赖跳过 |
原 Cairn 是通用状态空间搜索 Agent 基座——它不预设 CTF、渗透测试或具体角色,而是维护事实、意图和提示组成的状态图,让 Worker 在未知状态空间中搜索路径。Asimon 的工作不是简单换皮,而是把这个通用基座特化为符合小组选题方向的 CTF 智能体:
| 维度 | Cairn 原本 | Asimon 改造 |
|---|---|---|
| 调度语义 | Bootstrap / Reason / Explore 通用任务 | 映射为 Observe / Orient / Decide / Act / Reflect,可解释每轮解题推理 |
| 项目创建 | 通用 Project | 改造为"新建题目":输入目标 URL、允许访问主机、题型、预算和模型配置 |
| Worker 后端 | 多后端可选(Claude Code / Codex / Mock / Pi) | 正式收敛为 Claude Code agent,Mock 仅保留用于测试 |
| 执行环境 | 共享 Worker 或按需分配 | 每个 project 对应独立 Docker Worker 容器,删除项目时同步清理 |
| 完成标准 | 目标事实被产出即完成 | 升级为"确认正确 Flag + 生成完整中文 Writeup" |
| 前端呈现 | 通用 Fact / Intent 图 | 左侧 OODA 图谱(边=行动/意图,节点=事实);右侧聚焦 Flag、Writeup、工具调用审计 |
┌──────────────────────────────────────────────────────────────────────┐
│ Asimon WebUI(静态单页) │
│ 项目列表 · 新建题目 · OODA 图谱 · Flag 面板 │
│ Writeup 预览/编辑/下载 · 工具调用审计 · 中英文切换 │
└───────────────────────────────┬──────────────────────────────────────┘
│ HTTP REST API(FastAPI,端口 8000)
│ Bearer Token 认证(可选,ASIMON_CONTROL_TOKEN)
┌───────────────────────────────▼──────────────────────────────────────┐
│ Asimon Server │
│ · projects — 题目元数据、状态、预算 │
│ · facts — origin(起点)、goal(终点)、阶段性事实、flag 证据 │
│ · intents — OODA 行动边,描述下一步探索方向与产出目标 │
│ · hints — 可选人工提示(非强依赖) │
│ · challenges — CTF 题目画像、flag 结果、tool_calls │
│ · settings — 模型 endpoint、API key、默认预算 │
│ · writeups — 中文 Markdown writeup,支持预览、编辑、下载 │
│ 持久化:SQLite(WAL 模式),参数化查询防 SQL 注入 │
└───────────────────────────────┬──────────────────────────────────────┘
│ Dispatcher Protocol(HTTP)
│ 读取项目图 → 选择任务 → 派发 Worker → 写回结果
┌───────────────────────────────▼──────────────────────────────────────┐
│ Asimon Dispatcher │
│ · scheduler/loop.py — 主调度循环,每 3 秒一轮 │
│ · scheduler/worker_select — 按优先级选择可用 Worker │
│ · tasks/bootstrap.py — 初始探索:Observe → Orient → Decide → Act │
│ · tasks/reason.py — 全局反思:判断完成或生成新 Intent │
│ · tasks/explore.py — 局部探索:针对某条 Intent 执行下一轮 │
│ · runtime/containers.py — 管理 per-project Docker Worker 容器 │
│ · runtime/heartbeat.py — Worker 心跳检测与超时处理 │
│ · 全局并发:max_workers=8,max_running_projects=3,max_project_workers=4│
└──────────────┬───────────────────────────────────────────┬───────────┘
│ 创建/管理容器 │
┌──────────────▼────────────────┐ ┌───────────────▼────────────┐
│ Worker Container │ │ Worker Container │
│ asimon-dispatch-<project_1> │ │ asimon-dispatch-<project_2>│
│ │ │ │
│ Claude Code agent │ │ Claude Code agent │
│ DeepSeek Anthropic 兼容接口 │ │ DeepSeek Anthropic 兼容接口 │
│ │ │ │
│ 可用工具(白名单): │ │ 可用工具(白名单): │
│ · Bash(curl *) │ │ · Bash(curl *) │
│ · Bash(python *) │ │ · Bash(python *) │
│ · Read / Grep / Glob │ │ · Read / Grep / Glob │
│ │ │ │
│ 权限:--permission-mode auto │ │ 权限:--permission-mode auto│
│ 网络:bridge + host-gateway │ │ 网络:bridge + host-gateway │
└──────────────┬────────────────┘ └───────────────┬────────────┘
│ 仅访问授权目标 │
┌──────────────▼────────────────────────────────────────────▼───────────┐
│ X-BOW Benchmark / 本地 Docker Web CTF / 授权靶场 │
│ 例:http://host.docker.internal:32494/(XBEN-005-24 映射端口) │
└──────────────────────────────────────────────────────────────────────┘
Bootstrap(初始探索)
→ Observe — 读取题目信息、目标 URL、授权范围
→ Orient — 归纳攻击面和候选路径
→ Decide — 选择优先探索路线
→ Act — 调用工具执行验证
→ Reflect — 未完成时总结当前事实,产出新 Intent
Reason(全局反思)
→ 对已有图谱进行全局判断:Flag 是否有效?Writeup 是否完整?
→ 如未完成,生成新的探索 Intent 供下一轮使用
Explore(局部探索)
→ 针对某条 Intent 执行下一轮局部验证
→ 产出新 Fact,记录工具调用,更新解题进度
asimon/ ← Git 仓库根目录
├── README.md # 本文件
├── AGENTS.md # AI 工具继续开发与复刻说明
├── docs/ # 课程交付文档(8 份正式文档 + 协议规范)
│ ├── 00_选题调研报告.md # 小组选题调研报告(约 600 行)
│ ├── 01_设计文档.md # 需求分析、系统架构、OODA 调度语义、技术选型、安全设计(1,221 行)
│ ├── 02_用户手册.md # 环境要求、部署配置、WebUI 操作、常见问题(10 个 FAQ,596 行)
│ ├── 03_开发日志.md # 从基座导入(05-26)到终版交付(06-30)的完整开发记录
│ ├── 04_AI工具使用报告.md # AI 工具清单、6 阶段使用记录、量化效果评估、反思
│ ├── 05_威胁建模与安全分析.md # STRIDE 五边界威胁分析、20 项威胁、15 项安全控制矩阵
│ ├── 06_TLS部署指南.md # Caddy / nginx 反向代理 + TLS 配置方案
│ ├── 07_安全扫描报告.md # pip-audit 依赖扫描、OWASP Top 10 自查、评审扣分项修复状态
│ ├── specs/ # 协议设计规范
│ │ ├── dispatcher-design.md # Dispatcher 调度器设计文档
│ │ └── server-protocol.md # Server-Dispatcher 通信协议文档
│ └── todo/ # 改进跟踪
│ └── improvement-checklist.md # 42 项改进清单(P0-P3 四级优先级)
├── img/ # 用户手册截图素材
└── asimon-agent/ # 主工程源码
├── AGENTS.md # Worker 容器内 Agent 环境指引
├── LICENSE # AGPLv3
├── Dockerfile # Server + Dispatcher 应用镜像构建
├── docker-compose.yaml # 一键部署编排(asimon-server + asimon-dispatcher)
├── dispatch.yaml # 正式调度配置(Claude Code Worker + DeepSeek flash 默认)
├── dispatch_mock.yaml # Mock 测试用调度配置
├── .env # API Key 等敏感环境变量(不提交 Git,需自行创建)
├── asimon/ # Python 包(48 个 .py 源文件,~9,000 行)
│ ├── pyproject.toml # 项目元数据、依赖声明(FastAPI / uvicorn / docker / httpx 等)
│ ├── uv.lock # 依赖锁定文件
│ ├── src/asimon/
│ │ ├── cli.py # CLI 入口(serve / dispatch 子命令)
│ │ ├── ctf/ # CTF 语义层
│ │ │ ├── models.py # ChallengeSpec、FlagResult、ToolCall 数据模型
│ │ │ ├── flag.py # Flag 校验(含 ReDoS 防护:pattern 长度限制 + 嵌套量词检测)
│ │ │ ├── tools.py # 工具访问封装(含重定向二次校验 is_url_allowed())
│ │ │ ├── scoring.py # 解题路径评分算法
│ │ │ └── writeup.py # Writeup 数据结构与导出
│ │ ├── dispatcher/ # 调度器核心
│ │ │ ├── config.py # dispatch.yaml 配置解析
│ │ │ ├── contracts.py # Worker 输出 JSON Contract 定义
│ │ │ ├── models.py # 调度器内部数据模型
│ │ │ ├── prompting.py # Prompt 模板加载与变量注入
│ │ │ ├── prompts/ # OODA 阶段 Prompt(V4 当前版本,共 218 行)
│ │ │ │ └── default/ # bootstrap / reason / explore 及其 conclude
│ │ │ ├── protocol/ # Server-Dispatcher HTTP 通信协议客户端
│ │ │ ├── runtime/ # Worker 容器生命周期
│ │ │ │ ├── containers.py # Docker SDK 容器创建/销毁
│ │ │ │ ├── heartbeat.py # 心跳检测
│ │ │ │ ├── process.py # 进程管理
│ │ │ │ └── startup_healthcheck.py
│ │ │ ├── scheduler/ # 任务调度
│ │ │ │ ├── loop.py # 主调度循环(每 3 秒 tick)
│ │ │ │ └── worker_select.py # Worker 优先级选择
│ │ │ ├── tasks/ # 三类任务定义
│ │ │ │ ├── bootstrap.py # 初始探索任务
│ │ │ │ ├── reason.py # 全局反思任务
│ │ │ │ ├── explore.py # 局部探索任务
│ │ │ │ └── common.py # 公共工具函数
│ │ │ └── workers/ # Worker 适配器
│ │ │ └── adapters/ # claudecode.py(正式)/ codex.py(备用)/ mock.py(测试)
│ │ └── server/ # FastAPI 服务端
│ │ ├── app.py # 应用入口、静态文件挂载(/static)
│ │ ├── db.py # SQLite 持久化(参数化查询)
│ │ ├── models.py # Pydantic 数据校验模型
│ │ ├── security.py # Bearer Token 认证中间件(secrets.compare_digest 防时序攻击)
│ │ ├── services.py # 业务逻辑层
│ │ ├── routers/ # REST API 路由
│ │ │ ├── projects.py # CRUD 项目、启停、完成
│ │ │ ├── challenges.py # CTF 题目管理、Flag 结果、工具调用
│ │ │ ├── hints.py # 人工提示管理
│ │ │ ├── intents.py # Intent 创建、声明、发布
│ │ │ ├── export.py # YAML 快照导出
│ │ │ └── settings.py # 系统配置读写
│ │ └── static/ # WebUI 静态资源(构建产物)
│ │ ├── index.html
│ │ ├── asimon-logo.png
│ │ ├── favicon.svg / icons.svg
│ │ └── assets/ # 前端 JS/CSS bundle
│ └── tests/ # 测试套件(11 个文件,50 项通过,2 项 Docker 跳过)
│ ├── test_static_ui.py # WebUI 静态页面结构测试
│ ├── test_challenge_api.py # Challenge API 测试
│ ├── test_ctf_contracts.py # CTF 数据契约测试
│ ├── test_dispatch_config.py # 调度配置测试
│ ├── test_dispatch_contracts.py
│ ├── test_cli.py # CLI 命令测试
│ ├── test_tools.py # 工具封装测试
│ ├── test_writeup.py # Writeup 测试
│ ├── test_claudecode_driver.py # Claude Code Worker 驱动测试
│ ├── test_codex_driver.py # Codex Worker 驱动测试
│ └── test_worker_security_flags.py # Worker 安全策略回归测试
├── container/ # Worker 容器构建上下文
│ ├── Dockerfile # Kali 基座 + Claude Code 环境
│ ├── AGENTS.md # Worker 容器内 AI 工具环境说明
│ └── README.md
├── datas/ # 运行时数据目录(Git 忽略)
│ └── asimon/ # asimon.db(SQLite 数据库,Docker volume 挂载)
└── artifacts/ # 测试产物与截图证据(Git 忽略)
| 组件 | 要求 | 说明 |
|---|---|---|
| 操作系统 | Windows 10/11 + WSL2(已启用虚拟化),或 Linux | Docker Desktop 依赖 |
| Docker Desktop | 最新稳定版 | 运行 asimon-server、asimon-dispatcher、per-project Worker 容器 |
| Git | 2.40+ | 版本控制,40 次提交、26 个分支 |
| uv | 最新稳定版 | 本地 Python 测试与编译检查 |
| 浏览器 | Chrome / Edge | 访问 WebUI(http://localhost:8000) |
| API Key | DeepSeek(Anthropic 兼容接口) | Claude Code Worker 调用大模型 |
进入 asimon-agent/ 目录,创建 .env 文件(此文件在 .gitignore 中,不会被提交):
ANTHROPIC_AUTH_TOKEN=你的DeepSeek密钥
# 可选:设置后 WebUI / API 控制面需要 Bearer Token 认证
ASIMON_CONTROL_TOKEN=替换为一串随机字符dispatch.yaml 中的默认模型配置(第 59-72 行):
workers:
- name: "claudecode_deepseek-v4-flash"
type: "claudecode"
task_types: [bootstrap, reason, explore]
max_running: 2
priority: 0
env:
ANTHROPIC_MODEL: "deepseek-v4-flash"
ANTHROPIC_BASE_URL: "https://api.deepseek.com/anthropic"
CLAUDE_PERMISSION_MODE: "auto"
CLAUDE_TOOLS: "Bash,Read,Grep,Glob"
CLAUDE_ALLOWED_TOOLS: "Bash(curl *),Bash(python *),Bash(python3 *),Read,Grep,Glob"日常测试推荐使用 deepseek-v4-flash(成本优先),最终演示可按需在 WebUI 扩展配置中切换为 deepseek-v4-pro(效果优先)。
cd asimon-agent
docker compose up -d --build构建过程:Dockerfile 基于 python:3.13-trixie 官方镜像,通过阿里云 PyPI 镜像安装 uv,然后复制 asimon/pyproject.toml 与 asimon/uv.lock 安装依赖,最后复制全部源码。
检查服务状态:
docker compose ps预期输出:
NAME STATUS PORTS
asimon-server Up ... (healthy) 0.0.0.0:8000->8000/tcp
asimon-dispatcher Up ...
asimon-server 的健康检查(docker-compose.yaml 第 15-24 行)每 10 秒通过 HTTP 请求验证 /projects 端点可达,最多重试 12 次。
每个 project 启动时 Dispatcher 会为它创建独立的 Docker Worker 容器,镜像为 ghcr.io/oritera/cairn-worker-container:latest(dispatch.yaml 第 42 行)。容器内含 Claude Code 与常用安全测试工具,默认通过 Docker bridge 网络 + host.docker.internal=host-gateway 访问宿主机授权靶场。
docker pull ghcr.io/oritera/cairn-worker-container:latest如因校园网或代理限制无法直接拉取 GHCR,先配置 Docker Desktop 代理设置,或手动下载后 docker load。
-
访问
http://localhost:8000,点击 "新建题目"。 -
必填字段:
字段 说明 示例 题目标题 用于项目列表识别 XBEN-005-24目标 URL 靶场入口地址 http://host.docker.internal:32494/允许访问主机 可多条;留空则默认仅允许目标主机 192.168.1.100:8080题型 Web CTF / XSS / IDOR / SQLi / Crypto / Pwn 等,留空默认 Web CTF Web CTF -
展开"扩展配置"可调参数(全部可选,留空则使用
dispatch.yaml默认值):参数 说明 默认值 可选提示 辅助性提示文本,非强依赖 空 最大轮数 解题 OODA 循环上限 不限 最大工具调用数 Claude Code tool_use 次数上限 不限 最大秒数 单题总时间预算 不限 Base URL 模型 API 地址 https://api.deepseek.com/anthropicAPI Key 覆盖 .env中的全局 Key.env中的值模型 模型名称 deepseek-v4-flash
创建题目后,Dispatcher 自动创建 asimon-dispatch-<project_id> Worker 容器并开始 OODA 循环:
- 左侧图谱:边表示行动/意图(Intent),节点表示产出事实(Fact)。起点(origin)固定为 teal 色,终点(goal)为 rose 色。完成后的 OODA 轮次节点和边按 Rn 区分着色。支持 6 种布局切换(Dagre ↓/→、Klay ↓/→、ELK ↓/→)和手动缩放/平移。
- 右侧面板(5 个标签页):
- 详情:选中节点或边后展示详情(Fact 描述、Intent 状态、来源 Worker)
- 提示:人工提示列表(可选,非强依赖)
- 日志:按时间线展示所有事件(创建、调度、完成)
- Writeup:中文 Markdown writeup,支持预览/编辑/刷新/下载
- 工具:点击图谱某条边后,展示该边关联的 Claude Code 工具调用记录(含 phase、tool_name、target、summary、allowed/blocked 状态)
- 顶部状态:显示当前运行中的 Worker 名称、触发类型、心跳时间
- 回放模式:支持按时间线逐步回放项目演进过程,可调速(快/正常/慢)、暂停、重播
| 操作 | 按钮 | 效果 |
|---|---|---|
| 停止 | Stop | 暂停调度,Worker 容器保留 |
| 恢复 | Resume | 重新激活调度 |
| 重开 | Reopen | 已完成项目重新激活 |
| 删除 | Delete | 删除项目数据 + 同步清理 asimon-dispatch-<project_id> 容器 |
| 快照 | Snapshot | 导出项目 YAML 快照 |
X-BOW 是公开的 Web 安全基准测试集,Asimon 推荐使用以下代表题进行端到端验证。
在仓库同级的 validation-benchmarks/ 目录中:
cd ../validation-benchmarks
make run BENCHMARK=XBEN-005-24
docker ps -adocker ps -a --filter "name=xben-005"若输出类似:
0.0.0.0:32494->80/tcp xben-005-24-app-1
则 WebUI 目标 URL 填:
http://host.docker.internal:32494/
make run BENCHMARK=XBEN-010-24建议使用 deepseek-v4-pro 模型以获得更高解题质量(Writeup 完整率约 90%,来源:docs/04_AI工具使用报告.md §4.4 模型对比实验数据)。
cd asimon-agent
# 全部测试(10 个文件,47 项,2 项 Docker 环境跳过)
uv run --project asimon --with pytest python -m pytest asimon/tests
# Worker 安全策略回归测试
uv run --project asimon --with pytest python -m pytest asimon/tests/test_worker_security_flags.pyuv run --project asimon python -m compileall -q asimon/src/asimon/ctf asimon/src/asimon/dispatcher asimon/src/asimon/server asimon/tests推送前在仓库根目录依次执行以下三项检查(远端仓库无可用 CI runner,以此替代):
# 1. 全量单元测试
uv run --project asimon-agent/asimon --with pytest python -m pytest asimon-agent/asimon/tests
# 2. 编译检查
uv run --project asimon-agent/asimon python -m compileall -q asimon-agent/asimon/src/asimon/ctf asimon-agent/asimon/src/asimon/dispatcher asimon-agent/asimon/src/asimon/server asimon-agent/asimon/tests
# 3. Worker 安全策略回归测试
uv run --project asimon-agent/asimon --with pytest python -m pytest asimon-agent/asimon/tests/test_worker_security_flags.py三项全部通过视为质量门禁通过。
cd asimon-agent
# 启动 / 停止
docker compose up -d --build
docker compose down
# 查看服务状态
docker compose ps
# 实时日志
docker compose logs -f asimon-server
docker compose logs -f asimon-dispatcher
# 清理项目数据库(谨慎操作)
Remove-Item -Recurse -Force datas/asimon
# 清理历史残留 Worker 容器
docker ps -a --filter "name=asimon-dispatch-" --format "{{.ID}} {{.Names}}"系统的安全设计遵循纵深防御原则,在 Prompt 层、代码层、CI 层三重约束(详见 docs/05_威胁建模与安全分析.md STRIDE 五边界分析):
| 层级 | 措施 | 实现位置 |
|---|---|---|
| 目标约束 | 仅访问 allowed_hosts 白名单中的目标;控制面地址正向校验(host+port+path) |
ctf/models.py:73 is_url_allowed()、server/routers/challenges.py _is_control_plane_target() |
| 容器隔离 | 每个 project 独立 Docker 容器,bridge 网络隔离,docker.sock 只读挂载 |
dispatch.yaml:43-45、docker-compose.yaml:14 |
| Worker 权限 | 默认 --permission-mode auto,CLAUDE_TOOLS 白名单限制工具范围,禁止 --dangerously-skip-permissions |
dispatch.yaml:70-72、workers/adapters/claudecode.py:14-16 |
| 预算限制 | max_rounds / max_tool_calls / max_seconds 三重约束 |
WebUI 扩展配置 → ChallengeSpec → Dispatcher 调度 |
| 认证 | 可选 Bearer Token(ASIMON_CONTROL_TOKEN),secrets.compare_digest 防时序攻击 |
server/security.py:18 |
| 密钥管理 | API Key 仅存 .env 或环境变量,.gitignore 排除 |
.gitignore |
| 审计记录 | 所有工具调用、Flag 结果、Writeup 均持久化到 SQLite | server/db.py |
| 安全回归测试 | CI 门禁扫描 Worker 适配器与配置文件,禁止危险权限参数回归 | tests/test_worker_security_flags.py |
硬性红线:
- 不对未授权公网目标进行自动化探测
- 不提交真实 API Key、Git Token、Cookie、SSH 私钥
- 不在默认配置中启用
--dangerously-skip-permissions或 host 网络 - 正式演示前轮换开发期间曾在对话中暴露过的 API Key
| 文档 | 路径 | 说明 |
|---|---|---|
| 选题调研报告 | docs/00_选题调研报告.md | 选题背景、国内外研究现状、创新点设计、可行性分析 |
| 设计文档 | docs/01_设计文档.md | 需求分析、系统架构、OODA 调度语义、核心算法、技术选型、安全设计(1,221 行) |
| 用户手册 | docs/02_用户手册.md | 环境要求、部署配置、WebUI 操作、X-BOW 靶场、常见问题(596 行) |
| 开发日志 | docs/03_开发日志.md | 从基座导入(05-26)到终版交付(06-30)的里程碑与技术决策 |
| AI 工具使用报告 | docs/04_AI工具使用报告.md | AI 工具清单、量化效果对比、模型对比实验、反思与经验沉淀 |
| 威胁建模与安全分析 | docs/05_威胁建模与安全分析.md | STRIDE 五边界分析、20 项威胁、15 项安全控制矩阵 |
| TLS 部署指南 | docs/06_TLS部署指南.md | Caddy / nginx 反向代理 + TLS 配置方案 |
| 安全扫描报告 | docs/07_安全扫描报告.md | pip-audit 依赖审计、OWASP Top 10 自查、评审扣分项修复 |
| AI 二开说明 | AGENTS.md | 第三方 AI 工具复刻与二次开发指引 |
| Agent 环境说明 | asimon-agent/AGENTS.md | Worker 容器内 Claude Code 环境指引 |
| 协议规范 | docs/specs/ | Dispatcher 设计 + Server-Dispatcher 通信协议 |
- 基座领域化:保留 Cairn 通用 Fact / Intent 图协议,将其特化为 CTF 解题工作流——每个节点和边从通用语义变为可解释的 OODA 解题轨迹。
- OODA 可解释链路:将 Bootstrap / Reason / Explore 三类调度任务映射为 Observe → Orient → Decide → Act → Reflect 五步循环,使答辩可讲清"智能体为什么走到这一步"。
- Worker 容器级隔离:每个 project 对应独立 Docker Worker 容器,Claude Code 在隔离环境中执行,项目完成或删除后同步清理容器,避免题目间状态污染。
- 终态条件升级:不以"找到 Flag"为完成标准,而是"确认正确 Flag + 生成完整中文 Markdown Writeup"均满足后才标记项目完成——Writeup 从"事后拼接"变成"主链路目标"。
- 工具调用审计:工具调用记录直接从 Claude Code 内部
tool_use事件提取,与 OODA 图谱边绑定展示——未选中边时不展示全局工具调用,避免噪音。 - 安全默认收敛:Worker 默认
--permission-mode auto+ 受限工具白名单 + bridge 网络隔离 + 控制面正向校验 + 安全回归测试,安全从"事后补救"前移到"默认设计"。
本项目基于 Cairn 开源仓库(提交 4939e8a)进行课程二次开发,继续遵循原项目 AGPLv3 许可。Cairn 是通用状态空间搜索 Agent 基座;Asimon 是在该基座上面向 CTF-agent 场景完成的课程创新改造。
上游原始仓库已归档于仓库外的 _archived/cairn-upstream/ 目录(不纳入 Git 版本控制),课程正式交付代码为 asimon-agent/ 目录。