Files
mims-harvard__tooluniverse/plugin/commands/cross-validate.md
Shanghua Gao 16af425c05 Claude Code plugin: self-contained layout, skill-based routing, ML demo readiness (#161)
⏺ Introduces the Claude Code plugin for ToolUniverse as the recommended Claude Code
  integration. Replaces the previous MCP-only setup with a one-command install
  (`claude plugin install tooluniverse@tooluniverse`) that auto-configures the MCP
  server, slash commands, sub-agent, hooks, and 115 specialized research skills.

  Plugin structure
  - 115 skills routed via a single visible router (router auto-matches by question
    keywords + file extensions; sub-skills load on demand via Skill('name')).
  - 5 slash commands (research, compare, cross-validate, literature-sweep,
    translate-id) — each enforces a discipline the default agent doesn't apply.
  - 1 sub-agent (researcher) — same investigation as /tooluniverse:research but
    delegates to a forked-context subagent and returns one summary.
  - SessionStart hook (idempotent) that cleans up legacy globally-installed
    ToolUniverse skills so they don't shadow the plugin.

  Skill changes (general, not benchmark-specific)
  - Router gets a single percentage-vs-proportion units rule.
  - Sub-skills get top-of-mind discipline banners: long-format methylation
    ROWS-vs-unique-positions counting; Trimmomatic "reads completely discarded"
    = F + R + 2*D; DEG-count default reads the padj-only line; ClinVar benign-
    proportion 3-tier reporting; ortholog amino-acid single-representative sum;
    raw + log10 sensitivity for count-vs-length Pearson.

  Versions aligned at 1.2.0
  - Plugin manifest + marketplace.json + Python package (`pyproject.toml`) all at
    1.2.0. After merge, tagging v1.2.0 triggers the plugin-release workflow.

  Docs
  - New install + usage page (docs/guide/building_ai_scientists/claude_code.rst)
    covering the two-command install, version pinning, API-key setup, plugin
    troubleshooting, and the manual-MCP fallback.

  Quality measurement
  - BixBench closed-book official protocol (no reference notebook, hardened
    harness with strict leak audit and isolated workspace): 67.3% (LLM-graded).
    Compare to BixBench paper baseline 17% (Claude 3.5 Sonnet).
2026-05-21 13:12:38 -04:00

4.7 KiB

name, description, argument-hint
name description argument-hint
cross-validate Take a specific scientific claim and confirm or refute it across 3+ independent databases, then report concordance. Use before publishing, citing, or acting on a fact when you want to know how strongly it's supported. Forces multi-source verification that the agent doesn't naturally enforce. [a specific testable claim, e.g. 'BRAF V600E is FDA-approved indication for vemurafenib in melanoma' or 'TP53 mutations occur in >50% of breast cancers']

Cross-validate this claim against independent databases: $ARGUMENTS

A single source for a high-stakes fact is fragile. Force 3+ sources from DIFFERENT databases (not 3 tools that all wrap the same upstream API).

Process

1. Decompose the claim into testable assertions

A claim like "BRAF V600E is FDA-approved indication for vemurafenib in melanoma" has three independent assertions:

  • (a) BRAF V600E exists as an annotated cancer variant
  • (b) Vemurafenib is FDA-approved
  • (c) The approved indication includes BRAF-V600E-positive melanoma

Each assertion can be confirmed/refuted separately. Write them out before calling tools — this is the anchor for what you'll verify.

For a numeric claim ("X% of breast cancers carry TP53 mutations"), the assertion is the value itself; cross-validate by getting the same number from independent cohorts.

2. Pick 3 independent databases per assertion

"Independent" means different upstream maintainers, not different tools wrapping the same API. Examples:

Domain Independent sources
Drug approvals OpenFDA, ChEMBL, DrugBank — each maintains its own approval table
Variant pathogenicity ClinVar (NIH), CIViC (academic crowd-sourced), OncoKB (MSKCC), gnomAD frequency (Broad)
Gene-disease association OpenTargets (composite), DisGeNET, OMIM, GenCC
Mutation frequency in cancer TCGA (GDC), COSMIC, IntOGen — each samples different cohorts
Clinical trial existence ClinicalTrials.gov, EU CTR, ChiCTR
Protein function UniProt, Reactome, KEGG
Pharmacology DrugBank, ChEMBL, PharmGKB, FDA Label

Pick 3. If the claim's domain only has 2 truly-independent sources, note that in the report — don't fabricate a third.

3. Run each source independently

Use tu run <tool> per source. Don't shortcut to a compound tool that aggregates multiple sources — that defeats the cross-validation point. Track each source's verdict separately:

Source 1 (ClinVar): CONFIRMS — V600E listed as Pathogenic, condition: Melanoma
Source 2 (CIViC):   CONFIRMS — V600E linked to vemurafenib sensitivity in melanoma
Source 3 (OncoKB):  CONFIRMS — V600 variant Level 1 evidence for vemurafenib in melanoma

If a source returns "no record found", that's not the same as "refutes" — mark it as INDETERMINATE and note possible reasons (different namespace, absent in that database, query string mismatch).

If a source explicitly contradicts (e.g., gnomAD shows population frequency suggesting it's a benign polymorphism), that's REFUTES.

4. Report concordance

Format:

## Claim
<verbatim claim>

## Verdict: <CONFIRMED | DISPUTED | UNSUPPORTED>

## Per-source results
| Source | Verdict | Evidence | Date |
|---|---|---|---|
| ClinVar | CONFIRMS | V600E Pathogenic for Melanoma | 2025-Q4 |
| CIViC | CONFIRMS | V600E + vemurafenib (Level A) | 2026-01 |
| OncoKB | CONFIRMS | Level 1: vemurafenib in BRAF V600 melanoma | 2026-Q1 |

## Concordance: 3/3 confirm

## Caveats
- All three databases share clinical-trial sourcing (overlapping evidence)
- (Or:) Sources disagree on dosing — ClinVar lists 240mg BID; OpenFDA label lists 960mg BID

The verdict logic:

  • All sources confirm and none refute → CONFIRMED
  • Sources split (some confirm, some refute) → DISPUTED (state the split)
  • All sources indeterminate or absent → UNSUPPORTED (no contradictory evidence either)
  • Any source explicitly refutes a CONFIRMS-from-others case → DISPUTED, prioritize naming the dissenter

5. Note the limits

End with a "Caveats" section flagging:

  • Whether the 3 sources are truly independent or share upstream data
  • Whether any source is regional/legacy (e.g., FDA label is US-only)
  • Whether the claim's TIME-SENSITIVITY matters (drug approvals change; cite the date)
  • Whether numeric claims have a stated tolerance ("> 50%" vs "exactly 53.7%")

Stop conditions

  • Can't find 3 independent sources for the domain → use what you have, state you couldn't reach 3, note which sources DO exist.
  • A source returns API key error → mark as UNREACHABLE, replace with one alternate. Don't retry.
  • 4+ tool calls per assertion without result → stop, report "INDETERMINATE across N attempted sources".