# Plan Select

> 扳手框架｜方案择优引擎 v2（三维度槽位原型池，2026-08-18 用户两次裁定定稿，REFORM-GATE 判A，替代 PLAN-FIRST-GATE 用户审核环节）。候选池固定 3 维度槽位：执行载体→原生内置最优 / 依赖组件→历史复用最优 / 变更范围→迭代效率最优，每维度生成一个方案；维度条件不满足（如历史无可复用成果）则该方案生成不了 → 直接过滤不给分（防 0 分脏数据被最低分最优误选输出无方案）；有效方案按 S（步骤数）升序，最低分最优照抄直接执行，双校验失败顺位切换，上限=有效方案数。触发：用户抛出需求/任务且需选择实现路径时。

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

---


# plan-select — 扳手框架｜方案择优引擎 v2（三维度槽位原型池）

> **定位：** 需求执行路径选择的唯一权威入口。定义源：`~/Downloads/扳手框架｜方案择优引擎.md` + 2026-08-18 用户两次会话裁定（维度重构）。
> **沿革：** 替代 PLAN-FIRST-GATE"列步骤清单 → 等用户确认"环节——需求进入后**不等用户审核方案**，直接进本引擎择优执行。v1 五特征映射版 2026-08-18 同日被用户裁定重构为本版。

---

## 一、核心设计（用户裁定原文语义，冻结）

1. **候选池固定 3 个维度槽位，每个维度生成一个方案，总共至多 3 个**：

| 槽位 | 维度 | 方案 | 唯一核心高分特质 |
|---|---|---|---|
| 1 | 执行载体维度 | 【原生内置最优】 | 全程模型原生内部实现（不调用外部工具） |
| 2 | 依赖组件维度 | 【历史复用最优】 | 历史有生成过、可复用已有成果（标准内置库/已有代码，无额外外部依赖） |
| 3 | 变更范围维度 | 【迭代效率最优】 | 迭代生成步骤最少、修正次数最少 |

2. **缺维过滤**：某维度条件不满足（如历史没有可复用成果）→ 该方案**生成不了 → 直接过滤，不给分、不参与排序**。若判 0 分即成脏数据，会被"最低分最优"误选，可能输出"无方案"冒充最优——**必须过滤而非计 0**；
3. **评分**：有效方案分数 = **S（真实执行步骤数，脚本直接计数）**，**分数最低者为最优**；同分按槽位编号小者优先（机械，无概率空间）；
4. 判 A → 照抄 chosen **直接执行，不等用户确认**；
5. 执行后**双校验**【运行态校验（超时/报错/权限拒绝）+ 产物客观校验】，失败 `--rank N` 顺位切换，上限 = 有效方案数，全败即终止，禁止循环重试；
6. **禁止模型输出打分/自评词**（脚本机械拦截 → VIOLATION）；放弃探针；全部解析、计数、过滤、排序由脚本执行，模型照抄输出，禁止手写判定。

## 二、执行流水线

1. 模型按第三节模板生成候选池（**维度不满足的槽位直接不写该方案块**），落盘 `~/.agents/logs/plan_select/POOL-<ts>.md`；
2. 扳开关照抄结论：
   ```bash
   python3 ~/.agents/skills/plan-select/scripts/plan_select.py --pool <候选池文件>
   ```
3. 判 A → 照抄 `chosen` 直接执行；
4. 双校验失败 → **必须 `--fail <rank> --reason "<实测失败结果>"` 留痕**（plan_select.jsonl 记 plan_fail 事件），脚本自动输出下一顺位；**禁止裸 `--rank N` 跳顺不留痕**；
5. 全败（rank 超界判 B）→ 终止任务；全部槽位被过滤判 B → **禁止输出"无方案"**，转 CLARIFY 向用户澄清。

## 三、候选池模板（模型唯一填充格式）

```markdown
## 方案 1
dimension: native_internal
steps:
1. <客观动作描述>
2. <客观动作描述>
verify: <客观失败判据：什么实测结果算本方案失败，可机械复判>

## 方案 2
dimension: history_reuse
steps:
1. <客观动作描述>
verify: <客观失败判据>

## 方案 3
dimension: iteration_efficiency
steps:
1. <客观动作描述>
2. <客观动作描述>
3. <客观动作描述>
verify: <客观失败判据>
```

- `dimension:` 行**仅允许 3 个字面槽位词**（中文别名亦可）：`native_internal`（原生内置）/ `history_reuse`（历史复用）/ `iteration_efficiency`（迭代效率），每槽至多 1 方案；
- `steps:` 下只写编号步骤行（`1. ` `2. ` …），脚本直接计数得 S；
- `verify:` **强制字段（2026-08-19 REFORM-GATE 判 A 落地，纠错机制内建化）**——失败判据必须池子生成时写死，判 A 时脚本照抄进 directive，执行双校验时禁止临时发明/放水；缺失即 VIOLATION 拒判；
- 某槽生成不了（维度条件不满足）→ **整个方案块不写**，切勿写空块或凑步骤；
- 方案体内禁止"评分:/打分:/推荐方案/首选/我认为X更好"等自评词。

## 四、退出码（四态，与 gate-switch 族一致）

| 码 | 档 | 含义 | 动作 |
|---|---|---|---|
| 0 | A | 排序完成 | 照抄 chosen 直接执行 |
| 2 | B | 全部槽位被过滤 / rank 超界 | 禁止输出"无方案"：转澄清或全败终止 |
| 3 | CLARIFY | 候选池无任何方案块 | 按模板生成后重扳 |
| 4 | VIOLATION | 未知维度词/槽位重复/>3 块/含自评词 | 修正模板后重扳 |

## 五、边界与例外

- **不适用**：纯问答/查询类对话（无执行路径可选）、复盘/评估/写作等输出过程——直接回答，不走本引擎；
- **改造/优化类诉求**（对规则/机制/流程的改造）仍先走 REFORM-GATE 收益闸，判 A 后的实施阶段进本引擎；
- 需求歧义大到任何槽位都填不出客观步骤 → 走 CLARIFY 问用户，禁止硬凑；
- 每次扳动留痕 `~/.agents/logs/plan_select.jsonl`（判定/chosen/过滤槽位），过滤率与顺位切换次数纳入复盘审计。

