Skip to content
Back to skills

Adversarial Refuter

ASecurity

Before accepting "done/ready", dispatches read-only refuters that try to KNOCK DOWN the claim against the disk/live source

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 24, 2026
ai-agentspythonrustgobashbackend

Security analysis

A100/100

Scanned September 25, 2026

npx -y skills add rusharlabs/house-party-protocol --skill adversarial-refuter --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Adversarial Refuter?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Adversarial Refuter
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/rusharlabs-adversarial-refuter/badge)](https://www.skillsdirectory.com/skills/rusharlabs-adversarial-refuter)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: adversarial-refuter
description: Before accepting "done/ready", dispatches read-only refuters that try to KNOCK DOWN the claim against the disk/live source
---

> **Auto-Trigger:** On receiving a "ready/done/fixed/implemented" — your own or from a delegated agent/workflow/cron
> **Keywords:** "done", "ready", "finished", "fixed", "implemented", "verify", "are you sure", "refute"
> **Priority:** HIGH
> **Tools:** Task/Agent, Read, Glob, Grep, Bash
> **Related doctrine:** `rules/loop-maker-checker.md` (cross-model, read-only checker), `rules/learned-corrections.md` (LC-1).

# adversarial-refuter — refute before accepting

"Done" lies. Instead of trusting, dispatch sceptics whose **only mission is to prove the claim is FALSE**. Materializes the operator's deal #1 (LC-1) as multi-agent verification.

## Contract

**INPUT:** 1 falsifiable claim (a statement testable against the disk/live source).

**OUTPUT:** verdict — "survives" (no refuter managed to knock it down) or "refuted" (≥1 refuter proved it false, with the exact gap).

**EXIT CODES** (the claim becomes 1+ criterion of `done_gate.py` — the refuter runs the criterion and reports the raw result):

| Exit | Meaning |
|---|---|
| 0 | claim SURVIVES — criterion passed, no refutation found |
| 1 | claim REFUTED — criterion failed, the claim was false |
| 2 | claim not falsifiable / malformed criterion (rephrase before dispatching) |

**STATE IT TOUCHES:**

| Resource | Reads/Writes | Purpose |
|---|---|---|
| disk/live source cited in the claim | Reads (read-only) | real verification |
| `gotcha-memory` | Writes | records the strongest refutation attempted |
| `.hpp/evidence/` (HPP core, optional) | Writes | the strongest refutation as a run record: exit code + hashes, never output text |

## Process
1. **Phrase the claim** as a falsifiable statement (e.g. "file X exists and contains Y", "route /Z answers 200", "test T passes", "the deploy switched the backend").
2. **Dispatch N refuters** (N and the ceiling come from `concurrency` in the profile, default 2-3) — each one **read-only** (allowedTools: Read/Glob/Grep/read-only Bash). Prompt: *"Try to PROVE this claim is false against the disk/live source. Default = refuted if there is any doubt."*
3. **Distinct lenses** when the claim can fail in several ways (exists-on-disk / content-correct / endpoint-answers / test-runs / not-stale).
4. **Verdict:** accept **only if ALL refutation attempts fail**. Any successful refutation → **re-queue** the work with the exact gap.
5. **Record** the strongest refutation attempted (it becomes evidence + feeds `gotcha-memory`). With the HPP core, record it as a run, not as prose: `python -m hpp evidence run --id refute-<claim> -- <argv>`, where argv is the command that must pass for the claim to hold — exit 0 = the claim survived, 1 = refuted. The orchestrator runs it, not the read-only refuters: `run` writes a record.

## When NOT to Activate
- Trivial change already verified in the same reply (e.g. 1 line + test run and shown).
- When there is no source of truth to confront (subjective claim).
- No 2nd agent available → fall back to single-pass local verification (`verification-before-completion`).
- The claim is about the RETURN of 1 specific delegation (not a loose statement) → use the gate built into `delegate-with-handback`.

## Executed examples

```console
$ python -c "import os; print('claim sobrevive:', os.path.exists('ip_pii_linter.py') and 'self-test' in open('ip_pii_linter.py',encoding='utf-8').read())"
claim sobrevive: True
```
<!-- executed: 2026-07-10 · exit=0 -->
(claim: "ip_pii_linter.py exists and has a self-test" — the refutation attempt FAILED, the claim survives.)

```console
$ python -c "import os,sys; ok = os.path.exists('never-exists-at-all.py'); print('claim REFUTED (the file does not exist):', not ok); sys.exit(0 if ok else 1)"
claim REFUTED (the file does not exist): True
```
<!-- executed: 2026-09-22 · exit=1 -->
(claim: "never-exists-at-all.py exists" — the refutation SUCCEEDED; exit 1 = the claim was false.)

```console
$ python scripts/done_gate.py "python -c \"import os; assert os.path.exists('kit_assembler.py')\""
  [OK ] (exit 0) python -c "import os; assert os.path.exists('kit_assembler.py')"

DONE-GATE: DONE (1/1 criteria)
```
<!-- executed: 2026-07-10 · exit=0 -->
(the claim becomes a done_gate criterion — the mechanism shared with `delegate-with-handback`/`gated-improvement-proposal`.)

## Proof

```bash
python -c "import os,sys; sys.exit(0 if os.path.exists('SKILL.md') else 1)"
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.