AdversarialResearch

Research the topic, argue against the position, and present the most defensible conclusion the available evidence can support.

AdversarialResearch is a small filesystem-first control plane for research workflows that should improve over multiple cycles without turning “the latest, longest report” into false progress.

Its objective is not to produce a confident answer quickly. It makes a position survive attempts to disprove, narrow, or replace it. The system presents to the human only when it has either cleared the program's evidence thresholds or reached the limit of what the current evidence boundary can defensibly establish.

It is designed around five artifacts:

program.md                         # human-owned research constitution
.autoresearch/session.json          # canonical durable state
.autoresearch/state.md              # deterministic resume brief
.autoresearch/events.jsonl           # append-only lifecycle log
runs/<run>/ and sources/             # evidence, prompts, reports, critiques

Why this exists

Many multi-agent research systems parallelize search and ask one model to synthesize the result. This project focuses on the harder control problem:

  • What evidence was actually retrieved?
  • Did the new cycle repair a material weakness?
  • Did an independent critic attack the argument rather than edit its style?
  • Should the candidate replace the prior best?
  • Is there a plausible evidence path for another cycle, or should the system stop?

The runtime does not pretend to be a truth oracle. “Most defensible” means best supported by the retrieved evidence, explicit about uncertainty, and still standing after targeted counterevidence and adversarial review—not metaphysically certain or permanently final.

Current status

Alpha / agent-native skill pack. The research protocol is battle-tested across an eight-cycle internal case study. This repository packages a portable SKILL.md, model-role setup contract, and durable artifact helper. Your agent host—not this repository—performs browsing and model calls, so the core does not require Browserless, OpenRouter, Claude, Gemini, or a particular agent host.

Closest existing projects include Hyperresearch, Deep Research Skill, Scholar-Graph, and Agon. See docs/competitive-landscape.md for the comparison and the narrower differentiation here.

Install for an agent host

Copy or install SKILL.md using your agent host's skill mechanism, then copy config/adversarialresearch.config.example.yaml into each research project as adversarialresearch.config.yaml. See docs/agent-setup.md and the sanitized agent walkthrough.

The Python helper is optional but recommended for durable state and structural verification:

python3 -m venv .venv
. .venv/bin/activate
python -m pip install -e .
adversarialresearch --help

The helper has no runtime dependencies and supports Python 3.9+. It does not invoke model APIs: the host agent resolves the configured primary and critic roles through its own tool/provider configuration.

Initialize a project

adversarialresearch init \
  --project-dir ./my-research \
  --project my-question \
  --question "One narrow, answerable research question"

This creates runs/, sources/, .autoresearch/, and a placeholder current-best.md. Obsidian publication is optional:

adversarialresearch init \
  --project-dir ./my-research \
  --project my-question \
  --question "One narrow, answerable research question" \
  --vault "$OBSIDIAN_VAULT_PATH"

Lifecycle commands

# Record a cycle decision
adversarialresearch event --project-dir ./my-research --cycle 1 \
  --objective "Map the evidence" \
  --retrieval-status "retrieval succeeded" \
  --critic-status "structured review available" \
  --decision KEEP --stop-verdict CONTINUE \
  --report-path "$PWD/my-research/current-best.md"

# Verify a clean adjudication before changing current-best.md
adversarialresearch verify \
  --file ./my-research/runs/run-001/final-adjudication.md --cycle 1

# Show a compact resume brief
adversarialresearch status --project-dir ./my-research

# Detect repeated objectives or no-change cycles
adversarialresearch guard --project-dir ./my-research

# Publish only to an explicitly supplied target unless a vault was configured
adversarialresearch publish --project-dir ./my-research \
  --source ./my-research/current-best.md \
  --target ./published/Final\ Report.md

Research contract

A serious program should define a narrow question, scope/date window, source hierarchy, required report sections, scoring rubric, unresolved unknowns, and stop policy. Each cycle should have a distinct objective such as map, repair, falsify, operationalize, or adjudicate.

The recommended model roles are:

  1. Collector — discovers and retrieves bounded evidence, preserving raw failures.
  2. Primary synthesizer — writes a candidate with a claim ledger and source limitations.
  3. Adversarial steelman critic — searches for unsupported claims, counterevidence, selection effects, incomparable units, and the strongest alternative thesis.
  4. Adjudicator — decides KEEP/DISCARD and emits exactly one stop verdict.

A critic’s approval is not publication approval. The critic’s job is to try to break the position. The adjudicator must make the final decision, and the filesystem artifacts are authoritative—not a model’s claimed output path.

Public-repository hygiene

Raw runs and sources are ignored by default. Do not commit credentials, raw provider responses, or unreviewed model output. Commit sanitized fixtures and research programs instead.

License

Copyright © 2026 Trevor Longino. This work is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You may share and adapt it for any purpose with appropriate attribution. See LICENSE.