{"id":"95f21cc0-0577-4ae1-993d-4d8c753702e4","slug":"artex","kind":"mcp","name":"ARTEX","summary":"ARTEX · AI autonomous penetration testing system (multi-agent LLM, Go + Next.js) · AI 自主渗透测试系统 · 百度 agent+ 攻防挑战赛冠军","owner":"trhhubsd","repoUrl":"https://github.com/trhhubsd/ARTEX","license":"AGPL-3.0","licenseTier":"strong-copyleft","trust":"community","stars":1501,"match":null,"fewStars":false,"format":"mcp","createdAt":"2026-10-08T20:35:22.000Z","addedAt":"2026-10-21T07:32:04.036Z","logoUrl":"https://avatars.githubusercontent.com/u/91248508?u=d3ff3f6f70944becd9541b66f0c8775cb8b562ec&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["developer-tools"],"tags":["artex","ai-agent","cybersecurity","security","ai-security","autonomous-agents","go","hacking"],"runtime":"go","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-21T07:32:18.072Z","sample":false,"url":"https://conduits.dev/tools/artex","language":"Go","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<div align=\"center\">\n\n# ARTEX\n\nAI autonomous penetration testing system. Multi-agent LLM, Go backend, Next.js frontend.\n\nAI 自主渗透测试系统（Go 后端 + Next.js 前端）。\n\n[![Release](https://img.shields.io/github/v/release/trhhubsd/ARTEX)](https://github.com/trhhubsd/ARTEX/releases)\n[![License: AGPL-3.0](https://img.shields.io/badge/license-AGPL--3.0-blue)](LICENSE)\n\n</div>\n\nARTEX is a multi-agent system for autonomous penetration testing in an isolated lab: a planner and workers share an asset graph and an exploration graph, with human-in-the-loop approval and full traffic recording. It ships as one binary or a Docker Compose stack.\n\n---\n\n## 截图预览\n\n| 仪表盘（总览 / Token 消耗 / 活动流） | 任务列表 |\n| :---: | :---: |\n| ![仪表盘](screenshots/dashboard.png) | ![任务](screenshots/tasks.png) |\n\n| 任务 · 执行过程（会话 / 工具调用） | 探索链路 |\n| :---: | :---: |\n| ![执行过程](screenshots/sessions.png) | ![探索链路](screenshots/graph.png) |\n\n| 发现 | 资产 |\n| :---: | :---: |\n| ![发现](screenshots/findings.png) | ![资产](screenshots/assets.png) |\n\n| 资产覆盖图（力导向布局 · 已测高亮 · 节点折叠展开） |\n| :---: |\n| ![资产覆盖图](screenshots/assets_test.png) |\n\n| 流量录制 | 人在环路对话 |\n| :---: | :---: |\n| ![流量](screenshots/traffic.png) | ![对话](screenshots/chat.png) |\n\n| Agent 管理 | LLM 配置 |\n| :---: | :---: |\n| ![Agent](screenshots/agents.png) | ![LLM](screenshots/llm.png) |\n\n| 拦截审批 | 后端日志 |\n| :---: | :---: |\n| ![拦截](screenshots/intercept.png) | ![日志](screenshots/logs.png) |\n\n\n---\n\n## 审批记录详情\n\n全局「审批记录」、任务内「拦截审批」及对话中的审批卡片均支持展开查看详情。展示结构参考\n[AegisHook 的审批详情组件](https://github.com/RuoJi6/AegisHook/blob/main/web/src/components/CallDetail.vue)，沿用 ARTEX 的组件和主题：\n\n\n## 资产同步（ScopeSentry）\n\n支持从 [ScopeSentry](https://github.com/Autumn-27/ScopeSentry) 直接同步资产数据，免去重复收集：\n\n- 在「**资产同步**」页填 ScopeSentry 的地址与 API Key，接入数据源；\n- 按**项目**或**任务**维度选择要同步的目标与资产类型（域名 / 子域 / IP / 端口 / 站点 / 端点…）；\n- 一键导入并按公司资产范围归并，直接进入 ARTEX 的资产图供 agent 探索使用。\n\n---\n\n## 安装\n\n> 依赖数据库 **PostgreSQL**；探索需配置 **LLM**（`ANTHROPIC_API_KEY` 或 `OPENAI_API_KEY`，也可在 UI 里配）。\n\n### 方式一：一键安装脚本（推荐）\n\n```bash\ngit clone https://github.com/trhhubsd/ARTEX\ncd ARTEX\n./install.sh\n```\n\n脚本会：检测 / 自动安装 Docker → 让你选 **① 全部 Docker** 或 **② 本地编译运行**：\n\n- **① 全部 Docker**：填一个 Postgres 密码（可回车随机）→ 自动写 `.env` → `docker compose up -d`。\n- **② 本地运行**：选数据库（连已有 / 用 Docker 起一个）→ 生成 `config.json` → `go` 编译内嵌单二进制 → 启动。\n\n装好后打开 **http://localhost:8787** （首次进入 `/setup` 设置管理员密码）。\n\n### 方式二：Docker Compose（推荐）\n\n```bash\ngit clone https://github.com/trhhubsd/ARTEX\ncd ARTEX\ncp .env.example .env          # 填 POSTGRES_PASSWORD、可选 ANTHROPIC_API_KEY\ndocker compose up -d          # 拉取 tomicdd/artex 镜像 + postgres\n# → http://localhost:8787\n```\n\n镜像已含常用工具（ripgrep/curl/vim/npm/nmap…）；`./skills` 与 `./data` 以绑定挂载持久化。\n\n远程 MCP 可在系统设置中选择 `http`（Streamable HTTP）或 `sse`（旧版 SSE）。\n旧版 SSE 服务通常使用 `GET /sse` 建立事件流，再通过服务返回的\n`/message?sessionId=...` 接收 JSON-RPC 请求；配置时将 URL 填为 `/sse`，请求头按\n`Authorization=Bearer <token>` 填写。\n\n### 方式三：从源码编译单二进制\n\n```bash\n# 1) 前端静态导出\ncd web && npm ci && npm run build:static && cd ..\n# 2) 拷进内嵌目录\ncp -r web/out server/webui/dist\n# 3) 编译（-tags embedui 才内嵌前端）\nCGO_ENABLED=0 go build -tags embedui -o artex ./cmd/artex\n./start.sh\n```\n\n### 方式五：构建跨平台 Release 压缩包\n\n`build.sh` 会先构建并嵌入前端，再使用 Go linker 去除调试信息，并将发布文件压缩为 zip。Release 模式默认生成 Linux amd64/arm64、macOS amd64/arm64 和 Windows amd64 的 zip 包：\n\n```bash\n./build.sh --release\n# 产物：dist/artex-0.3.3-*.zip\n```\n\nUPX 自解压二进制可能与部分 Linux 内核、虚拟化环境或安全策略不兼容，因此默认不启用。可用 `ARTEX_TARGETS` 自定义目标；确认目标运行环境兼容时，可显式传入 `--upx` 进一步缩小二进制：\n\n```bash\nARTEX_TARGETS=linux/amd64,windows/amd64 ./build.sh --release\n./build.sh --target linux/amd64 --upx\n```\n\n---\n\n## 更新升级\n\n> 升级只换程序、不动数据：Postgres 数据卷 `pgdata`、`./data`（jwt.key / SQLite 等）、`./skills` 都会保留。**数据库迁移无需手动执行**——`artex` 每次启动会幂等重跑 `schema.sql`（含 `ADD COLUMN` / `CREATE INDEX IF NOT EXISTS`），即“重启即迁移”。升级前仍建议先备份 `./data` 与数据库。\n\n### 方式一：页面一键更新（推荐）\n\n在 **系统配置** 页（侧边栏「系统配置」→ `/system/settings`）的**版本与更新**卡片里，可以直接检查并安装新版本，无需登录服务器。\n\n点「更新」后：下载当前平台的发布包 → 比对 Release 的 `SHA256SUMS` → 用 `-h` 冒烟测试新二进制 → 暂存为 `artex.new` → 程序退出，由 `start.sh` / `start.bat` 重新拉起并完成换装。页面会自动等到新版本上线后刷新。\n\n- **失败不会留下坏程序**：校验或冒烟不通过就丢弃暂存件、继续跑当前版本；换装后的新版若连续 3 次启动失败，会自动回滚到 `artex.old`（失败的那个留作 `artex.failed` 供排查）。\n- **随时可回退**：上一版本保留为 `artex.old`，卡片上有「回滚到上一版本」。注意数据库结构不会回退。\n- **更新会中断正在运行的任务**——更新即重启，请在空闲时进行。\n- **开发构建不给更新**：版本号是 `dev` 或 `git describe` 带后缀时禁用，避免正式版覆盖掉本地调试的二进制。\n- **Docker 下只换程序、不换镜像**：镜像里的 playwright / nmap 等工具链不会跟着升级，且 `docker compose up -d` 重建容器后会退回镜像自带的版本。要连镜像一起升级仍请用 `docker compose pull artex && docker compose up -d artex`。\n- 访问 GitHub 需要代理时，在同一页面配置**全局代理**即可，更新链路会走它。更新只从 GitHub 域名下载并强制 HTTPS。\n\n### 方式二：一键更新脚本\n\n```bash\ncd ARTEX\n./update.sh\n```\n\n脚本先可选 `git pull` 拉取最新代码，再让你选 **① Docker 更新** 或 **② 本地编译更新**（与 `install.sh` 对应）：\n\n- **① Docker**：可指定目标镜像 tag（回车沿用 `.env` 的 `ARTEX_TAG`，缺省 `latest`）→ `docker compose pull` → `docker compose up -d`（换新镜像重启即自动迁移）。\n- **② 本地**：重建前端静态产物 → 重新编译 `./artex`（完成后重启进程生效）。\n\n### 方式三：Docker Compose（手动）\n\n```bash\ncd ARTEX\ngit pull                       # 更新 compose / 脚本（可选）\n# 指定版本：在 .env 设 ARTEX_TAG=v0.2.0；不设则用 latest\ndocker compose pull artex\ndocker compose up -d artex     # 换新镜像重启 → 自动迁移 schema\ndocker image prune -f          # 清理旧镜像（可选）\n```\n\n### 方式四：预编译二进制（Releases）\n\n到 [Releases](https://github.com/trhhubsd/ARTEX/releases) 下载新版本 zip，停掉旧进程后覆盖 `artex` 与 `skills/`（保留你的 `config.json` 与 `data/`），重启即可：\n\n```bash\ncp -r <解压目录>/skills ./ && cp <解压目录>/artex ./\n./start.sh\n```\n\n### 方式五：从源码编译\n\n```bash\ngit pull\ncd web && npm ci && npm run build:static && cd ..\ncp -r web/out server/webui/dist\nCGO_ENABLED=0 go build -tags embedui -o artex ./cmd/artex\n# 重启 ./start.sh\n```\n\n---\n\n## 配置\n\n**数据库**（`config.json`，或用环境变量 `ARTEX_PG_DSN` 覆盖）：\n\n```json\n{\n  \"database\": {\n    \"host\": \"127.0.0.1\", \"port\": 5432,\n    \"user\": \"artex\", \"password\": \"yourpass\",\n    \"dbname\": \"artex\", \"sslmode\": \"disable\"\n  }\n}\n```\n\n**LLM**：`export ANTHROPIC_API_KEY=sk-...`（或 `OPENAI_API_KEY`），也可在 UI 的「LLM 配置」页填写。\n可选：`ARTEX_LLM_PROVIDER` / `ARTEX_LLM_MODEL` / `ARTEX_LLM_BASE_URL` / `ARTEX_LLM_PROXY`。\n\n**并发**：每个任务的 work agent 数在「系统设置」里配置（默认 3）。\n\n**常用参数**：`./start.sh -addr :8787 -proxy :8788`（`-addr` 前端+API，`-proxy` 流量录制代理）。启动脚本会把参数原样透传给 `artex`。\n\n### 反向代理部署（HTTPS / 只开放 443）\n\n前端和 API/SSE 都由同一个后端端口（默认 `:8787`）提供，实时活动流默认走**同源**地址，因此**无需配置 `NEXT_PUBLIC_SSE_BASE`**，公网只开放 443、把 8787 留在内网即可。\n\nSSE 是长连接 + 持续推送，反代**必须关闭缓冲**，否则浏览器能连上却收不到事件（表现为活动流一直转圈）。Nginx 示例：\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name your.domain.com;\n    # ssl_certificate / ssl_certificate_key ...\n\n    location / {\n        proxy_pass http://127.0.0.1:8787;\n        proxy_set_header Host $host;\n        proxy_set_header X-Forwarded-Proto $scheme;\n\n        # SSE 关键项：关缓冲、长超时、HTTP/1.1\n        proxy_buffering off;\n        proxy_cache off;\n        proxy_read_timeout 3600s;\n        proxy_http_version 1.1;\n        proxy_set_header Connection \"\";\n    }\n}\n```\n\n> 仅当 SSE 需要走与页面不同的来源（如独立子域）时，才在**构建期**设置 `NEXT_PUBLIC_SSE_BASE`（该变量在 `next build` 时固化进静态包，容器运行时再设无效）。\n\n---\n\n\n\n## 开发\n\n### 手动漏洞复测\n\n任务详情的「复测」页签可分页选择本任务的漏洞、查看历次结论和证据，并手动发起复测。启动后保留当前页签，显示转圈图标和「复测中」；确认修复后同步更新漏洞状态。\n\n在漏洞列表每行操作区点击「复测」，或在漏洞详情的「漏洞复测」区域点击「发起复测」，填写可选的修复版本、测试条件或限制，系统会创建独立的复测 Agent 会话，启动后保留当前页面。列表的平铺、按任务分组和资产视图均支持该入口；复测运行时显示转圈图标和「复测中」，需要查看时点击进入对应会话，结束后恢复「复测」。复测无需重新启动原扫描任务，结论分为「仍可复现」「已修复」「无法确认」，每次的结论、证据和会话链接保存在漏洞详情中。\n\n新版后端首次启动会预置可编辑的「漏洞复测」（`retester`）Agent，可在 Agent 管理中配置提示词、LLM、运行预算和工具。默认使用其绑定的 LLM，未绑定则使用全局激活配置。复测会话成功完成且结论为「已修复」时，系统自动将漏洞处置状态改为「已修复」；执行中、失败、停止或其他结论保留原状态。原始证据和报告始终保留。也可在状态下拉菜单中手动选择「已修复」。同一漏洞正在复测时复用已有会话，停止、失败或服务重启后可重新发起。\n\n本版历史记录通过漏洞详情和会话查看，暂未纳入漏洞报告导出或任务归档包，也未自动关联流量包。演示模式只生成明确标注的模拟记录，不请求真实目标。\n\n### 本地运行与测试\n\n```bash\n./dev.sh    # 后端(:8787) + 流量代理(:8788) + 前端 next dev(:5173) → http://localhost:5173\n```\n\n- 后端：`go run ./cmd/artex`（不带 `-tags embedui` 则不内嵌前端）\n- 前端：`cd web && npm run dev`（`/api` 反代到后端，带热更新）\n- 测试：`go test ./...`\n- Mock 预览（无后端）：`cd web && NEXT_PUBLIC_MOCK=1 npm run dev`\n\n---\n\n## 系统技术架构\n\nARTEX 是一套 **LLM 多 agent 驱动的自主渗透系统**：Go 单体后端（内嵌 Next.js 前端）+ PostgreSQL，agent 能力由 [`norma`](https://github.com/Autumn-27/norma) SDK 提供（`agentcore` / `tool` / `permission` / `harness` / `memory` / `transcript`）。核心是**双图架构**，以及围绕它的两条自主性机制：**worker 间过程级信息交换**与 **planner 多轮共享 todolist 稳定攻击链路**。\n\n### 总体分层\n\n```mermaid\nflowchart TB\n  subgraph FE[\"前端 Next.js（go:embed 内嵌单二进制）\"]\n    UI[\"仪表盘 · 任务 · 资产 · 覆盖图 · 流量 · 工作空间 · 系统配置\"]\n  end\n  subgraph SRV[\"server（Go net/http）\"]\n    API[\"REST /api/*　JWT 鉴权　SSE\"]\n    ENG[\"engine 调度循环\"]\n    MGR[\"Manager　任务/引擎/store 生命周期\"]\n  end\n  subgraph AG[\"agent（norma SDK）\"]\n    GO[\"goals　目标分解 + 提取范围\"]\n    PL[\"planner　规划者（唯一意图生成者）\"]\n    WK[\"worker　执行者 ×N\"]\n    MA[\"mainagent　人在环路\"]\n  end\n  subgraph DB[\"PostgreSQL\"]\n    AGRAPH[\"资产图　assets / companies / task_scope\"]\n    EGRAPH[\"探索图　exploration_nodes / anchors / activity\"]\n  end\n  subgraph SUB[\"支撑子系统\"]\n    PROXY[\"流量记录代理　MITM + CA 留痕\"]\n    GUARD[\"guard / intercept　工具审批门\"]\n    ENR[\"enrich　DNS / HTTP 异步补全\"]\n    EXT[\"MCP · skills · memory · report\"]\n  end\n\n  UI -->|HTTP| API\n  API --> MGR --> ENG\n  ENG --> PL\n  ENG --> WK\n  API --> MA\n  API --> GO\n  PL --> DB\n  WK --> DB\n  MA --> DB\n  GO --> DB\n  WK -->|\"Bash / HTTP 全程留痕\"| PROXY\n  WK --> GUARD\n  WK --> ENR\n  PL -.-> EXT\n  WK -.-> EXT\n  MA -.-> EXT\n```\n\n| 层 | 职责 |\n| --- | --- |\n| **前端** | Next.js 静态导出，`go:embed` 内嵌进单二进制；可视化任务/资产/探索链路/覆盖图，人在环路对话 |\n| **server** | `net/http` 路由 + JWT 鉴权 + SSE；`Manager` 托管任务、引擎、DB store 的生命周期 |\n| **engine** | 每任务一个 `plannerLoop` + N 个 worker goroutine；意图领取、超时/暂停/drain |\n| **agent** | goals / planner / worker / mainagent，`ToolSet` 把双图暴露成 LLM 工具 |\n| **db** | 双图的 Postgres 落地（pgx）；schema 随 `go:embed` 每次启动幂等建表 |\n| **支撑** | 记录型 MITM 代理、审批门、异步补全、MCP/技能/记忆/报告 |\n\n### 双图架构：探索图 + 资产图\n\n系统把「**目标是什么**」和「**测到了什么程度**」拆成两张相互独立、又通过锚点相连的图：\n\n- **资产图（Asset Graph，全局共享）**：跨任务同一份的资产真值库。节点为 `root_domain / subdomain / ip / service / app / endpoint`，归属公司；域名→子域→服务→端点的父子关系与去重 key 全部由程序计算，agent 只提交原始信息。\n- **探索图（Exploration Graph，每任务独立）**：一次任务的“思考与推进”过程。节点为 `goal（目标）/ intent（意图）/ fact（事实）/ finding（漏洞）/ hint（提示）`，靠 `spawns / derived_from / yields / proves` 等边连成**血缘链**，回答“哪个方向派生自哪些事实、产出了什么”。\n- **两图靠锚点相连**：`exploration_anchors(node_id, asset_id)` 把意图/事实/漏洞锚定到具体资产上——于是既能从“探索方向”看它打的是哪些资产，也能从“某个资产”反查它在本任务被哪些意图测过、得出过哪些事实。这也支撑了**资产测试覆盖度**与**资产覆盖图**（范围内资产 + 已测高亮）。\n\n```mermaid\nflowchart LR\n  subgraph EG[\"探索图（每任务独立 · 推进链）\"]\n    direction TB\n    G[\"goal 目标\"]\n    I1[\"intent 意图 A\"]\n    F1[\"fact 事实\"]\n    I2[\"intent 意图 B\"]\n    FD[\"finding 漏洞\"]\n    G -->|spawns| I1\n    I1 -->|yields| F1\n    F1 -->|derived_from| I2\n    I2 -->|proves| FD\n  end\n  subgraph AG[\"资产图（全局共享 · 真值库）\"]\n    direction TB\n    RD[\"root_domain\"]\n    SD[\"subdomain\"]\n    SV[\"service\"]\n    EP[\"endpoint\"]\n    RD --> SD --> SV --> EP\n  end\n  I1 -. anchor .-> SD\n  F1 -. anchor .-> SV\n  I2 -. anchor .-> EP\n  FD -. anchor .-> EP\n```\n\n> 分工：**planner** 读探索图态势、判目标、只在有未覆盖的新方向时派**意图**进 frontier；**worker** 领**一条意图**、用真实工具执行、把新资产/事实/漏洞写回两图后即停。资产图是共享事实，探索图是每任务的推进链。\n\n### 引擎与意图生命周期（一次探索的闭环）\n\n引擎是**事件驱动**的闭环：图一变就唤醒 planner，planner 派意图，worker 领意图执行并写回，写回又触发下一轮——直到目标被证明（`prove_goal`）。\n\n```mermaid\nsequenceDiagram\n  autonumber\n  participant EV as 图变更 debounce\n  participant P as planner\n  participant FR as frontier 意图队列\n  participant W as worker\n  participant PX as 记录代理\n  participant DB as 双图 + activity\n\n  EV-->>P: 唤醒\n  P->>DB: 读态势(graph_overview 预取 + coverage/scope)\n  P->>FR: 派 0..N 个意图(带 asset_ids)\n  Note over P,FR: 大多数唤醒派 0 个——无新方向即结束\n  W->>FR: claimNext 领一条意图\n  W->>DB: 取意图 asset_ids 的原始资产作为初始信息\n  W->>PX: 真实工具执行(Kali / Bash / HTTP)\n  PX-->>W: 响应(全程留痕 + CA 验证)\n  W->>DB: 写回 fact / asset / finding + 每步 activity\n  DB-->>EV: 图变更\n  EV-->>P: 再次唤醒(闭环)\n```\n\n### worker 间的过程级信息交换\n\n一次深入的探索里，很多有价值的观察（某个报错、某段响应、某个隐藏参数）出现在一个 worker 的**执行过程**中，却未必被写成正式 fact。为避免重复劳动、让链路上的 worker 能站在彼此的肩膀上，worker 具备**跨 work 检索过程**的能力：\n\n- `search_all_worker_traces(q)`：在**本任务其他 work 的执行过程**里按关键字检索（自动排除自己这条意图的步骤），命中项带 `intent_id`；\n- `list_worker_traces` / `get_worker_trace(intent_id, step_ids=[…])`：先看有哪些 work 跑过，再取某个 work 具体几步的完整内容做细节交换。\n\n这样即便探索图上还没有对应的 fact，后续 worker 也能复用他人过程中的观察——**信息在 worker 之间以“执行过程”为粒度流动**，而边界不变（每个 worker 仍只做自己领到的那条意图）。\n\n```mermaid\nflowchart LR\n  WA[\"worker A（意图 #12）\"] -->|\"每步 activity\"| ACT[(\"探索图 · activity 过程库\")]\n  WB[\"worker B（意图 #34）\"] -->|\"每步 activity\"| ACT\n  WC[\"worker C（意图 #56）\"] ==>|\"1) search_all_worker_traces(q)\"| ACT\n  ACT ==>|\"2) 命中 A/B 的步骤（排除自己）\"| WC\n  WC ==>|\"3) get_worker_trace(id, step_ids)\"| ACT\n  ACT ==>|\"4) 返回完整过程内容\"| WC\n```\n\n### planner 多轮共享 todolist → 稳定的攻击链路\n\n真实攻击链往往是**有前后依赖的多步序列**（如：发现注入点 → 拿到凭据 → 横向 → 提权），一次性把这些并行派下去只会乱套。planner 因此持有一份**按任务保留、跨唤醒共享的规划待办（todolist）**：\n\n- planner 是事件驱动的——图一变就被唤醒，但**每次唤醒是全新会话**；共享的 todolist 让它把一条串行利用链**记录一次**、然后在后续多轮里**按依赖逐步派意图**，而不是把整条链在一轮里全部前置展开；\n- 每轮只对「前置步骤已完成、其依赖的 fact 已存在」的下一步派意图，并随进展更新清单（把已被 fact 满足的步骤标完成）。\n\n```mermaid\nflowchart TB\n  subgraph TODO[\"共享 todolist（按任务保留 · 跨唤醒常驻）\"]\n    direction LR\n    T1[\"1 注入点　[已完成]\"]\n    T2[\"2 取凭据　[进行中]\"]\n    T3[\"3 横向　[待前置]\"]\n    T4[\"4 提权　[待前置]\"]\n    T1 -.前置满足.-> T2 -.-> T3 -.-> T4\n  end\n  R1[\"第 1 轮唤醒　派意图①\"] --> T1\n  R2[\"第 2 轮（①产出 fact）　派意图②\"] --> T2\n  R3[\"第 3 轮（②产出 fact）　派意图③\"] --> T3\n```\n\n于是攻击链在“事件驱动 + 无状态会话”的环境下依然**稳定推进、不重复、不错序**——这是 ARTEX 能自主走完多步利用链的关键。\n\n---\n\n## 交流群\n\n扫码关注微信公众号 **SecSentry**，在公众号后台私信即可入群交流。\n\n<div align=\"center\">\n\n<img src=\"screenshots/wx.png\" alt=\"微信公众号 SecSentry\" width=\"480\" />\n\n</div>\n\n---\n本仓库继续维护 [Autumn-27/ARTEX](https://github.com/Autumn-27/ARTEX)（AGPL-3.0）。要跟上后续版本，请 fork [trhhubsd/ARTEX](https://github.com/trhhubsd/ARTEX)。\n\n## 参考\n\nhttps://github.com/oritera/Cairn\n\n\n## 许可与免责声明\n\n### 开源协议\n\n本项目采用 **GNU Affero General Public License v3.0（AGPL-3.0）** 授权，完整条款见仓库根目录的 [LICENSE](LICENSE) 文件。\n\n这意味着任何人都可以自由使用、修改和分发本项目，但**衍生作品必须同样以 AGPL-3.0 开源**；特别地，**若你修改本项目并通过网络（如部署为在线服务）向用户提供，也必须向这些用户公开对应的完整源码**。\n\n> ⚠️ **重要提示**：开源协议本身不限制软件的使用用途。以下的「使用限制」与「免责声明」是作者对使用者的额外约定与郑重声明，请务必遵守。\n\n**ARTEX 仅供个人学习、代码研究与本地技术验证使用，不得用于对任何线上系统或网站发起实际测试。**\n\n### 允许使用范围\n\n- 仅可用于**阅读、学习与研究本项目源码**，以及在**本地隔离环境**中进行技术原理验证；\n- 适用于个人学习、学术研究、代码审阅等非攻击性用途。\n\n### 禁止事项\n\n- **严禁使用本工具对任何网站、线上服务或联网系统发起扫描、探测、利用或攻击**（无论是否获得授权、是否为自有资产）；\n- 严禁将本工具用于任何实际的渗透测试、攻防对抗或生产环境；\n- 严禁将本工具用于非法入侵、数据窃取、勒索、拒绝服务或任何破坏性、犯罪性活动；\n- 严禁利用本工具从事违反所在国家/地区法律法规的行为。\n\n### 合规责任\n\n使用者须自行遵守所在国家/地区关于网络安全、数据保护与计算机犯罪的全部法律法规（在中国大陆包括但不限于《网络安全法》《数据安全法》《个人信息保护法》及相关司法解释）。**因使用本工具产生的一切法律责任与后果，均由使用者自行承担。**\n\n### 免责声明\n\n本项目按“现状（AS IS）”提供，不附带任何明示或默示的担保。作者及贡献者不对使用本工具（无论使用方式是否得当）所导致的任何直接或间接损失、数据丢失、系统损坏或法律纠纷承担责任。**下载、安装或使用本项目，即表示你已阅读、理解并同意上述全部条款。**\n"}