From qult
Independent 4-stage code review: Spec compliance → Code quality → Security → Adversarial edge cases. Spawns specialized reviewers, then filters by Succinctness/Accuracy/Actionability. Use before a major commit or as a review gate. NOT for trivial changes.
npx claudepluginhub hir4ta/qult --plugin qultThis skill uses the workspace's default tool permissions.
Four-stage code review: independent specialized reviewers → Judge filter.
Guides strict Test-Driven Development (TDD): write failing tests first for features, bugfixes, refactors before any production code. Enforces red-green-refactor cycle.
Guides systematic root cause investigation for bugs, test failures, unexpected behavior, performance issues, and build failures before proposing fixes.
Guides A/B test setup with mandatory gates for hypothesis validation, metrics definition, sample size calculation, and execution readiness checks.
Four-stage code review: independent specialized reviewers → Judge filter.
Quality by Structure, Not by Promise. Four pairs of eyes, each seeing what the others miss. The Wall blocks completion until all stages pass.
Before spawning reviewers, run any on_review gates defined in .qult/gates.json:
.qult/gates.json — if no on_review section, skip to Stage 1on_review, run the command via Bash with the gate's timeout value (in ms) as the Bash tool timeout. If no timeout is specified, default to 60000ms.## on_review gate results
- e2e: PASS (12.3s)
- e2e: FAIL (8.1s) — [first 500 chars of stderr]
If a gate times out or crashes, record it as ERROR and continue. Do not block the review.
If an active plan exists in .claude/plans/, extract acceptance criteria:
.md file in .claude/plans/### Task N: block, extract the Verify line## Plan acceptance criteria
- Task 1: <name> — Verify: <test file>:<test function>
- Task 3: <name> — Verify: <test file>:<test function>
Before spawning reviewers, collect computational detector results as ground truth:
mcp__plugin_qult_qult__get_detector_summary()## Detector Findings blockThese findings are deterministic (not LLM-generated) and serve as ground truth that reviewers must not contradict.
Spawn one spec-reviewer agent.
In the agent prompt, include:
The spec-reviewer evaluates Completeness and Accuracy in an independent context.
Collect output: Spec: PASS/FAIL, Score: Completeness=N Accuracy=N, findings.
Post-validation: Verify the agent output contains Spec: PASS or Spec: FAIL and Score: Completeness=N Accuracy=N. If the output does not contain a verdict line, the agent malfunctioned — re-spawn it with a clearer prompt. Do NOT fabricate scores.
If Spec: PASS, record the scores:
mcp__plugin_qult_qult__record_stage_scores({ stage: "Spec", scores: { completeness: N, accuracy: N } })
Spawn one quality-reviewer agent.
In the agent prompt, include:
The quality-reviewer evaluates Design and Maintainability in an independent context.
Collect output: Quality: PASS/FAIL, Score: Design=N Maintainability=N, findings.
Post-validation: Verify the agent output contains Quality: PASS or Quality: FAIL and Score: Design=N Maintainability=N. If the output does not contain a verdict line, the agent malfunctioned — re-spawn it with a clearer prompt. Do NOT fabricate scores.
If Quality: PASS, record the scores:
mcp__plugin_qult_qult__record_stage_scores({ stage: "Quality", scores: { design: N, maintainability: N } })
Spawn one security-reviewer agent.
In the agent prompt, include:
The security-reviewer evaluates Vulnerability and Hardening in an independent context.
Collect output: Security: PASS/FAIL, Score: Vulnerability=N Hardening=N, findings.
Post-validation: Verify the agent output contains Security: PASS or Security: FAIL and Score: Vulnerability=N Hardening=N. If the output does not contain a verdict line, the agent malfunctioned — re-spawn it with a clearer prompt. Do NOT fabricate scores. Also verify the agent did not modify any files (check git status for unexpected changes) — security reviewer is read-only.
If Security: PASS, record the scores:
mcp__plugin_qult_qult__record_stage_scores({ stage: "Security", scores: { vulnerability: N, hardening: N } })
Spawn one adversarial-reviewer agent.
In the agent prompt, include:
The adversarial-reviewer evaluates EdgeCases and LogicCorrectness in an independent context.
Collect output: Adversarial: PASS/FAIL, Score: EdgeCases=N LogicCorrectness=N, findings.
Post-validation: Verify the agent output contains Adversarial: PASS or Adversarial: FAIL and Score: EdgeCases=N LogicCorrectness=N. If the output does not contain a verdict line, the agent malfunctioned — re-spawn it with a clearer prompt. Do NOT fabricate scores. Also verify the agent did not modify any files — adversarial reviewer is read-only.
Note: Adversarial stage scores are included in the 4-stage aggregate (/40). All four stages contribute to the overall threshold check.
If Adversarial: PASS, record the scores:
mcp__plugin_qult_qult__record_stage_scores({ stage: "Adversarial", scores: { edgeCases: N, logicCorrectness: N } })
For EACH finding from ALL four reviewers, verify:
Discard findings that fail any criterion. Report only what passes all three.
After Stage 5, aggregate all scores:
Total: Completeness + Accuracy + Design + Maintainability + Vulnerability + Hardening + EdgeCases + LogicCorrectness = N/40
The SubagentStop hook enforces score thresholds for each reviewer independently. When any reviewer's score is below threshold or verdict is FAIL, SubagentStop blocks.
When blocked:
Maximum 3 iterations total. After max iterations, the review proceeds regardless.
Summary block showing all four stages:
## Review Summary
### Spec: PASS — Completeness=5 Accuracy=4
No issues found.
### Quality: PASS — Design=4 Maintainability=4
1 finding (0 critical, 0 high, 1 medium)
### Security: PASS — Vulnerability=5 Hardening=4
No issues found.
### Adversarial: PASS — EdgeCases=4 LogicCorrectness=5
No issues found.
### Aggregate: 34/40
Then for each passing finding from the Judge filter:
[severity] file:line — description
Fix: concrete suggestion
If all four stages pass with no findings: "Review complete. All clear."
This step is mandatory. After all stages pass and the summary is output:
mcp__plugin_qult_qult__record_review({ aggregate_score: <total> }) to record the review completion in session stateThis is the authoritative signal that review is complete. SubagentStop hooks provide additional enforcement but are not the primary mechanism.