Dossier — Decision-Grade Entity Research

Decision-grade entity research skill — produces a hypothesis-tested dossier on a specific company, person, nonprofit, or government org, not a generic profile.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/dossier, including the files SKILL.md points to.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit alirezarezvani/claude-skills/research/dossier/skills/dossier#main ~/.claude/skills/dossier

For one project only, change the path to .claude/skills/dossier. This skill also uses Node.js, citation_tracker.py, source_tier_classifier.py — copying SKILL.md alone won't be enough. See the folder on GitHub.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Dossier — Decision-Grade Entity Research

Show the full text319 lines
namedescriptionlicensemetadata
dossierDecision-grade entity research skill — produces a hypothesis-tested dossier on a specific company, person, nonprofit, or government org, not a generic profile. Forcing intake makes the user state their hypothesis upfront (what they already believe and want to verify or disprove) so the dossier tests it rather than confirms it. Output is an editable Word document (.docx) with verdict on the hypothesis, identity facts, 12-month activity timeline, network and reputation signals, red flags, conversation hooks tied to specific findings, and source-provenance audit log. Uses WebSearch + WebFetch + free APIs (SEC EDGAR, GitHub, ProPublica) as workhorses; optional BYOK MCPs enhance coverage. Use when the user asks for background research, diligence, or meeting prep on a specific entity (e.g., 'prep me for a meeting with [person/company]', 'due diligence on [company]'). Honors sensitivity exclusions for journalism + personal-vetting contexts.MIT source_spec: "megaprompts/12-dossier-megaprompt.md build_pattern: "Path B (direct conversion) research_pack_convention: "Agent Integrity Rules verbatim per PR #657 audit; hypothesis-testing variant version: 1.0.0

Dossier — Decision-Grade Entity Research

Portability: Requires WebSearch + WebFetch, Node.js with docx package, and optionally bash_tool + curl for free APIs (SEC EDGAR, GitHub, ProPublica). BYOK MCPs (LinkedIn, Crunchbase, Apollo, Pitchbook, SimilarWeb) are optional enhancements. Works in Claude Code CLI natively.

Non-Generic Framing — The Differentiator

This skill is decision-grade entity research with hypothesis-testing. It refuses to be "tell me about Microsoft". Every invocation forces the user to expose their hypothesis upfront (Q4) so the dossier tests it rather than confirms it.

The use case shape:

"I'm pitching Microsoft Tuesday. My hypothesis is they're consolidating AI spend on their first-party Foundry platform. Validate or disprove, and give me three conversation hooks tied to what you find."

NOT:

"Tell me about Microsoft."

The forcing Q4 — the hypothesis question — is the non-generic anchor. Skip it and the skill produces a Wikipedia summary.

See references/hypothesis_testing_discipline.md for the canon.

Agent Integrity Rules (Research-Pack Convention)

Locked verbatim per PR #657 audit.

  • Execution discipline. Sequential search calls. WebSearch + WebFetch have looser rate limits than Consensus but still apply 1 q/sec etiquette. Confirm response received before next call.
  • Source discipline. Cite only sources returned by this session's tool calls. Wikipedia / training knowledge labeled [Background — verify before quoting] and excluded from primary findings count.
  • Three-count tracking. Queries sent / sources received / sources cited. Plus per-tier breakdown (primary / secondary / tertiary) unique to dossier. Surfaced in audit log.
  • Retry policy. On failure → wait 3s → retry once → log. After 3 consecutive failures: stop, alert user.
  • Source reliability tier. Each citation tagged primary (official, SEC, court records) / secondary (mainstream news, trade press) / tertiary (blogs, forums). DOCX surfaces tier on every flag.

Phase 1: Grill-Me Intake (6 forcing questions, one at a time)

Q1 (root) — Subject identity

Who is the subject? Give me the exact name and, if a company, the website or LinkedIn URL. If a person, their LinkedIn URL or a unique identifier (company affiliation + role).

Why I'm asking: Disambiguation. There are 47 John Smiths. There are three companies called "Atlas". I need a specific entity to research.

If user gives only a name, push for a second identifier. Refuse to proceed on ambiguous names.

Q2 (depends on Q1) — Subject type

What kind of subject is this? Pick one: person / company / nonprofit / government org / other.

Why I'm asking: Different source matrices apply. For people I check LinkedIn, GitHub, Scholar, news; for companies I check SEC EDGAR (if public), Crunchbase, news, GitHub for tech orgs; for nonprofits I check Form 990s on ProPublica.

Forcing choice. "Other" requires a one-line description.

Q3 (depends on Q2) — Purpose

What are you preparing for? Pick one:

  1. Sales meeting / partnership pitch
  2. Investment diligence
  3. Acquisition diligence
  4. Journalism / due diligence
  5. Job interview prep
  6. Competitive intelligence
  7. Personal vetting (date, hire, business partner)
  8. Other (specify)

Why I'm asking: The purpose dictates the angle, the depth, and the red-flag sensitivity. Sales prep needs conversation hooks. Investment diligence needs traction signals. Personal vetting needs careful sensitivity boundaries.

Q4 (depends on Q3) — Hypothesis — MANDATORY

What's your hypothesis going in? What do you already believe about this subject, and what do you want to verify or disprove?

Why I'm asking: This is the critical question. A dossier that just confirms what you already think is worthless. By stating your hypothesis upfront, I can search for evidence that would disprove it as well as evidence that supports it — and give you a verdict you can actually use.

Examples:

  • "I believe Microsoft is consolidating AI spend on first-party Foundry. Verify or disprove."
  • "I think the CEO is over their head — too much TAM talk, no traction. Test that."
  • "I believe this nonprofit's overhead ratio is sketchy. Check the 990s."
  • "I think this person is technical enough to handle a CTO role. Verify."

MANDATORY. If user says "I don't have one", push back once: "Then guess. Commit to a position you can update later. The dossier needs a hypothesis to test, otherwise it's a generic profile and won't help you make a decision."

If still refused: fall back to implicit hypothesis "what's the most surprising thing I could find?" and flag the fallback in audit log.

This question is the non-generic anchor. Skip it and the skill becomes a Wikipedia summary.

Q5 (depends on Q3) — Depth

Time horizon: 5-minute brief or 15-minute decision-grade dossier?

Why I'm asking: Brief mode caps at ~10 searches and skips the network + reputation passes. Decision-grade goes deeper on every section. Pick based on how much skin you have in this decision.

Forcing choice.

Q6 (asked only if Q3 ∈ {journalism, personal vetting}) — Sensitivities

Anything sensitive to exclude? E.g., personal medical, family details, political history, or specific topics off-limits?

Why I'm asking: Some research contexts have ethical constraints. I'd rather know upfront than surface something you'd never share.

Skip for sales/investment/acquisition/competitive intel (low sensitivity); ask for journalism/personal vetting (high sensitivity).

Stop condition: After Q6 (or earlier with dependency skips), commit and start Phase 2. Never re-open intake after Phase 2 begins.

Phase 2: Subject Disambiguation

Before Phase 3, resolve the subject to a specific entity:

  • For people: confirm LinkedIn URL OR (employer + role + city)
  • For companies: confirm domain OR (legal name + incorporation jurisdiction)
  • For nonprofits: confirm EIN OR (legal name + state)
  • For government orgs: confirm official .gov URL

If still ambiguous after Q1 push-back: halt and re-ask Q1 with disambiguating identifiers. Refuse to proceed.

Phase 3: Source Matrix Selection

Routed by Q2 subject type. See references/subject_type_source_matrix.md for the full canon.

Person
  • LinkedIn (manual fetch or LinkedIn MCP if BYOK)
  • Personal website
  • Twitter/X (rate-limited; degrade gracefully)
  • GitHub (if technical subject)
  • Google Scholar (if academic)
  • News (WebSearch + WebFetch)
  • Conference talk transcripts, podcasts (WebSearch)
Company
  • Official website (about, leadership, news, careers)
  • SEC EDGAR (free API; 10-Ks, 10-Qs, 8-Ks for public co's)
  • Crunchbase free tier (or Crunchbase MCP if BYOK)
  • News (WebSearch + WebFetch)
  • GitHub (for tech orgs)
  • Glassdoor + Comparably (sentiment; degrade gracefully if scraping blocked)
  • LinkedIn company page
Nonprofit
  • ProPublica Nonprofit Explorer (free; Form 990s)
  • Official website
  • News
  • GuideStar (if accessible)
Government org
  • Official .gov sites
  • News
  • ProPublica (for federal agencies)

If a paid MCP is connected (Apollo, Pitchbook, SimilarWeb), use it but mark findings as BYOK-sourced in the audit log.

Every Phase 4 search MUST be classified as either:

  • Supporting evidence (confirms hypothesis), OR
  • Disconfirming evidence (would refute hypothesis)

≥30% of search budget allocated to disconfirming queries. Enforced via scripts/disconfirming_evidence_balance.py.

Example for hypothesis "Microsoft is consolidating AI spend on Foundry":

  • Supporting: "Microsoft Foundry adoption 2026", "Microsoft AI infrastructure consolidation"
  • Disconfirming: "Microsoft OpenAI deal renegotiation", "Microsoft AI vendor diversification", "Microsoft third-party model partnerships 2026"

This is what makes the dossier decision-grade rather than confirmation-biased.

For each search:

  • Record via citation_tracker.py with classification (supporting / disconfirming)
  • Apply source tier from source_tier_classifier.py to each result URL

Phase 5: 12-Month Activity Timeline

Default 12-month window for activity timeline; deeper for foundational identity.

Categories:

  • News (acquisitions, hires, departures, product launches)
  • Funding rounds / financial events
  • Controversies / legal events
  • Public statements / strategy shifts

Reverse chronological. Each entry hyperlinked + tiered.

Phase 6: Network + Reputation Signals

Network
  • Companies: investors (in/out), customers (named), partners
  • People: co-founders, advisors, mentors, employers, board roles
  • Nonprofits: funders, board, leadership

5-10 entries, ranked by relevance to hypothesis.

Reputation
  • Sentiment from news (recent 12 months)
  • Glassdoor for companies (overall rating + 3 representative reviews)
  • Peer mentions for people
  • Caveat: reputation data is noisy; tier accordingly

Phase 7: Red-Flag Pass

Surface but don't sensationalize:

  • Litigation (court records → primary tier)
  • Regulatory actions (SEC, DOJ, agency actions → primary)
  • Unusual departures (key personnel exits within 90 days)
  • Financial signals (going-concern notes in 10-Ks → primary)
  • Reputation hits (sustained negative coverage → secondary)

Each flag tiered. Tier shows up next to every flag in the DOCX.

Phase 8: Conversation Hook Generation

3-5 specific hooks tied to actual findings, not generic talking points.

See references/conversation_hook_quality.md for the canon.

❌ Generic ✅ Finding-tied
"Ask about their roadmap" "Mention their recent acquisition of [X] — it signals they're investing in vertical Y. Suggested framing: 'Saw the [X] announcement — how does that change your roadmap on Y?'"
"Ask about hiring" "Their VP Engineering left 3 weeks ago (LinkedIn). Suggested framing: 'I noticed [name] moved on — what's the eng leadership plan?'"
"Talk about their values" "They updated their pricing page last week (their official site). Suggested framing: 'Saw the pricing refresh — what drove that?'"

Each hook:

  • The hook (one sentence)
  • The finding it's tied to (with hyperlink + tier)
  • Suggested framing (verbatim phrasing user can adapt)

Phase 9: DOCX Generation (9 Sections)

Via Node.js + docx library.

  1. Executive Summary — one paragraph: who they are + why they matter + verdict on the hypothesis (SUPPORTED / PARTIALLY SUPPORTED / DISPROVEN / INCONCLUSIVE) + 3 things-you-should-know bullets.
  2. Identity Facts Table — founded/born, location, size/stage, current role, key affiliations. All cells sourced; hover-text tier.
  3. Hypothesis Test — user's hypothesis stated verbatim. Supporting evidence (3-5 bullets with hyperlinked citations). Disconfirming evidence (3-5 bullets with hyperlinked citations). Verdict paragraph (2-3 sentences explaining the weight).
  4. 12-Month Activity Timeline — News, funding, hires, departures, product launches, controversies. Reverse chronological. Each entry hyperlinked.
  5. Network Signals — Collaborators / investors / associates. 5-10 entries, ranked by relevance to hypothesis.
  6. Reputation Signals — Sentiment from news, Glassdoor for companies, peer mentions for people. Caveat: reputation data is noisy.
  7. Red Flags + Hidden Patterns — Litigation, regulatory actions, unusual departures, financial signals, reputation hits. Tiered.
  8. Conversation Hooks — 3-5 specific hooks tied to findings. Each: hook + finding + suggested framing.
  9. Source Provenance + Audit Log — Per-source list with tier. Search summary table (#, query, classification, sources returned, sources cited). Three counts + per-tier counts. Failed searches. BYOK-MCP usage flag.
Styling

Arial 12pt body, navy headings (#1a3a5c), light blue table headers (#e8f0f8), red red-flag callout, green conversation-hook callout.

new ExternalHyperlink({
  link: "https://...",
  children: [new TextRun({ text: title, style: "Hyperlink" })],
});

Phase 10: Deliver

  • Save: <output-dir>/dossier_<entity-slug>_<YYYY-MM-DD>.docx
  • Chat summary: file path + verdict on hypothesis + audit counts + tier breakdown + BYOK MCPs used (if any)
  • Validate: check zip integrity with python3 -c "import zipfile,sys; zipfile.ZipFile(sys.argv[1]).testzip()" <docx> (no output = intact), then confirm the required sections are present

Tooling

Script Role
scripts/citation_tracker.py Three-count audit + supporting/disconfirming classification + source-tier tagging at ~/.dossier_sessions/<session>.json
scripts/disconfirming_evidence_balance.py Verifies ≥30% of search budget allocated to disconfirming queries; warns if biased
scripts/source_tier_classifier.py URL → primary / secondary / tertiary classification via domain heuristics

References

Error Handling

Failure Behavior
Subject name ambiguous Refuse to proceed. Re-ask Q1 with disambiguating identifier.
User refuses to state hypothesis Push back once. If still refused, fall back to "what's the most surprising thing I could find?" implicit hypothesis. Flag in audit.
Subject has zero public footprint Surface explicitly. Suggest different name or early-stage. Don't fabricate.
LinkedIn scrape blocked Note in audit; fall back to WebSearch; suggest user verify manually.
SEC EDGAR fails Retry once. If still failing, note "public filings not retrieved" and continue.
Sentiment data sparse Mark reputation section as "limited public signal"; don't infer from training.
Sensitive topic surfaces (Q6 exclusion) Exclude from DOCX. Note in chat (not in DOCX) so user knows the exclusion was honored.
3 consecutive tool failures Stop, alert user, share collected so far.
DOCX generation fails Save raw data as JSON fallback.

Anti-Patterns To Reject

  • Producing a dossier without forcing Q4 hypothesis
  • Allocating <30% of search budget to disconfirming evidence
  • Batching intake questions
  • Accepting ambiguous subject names
  • Generic conversation hooks ("ask about their roadmap")
  • Sensationalizing red flags (tier them, don't editorialize)
  • Skipping the source-reliability tier on flags
  • Fabricating coverage when LinkedIn or scraping is blocked
  • Using BYOK-MCP data without flagging in audit log
  • Including sensitive topics user excluded in Q6
  • Confirmation-biased verdict ("SUPPORTED" without engaging with disconfirming evidence)

Version: 1.0.0 Source spec: megaprompts/12-dossier-megaprompt.md (maintainer-local draft spec — gitignored, not present in the public repository) Build pattern: Path B (direct conversion). Research-pack sibling, hypothesis-testing variant.

1---
2name: dossier
3description: "Decision-grade entity research skill — produces a hypothesis-tested dossier on a specific company, person, nonprofit, or government org, not a generic profile. Forcing intake makes the user state their hypothesis upfront (what they already believe and want to verify or disprove) so the dossier tests it rather than confirms it. Output is an editable Word document (.docx) with verdict on the hypothesis, identity facts, 12-month activity timeline, network and reputation signals, red flags, conversation hooks tied to specific findings, and source-provenance audit log. Uses WebSearch + WebFetch + free APIs (SEC EDGAR, GitHub, ProPublica) as workhorses; optional BYOK MCPs enhance coverage. Use when the user asks for background research, diligence, or meeting prep on a specific entity (e.g., 'prep me for a meeting with [person/company]', 'due diligence on [company]'). Honors sensitivity exclusions for journalism + personal-vetting contexts."
4license: MIT
5metadata:
6 source_spec: "megaprompts/12-dossier-megaprompt.md"
7 build_pattern: "Path B (direct conversion)"
8 research_pack_convention: "Agent Integrity Rules verbatim per PR #657 audit; hypothesis-testing variant"
9 version: 1.0.0
10---
11 
12# Dossier — Decision-Grade Entity Research
13 
14> **Portability:** Requires `WebSearch` + `WebFetch`, Node.js with `docx` package, and optionally `bash_tool` + `curl` for free APIs (SEC EDGAR, GitHub, ProPublica). BYOK MCPs (LinkedIn, Crunchbase, Apollo, Pitchbook, SimilarWeb) are optional enhancements. Works in Claude Code CLI natively.
15 
16## Non-Generic Framing — The Differentiator
17 
18This skill is **decision-grade entity research with hypothesis-testing**. It **refuses** to be "tell me about Microsoft". Every invocation forces the user to expose their hypothesis upfront (Q4) so the dossier *tests* it rather than confirms it.
19 
20The use case shape:
21 
22> "I'm pitching Microsoft Tuesday. My hypothesis is they're consolidating AI spend on their first-party Foundry platform. Validate or disprove, and give me three conversation hooks tied to what you find."
23 
24**NOT:**
25 
26> "Tell me about Microsoft."
27 
28The forcing Q4 — the hypothesis question — is the non-generic anchor. Skip it and the skill produces a Wikipedia summary.
29 
30See [`references/hypothesis_testing_discipline.md`](references/hypothesis_testing_discipline.md) for the canon.
31 
32## Agent Integrity Rules (Research-Pack Convention)
33 
34Locked verbatim per PR #657 audit.
35 
36- **Execution discipline.** Sequential search calls. WebSearch + WebFetch have looser rate limits than Consensus but still apply 1 q/sec etiquette. Confirm response received before next call.
37- **Source discipline.** Cite only sources returned by this session's tool calls. Wikipedia / training knowledge labeled `[Background — verify before quoting]` and excluded from primary findings count.
38- **Three-count tracking.** Queries sent / sources received / sources cited. Plus **per-tier breakdown** (primary / secondary / tertiary) unique to dossier. Surfaced in audit log.
39- **Retry policy.** On failure → wait 3s → retry once → log. After 3 consecutive failures: stop, alert user.
40- **Source reliability tier.** Each citation tagged primary (official, SEC, court records) / secondary (mainstream news, trade press) / tertiary (blogs, forums). DOCX surfaces tier on every flag.
41 
42## Phase 1: Grill-Me Intake (6 forcing questions, one at a time)
43 
44### Q1 (root) — Subject identity
45 
46> **Who is the subject? Give me the exact name and, if a company, the website or LinkedIn URL. If a person, their LinkedIn URL or a unique identifier (company affiliation + role).**
47>
48> *Why I'm asking:* Disambiguation. There are 47 John Smiths. There are three companies called "Atlas". I need a specific entity to research.
49 
50If user gives only a name, push for a second identifier. **Refuse to proceed on ambiguous names.**
51 
52### Q2 (depends on Q1) — Subject type
53 
54> **What kind of subject is this? Pick one: person / company / nonprofit / government org / other.**
55>
56> *Why I'm asking:* Different source matrices apply. For people I check LinkedIn, GitHub, Scholar, news; for companies I check SEC EDGAR (if public), Crunchbase, news, GitHub for tech orgs; for nonprofits I check Form 990s on ProPublica.
57 
58Forcing choice. "Other" requires a one-line description.
59 
60### Q3 (depends on Q2) — Purpose
61 
62> **What are you preparing for? Pick one:**
63>
64> 1. Sales meeting / partnership pitch
65> 2. Investment diligence
66> 3. Acquisition diligence
67> 4. Journalism / due diligence
68> 5. Job interview prep
69> 6. Competitive intelligence
70> 7. Personal vetting (date, hire, business partner)
71> 8. Other (specify)
72>
73> *Why I'm asking:* The purpose dictates the angle, the depth, and the red-flag sensitivity. Sales prep needs conversation hooks. Investment diligence needs traction signals. Personal vetting needs careful sensitivity boundaries.
74 
75### Q4 (depends on Q3) — **Hypothesis — MANDATORY**
76 
77> **What's your hypothesis going in? What do you already believe about this subject, and what do you want to verify or disprove?**
78>
79> *Why I'm asking:* This is the critical question. A dossier that just confirms what you already think is worthless. By stating your hypothesis upfront, I can search for evidence that would *disprove* it as well as evidence that supports it — and give you a verdict you can actually use.
80>
81> Examples:
82> - "I believe Microsoft is consolidating AI spend on first-party Foundry. Verify or disprove."
83> - "I think the CEO is over their head — too much TAM talk, no traction. Test that."
84> - "I believe this nonprofit's overhead ratio is sketchy. Check the 990s."
85> - "I think this person is technical enough to handle a CTO role. Verify."
86 
87**MANDATORY.** If user says "I don't have one", push back **once**: "Then guess. Commit to a position you can update later. The dossier needs a hypothesis to test, otherwise it's a generic profile and won't help you make a decision."
88 
89If still refused: fall back to implicit hypothesis "what's the most surprising thing I could find?" and **flag the fallback in audit log**.
90 
91This question is **the non-generic anchor**. Skip it and the skill becomes a Wikipedia summary.
92 
93### Q5 (depends on Q3) — Depth
94 
95> **Time horizon: 5-minute brief or 15-minute decision-grade dossier?**
96>
97> *Why I'm asking:* Brief mode caps at ~10 searches and skips the network + reputation passes. Decision-grade goes deeper on every section. Pick based on how much skin you have in this decision.
98 
99Forcing choice.
100 
101### Q6 (asked only if Q3 ∈ {journalism, personal vetting}) — Sensitivities
102 
103> **Anything sensitive to exclude? E.g., personal medical, family details, political history, or specific topics off-limits?**
104>
105> *Why I'm asking:* Some research contexts have ethical constraints. I'd rather know upfront than surface something you'd never share.
106 
107Skip for sales/investment/acquisition/competitive intel (low sensitivity); ask for journalism/personal vetting (high sensitivity).
108 
109**Stop condition:** After Q6 (or earlier with dependency skips), commit and start Phase 2. Never re-open intake after Phase 2 begins.
110 
111## Phase 2: Subject Disambiguation
112 
113Before Phase 3, resolve the subject to a specific entity:
114 
115- For people: confirm LinkedIn URL OR (employer + role + city)
116- For companies: confirm domain OR (legal name + incorporation jurisdiction)
117- For nonprofits: confirm EIN OR (legal name + state)
118- For government orgs: confirm official .gov URL
119 
120If still ambiguous after Q1 push-back: **halt and re-ask Q1** with disambiguating identifiers. Refuse to proceed.
121 
122## Phase 3: Source Matrix Selection
123 
124Routed by Q2 subject type. See [`references/subject_type_source_matrix.md`](references/subject_type_source_matrix.md) for the full canon.
125 
126### Person
127 
128- LinkedIn (manual fetch or LinkedIn MCP if BYOK)
129- Personal website
130- Twitter/X (rate-limited; degrade gracefully)
131- GitHub (if technical subject)
132- Google Scholar (if academic)
133- News (WebSearch + WebFetch)
134- Conference talk transcripts, podcasts (WebSearch)
135 
136### Company
137 
138- Official website (about, leadership, news, careers)
139- SEC EDGAR (free API; 10-Ks, 10-Qs, 8-Ks for public co's)
140- Crunchbase free tier (or Crunchbase MCP if BYOK)
141- News (WebSearch + WebFetch)
142- GitHub (for tech orgs)
143- Glassdoor + Comparably (sentiment; degrade gracefully if scraping blocked)
144- LinkedIn company page
145 
146### Nonprofit
147 
148- ProPublica Nonprofit Explorer (free; Form 990s)
149- Official website
150- News
151- GuideStar (if accessible)
152 
153### Government org
154 
155- Official .gov sites
156- News
157- ProPublica (for federal agencies)
158 
159If a paid MCP is connected (Apollo, Pitchbook, SimilarWeb), use it but mark findings as **BYOK-sourced** in the audit log.
160 
161## Phase 4: Hypothesis-Driven Search
162 
163Every Phase 4 search MUST be classified as either:
164 
165- **Supporting evidence** (confirms hypothesis), OR
166- **Disconfirming evidence** (would refute hypothesis)
167 
168**≥30% of search budget allocated to disconfirming queries.** Enforced via `scripts/disconfirming_evidence_balance.py`.
169 
170Example for hypothesis "Microsoft is consolidating AI spend on Foundry":
171 
172- **Supporting:** "Microsoft Foundry adoption 2026", "Microsoft AI infrastructure consolidation"
173- **Disconfirming:** "Microsoft OpenAI deal renegotiation", "Microsoft AI vendor diversification", "Microsoft third-party model partnerships 2026"
174 
175This is what makes the dossier **decision-grade** rather than confirmation-biased.
176 
177For each search:
178- Record via `citation_tracker.py` with classification (supporting / disconfirming)
179- Apply source tier from `source_tier_classifier.py` to each result URL
180 
181## Phase 5: 12-Month Activity Timeline
182 
183Default 12-month window for activity timeline; deeper for foundational identity.
184 
185Categories:
186- News (acquisitions, hires, departures, product launches)
187- Funding rounds / financial events
188- Controversies / legal events
189- Public statements / strategy shifts
190 
191Reverse chronological. Each entry hyperlinked + tiered.
192 
193## Phase 6: Network + Reputation Signals
194 
195### Network
196 
197- **Companies:** investors (in/out), customers (named), partners
198- **People:** co-founders, advisors, mentors, employers, board roles
199- **Nonprofits:** funders, board, leadership
200 
2015-10 entries, ranked by **relevance to hypothesis**.
202 
203### Reputation
204 
205- Sentiment from news (recent 12 months)
206- Glassdoor for companies (overall rating + 3 representative reviews)
207- Peer mentions for people
208- Caveat: reputation data is noisy; tier accordingly
209 
210## Phase 7: Red-Flag Pass
211 
212Surface but don't sensationalize:
213 
214- Litigation (court records → primary tier)
215- Regulatory actions (SEC, DOJ, agency actions → primary)
216- Unusual departures (key personnel exits within 90 days)
217- Financial signals (going-concern notes in 10-Ks → primary)
218- Reputation hits (sustained negative coverage → secondary)
219 
220**Each flag tiered.** Tier shows up next to every flag in the DOCX.
221 
222## Phase 8: Conversation Hook Generation
223 
2243-5 specific hooks tied to **actual findings**, not generic talking points.
225 
226See [`references/conversation_hook_quality.md`](references/conversation_hook_quality.md) for the canon.
227 
228| ❌ Generic | ✅ Finding-tied |
229|---|---|
230| "Ask about their roadmap" | "Mention their recent acquisition of [X] — it signals they're investing in vertical Y. Suggested framing: 'Saw the [X] announcement — how does that change your roadmap on Y?'" |
231| "Ask about hiring" | "Their VP Engineering left 3 weeks ago (LinkedIn). Suggested framing: 'I noticed [name] moved on — what's the eng leadership plan?'" |
232| "Talk about their values" | "They updated their pricing page last week (their official site). Suggested framing: 'Saw the pricing refresh — what drove that?'" |
233 
234Each hook:
235- **The hook** (one sentence)
236- **The finding it's tied to** (with hyperlink + tier)
237- **Suggested framing** (verbatim phrasing user can adapt)
238 
239## Phase 9: DOCX Generation (9 Sections)
240 
241Via Node.js + `docx` library.
242 
2431. **Executive Summary** — one paragraph: who they are + why they matter + **verdict on the hypothesis** (SUPPORTED / PARTIALLY SUPPORTED / DISPROVEN / INCONCLUSIVE) + 3 things-you-should-know bullets.
2442. **Identity Facts Table** — founded/born, location, size/stage, current role, key affiliations. All cells sourced; hover-text tier.
2453. **Hypothesis Test** — user's hypothesis stated verbatim. Supporting evidence (3-5 bullets with hyperlinked citations). Disconfirming evidence (3-5 bullets with hyperlinked citations). Verdict paragraph (2-3 sentences explaining the weight).
2464. **12-Month Activity Timeline** — News, funding, hires, departures, product launches, controversies. Reverse chronological. Each entry hyperlinked.
2475. **Network Signals** — Collaborators / investors / associates. 5-10 entries, ranked by relevance to hypothesis.
2486. **Reputation Signals** — Sentiment from news, Glassdoor for companies, peer mentions for people. Caveat: reputation data is noisy.
2497. **Red Flags + Hidden Patterns** — Litigation, regulatory actions, unusual departures, financial signals, reputation hits. Tiered.
2508. **Conversation Hooks** — 3-5 specific hooks tied to findings. Each: hook + finding + suggested framing.
2519. **Source Provenance + Audit Log** — Per-source list with tier. Search summary table (#, query, classification, sources returned, sources cited). Three counts + per-tier counts. Failed searches. BYOK-MCP usage flag.
252 
253### Styling
254 
255Arial 12pt body, navy headings (#1a3a5c), light blue table headers (#e8f0f8), red red-flag callout, green conversation-hook callout.
256 
257### Hyperlink patterns
258 
259```js
260new ExternalHyperlink({
261 link: "https://...",
262 children: [new TextRun({ text: title, style: "Hyperlink" })],
263});
264```
265 
266## Phase 10: Deliver
267 
268- Save: `<output-dir>/dossier_<entity-slug>_<YYYY-MM-DD>.docx`
269- Chat summary: file path + **verdict on hypothesis** + audit counts + tier breakdown + BYOK MCPs used (if any)
270- Validate: check zip integrity with `python3 -c "import zipfile,sys; zipfile.ZipFile(sys.argv[1]).testzip()" <docx>` (no output = intact), then confirm the required sections are present
271 
272## Tooling
273 
274| Script | Role |
275|---|---|
276| `scripts/citation_tracker.py` | Three-count audit + supporting/disconfirming classification + source-tier tagging at `~/.dossier_sessions/<session>.json` |
277| `scripts/disconfirming_evidence_balance.py` | Verifies ≥30% of search budget allocated to disconfirming queries; warns if biased |
278| `scripts/source_tier_classifier.py` | URL → primary / secondary / tertiary classification via domain heuristics |
279 
280## References
281 
282- [`references/hypothesis_testing_discipline.md`](references/hypothesis_testing_discipline.md) — ≥30% rule + decision-grade vs encyclopedic (7+ sources)
283- [`references/subject_type_source_matrix.md`](references/subject_type_source_matrix.md) — person/company/nonprofit/gov source matrices (7+ sources)
284- [`references/conversation_hook_quality.md`](references/conversation_hook_quality.md) — finding-tied hook discipline (7+ sources)
285 
286## Error Handling
287 
288| Failure | Behavior |
289|---|---|
290| Subject name ambiguous | Refuse to proceed. Re-ask Q1 with disambiguating identifier. |
291| User refuses to state hypothesis | Push back once. If still refused, fall back to "what's the most surprising thing I could find?" implicit hypothesis. Flag in audit. |
292| Subject has zero public footprint | Surface explicitly. Suggest different name or early-stage. Don't fabricate. |
293| LinkedIn scrape blocked | Note in audit; fall back to WebSearch; suggest user verify manually. |
294| SEC EDGAR fails | Retry once. If still failing, note "public filings not retrieved" and continue. |
295| Sentiment data sparse | Mark reputation section as "limited public signal"; don't infer from training. |
296| Sensitive topic surfaces (Q6 exclusion) | Exclude from DOCX. Note in chat (not in DOCX) so user knows the exclusion was honored. |
297| 3 consecutive tool failures | Stop, alert user, share collected so far. |
298| DOCX generation fails | Save raw data as JSON fallback. |
299 
300## Anti-Patterns To Reject
301 
302- Producing a dossier without forcing Q4 hypothesis
303- Allocating <30% of search budget to disconfirming evidence
304- Batching intake questions
305- Accepting ambiguous subject names
306- Generic conversation hooks ("ask about their roadmap")
307- Sensationalizing red flags (tier them, don't editorialize)
308- Skipping the source-reliability tier on flags
309- Fabricating coverage when LinkedIn or scraping is blocked
310- Using BYOK-MCP data without flagging in audit log
311- Including sensitive topics user excluded in Q6
312- Confirmation-biased verdict ("SUPPORTED" without engaging with disconfirming evidence)
313 
314---
315 
316**Version:** 1.0.0
317**Source spec:** `megaprompts/12-dossier-megaprompt.md` (maintainer-local draft spec — gitignored, not present in the public repository)
318**Build pattern:** Path B (direct conversion). Research-pack sibling, hypothesis-testing variant.
319 

Discussion

Alternatives

Also in Decision checksSee all 277 in Product →