interrogate
Use for "interrogate", "adversarial review", "multi-model review", "challenge this", "stress test this code", "find blind spots", or "tear this apart". Multiple LLM reviewers challenge changes from independent angles.
1How It Works & Mechanism
The core mechanism is "model diversity as an adversarial signal": the same diff, prompt, and rubric are submitted to N read-only subagents from **different model families** for independent reviews, without relying on persona roleplay.
Spawn one reviewer per configured model to adversarially review code changes. Each model gets the same prompt and rubric. The adversarial signal comes from model diversity, not assigned personas.
Read-only, verdicts only: Review subagents are spawned in readonly mode, and this skill explicitly forbids automatically applying any modifications.
The deliverable is a synthesized verdict. Do NOT auto-apply changes.
The review scope is determined by context, with the most typical input being the actual CLI invocation point `git diff main...HEAD`.
- If on a feature branch, run `git diff main...HEAD` (or the appropriate base branch) for the full changeset
The number of reviewers and their models are driven by user-level configuration: it reads the `interrogate reviewers` list in ~/.cursor/rules/pstack-models.mdc, falling back to the built-in four-model list only when omitted.
Launch all reviewers in a single message using the Task tool. Use the `interrogate reviewers` list from `~/.cursor/rules/pstack-models.mdc` when present, one reviewer per entry, extending or shrinking the Reviewer A/B/C/D labels below to the configured entry count. Otherwise use the table defaults.
Prompt templates and acceptance rubrics are externalized in references/, locking in the principle of "challenge execution, not intent", a 3-tier severity scale (critical/warning/nit), and a structured output format.
You are an adversarial code reviewer. Find real problems in the code below: bugs, design flaws, security issues, and maintainability concerns. You are not here to be helpful or encouraging. You are here to stress-test.
The synthesis phase is not a simple concatenation: it identifies consensus using "2+ models independently flagging = high signal", retains lone-model findings with reduced weight, deduplicates differing phrasings of the same issue, and explicitly records inter-model disagreements.
2. **Identify consensus**. Findings raised by 2+ models independently are highest signal.
The final step is "lead judgment" rather than neutral aggregation: the role of the human lead reviewer is explicitly built into the workflow, producing outputs categorized into four buckets (Act on / Consider / Noted / Dismissed), with each item annotated with the models that raised it.
You are the lead reviewer, a pragmatic senior engineer, not a neutral aggregator.
In addition to the general rubric, a rigorous code quality lens is forcibly layered on (imposing standards on structural simplification, file size, and spaghetti growth far above standard code reviews).
1. **Do not let a PR push a file from under 1k lines to over 1k lines without a very strong reason.** Treat this as a strong smell.
Graceful degradation is supported: when a model slug cannot be resolved, the review does not block; it falls back to the strongest tier within the same family, extracts a valid slug from error messages, and opens a separate PR to fix default values.
If a model slug is rejected as unresolvable when you try to spawn the subagent, check the valid slugs in the Task tool's error message, pick the closest equivalent (prefer the highest-reasoning tier of the same family), spawn with the valid slug, and open a separate PR to update the configured value or default table. Do not block the review on the slug issue.
2Core Capabilities
3External Dependencies
| Kind | Dependency / Endpoint |
|---|---|
| cli | git(读取分支变动做评审输入) |
| api | Cursor Task 子代理(多模型执行面:generalPurpose 子代理 + 指定 model slug) |
| network | 用户级配置文件 ~/.cursor/rules/pstack-models.mdc(读取 interrogate reviewers 一行) |
4Recommended Governance & Evidence
- 本地文件: Operate on local project files or workspace artifacts
5Second-Pass Verification
- [ok] 「每模型一个评审者」是否真按配置读 — SKILL.md Step 3 明写从 ~/.cursor/rules/pstack-models.mdc 的 `interrogate reviewers` 取列表,'one reviewer per entry, extending or shrinking the Reviewer A/B/C/D labels';配置缺失才落回四模型默认表。setup-pstack 的 SKILL.md 第 55 行确实生成 'interrogate reviewers: claude-fable-5-1-thinking-max, gpt-5.6-sol-max, grok-4.6-fast-xhigh, claude-opus-5-thinking-xhigh',两端严丝合缝。
- [ok] 只读与「不自动应用」两个断言 — SKILL.md 第 11 行 'The deliverable is a synthesized verdict. Do NOT auto-apply changes.';第 48 行子代理参数 '`readonly`: `true`'。仓库其他位置(docs/guide/04-design.md)亦复述 'applies nothing automatically'。无写文件指令。
- [ok] 外部依赖清单的完备性(是否有漏网 CLI/API) — token 扫描仅 `git diff main...HEAD` 一处命令;其余依赖都是宿主的 Task 工具与本地配置文件。不存在壳脚本、curl、MCP 端点或第三方 SaaS 调用。
- [ok] 安全面:有无凭证读取或隐蔽网络 — 六个文件对 API_KEY/token/secret/env/curl/requests/http 零命中;无脚本文件可执行任何东西。第一遍判定的 blue 档依据(本地读写 + 宿主调度)成立。
- [ok] 功能声明是否有夸大('Multiple LLM reviewers challenge changes from independent angles.') — Step 3 用同一模板喂所有评审者(reviewer-prompt.md 明确 placeholders),所以「independent」指的是模型家族不同而非提示词不同——SKILL.md 自己在第一段就澄清 'The adversarial signal comes from model diversity, not assigned personas',措辞与实现一致,未夸大。
- [ok] 配置损坏时的降级行为是否可能造成意外(自动开 PR) — SKILL.md 指示 'open a separate PR to update the configured value or default table'——这是让 agent 在仓库里另开 PR 的动作指令,属跨出「只读评审」范围的唯一指令。它只在模型 slug 被拒时才触发,且对象是配置仓库;用户若不希望自动开 PR,应在使用前知悉。已在 risks 中列出。
- [ok] installs 数值可信度 — installs=3 直接取自池内 pool.json(source 'skills.sh-hot',同时 github_stars/license/last_push 为 null);该数字明显是 skills.sh 热度榜的低值采样,不代表真实装机量,故 meta 中照录池值、stars 与 last_push 用 gh api 实采(7799 / 2026-09-15T03:14:54Z)。
- [ok] 授权归属 — 仓库根无 LICENSE(gh api license=null);MIT 只存在于 pstack/LICENSE(Copyright (c) 2026 Lauren Tan)与 pstack/.cursor-plugin/plugin.json 的 "license": "MIT"。结论「MIT(限 pstack 插件目录)」有据。
6Verdict & Scenarios
8282cc302a8de1c3…