# 需求文档: 强化"禁止问用户技术问题"的可执行性

## §1 背景与目标

### 背景

`execution-discipline.md` 已经包含了完整的"技术问题禁止问用户"规则（自主探索规则节），三个分析 agent 都通过 `{{buwai-rule:execution-discipline}}` 引用了它。**规则文字已到位，但 LLM 仍然违反规则向用户提问技术问题。**

本次 CTF 解题（SnailNet）中，web-analysis agent 在遇到困难时向用户问了技术问题，而用户在对话开头已明确要求"技术问题不要问我你自己找解法"。

### 根因分析

不是"缺少规则"，而是"有规则但不被遵守"。导致不遵守的三个因素：

1. **矛盾指令**：三个 agent 的"核心约束"区域都写了"当置信度不足时，明确告知用户而非编造结论"。"告知"与"问"的界限模糊，LLM 把"向用户提问"解读为"告知用户置信度不足"的合法手段。

2. **穷途末路无出路**：execution-discipline.md 的"遇到困难时"流程是"读知识库 → 做实验 → 切换方向 → 多方向尝试"。但 agent 真的穷尽这些选项后，规则没有给下一步。没有合法的兜底行为 → 只能违规问用户。

3. **失败模式表太窄**：web-analysis 的失败模式表只有 6 种场景。遇到表外困境时 agent 不知道该怎么办。

### 目标

不是"把规则说得更响亮"，而是：
1. 消除矛盾指令
2. 给 agent 一个穷途末路时仍可自主执行的兜底流程
3. 扩展失败模式表覆盖面

### 预期收益

- 轮次: 消除 agent 因技术问题打断用户等待回复的轮次
- 速度: agent 持续自主推进，不中断
- 准确度: 无负面影响（兜底流程鼓励系统性回溯，比问用户更有效）

---

## §2 技术方案

### 2.1 改动内容

**改动 A**：消除矛盾指令 — 修改三个 agent prompt 的"核心约束"区域

三个 agent 都有相同的问题措辞：
- binary-analysis.md line 24: "当置信度不足时，明确告知用户而非编造结论"
- mobile-analysis.md line 25: 同上
- web-analysis.md line 24: 同上

改为："当置信度不足时，输出当前分析状态、已验证的事实、待验证的假设（标注置信度），继续自主探索。禁止因置信度不足而停下来向用户提问。"

**改动 B**：给 execution-discipline.md 增加穷途末路兜底流程

在"遇到困难时"最后增加"系统性卡住恢复"流程——当所有已知方向都失败时的自主行为。这不是重复现有规则，而是给一个具体可执行的"退出路径"。

**改动 C**：扩展 web-analysis 的失败模式表

当前只有 6 种场景，增加"所有已知攻击方向都失败"时的系统性回溯指引。

### 2.2 具体设计

#### 改动 B 详细设计 — 穷途末路兜底流程

当 agent 执行完"遇到困难时"的全部步骤（读知识库、做实验、切换方向、多方向尝试）仍然无法推进时，执行"系统性回溯"：

```
1. 列出已尝试的所有方向和每个方向的失败原因
2. 回到信息收集阶段，检查是否有遗漏的攻击面
3. 重新审视所有用户可控输入点，检查是否有未分析的影响路径
4. 检查是否有被忽略的配置/代码细节
5. 如果仍然无法推进，输出完整的分析报告（已知事实 + 已排除方向 + 当前假设），继续等待用户新指令
```

关键：步骤 5 是"输出报告等待指令"而非"向用户提问"。区别是：
- 问用户: "你觉得该怎么办？""这个对吗？" → 禁止
- 报告状态: "我已尝试 A/B/C 方向，均因 X 原因失败。当前最有希望的假设是 D，接下来计划 E。" → 允许

#### 改动 C 详细设计 — 扩展失败模式表

在 web-analysis 的失败模式表中增加：

| 失败现象 | 切换方向 |
|---------|---------|
| 所有已知 XSS 方向被阻止 | 回溯攻击面：是否有非 XSS 的利用方式（CSS 注入、Dangling markup、缓存投毒） |
| 所有已知攻击方向都失败 | 系统性回溯（见下），检查是否有遗漏的攻击面或未分析的影响路径 |
| 漏洞存在但无法链接成攻击链 | 单独报告每个漏洞，评估是否有未发现的链接方式 |

---

## §3 实现规范

### 3.0 改动范围表

| 文件 | 操作 | 预估行数 | 说明 |
|------|------|---------|------|
| `agents/web-analysis.md` | 修改 | ~2 行 | 改 line 24 矛盾措辞 + 扩展失败模式表 |
| `agents/binary-analysis.md` | 修改 | ~1 行 | 改 line 24 矛盾措辞 |
| `agents/mobile-analysis.md` | 修改 | ~1 行 | 改 line 25 矛盾措辞 |
| `agents-rules/execution-discipline.md` | 修改 | ~12 行 | 增加穷途末路兜底流程 |

**总改动**: ~16 行，4 个文件

### 3.1 实施步骤拆分

**步骤 1. 修改 execution-discipline.md — 增加穷途末路兜底流程**
  - 文件: `agents-rules/execution-discipline.md`
  - 预估行数: +12 行
  - 验证点: 文件包含"系统性卡住恢复"节；包含"输出报告 vs 提问"的区分说明；3 个 agent 展开后能看到此节
  - 依赖: 无

**步骤 2. 修改三个 agent prompt — 消除矛盾指令**
  - 文件: `agents/web-analysis.md`, `agents/binary-analysis.md`, `agents/mobile-analysis.md`
  - 预估行数: 每个 ~1 行（共 3 行修改）
  - 验证点: 三个文件不再包含"明确告知用户"的措辞；改为"输出分析状态继续探索"
  - 依赖: 无（可与步骤 1 并行）

**步骤 3. 扩展 web-analysis 失败模式表**
  - 文件: `agents/web-analysis.md`
  - 预估行数: +3 行
  - 验证点: 失败模式表包含"所有已知攻击方向都失败"场景
  - 依赖: 步骤 2（同一文件，避免冲突）

**步骤 4. 语法检查与回归验证**
  - 文件: 所有修改文件
  - 预估行数: 0 行
  - 验证点:
    - 3 个 agent prompt 文件可正常读取
    - execution-discipline.md 内容完整
    - 其他共享片段文件无改动
    - Plugin 语法通过
  - 依赖: 步骤 1-3

---

## §4 验收标准

### 功能验收

- [ ] 三个 agent prompt 不再包含"明确告知用户而非编造结论"的措辞
- [ ] 三个 agent prompt 改为"输出分析状态、继续自主探索"
- [ ] execution-discipline.md 包含"系统性卡住恢复"兜底流程
- [ ] 兜底流程明确区分"输出报告等待指令"（允许）和"向用户提问"（禁止）
- [ ] web-analysis 失败模式表包含"所有方向都失败"场景

### 回归验收

- [ ] agents-rules/ 下其他片段文件无改动
- [ ] Plugin (security-analysis.ts) 无改动
- [ ] 三个 agent 的其他核心功能（信息收集、分析规划、输出格式）无变化

### 架构验收

- [ ] 穷途末路兜底流程在共享片段中，3 个 agent 自动生效
- [ ] 不引入循环依赖或反向依赖

---

## §5 与现有需求文档的关系

- 上一版 `2026-05-24-autonomous-exploration.md` 已实施了"自主探索"规则文字，但未解决"有规则但不被遵守"的问题
- 本次是在上一版基础上增加可执行性：消除矛盾、增加兜底、扩展覆盖面
