Help us improve
Share bugs, ideas, or general feedback.
From dossier
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 signals, reputation signals, red flags, 3-5 conversation hooks tied to specific findings, and source-provenance audit log. Uses WebSearch + WebFetch + free APIs (SEC EDGAR, GitHub, ProPublica Nonprofit Explorer) as workhorses; optional BYOK MCPs (LinkedIn, Crunchbase, Apollo, Pitchbook, SimilarWeb) enhance coverage. Triggers: 'research [company]', 'dossier on [person/company]', 'background check on [entity]', 'prep me for a meeting with [person/company]', 'due diligence on [company]', 'what should I know about [entity]', 'research [person] before I [meet/hire/invest]', 'competitor research on [company]', 'investor diligence [company]', 'interview prep for [company]'. Honors sensitivity exclusions for journalism + personal-vetting contexts.
npx claudepluginhub alexbramall/claude-code-skills --plugin dossierHow this skill is triggered — by the user, by Claude, or both
Slash command
/dossier:dossierThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **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.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Explores codebases via GitNexus: discover repos, query execution flows, trace processes, inspect symbol callers/callees, and review architecture.
Share bugs, ideas, or general feedback.
Portability: Requires
WebSearch+WebFetch, Node.js withdocxpackage, and optionallybash_tool+curlfor free APIs (SEC EDGAR, GitHub, ProPublica). BYOK MCPs (LinkedIn, Crunchbase, Apollo, Pitchbook, SimilarWeb) are optional enhancements. Works in Claude Code CLI natively.
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.
Locked verbatim per PR #657 audit.
[Background — verify before quoting] and excluded from primary findings count.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.
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.
What are you preparing for? Pick one:
- Sales meeting / partnership pitch
- Investment diligence
- Acquisition diligence
- Journalism / due diligence
- Job interview prep
- Competitive intelligence
- Personal vetting (date, hire, business partner)
- 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.
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.
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.
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.
Before Phase 3, resolve the subject to a specific entity:
If still ambiguous after Q1 push-back: halt and re-ask Q1 with disambiguating identifiers. Refuse to proceed.
Routed by Q2 subject type. See references/subject_type_source_matrix.md for the full canon.
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:
≥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":
This is what makes the dossier decision-grade rather than confirmation-biased.
For each search:
citation_tracker.py with classification (supporting / disconfirming)source_tier_classifier.py to each result URLDefault 12-month window for activity timeline; deeper for foundational identity.
Categories:
Reverse chronological. Each entry hyperlinked + tiered.
5-10 entries, ranked by relevance to hypothesis.
Surface but don't sensationalize:
Each flag tiered. Tier shows up next to every flag in the DOCX.
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:
Via Node.js + docx library.
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" })],
});
<output-dir>/dossier_<entity-slug>_<YYYY-MM-DD>.docxpython scripts/office/validate.py <docx>| 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/hypothesis_testing_discipline.md — ≥30% rule + decision-grade vs encyclopedic (7+ sources)references/subject_type_source_matrix.md — person/company/nonprofit/gov source matrices (7+ sources)references/conversation_hook_quality.md — finding-tied hook discipline (7+ sources)| 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. |
Version: 1.0.0
Source spec: megaprompts/12-dossier-megaprompt.md
Build pattern: Path B (direct conversion). Research-pack sibling, hypothesis-testing variant.