Contract-Governed Deep Research
Use this workflow when a normal research pass is not enough. The workflow has
four explicit stages and may only claim completion after the verifier contract
passes.
1. Frame and decompose
Write down:
- the decision or question;
- the time boundary and relevant geography or product scope;
- 3–6 non-overlapping sub-questions;
- claims that would materially change the answer;
- acceptable evidence and exclusions.
Do not delegate vague copies of the full question. Each work package must own a distinct sub-question.
2. Gather in parallel
Call subagents_orchestrate with one researcher work package per sub-question.
Set wait: true. Every work package must:
- use
deep_researchwith multiple focused queries; - prefer primary, current sources;
- return a claim ledger with claim, source URL, source date, authority, and whether the source is primary;
- identify disagreement, missing evidence, and circular sourcing;
- include these exit criteria:
[
{"type":"content_contains","text":"Sources"},
{"type":"content_contains","text":"Caveats"}
]
Ask each investigator to cite stable URLs, not search-result pages. A failed worker contract is evidence of incomplete research, not a reason to silently drop that sub-question.
3. Verify adversarially
After fan-in, call sessions_spawn with specialist researcher, include the
complete investigator outputs as context, and ask it to disprove the draft
conclusions. The verifier must:
- map every material claim to at least one cited source;
- require two independent domains for claims marked high confidence, unless a single authoritative primary source is controlling;
- flag duplicated domains and sources that merely repeat the same origin;
- identify conflicts and select the controlling source using authority, directness, and recency;
- report unsupported claims and uncovered sub-questions;
- calculate:
- citation coverage = supported material claims / material claims;
- source independence = distinct controlling domains / controlling sources;
- conflict disposition = resolved conflicts / detected conflicts;
- finish with
VERDICT: PASSorVERDICT: FAIL.
Use this verifier exit contract:
[
{"type":"content_contains","text":"VERDICT:"},
{"type":"content_contains","text":"citation coverage"},
{"type":"content_contains","text":"unsupported claims"}
]
Do not synthesize a confident final answer after VERDICT: FAIL. Repair the
named gaps with one targeted gather-and-verify retry. If it still fails, return
the partial result and say exactly what remains unverified.
4. Synthesize
The final response must contain:
- the bottom line;
- findings organized around the original decision, not around worker names;
- inline citations for every material factual claim;
- explicit disagreement and uncertainty;
- a compact evidence-quality footer:
Evidence quality
- Citation coverage: <supported>/<material>
- Independent controlling domains: <count>
- Conflicts: <resolved>/<detected>
- Verifier: PASS|FAIL
Never present the number of search hits or agent agreement as corroboration. Independence is measured at the controlling source/domain level.