From adversarial-research
Use when running an adversarial multi-agent debate over an existing knowledge base — typically invoked by /debate. Assumes a stable KB at <run-dir>/kb/ produced by knowledge-base-construction. Snapshots the KB to kb-snapshot-construction/ before doing anything else, then runs orchestrator-mediated cross-examination where debaters cite by argument ID and may propose KB mutations. Mutations are downgrade-only (a debater cannot promote arguments) and are logged with debate-turn citations to kb/revisions.md.
How this skill is triggered — by the user, by Claude, or both
Slash command
/adversarial-research:adversarial-debateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Run an adversarial debate over a knowledge base. Debaters reference the KB by argument ID and source path; they cannot introduce un-traced claims. The orchestrator mediates turn-taking — true interleaved back-and-forth, not parallel monologues. The debate may mutate the live KB, but never below a hard discipline (downgrade only, log every change, never delete).
Run an adversarial debate over a knowledge base. Debaters reference the KB by argument ID and source path; they cannot introduce un-traced claims. The orchestrator mediates turn-taking — true interleaved back-and-forth, not parallel monologues. The debate may mutate the live KB, but never below a hard discipline (downgrade only, log every change, never delete).
./research-runs/<topic-slug>/) containing a stable kb/ produced by knowledge-base-construction.If kb/ doesn't exist or kb/quality-summary.md doesn't say the graph reached a stable state, stop and tell the caller to run KB construction first.
Before any other action, check whether <run-dir>/kb-snapshot-construction/ already exists. The /debate command's own pre-flight normally creates it (and handles the ask-the-user flow when one exists from a prior debate) — if it exists, do NOT re-copy; treat the existing snapshot as authoritative and move on. Only if it is missing (the skill was invoked outside /debate), copy <run-dir>/kb/ recursively to <run-dir>/kb-snapshot-construction/ (e.g. cp -r). This snapshot is the immutable record of what the KB looked like at the moment the debate began. Do not write to kb-snapshot-construction/ again for any reason.
The live kb/ directory is what the debate may mutate.
Then create:
<run-dir>/output/ (top-level debate artifacts)<run-dir>/output/agents/ (per-agent transcripts; populated when agents are spawned)<run-dir>/kb/sources/agents/ (per-agent source dirs for new sources fetched during debate)<run-dir>/kb/revisions.md (mutation log; starts empty, see format below)You — the orchestrator — own the debate's structure. You spawn debaters and the moderator one turn at a time, hand each one the running transcript plus the specific prompt for its turn, capture its response, decide whose turn is next, and apply any KB mutations that result. The debaters and moderator are stateless across spawns — every turn ships them the context they need.
This means the debate is interleaved, not round-robin: B responds to A's specific claim from the previous turn, then A counters B's specific response, etc. You decide who speaks next based on which open thread most needs progressing.
kb/quality-summary.md and the argument index. Identify the major positions present in the graph (typically 2, but the graph may show more).debater subagent. All instances share the static debater agent definition, so assign each one a unique handle of the form debater-<position-slug> (position lowercased, non-alphanumeric → -). The handle names the instance's transcript dir (output/agents/<handle>/) and source dir (kb/sources/agents/<handle>/); without it, parallel debaters would collide on the same paths. In the spawn prompt include:
debater-<position-slug>")kb/arguments/index.md, kb/edges.md, kb/contradictions.md, kb/quality-summary.md)weak or baseless argument is robust).moderator subagent. In the spawn prompt include the run dir, the KB layout, and the list of debater positions.output/transcript.md and to its per-agent transcript at output/agents/<handle>/transcript.md.After openings, build a claim ledger at output/claims-ledger.md (format below). Every claim raised in the openings becomes a ledger entry with status open.
This is interleaved and orchestrator-driven. Loop:
open or partially-rebutted in the ledgercontested or weak KB arguments (where traceback may shift the rating)The moderator can be invoked at any point — proactively by the orchestrator to press a thin claim, or reactively when a debater has just done something the moderator should call out (overreach, secondhand citation, citing a baseless argument as if robust, ignoring a structural contradiction surfaced in the KB, re-raising a closed claim).
A claim can be technically true and well-sourced yet irrelevant to the actual question being debated. Common patterns:
policy/regulatory argument ("agency X recommends Y") used to dismiss a methodological argument about the underlying trial designThe KB's tangential-to, scope-mismatch-with, and layer-shift-from edges already record these issues at the graph level. During debate, the moderator's job includes calling them out as moves when one side is using them as deflection.
Moderator deflection callout — format:
Deflection: Position X has cited arg-007 (layer: empirical, scope: <scope-descriptor>, status: robust)
across turns N, M, P to address arg-022 (layer: ethical, scope: <scope-descriptor>).
arg-007 is well-supported within its scope but layer-shifts/scope-mismatches arg-022.
Position X has not engaged arg-022 at its actual layer.
A deflection callout is not a closure — the cited argument may be entirely true. The callout records that the application is invalid and that a central argument has gone unaddressed. Deflection callouts feed into the synthesis verdict's engagement assessment.
If a deflection callout is reaffirmed across multiple turns and the deflecting side never engages the actual argument at its actual layer, the synthesis records this as a persistent non-engagement finding for that position. A position with strong but layer-shifting arguments that does not engage central questions is not better-grounded than a position with weaker arguments that does engage.
When a claim has been decisively refuted via traceback during the debate (not just challenged — refuted, with the moderator's concurrence and a corresponding KB downgrade to refuted or baseless), the orchestrator marks it closed in the ledger.
Effect of closure:
baseless; I accept that and shift to arg-031 as the load-bearing argument").Moderator's ruling authority:
The moderator may explicitly close a claim when traceback supports it. Format:
Ruling: claim "<one-line>" (arg-NNN) is CLOSED as <refuted | baseless | source-debunked>.
Justification: <traceback finding, debate turn references>.
The debater may object once with new evidence. If the new evidence does not change the picture, the moderator reaffirms and the closure stands. The moderator gets the final call within the debate session — a debater who keeps re-litigating a closed claim is acting against the contract.
This rule exists because in earlier prototypes debaters would mechanically repeat refuted arguments across rounds. The graph said the argument was dead; the debaters acted as if it weren't. Closure makes the graph's ruling enforceable in the debate.
Triggered when a contested claim hinges on a specific source whose traceback wasn't fully resolved in KB construction (canonical case: a single high-influence primary study or review that one position rests on, where Phase 4 traceback flagged unresolved methodological concerns or unverified citation chains).
kb/sources/agents/<agent-name>/ per the per-source template defined in the knowledge-base-construction skill (do not redefine here — use that template).Strength assessment (and Traceback notes) sections and the involved source files' Criticism field (Phase D rules apply).Debate may mutate the live kb/, but only within these constraints:
Allowed:
status (e.g. strong → contested, contested → weak, weak → refuted or baseless) when traceback or counter-argument supports the downgradekb/edges.md (typically refutes, exaggerates, confounds, or new derived-from-source edges to newly-fetched sources)Traceback notes or Strength assessment sections, and to the involved source files' Criticism field (argument nodes have no Criticism section — cross-source criticism lives on the source, per the construction skill's templates)kb/sources/agents/<handle>/) and link them via new edgeskb/contradictions.mdasserter: derived-during-debate-by-<handle>. A new node enters at contested or lower; if it refines an existing argument, its status may not exceed the refined argument's current status. Reaching strong/robust requires re-running KB construction with that material — the debate cannot mint a strong claim, since that would route around the broader sourcing discipline (this is the promotion ban applied to node creation).Forbidden:
weak → strong). The debate cannot strengthen claims; only KB construction (with its broader sourcing discipline) does that. If a debate turn produces evidence that would promote a claim, log it as a finding in the transcript and recommend re-running KB construction with that material; don't silently promote.kb-snapshot-construction/.Statement text. If a debate exchange refines a claim, create a new argument node with edge: refines rather than rewriting the original.Every mutation logs to kb/revisions.md (format below) with the debate-turn citation that triggered it. Without a revision-log entry, no mutation is allowed.
Once cross-examination has run its course, write output/synthesis.md. Cover:
kb/quality-summary.md and, for each, which position(s) engaged it via addresses edges and which did not engage it (or only via tangential-to / scope-mismatch-with / layer-shift-from edges)baseless (no primary source on traceback)kb-snapshot-construction/ if they want the pre-debate state, and to kb/revisions.md for the audit trail.End the synthesis with an explicit verdict. The verdict must reflect two independent dimensions: evidentiary strength of the central claims, and engagement with central questions. A position cannot be "better-grounded" on a question it didn't engage; well-supported but layer-shifting/tangential claims do not count as engagement.
Choose the verdict that fits the graph state:
addresses edges to the central questions; AND (2) Y's central claims have been substantially closed as refuted/baseless, OR Y has persistently failed to engage the central questions and only made tangential/scope-mismatched/layer-shifted moves. State this when the evidence and engagement support it.addresses edges and the other relies primarily on tangential-to / scope-mismatch-with / layer-shift-from moves. The orbiting position may have technically-true and well-sourced arguments — but if those arguments do not address the central questions, the position is not better-grounded on those questions, regardless of source quality. Name this verdict when it fits; it is the verdict for the most common false-balance failure mode.The synthesis is forbidden from manufacturing balance the evidence does not support. Specifically:
closed / refuted / baseless after cross-examination, the verdict must reflect that. Do not write "both sides have valid points" when one side has been substantively dismantled by traceback.refuted or baseless, name that fact. The position can still be held — but the synthesis records that it is held against the weight of the traceback evidence.tangential-to / scope-mismatch-with / layer-shift-from edges, the position has not earned a "better-grounded" verdict on those questions. Source quality alone is not engagement.This is structured account of where the debate landed, written honestly. It is not a winner-declaration in the sportscaster sense — but it is also not a "both sides" hedge when the evidence is asymmetric. Calibrate to the graph state.
Re-stated from agents/debater.md for orchestrator clarity. Every debater response must:
baseless is robust)If a debater's response violates the contract (introduces an un-traced claim, cites an authority instead of a primary source, presents a baseless argument without acknowledging the rating), the orchestrator should pass that issue to the moderator on the next turn rather than silently letting it slide.
The moderator does not advocate. Each moderator turn picks from:
The moderator can also propose KB mutations (typically downgrades and new contradictions). Same Phase D rules.
The debate is complete when:
Aim for a substantive debate — typically 12+ turns total across all participants — but quality over quantity. Don't force length once the high-leverage ground is covered.
<run-dir>/
kb/ # mutated live KB (post-debate state)
revisions.md # mutation log with debate-turn citations
sources/agents/<agent-name>/ # sources fetched by each agent during debate
... (rest of KB structure as left by construction skill)
kb-snapshot-construction/ # immutable copy of pre-debate KB
output/
transcript.md # full top-level transcript
claims-ledger.md # claim status across the debate
synthesis.md # final synthesis (Phase E)
agents/
<agent-name>/
transcript.md # per-agent message history
output/claims-ledger.md)# Claim Ledger
## L-001: <one-line claim>
- **Asserted by**: <agent-name> (debate turn N)
- **References**: arg-XXX (KB-rated <status>), kb/sources/path-to-source.md
- **Status**: open | partially-rebutted | rebutted | source-debunked | conceded | unclaimable | **closed**
- **Closure** (only if status=closed): <ruled by moderator at turn N as refuted | baseless | source-debunked; quote ruling; note any once-objection and outcome>
- **Thread**: turns N → M → P, ...
- **Notes**: <what's currently the load-bearing weakness or strength>
kb/revisions.md)# KB Revisions Log
[Append-only. Every mutation to live kb/ during the debate phase logs here.]
## R-001 — <date> — <agent-name>, debate turn N
- **Type**: status-downgrade | new-edge | new-node | new-source | criticism-append | contradiction-added
- **Target**: arg-XXX | kb/edges.md | kb/sources/.../file.md | kb/contradictions.md
- **Change**: <what was added or changed; for status changes show before → after>
- **Justification**: <why; cite the debate turn and the traceback finding that supports the change>
- **Triggered by**: <quote or paraphrase from the debate turn>
kb/ to kb-snapshot-construction/ before any debate actionkb/revisions.md entry with debate-turn citationkb/sources/agents/<agent-name>/ write-on-accesstangential-to / scope-mismatch-with / layer-shift-from arguments to avoid central questionsnpx claudepluginhub skothr/controversial-topic-research --plugin adversarial-researchGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.