adversarial-refute-vote
Skill0 starsChanged 4 months agoMITView on GitHub
Put one claim to N independent refute votes and stop adoption when a strict majority vote \"refuted\". A deterministic aggregation gate — the threshold decision comes from a tally, never from the model's self-report; no LLM is called. Triggers: adversarial refute, refute vote, refute-vote, majority refute, claim verification vote, refute gate.
In this repository46 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- a11y-standardsSkill
- a11y-static-gateSkill
- antigravity-buildSkill
- architecture-parity-gateSkill
- ci-required-check-installerSkill
- codex-buildSkill
- codex-imagegenSkill
- codex-spark-delegateSkill
- commit-convention-gateSkill
- commit-msg-quality-scoreSkill
- consumer-finding-ledgerSkill
- context-bloat-trackerSkill
- coverage-floor-lockSkill
- destructive-env-guardSkill
- dev-standardsSkill
- eval-dataset-buildSkill
- eval-regression-guardSkill
- fanout-verify-synthSkill
- gate-forgeSkill
- hallucination-rate-meterSkill
- harness-kpi-ledgerSkill
- judge-rubric-voteSkill
- knowledge-citation-coverageSkill
- knowledge-dedup-scanSkill
- knowledge-index-guardSkill
- live-state-verify-guardSkill
- maker-checker-relaySkill
- memory-distillSkill
- mistake-rule-distillSkill
- oneshotSkill
- prompt-ab-evalSkill
- report-shapeSkill
- retry-failure-classifierSkill
- review-finding-reproSkill
- rule-dedup-scanSkill
- rule-promote-auditSkill
- rule-promotion-extractSkill
- secret-scan-hardeningSkill
- self-heal-ciSkill
- session-length-compact-auditSkill
- startSkill
- subagent-usage-analyzerSkill
- task-success-rate-trackSkill
- token-codegen-gateSkill
- trigger-vocab-dedupSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 9
Don't adopt a claim because it "looks right".
- Very specific: line 42
If there is not a single valid vote, the decision is abstain (undecidable, exit 2).
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
adversarial-refute-vote
Don't adopt a claim because it "looks right". Put it to N independent refute votes
and let a deterministic tally decide: if a strict majority of the votes refuted the
claim, adoption stops. The threshold decision is made by counting — never by the model
reporting "I'm confident this is fine". The engine (scripts/refute-vote.py) is python3
standard library only, calls no LLM and no external API, and has no side effects beyond an
exit code and its printed report.
Purpose
- Aggregate N refute votes (each
{"refuted": bool}) and machine-decide majority refuted → stop adoption / not a majority → may adopt. - Each judge votes independently on one question — "can this claim be refuted? (refuted=true/false)" — and only those verdicts are tallied. Scoring and synthesis may be done by a model upstream, but the adopt/stop threshold is decided by this gate, not by self-report.
- A state where no votes were obtained (zero valid votes) is not collapsed into "no
refutation = adopt". Empty output != zero — it is reported as
abstain.
Input format
Pass a JSON array file to --votes (- for stdin). Each element is a dict with a required
refuted (bool) and an optional reason (string).
[
{"refuted": true, "reason": "source does not support the claim"},
{"refuted": true, "reason": "figure contradicts the measured value"},
{"refuted": false}
]- An element whose
refutedis not a bool (missing, a string, a number) is an invalid vote and is excluded from the tally. - If there is not a single valid vote, the decision is
abstain(undecidable, exit 2). It is never tipped toward adopt.
Decision table (strict majority)
| Condition | decision | exit | Meaning |
refuted * 2 > valid | stop | 1 | Majority refuted → stop adoption |
refuted * 2 <= valid | adopt | 0 | Not a majority → may adopt |
valid == 0 / bad input | abstain | 2 | Undecidable (treated as unknown) |
- With N=3, two or more refute votes stops adoption.
- An even split is NOT a majority (e.g. 2 refutations of 4 votes) →
adopt. abstainon zero valid votes is deliberate: empty output != zero. No votes obtained means "take the votes again", not "nobody refuted, so adopt".
How to run
- Have each refute judge write its verdict to a JSON array file
(
{"refuted": ..., "reason": ...}). - Run the aggregation:
python3 "${CLAUDE_PLUGIN_ROOT:-.}/scripts/refute-vote.py" --votes <votes.json> [--json] - Branch on the exit code (or the
decisionfield when--jsonis used):0(adopt) … not a majority → may adopt.1(stop) … majority refuted → stop adoption (re-verify or discard the claim).2(abstain) … no valid votes / bad input → take the votes again (do not proceed).
--jsonoutput carriesdecision/total/valid/invalid/refuted/upheld/majority/reason.
Deterministic self-check (--check)
The engine's own health is not self-reported — it is machine-verified by a hermetic self-test:
python3 "${CLAUDE_PLUGIN_ROOT:-.}/scripts/refute-vote.py" --self-test- exit 0 = PASS. It covers 8 cases: majority refuted (2/3, unanimous) → stop; minority (1/3, 0/3) → adopt; even split (2/4) → adopt; zero valid votes, empty array, and wrong-type entries → abstain.
- Each fixture is written to a tempfile and run through the same
load → aggregatepath as production — there is no hardcoded success. - non-zero: a gap in the decision truth table.
Safety note
The script is read-only aggregation — no external API, no LLM, no mutation; the only
outputs are an exit code and a printed report. The adopt signal is a gate, not an
approval: it says the claim survived majority refutation, nothing more. Anything
externally visible, financial, or legally binding still requires explicit human approval
regardless of what this gate returns.
Sibling gates
judge-rubric-vote— a majority-verdict gate over judge votes that also enforces an agreement threshold (hung/undecided when the votes disagree too much), where this gate is a single strict-majority refute test.fanout-verify-synth— the fan-out claim verification synthesis gate: it reads the results of multi-agent verification and decides whether every claim is verified before synthesis is allowed.scripts/goal-loop.sh— the same stop-primitive family: a deterministic gate's exit code (not the model's judgement) decides "done / continue / cap".
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

