# Tri Ring

> 三环并行渗透编排：广度发现环(N实例并行) + 深度攻击环(信号驱动三层递进) + 创造探索环(反思唤醒) + 仲裁层(质量门控)，靠共享图状态层协同；含防卡死、检查点恢复、经验沉淀。 触发词：三环、并行挖掘、tri-ring、大规模测试。目标模块多、需要跨端点组合攻击链时使用本架构， 替代单线程逐个挖的旧模式。

- Skill: `wufufu770/tri-ring` (Agent Skill, multi-file: 15 files)
- Install (CLI): `npx skillmds@latest add wufufu770/tri-ring`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wufufu770/tri-ring/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: wufufu770 (https://skillmd.com/u/wufufu770)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/wufufu770/tri-ring

---


# 三环并行架构（Tri-Ring）

## TL;DR

- **目的**：三环并行渗透编排：广度发现环(N实例并行) + 深度攻击环(信号驱动三层递进) + 创造探索环(反思唤醒) + 仲裁层(质量门控)，靠共享图状态层协同
- **适用**：通用
- **输入**：目标信息
- **输出**：执行结果 + 证据
- **红线**：仅限授权范围内使用；动作留痕可审计
- **关联**：见 `00-INDEX.md` 同分类相邻 skill


> 用并行、持久化、门控和经验沉淀重构架构——不是继续调提示词。

## 一、架构总览

```
                    ┌─────────────────────────────┐
                    │      仲裁层（Arbitration）    │
                    │  质量门控 · 停滞检测 · 反思唤醒 │
                    └──────────┬──────────────────┘
                               │ 读写
   ┌───────────────┐   ┌──────┴────────┐   ┌───────────────┐
   │ 广度发现环 ×N   │   │  深度攻击环     │   │ 创造探索环      │
   │ 并行覆盖模块    │──▶│ 常驻消费发现    │◀──│ 读失败与反思    │
   │ 轻量验证       │   │ 三层递进验证    │   │ 推理新攻击面    │
   └───────┬───────┘   └──────┬────────┘   └───────┬───────┘
           └──────────────────┼────────────────────┘
                    ┌─────────▼─────────┐
                    │   共享状态层（图）    │
                    │ 发现·反思·检测点·经验权重│
                    └───────────────────┘
```

核心原则：
- **每一个发现实例负责一个完整的业务链路**，不追求一次性打穿
- **算力只花在值得深入的方向**（权重闸门降噪）
- **agent 停滞常因视角锁定**，不是能力不足——先质疑方向再跑下一轮
- **系统最大工程风险是永久停转**，不是做错

## 二、斜杠命令与启动协议

三个确定性入口（安装后直接可用，见 install.sh）：

| 命令 | 职责 | 本质 |
|---|---|---|
| `/goal <目标>` | 三要素+成功判据写入状态层 | **意图持久化**——长任务跨上下文窗口，使命必须活在图里而非某个 agent 记忆里 |
| `/plan` | 读态势→拆业务链路→实例分配表 | **纯函数 f(图状态)→计划**，可随时重跑 |
| `/loop` | 主控循环直到 done() | **把"继续吗"的决策从人转移到终止条件谓词** |

手动等价流程（无命令环境时）：确认三要素 → 写 goal/surface 节点 → 拆链路 → 进入主控循环。

用户输入三要素（缺失则追问一次）——写入格式以 `commands/goal.md` 实际行为为准：

| 要素 | 说明 | 写入 |
|---|---|---|
| 目标范围 | 域名/模块清单 | `add-node --type surface` |
| 授权约束 | 平台规则/排除项/限速红线 | 与范围同写一个 goal 节点：`--type checkpoint --status goal --content '{"kind":"goal","scope":...,"auth":...,"done_when":...}'` |
| 初始入口 | 已知 URL/账号/入口点 | `add-node --type discovery`；派发模板第 0 步消费它（见 §4.1） |

初始化后按"实例分配表"拆分业务链路（登录流/查询流/支付流/文件流/管理面…），
每个链路一个发现实例。

## 三、共享状态层操作约定

所有实例通过 `core/state_graph.py` 读写，禁止各自记私账：

```bash
TRI="$HOME/.claude/skills/tri-ring"
S="$TRI/core/state_graph.py"
python3 $S add-node --type signal --content "..." --weight 0.7   # 写发现/信号
python3 $S add-edge --src <idA> --dst <idB> --rel leads-to       # 关联
python3 $S update --id <id> --status disproven                   # 标记证伪
python3 $S query --type signal --min-w 0.6 --status open --limit 10   # 攻击环取任务(必带open防重复消费)
python3 $S disproven-paths                                       # 分配任务前必查
python3 $S idle-check                                            # 停滞检测
python3 $S query --coalition sso-chain                           # 跨链联动组查询(§4.2 L3)
python3 $S merge --from seeds/common-cn-src.jsonl                # 冷启动：注入经验种子包(仅空库时)
python3 $S priors --tag waf-bypass                               # 读某类成功经验先验(调权参考)
```

权重语义：0-1，`≥0.6` 进入深度攻击环队列，`<0.3` 且无异常特征直接剪枝。
注意：`query` 默认 `--limit 20`，全量清点时显式加 `--limit 100`；取任务必带 `--status open`。

权重写入规则（两句话分清边界）：
- **发现实例**只写两类节点：模糊观察 → 低权重 `surface`（0.2-0.5）；值得深入 → `signal`（≥0.6）。
  **不写 0.3-0.59 区间的 signal**——那是攻击环 L1/L2 判别后升格或降级的区间
- **`<0.3 剪枝`规则作用于已存在的 open 节点**：由攻击环 L2 特征判别执行（`update --status pruned`），
  发现实例不做剪枝，只做记录

**单机语义声明（跨机器必读）**：状态层的 flock 互斥保证以**单机多进程**为边界。
状态目录落在 NFS/CIFS 上时跨机锁不保证可靠（取决于版本与服务端配置），启动时脚本会自动检测并告警。
跨机器协作的唯一正确姿势：**各机独立 `TRI_STATE_DIR` 各自跑实例 → 定期导出 nodes.jsonl →
`merge --from <对方文件>` 汇聚**（按 id 归并、同 id 整节点 latest-wins）。禁止多机直写同一网络目录。

## 四、三环职责与契约

### 4.1 广度发现环（N 实例并行）

用 Task 工具并发派发子代理，每个实例一个完整业务链路：

- **输入**：链路范围 + 授权约束 + 初始入口
- **动作**：走完整业务链路 → 缝隙检测 + **轻量验证**（证明"值得看"，不追求利用成功）
- **输出**（全部写入状态层）：候选攻击面(`surface`) / 已排除方向(`status=disproven`) / 待深入信号(`signal`)
  / **跨链线索**——疑似 SSO/跨域/统一认证等横跨多条链路的线索，不自行深追，打标签上报：
  `add-node --type signal --content "..." --meta '{"coalition":"sso-chain"}'`
- **纪律**：单实例不深追；发现即写库立即转下一点；重复命中已有节点标 `dup-of`

**派发模板**（Task 子代理 prompt 全文，`<链路>` 换成分配表对应项；子代理上下文全新，
prompt 必须自包含——这是并行真正可执行的必要件）：

```
【Tri-Ring · 发现实例】业务链路: <链路>
你是渗透测试发现实例，只做轻量验证，不做深度利用。

TRI="$HOME/.claude/skills/tri-ring"
范围与授权约束（必须遵守）: <从 goal 节点复述 SCOPE 与 AUTH>

执行:
0. python3 "$TRI/core/state_graph.py" query --type discovery   # 读已知初始入口，纳入本链路
   若 <工作区>/domain/<领域>.md 存在且与本链路相关 → 读入作为业务逻辑判据
1. python3 "$TRI/core/state_graph.py" disproven-paths     # 先查已证伪(返回id+内容摘要)，别踩坑
1b. python3 "$TRI/core/state_graph.py" priors --tag <漏洞类>  # 读成功先验：
    命中高 prior 同架构经验 → 该方向 signal 权重上调；无匹配按基准判断
2. 完整走这条业务链路: <登录/查询/支付…的具体入口提示>
3. 每个观察点做缝隙检测+轻量验证（证明"值得看"即可，不追求打穿）
4. 结果全部写入状态层（发现即写库，不攒批）:
   候选攻击面: add-node --type surface --content "..." --weight <0~1> --agent <实例名>
   待深入信号: add-node --type signal  --content "..." --weight <≥0.6 才写> --agent <实例名>
   已排除方向: 先 add-node 再 update --id <id> --status disproven
5. 返回前输出: 写入的节点 id 清单 + 一句话结论

纪律: 单点不深追；疑似重复先 query 再决定 dup-of；全程限速遵守授权红线。
联动红线: 遇 SSO/跨域/统一认证等跨链路线索只打 coalition 标签写库，绝不自行深追。
```

### 4.2 深度攻击环（常驻，信号驱动三层递进）

主会话担任，循环消费 `query --type signal --min-w 0.6 --status open`：

| 层 | 动作 | 通过条件 |
|---|---|---|
| L1 广撒网 | 该方向所有参数基础测试，收集响应特征 | 有响应特征记录 |
| L2 特征判别 | 异常报错/行为差异/时序特征分析 | 权重不足 → `update --status pruned`，**直接剪枝** |
| L3 组合构造 | 跨端点联动多个发现，构造完整攻击链 | 可复现利用 |

权重闸门是降噪核心：不是每个点都深入，凭信号判断哪几个值得花时间。
L3 产出的攻击链必须过仲裁层门禁才进报告。

**跨链联动（强耦合模块解法）**：每周期开头主控执行 `query --coalition <tag>`——
同一标签下关联信号 ≥2 条（保守默认，防误报）即派生「联动实例」；
高危单线索（如确认 CAS 存在已知 CVE 指纹）主控可豁免阈值立即联动——数量门槛让位于信号质量判断：其输入是多个链路的信号合集，
专门构造 SSO 跨域/统一认证绕过等组合链。联动实例不受单链路边界约束，但受同一套授权与门禁。

### 4.3 创造探索环（停滞触发）

触发条件：连续 `N=3` 轮无新发现，或 `idle-check` 返回 idle=true。
执行顺序（由浅入深的换视角）：

1. **反转假设**：把默认前提反过来重新验证——有WAF↔无WAF、前端排序↔后端排序、
   参数在Body↔参数在Path/Header、网关鉴权↔服务内鉴权
2. **架构重验证**：重新指纹识别框架/中间件/鉴权链路，确认是否漏掉关键技术栈信息
3. **独立重构（清空记忆）**：不带历史反思，以「如果我是开发者会怎么设计」的视角重新推理攻击面

产出写入 `--type reflection`，并生成新信号注入发现环队列。
核心洞察：带着旧失败继续探索容易沿同一思路打转；主动反转假设、清空记忆能恢复方向新鲜度。

### 4.4 仲裁层（质量门控 + 停滞检测 + 反思唤醒）

每个候选结论必须过 `"$TRI/core/gates.py"` 四道门：

| 门 | 规则 |
|---|---|
| G1 可能≠证明 | 危害需额外假设才能解释 → 不进报告，降级 signal |
| G2 现象≠结果 | 异常响应只是线索；稳定复现利用才算结果 |
| G3 自看自数据 | 管理员看到管理页面是正常功能，不判越权 |
| G4 配置类单列 | CORS/安全头/Cookie属性/版本泄露 → config-advice 归档 |

输出标准收紧后，报告从"线索清单"变成可直接排期处置的漏洞单。
停滞检测与唤醒见第五节。

## 五、防卡死协议

1. **停转检测**：每轮循环开头 `idle-check`——无 open 信号 + 无 running 任务 = 系统空闲
2. **反思唤醒**：主控负责**轮次计数**（连续 3 轮无新发现即触发）；`"$TRI/core/rings.py" awaken`
   被调用后按**已证伪数量分级注入**：<3 条只生成反转假设任务，≥3 条追加架构重验证+清空记忆重构。
   分工：主控管"何时唤醒"，awaken 管"带什么经验唤醒"（avoid=已证伪路径，**不是简单重启**）
3. **上下文耗尽保护**：每个实例每完成一个动作就写检查点：
   ```bash
   # 发现实例视角：记录链路进度
   echo '{"chain":"登录流","step":"找回密码页","queue":["改密接口"],"done":["登录","注册"]}' | \
     python3 "$TRI/core/rings.py" checkpoint --agent discover-3
   # 攻击环视角：记录信号消费进度
   echo '{"phase":"L2-hunt-idor","queue":[...],"done":[...]}' | \
     python3 "$TRI/core/rings.py" checkpoint --agent orchestrator
   ```
   上下文被压缩或清空后：`checkpoint --load --agent <名>` 从最新检测点恢复
4. **工程结果**：单个 agent 失忆不丢全系统进度；长任务跨上下文窗口延续；
   恢复推进自动避开已证伪路径
5. **终止条件 done()**（与 /loop 命令一致）：全部 surface 均 proven/disproven 且 signal 队列空，
   或用户中断，或达到 --max-cycles 预算

## 六、经验沉淀

任务结束（或每轮收尾）执行结构化提取：

```json
{
  "type": "success | failure",
  "target_arch": {"stack": ["nginx","thinkphp"], "auth": "session", "waf": "宝塔"},
  "trigger_params": ["id"], "bypass": "分块传输", "payloads": ["..."],
  "preconditions": ["登录态"], "transfer_tags": ["auth-bypass","edu"],
  "prior": 0.8
}
```

- 成功路径提取到「别人看到就能复用」的粒度：架构特征/触发参数/绕过方式/关键 payload
- 失败路径同样入库——「这条路走不通」和「走得通」一样有价值
- 入库命令：`add-node --type experience --content '<上方 schema JSON>' --agent <实例名>`
  （成功条目 weight=prior，失败条目 weight=1.0 且 status=disproven，供 disproven-paths 避让）
- 后续任务消费（**半自动**）：实例测方向前 `priors --tag <漏洞类>` 读成功先验，
  据此人工上调 signal 权重判断；失败方向经 `disproven-paths`（返回 id+内容摘要）直接跳过。
  自动学习型权重（按 proven/disproven 比率回写 prior）仍是下一步
- 经验跨目标类型共享（Web 的认证绕过经验可迁移到小程序目标）

## 七、多目标适配（只换交互层）

| 目标 | 交互接口 | 要点 |
|---|---|---|
| Web/SPA | 浏览器调试协议(CDP)/Burp MCP | source map 还原、隐藏路由提取、接口依赖分析 |
| 小程序 | 解包工具 + 抓包桥接 | wxapkg 解包、调试桥接协议抓网络请求 |
| APP | 安装包逆向（apktool/jadx） | 提取接口、签名与加密逻辑 |
| API | schema 枚举 | OpenAPI/gRPC 反射、认证缺陷专项 |

不变的部分：三环并行、共享状态、质量门控、经验沉淀。
变化的部分：只有交互层接口。

## 八、生效条件与局限

**效果更好的条件**：模块边界清晰可独立覆盖；重复架构目标多（经验库形成先验权重）；
需要跨端点组合的深度攻击链。

### 三大局限的工程解（v1.1 已内置）

| 原局限 | 解法 | 用法 |
|---|---|---|
| **冷启动**：经验库为空依赖广度覆盖 | 先验假设包 `seeds/common-cn-src.jsonl`（7条国内SRC常见栈**未验证假设**，confidence=folklore-unverified） | 空库时 `merge --from` 注入；**性质是待验证先验而非事实**——首次实测命中即转为正式经验，证伪即删 |
| **强耦合模块**：SSO 跨域需跨模块联动 | coalition 标签机制：发现实例遇横链线索打标上报，主控每周期聚合，≥2 关联即派生联动实例 | `query --coalition <tag>`；联动实例不受单链边界但受同一授权与门禁 |
| **领域逻辑上限**：专业规则缺失 | `domain/<领域>.md` 知识包协议：业务流不变量+高价值资产+敏感级判据 | /plan 按目标类型挂载（已带 edu.md 示例）；新领域照格式自建 |

### 剩余真实边界（诚实声明）

- 种子包与领域包质量决定先验价值——它们是起点不是真理，证伪后应更新或删除
- 学习型权重（自动调 prior）仍是下一步；当前 prior 为人工设定值
- 联动实例的派发判断依赖主控周期检查，非事件驱动——极端高频场景有延迟

## 防装忙纪律与破闸权（MERGE-2026-09）

> 来源：社区 SRC 实战经验包整理。治的不是"视角锁定"（创造环已管），是**假装忙碌与囤积式扩面**。

**一种子闭环**：每个发现实例一次只持一个种子（域名/关键词/入口）。搜一个种子 → 去重、去废、去非存活 → 把剩余活面挖完 → 才许取下一个种子。禁止同时囤多个种子池。

**回扫合格闸**：对同一资源连续 2 轮"0 新增"→ 该实例必须换随机新词/新面，禁止在同一批已知面上无限回扫充进度。

**进度三硬件（心跳自检）**：每 15–20 分钟核对三件事——①JS/清单有实质推进；②发出过真 payload（不是纯浏览）；③有新报告段落或明确收口动作。三者全无 → 强制回深挖当前活面，禁止"再多看几个站点"。

**同闸停**：某类入口全部返回同一登录码、且未登录例外点已探过 → 该面收口（记录 sibling 差分结论），不再逐个磨。空列表 ≠ 请登录（先看回包语义判定表）。

**该硬 / 不该硬（破闸权）**：交付纪律**该硬**——假洞不堆、报告格式、范围红线、证据闸；能力上限**不该硬**——规则没写 ≠ 不能测。现场证据与规则冲突时，允许以现场为准破闸，但 MUST 在状态层记一笔（何时/为何/结果），供复盘回灌。

**禁问继续**：主控循环中"要不要继续？"是 bug——继续与否由 done() 谓词与上述闸门决定，不问人。


