Ultra research
Dual-model deep research with adversarial cross-audit. Claude and Codex each run their own deep-research skill independently on the same question, then each audits the OTHER's citations (claim-support: PASS/WEAK/FAIL → trust-score + verdict), and Codex synthesizes one trust-weighted final report with a disagreement ledger. All 5 notes (2 reports, 2 audits, 1 final) + an index land in a persistent Obsidian-style vault; the main session returns a concise bullet summary. Use for high-stakes questions, when the user wants dual-model / cross-verified research, or when a prior deep-research run came back mixed / unreliable. For ordinary research, use claudex:deep-research instead.From its SKILL.md
npx -y skills add WillInvest/ClaudeX --skill ultra-researchAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- skips confirmationTells the agent to proceed without asking first, 1 time: "never stop to ask permission mid-run".
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 8 commands, including `python3 "$SKILL_DIR/scripts/vault.py" vaultpath` and 7 more.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
7.6 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it
ultra-research
$SKILL_DIR is this skill's directory. The Python helper is scripts/vault.py;
prompts are in prompts/. Read each prompt when you reach its stage.
When to use (routing)
Prefer plain claudex:deep-research by default. Use ultra-research only when: the
question is high-stakes (policy/financial/factual gravity); the user explicitly
asks for dual-model or cross-verified research; or a prior deep-research run on the
topic returned mixed/unreliable citation integrity.
Setup
- Disambiguate like deep-research: if the question is underspecified, ask 2–3 clarifying questions, then proceed; else state one interpretation and proceed. Never block mid-run after this point.
- Resolve paths and the run id:
VAULT="$(python3 "$SKILL_DIR/scripts/vault.py" vaultpath)" REFINED_QUESTION="$(cat <<'EOF'
Stage 1 — independent research (parallel)
- Codex (background): dispatch
Agent(subagent_type: codex:codex-rescue)with the text ofprompts/codex-research.md, placeholders filled, including--writeand the absolute target$RUNDIR/20-report-codex.md. Prefer background. - Claude (inline): run
claudex:deep-researchyourself on the same refined question. When it finishes, write its verified report to$RUNDIR/10-report-claude.mdwith the report frontmatter (author-model: claude,note-type: report,degraded: false,tags: [ultra-research, report]). - Join: poll for the Codex file until ready or the deadline. Resolve the
per-stage timeout via the helper (handles scalar or object
codexTimeoutMs):
If the post-loop# Stage-1 research default: 20 min (1,200,000 ms) unless config overrides it. DEADLINE=$(( $(date +%s%3N) + $(python3 "$SKILL_DIR/scripts/vault.py" timeout --stage research) )) until python3 "$SKILL_DIR/scripts/vault.py" ready "$RUNDIR/20-report-codex.md"; do [ "$(date +%s%3N)" -ge "$DEADLINE" ] && break sleep 10 done if ! python3 "$SKILL_DIR/scripts/vault.py" ready "$RUNDIR/20-report-codex.md"; then # Execute DEGRADED branch A. fireadycheck fails → DEGRADED branch A (below).
Stage 2 — adversarial cross-audit (parallel)
Each report is audited by the OTHER model; auditors are blind to each other.
- Codex audits Claude (background): dispatch
codex:codex-rescue--writewith theprompts/audit.mdcontract + the absolute path$RUNDIR/10-report-claude.md, writing$RUNDIR/30-audit-of-claude-by-codex.md(author-model: codex,audited-report-model: claude). - Claude audits Codex (inline
Task): dispatch aTask(general-purpose) subagent and explicitly instruct it to useWebFetchfor every cited URL. Give it theprompts/audit.mdcontract assembled inline and the path$RUNDIR/20-report-codex.md; it writes$RUNDIR/31-audit-of-codex-by-claude.md(author-model: claude,audited-report-model: codex). Joined by the subagent's return. - Join Codex audit: recompute the deadline from a fresh clock read and the
Stage-2 audit timeout (default 10 min):
If the post-loopDEADLINE=$(( $(date +%s%3N) + $(python3 "$SKILL_DIR/scripts/vault.py" timeout --stage audit) )) until python3 "$SKILL_DIR/scripts/vault.py" ready "$RUNDIR/30-audit-of-claude-by-codex.md"; do [ "$(date +%s%3N)" -ge "$DEADLINE" ] && break sleep 10 done if ! python3 "$SKILL_DIR/scripts/vault.py" ready "$RUNDIR/30-audit-of-claude-by-codex.md"; then # Execute DEGRADED branch B. fireadycheck fails → DEGRADED branch B.
Stage 3 — trust-weighted final synthesis
Dispatch codex:codex-rescue --write with prompts/final-synthesis.md, the four
absolute paths filled in. It writes $RUNDIR/90-final-report.md and prints a bullet
summary to stdout.
- Poll with a freshly recomputed Stage-3 synthesis timeout (default 10 min):
If the post-loopDEADLINE=$(( $(date +%s%3N) + $(python3 "$SKILL_DIR/scripts/vault.py" timeout --stage synthesis) )) until python3 "$SKILL_DIR/scripts/vault.py" ready "$RUNDIR/90-final-report.md"; do [ "$(date +%s%3N)" -ge "$DEADLINE" ] && break sleep 10 done if ! python3 "$SKILL_DIR/scripts/vault.py" ready "$RUNDIR/90-final-report.md"; then # Execute DEGRADED branch C. fireadycheck fails → DEGRADED branch C. - The file is canonical; the rescue stdout is display-only.
Index + present
- Assemble
$RUNDIR/00-index.mdfromprompts/index.md. Read audit verdicts for the status table with:python3 "$SKILL_DIR/scripts/vault.py" get "$RUNDIR/30-audit-of-claude-by-codex.md" trust-verdict python3 "$SKILL_DIR/scripts/vault.py" get "$RUNDIR/30-audit-of-claude-by-codex.md" trust-score python3 "$SKILL_DIR/scripts/vault.py" get "$RUNDIR/31-audit-of-codex-by-claude.md" trust-verdict python3 "$SKILL_DIR/scripts/vault.py" get "$RUNDIR/31-audit-of-codex-by-claude.md" trust-score - Present to the user: the bullet summary, the two trust-verdicts, and the vault
path
$RUNDIR.
Degraded branches (never hard-fail; always label)
Degraded notes get degraded: true in frontmatter AND a first-line banner:
> **⚠️ DEGRADED — single-model run; adversarial cross-audit merit absent.**
- A — no Codex report: do NOT fake adversarial merit. Base the final on Claude's
deep-research report (already deterministically verified). Optionally attach a
Claude self-audit ONLY if labeled
self-audit — NOT adversarial; equivalent to plain deep-research integrity. Write a degraded90-final-report.mdand a degraded00-index.md. - B — Codex audit failed: Claude audits Codex's report normally (adversarial in
that direction) AND self-audits its own report under the explicit
self-audit — NOT adversarial; equivalent to plain deep-research integritylabel; proceed to Stage 3; mark the run partially degraded. - C — Codex synthesis failed: Claude writes
90-final-report.mdfrom the four inputs using the Stage-3 merge algorithm; set bothauthor-model: claudeandsynthesized-by: claude. Not full DEGRADED (all four inputs exist) — just note the synthesis fallback.
Hard rules
- Each side's own deterministic citation verification still runs inside its own report; the cross-audit is an ADDITIONAL adversarial layer.
- An auditor never audits its own report (except the explicitly-labelled degraded self-audit, which never counts as adversarial merit).
- The
90-final-report.mdfile — not any stdout — is the canonical final report. - Always deliver a labeled result; never stop to ask permission mid-run.
What ships with it: 6 files
20.3 KB alongside SKILL.md, 2 of them executable
prompts/
- audit.md2.4 KB
- codex-research.md1.1 KB
- final-synthesis.md2.6 KB
- index.md2.7 KB
scripts/
- test_vault.pyruns6.8 KB
- vault.pyruns4.7 KB
Gives 0 of the 12 instructions most research analysis skills give in ~2.0k tokens
Counted across 1,213 of the 2,113 authors here whose files we hold, read 2026-09-06
- Cite sources for every important claimin 47 of 1213, across 38 files
- Separate facts from inferences and recommendationsin 21 of 1213, across 12 files
- Write findings to a markdown filein 19 of 1213
- Label every insight with a confidence levelin 18 of 1213, across 8 files
- Read product marketing context before asking questionsin 18 of 1213, across 8 files
- Rank themes by frequency and intensityin 16 of 1213, across 6 files
- Establish research mode before proceedingin 16 of 1213, across 6 files
- Segment survey responses by customer tier or tenurein 16 of 1213, across 6 files
- Categorize support tickets before analyzingin 16 of 1213, across 6 files
- Weight research sources from the last twelve monthsin 16 of 1213, across 6 files
- Use at least five data points per segmentin 15 of 1213, across 5 files
- Extract verbatim quotes for all research findingsin 15 of 1213, across 5 files
Said here and by no other author read
- perform adversarial cross-audits of the generated reports
- poll for file readiness until the deadline
- label degraded runs with specific frontmatter and banners
- use the vault helper to manage run IDs and paths
- present the bullet summary and trust verdicts to the user
- never block mid-run after initial clarification
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.