critic-loop — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited critic-loop (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
LLM-as-judge quality gate. Operationalizes the "2nd agent grades/self-corrects before you accept" lesson (claude-code-mastery, video 8). SkynetLabs only had the manual /review; this is the automated gate that runs before a deliverable ships.
The builder never grades its own work. A model that wrote an artifact is biased toward approving it. Spawn a SEPARATE critic agent with a clean context, give it the artifact + rubric + adversarial framing, and let IT decide. Loop until PASS.
build → spawn critic (FAIL-biased) → PASS? ship : apply fixes → re-critique
↑________________________________________|
max N rounds (default 3)USE before:
git push to productionSKIP when:
git diff main)website | copy | automation | proposal | genericgenericsingle (1 critic, default) | multi (3 lenses, majority vote)If type unclear → ASK before spawning. Wrong rubric = useless verdict.
Detect artifact type. Load the matching rubric from rubrics/<type>.md (or the inline blocks below). For generic, demand a rubric from the user — never invent acceptance criteria silently.
git diff <base> > .critic/round-N.diff/browse or /qa to gather live evidence (CWV, links).critic/round-N.txtCritic grades the SNAPSHOT, not a moving target.
single mode: 1 Agent call with the critic prompt. multi mode: 3 Agent calls IN ONE MESSAGE (true parallel), each a distinct lens:
Each critic gets a CLEAN context (subagent_type: general-purpose) and the adversarial prompt below. Critics do NOT see each other's verdicts.
single: that verdict is final.multi: majority vote. 2/3 PASS → PASS. Tie/any blocker → FAIL (default tocaution). ANY critic raising a SECURITY blocker → FAIL regardless of vote.
go to step 2. Stop at max rounds.
NO-SHIP verdict. Escalate to human. Do NOT ship a failing artifact.
If the artifact touches secrets / credentials / deploy / payment / PII, run /security-review (or a dedicated Lens C security pass) as a NON-NEGOTIABLE gate BEFORE the ship verdict, even if all critics passed. Exposed secret = auto NO-SHIP.
Each spawned critic gets THIS (vars filled):
You are an INDEPENDENT critic. You did NOT build this artifact. Your job is to
REFUTE it — find every fault, not to praise it. You are the last line before this
reaches a paying client. A miss costs the agency its reputation.
ARTIFACT TYPE: <type>
ARTIFACT: <path / url / inline text / diff>
LENS (multi-mode only): <A correctness | B craft | C adversary>
RUBRIC (grade against EACH line, cite evidence):
<rubric criteria>
RULES:
- Default to FAIL. Approve ONLY if you cannot find a real fault.
- Every claim of a fault MUST cite the exact line / element / sentence.
- Do NOT invent praise to soften. No "looks great overall."
- Severity each finding: BLOCKER (cannot ship) | MAJOR | MINOR | NIT.
- If you are UNCERTAIN whether something is correct → treat as a fault and FAIL.
- Check the artifact against the rubric ONLY. No scope creep.
OUTPUT (exactly this shape):
## Verdict: PASS | FAIL
## Score: <0-100>
## Blockers (must fix to ship)
1. [location] problem → required fix
## Major
...
## Minor / Nits
...
## Evidence checked
<what you actually inspected: ran links? viewed render? grepped secrets?>
ultrathink before grading. Be specific. Be harsh. Be fair.Full versions in rubrics/. Summaries:
rubrics/website.md<title>, meta description, OG tags per page# dead hrefs, NO TODO commentsaction="")rubrics/copy.md/humanizer check — no AI tells (em-dash overuse, rule-of-three,"in today's fast-paced", negative parallelisms, inflated symbolism)
vulnerability beat → CTA; 1 local authenticity anchor; 1 real client win)
rubrics/automation.mdvalidate_workflow (no orphan nodes, valid expressions)rubrics/proposal.mdEmit exactly this when the loop ends:
═══ CRITIC-LOOP SCORECARD ═══
Artifact: <name/path> Type: <type> Mode: <single|multi>
Rounds run: <n>/<max> Pass bar: 0 blockers + ≥85
Round history:
R1: FAIL (score 62) — 3 blockers, 5 major
R2: FAIL (score 79) — 0 blockers, 2 major
R3: PASS (score 91) — 0 blockers, 1 nit (accepted)
Multi-critic vote (if multi): A PASS · B PASS · C PASS → 3/3 PASS
Security gate: PASS (no secrets) | N/A | FAILED
Remaining (non-blocking):
- [MINOR] <thing> — optional polish
VERDICT: ✅ SHIP | ⛔ NO-SHIP (escalate)rubrics/website.md — full client-site rubric (responsive/links/SEO/schema/CWV/placeholder)rubrics/copy.md — content rubric (humanizer + no-fake-claims + brand voice)rubrics/automation.md — n8n rubric (error handling/secrets/idempotency/tz)rubrics/proposal.md — Upwork/Fiverr rubric (mirror JD/price/questions/CTA)rubrics/generic.md — template: how to author a one-off rubricprompts/critic.md — full adversarial critic prompt (copy-fill)prompts/lenses.md — the 3 multi-critic lens definitions (A/B/C)scripts/snapshot.sh — capture diff/text/url evidence into .critic/round-N.*scripts/spawn-block.md — copy-paste Agent call block (1 or 3 critics)scripts/tally-votes.md — majority-vote + security-veto decision logictemplates/scorecard.md — final scorecard template| Critics | Blocker raised? | Security blocker? | Verdict |
|---|---|---|---|
| 3/3 PASS | no | no | SHIP |
| 2/3 PASS | no | no | SHIP |
| 2/3 PASS | yes (1 critic) | no | FAIL — fix blocker, re-loop |
| 1/3 PASS | — | — | FAIL |
| any | — | yes | NO-SHIP (auto, overrides vote) |
| max rounds, still FAIL | — | — | NO-SHIP — escalate to human |
Default to caution: when the vote is ambiguous, FAIL.
single mode: ~1 critic agent per round × rounds. Cheap. Default for most work.multi mode: ~3 critic agents per round (parallel). Use for high-stakes / largedeliverables (flagship site, big proposal, client-facing automation).
the artifact has a structural problem — rebuild, don't keep patching.
Break-even: any billable deliverable. One caught lorem-ipsum or exposed key pays for a year of critic runs.
skynet-site, flagship-build, social-stack,upwork-proposal, aeo-daily, n8n builds — critic-loop is the gate they exit through.
/humanizer (copy), /qa + /browse (site), n8n-mcpvalidate_workflow (automation), /security-review (secrets gate).
/review (pre-landing PR) — /review is for code diffs; critic-loopis for finished deliverables of any type.
fanout-ship: fan out N builds → critic-loop each before integration.| Failure | Cause | Fix |
|---|---|---|
| Critic rubber-stamps everything | Not adversarial / builder graded itself | Use the FAIL-default prompt; spawn SEPARATE agent |
| Loop never converges | Same blocker re-introduced each round | Stop at max rounds → rebuild, don't patch |
| Critic invents fake faults | Hallucinated criteria | Pin rubric; "grade against rubric ONLY, cite evidence" |
| Passed but broke in prod | Critic didn't actually check (links/render) | Force "Evidence checked" section; run /qa /browse for real |
| Secret shipped despite PASS | No security gate | Hard gate step 6 — auto NO-SHIP on any secret |
| Multi-critic all agree wrongly | Same blind spot, same context | Give each a DISTINCT lens; one is pure adversary |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.