deep-research-method
Run evidence-backed research for Ottili agents: score sources 0-10 (authority/recency/corroboration, keep >=6), cite every claim with URL + retrieval date + pinned version, resolve contradictions by q
SKILL.mdskills/agentic-data/deep-research-method/SKILL.md
GitHubDeep Research Method
When to invoke
Answering any question that requires evidence from the web; writing a research brief; auditing a source; deciding between two conflicting facts. Do NOT use for reading a single document you already trust, or for summarising a file you have locally.
When to invoke (concrete triggers)
| Trigger | Load? |
|---|---|
| "research this", "find sources for", "what is the evidence for" | YES |
| "two sources disagree", "which is right", "contradiction" | YES |
| "is this source credible", "score this source" | YES |
| "summarise this PDF/article" (single doc, already in hand) | NO |
| "what does the code do" (local repo) | NO |
Procedure (numbered — follow in order)
- Decompose the question into sub-questions before fetching anything. A sub-question that cannot be answered by a source is a scope gap, say so.
- Score every source 0-10 before using it (table below). Only sources >=6
are kept; a source scoring 5 is discarded unless it is the only source for
a sub-question, in which case it is flagged
lowconfidence. - Fetch the primary, not the summary. A secondary source never carries a
retrieval date that proves you read the primary. Record URL + retrieval date
- pinned version for every claim.
- Quote under 15 words. Anything longer is a summary with a citation, not a quote. Paraphrase bait is how citations drift.
- Resolve contradictions by quality weight, never by majority vote and
never by averaging (see
references/contradiction-handling.md). - State confidence: high (primary + >=2 corroborating), medium (primary only), low (secondary only). Never claim high without corroboration.
Decision tables
- Quality score: authority 0-4, recency 0-3, corroboration 0-3. >=6 keep.
- Authority: official body/standards org = 4; major vendor = 3; academic = 3; established media = 2; blog/unknown = 0-1.
- Recency: <1 year for fast-changing = 3; 1-3 years = 2; 3-5 years = 1;
5 years = 0 unless the fact is stable.
- Corroboration: 3+ independent = 3; 2 = 2; 1 = 1; none = 0. "Independent"
means distinct upstreams, not distinct URLs: two pages that copy the same primary
count as one. Verify with
scripts/score_sources.py corroboration. - Confidence: high = primary + >=2 corroborating; medium = primary only; low = secondary only; none = no source.
- Citation rules: every claim needs URL + title + retrieval date; a claim
missing any one is downgraded one rung. Quotations <=15 words are fine with a
citation; longer ones need a page/section reference. A paraphrase must change
wording, argument order, or level of abstraction; otherwise it is a quote.
Version-sensitive facts record the exact version seen and are re-fetched if
older than 7 days. Contradictions are recorded in
references/incidents.mdwith both sources and the resolution (seereferences/citation-discipline.md).
Near-miss triggers (stop and re-check before proceeding)
- A source with no retrieval date -> not evidence, re-fetch and record.
- A secondary source used as the sole evidence -> fetch the primary.
- A contradiction resolved by majority vote -> re-weight by quality.
- A fact stated without a source -> mark it as unverified.
- Two sources disagree and the answer averages the numbers -> fake precision; list, weight, state the range.
- A 2024 fact used for a 2026 question without re-checking -> re-fetch.
- A kept source with score <6 -> it was never scored.
- Two URLs that agree exactly on a value but share an upstream -> the fake middle; they are one source, not two. Count upstreams, not URLs.
- A kept source with no retrieval date or no pinned version -> it is memory, not
evidence; run
scripts/score_sources.py provenanceto catch it.
Pitfalls from research
- P1: Source quality is judged before reading; a good-looking page can be wrong.
- P2: Retrieval dates are mandatory; memory is not evidence.
- P3: Contradictions must be surfaced, not averaged away.
- P4: Secondary sources masquerading as primary are the common failure.
- P5: Stale facts are reused because they were once verified.
- P6: A source that scores 5 is not "close enough" — it is discarded, unless it is the only source for a sub-question, in which case it is flagged low.
- P7: Averaging two sources into a middle value produces a number no source claimed; it reads as precision and carries no evidence.
Verification checklist
- Question decomposed into sub-questions.
- Every source scored 0-10 before use; only >=6 kept.
- Every source has URL + retrieval date + pinned version.
- Every claim cites a source; no unsourced claims.
- Contradictions listed and resolved by quality weight.
- Confidence stated (high/medium/low) with the reason.
- Quotations under 15 words.
-
scripts/score_sources.py corroborationpasses: every kept URL traces to a distinct upstream. Two URLs sharing an upstream count as one source. -
scripts/score_sources.py provenancepasses: every kept source carries URL + retrieval date + pinned version.
Worked examples
Good — scored, cited, confidence-stated answer
Question: "What is the retention period for GDPR erasure requests?"
- Decompose: (a) the statutory deadline, (b) whether it has changed, (c) any member-state derogation.
- Score candidates before reading: the EU legal-summary page scores 10 (authority 4, recency 3, corroboration 3); a blog scores 2 and is discarded.
- Fetch the primary legal text first; record URL + retrieval date + version.
- Cite by short paraphrase under 15 words, with the URL next to each claim.
- Two independent upstreams corroborate -> confidence
high, stated with the reason.
Result: every claim carries URL + retrieval date + version; confidence is high only because two upstreams corroborate. Detection signal: no claim lacks a citation, and the confidence word is followed by "because ...".
Bad — unsourced claim dressed as a finding
"The model is 3x faster than the baseline." No URL, no retrieval date, no version.
Why it fails: the claim cannot be verified or re-checked. The rule is URL +
retrieval date + pinned version for every claim; a claim without a source is a
confidence of low and must be flagged, not asserted.
Detection signal: a sentence with a number and no citation.
Bad — contradiction averaged into a fake middle
Source A (university preprint, score 8) says "one month". Source B (industry report, score 6) says "two months".
Why it fails: averaging to "one and a half months" produces a number no source claimed; it reads as precision and carries no evidence. Resolve by quality weight: cite A as primary, note B as a lower-weight disagreement, and state the range (one to two months). Never majority-vote and never average. Detection signal: the summary names both sources and gives a range, not a single number.
Bad — quoting 22 words to "prove" a point
"the results show a statistically significant improvement in latency, throughput, and accuracy across all benchmarks".
Why it fails: long quotations are paraphrase bait and easy to misquote. Keep quotations under 15 words; anything longer is a summary with a citation, not a quote. Detection signal: a blockquote longer than 15 words that is not labelled a summary.
More worked examples, each ending with the check that would have caught it, live
in references/examples.md.
Related skills
- verifiable-environments — the SPEC a verifier is derived from is a research product with cited sources; a verifier's bypass audit is itself a research claim.
- skill-authoring-evals — the source-scoring rubric and the trigger-eval methodology are research products; cite them and state confidence.
References
- procedures: references/procedures.md
- citation discipline: references/citation-discipline.md
- scoring: references/source-scoring.md
- contradiction handling: references/contradiction-handling.md
- confidence ladder: references/confidence-ladder.md
- staleness: references/staleness.md
- source scoring: references/source-scoring.md
- cite fetch: references/cite-fetch.md
- examples: references/examples.md
- incidents: references/incidents.md
- SOURCES: references/SOURCES.md