skills/dossier/SKILL.md
Use when asked to research, compare, evaluate, or investigate any topic. Triggers: research this, compare options, evaluate alternatives, investigate, find the best, product comparison, technology evaluation, which should I use, pros and cons, recommendation report, dossier, what are my options.
npx skillsauth add eins78/skills dossierInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Structured research producing actionable reports with ranked recommendations, cited sources, and optional decision ballots. Works for any domain — tech, travel, health, policy, finance, art.
Before starting research, confirm all three:
If one or more checks fail, ask before starting. A dossier built on unclear objectives wastes more research time than the clarifying turn costs. Batch questions; offer choices where reasonable; skip the obvious.
If all three check out, proceed directly to SCOPE. Do not ask just to perform diligence — the bar is "the answer isn't obvious from context," not "I want to be extra sure."
${CLAUDE_SKILL_DIR}/references/sources-by-domain.mdresearch/ directories first — if one matches the current topic, add to it rather than creating a new folder. Ask the user when unsure. Only create research/YYYY-MM-DD-slug/ for genuinely new topics.Dispatch parallel subagents scaled to complexity:
| Complexity | Strategy | |-----------|----------| | Quick (1-2 options) | Sequential, no subagents | | Standard (3-6) | 1 Explore agent per option | | Deep (6+ or broad) | 1 per option + 3 fact-checkers post-synthesis | | Architecture decision | 3 Plan agents with named perspectives |
Each agent returns structured findings with URLs for every claim. Check /last30days first for topics with social signal (consumer, OSS). Skip for B2B, academic, niche. Pivot to WebSearch if <3 results.
Dated-claim verification. Every deadline, CFP date, release-window, or "closes X 2026" claim must be re-verified against a primary source accessed on the production date. Dates stale silently; they are the single most common source of drift in multi-session dossiers. Reviewed via ${CLAUDE_SKILL_DIR}/references/review-checklist.md (dated-claim-freshness item).
Write dossier using ${CLAUDE_SKILL_DIR}/templates/dossier.md:
claim [S1][ref-S1] where each citation token (S1, G6, R1, O3 — pick a consistent category-prefix scheme) has a matching [ref-S1]: https://... definition at the end of §Sources. The raw markdown preserves the [S1] bracket token for anyone reading the file directly; the rendered link reads as S1 and clicks through to the URL. Inline ([text](url)) also works for one-off sources. Bar: "could someone verify this?". If your target renderer supports them, the footnote form [^S1] is lighter — see ${CLAUDE_SKILL_DIR}/references/review-checklist.md (citation-integrity) for the portability trade-off.Ballot (when decisions happen async — reviewed over chat, on a PR, after the session ends): use the ballot skill. Works for multi-reviewer panels and single async deciders alike. Template at skills/ballot/templates/ballot-per-reviewer.md; conventions at skills/ballot/SKILL.md.
Before committing, run the reviewer checklist at ${CLAUDE_SKILL_DIR}/references/review-checklist.md against the finished dossier. It covers preflight evidence, citation integrity, dated-claim freshness, section ordering, source bias flagging, hyperlink density, selectivity, and Key Facts box accuracy. The mechanical gate (ballot-filename) fires automatically on Write/Edit via the PostToolUse hook — exit 2 feeds stderr back to Claude — but most review concerns need human or judgement-capable model review, not pattern matching. Once the checklist passes:
D: intention per commit-notation).research/YYYY-MM-DD-slug/
├── DOSSIER-Title-Words-YYYY-MM-DD.md # Main report
├── DOSSIER-Title-Words-BALLOT-Max.md # Optional: one per decider
├── DOSSIER-Title-Words-BALLOT-Patrick.md # Optional: one per decider (multi-reviewer case)
├── DOSSIER-Followup-Title-YYYY-MM-DD.md # Follow-up dossiers in same folder
└── (attachments — rare)
Location: workspace research/ for standalone; projects/{name}/research/ for project-specific.
Multiple dossiers per folder is expected.
One mechanical gate runs PostToolUse on Write|Edit through .claude-plugin/hooks/dossier-hook-dispatcher.sh. Exit 2 pipes stderr back to Claude. Alerting-level — the file is already on disk when it fires; a motivated agent can ignore. PreToolUse rigor is future work.
| Gate | Fails on |
|------|----------|
| ballot-filename.sh | Ballot file not matching DOSSIER-<slug>-BALLOT-<Reviewer>.md (owned by the ballot skill) |
Everything else is reviewed by checklist, not by grep. Earlier iterations shipped grep-gates for citation integrity, forbidden words, section ordering, dated claims, and ballot cover-block archaeology — a 2026-04-18 polish pass removed them after they proved overfit to the a11y-extension session. dossier-framing-declared.sh was removed in the 2026-04-18 preflight-gate pass: the framing-mode convention it enforced doesn't generalize across dossier styles. See ${CLAUDE_SKILL_DIR}/references/review-checklist.md.
| Mistake | Fix |
|---------|-----|
| Orphan citations | Reviewed in the checklist (citation-integrity item) — every inline reference should match a §Sources entry |
| Glossary at the back of the dossier | Glossary first (read-support); Sources last (trust-support) |
| Dates treated as static | Reviewed in the checklist (dated-claim-freshness item) — re-verify each |
| Exhaustive list, not selective | Set selectivity in SCOPE ("5-8, not all"); reviewed in the checklist |
| Generic recommendations | Tailor to THIS user's context and infrastructure |
| Bare product names without URLs | Hyperlink every entity on first mention |
| Same source categories every time | Adapt to domain (see references/sources-by-domain.md) |
| Ending or re-starting session after delivery | Stay open — auto-compact handles context |
For ballot-specific mistakes (anti-options, pre-ticked checkboxes, cover-block archaeology, single-file two-column ballots, reconciliation placement), see skills/ballot/SKILL.md §Common Mistakes.
| Skill | Integration |
|-------|-------------|
| ballot | Extracted decision-ballot format. SYNTHESIZE hands off when a decision surface is needed. |
| last30days | Social signal for consumer/OSS topics |
| commit-notation | D: prefix for dossier commits |
| bye | Sessionlog at session end (NOT after each dossier) |
| challenge-the-plan | Optional: interview-style requirements refinement |
development
Use when writing or reviewing any TypeScript code. Covers discriminated unions, branded types, Zod at boundaries, const arrays over enums, and safe access patterns.
development
Use when facing technical uncertainty, unproven architecture, or building a large feature where agents or humans risk getting lost in details before confirming the architecture works. Prevents horizontal layer-by-layer building that delays integration feedback.
tools
Use when sending commands to tmux panes, reading pane output, creating windows/panes, or monitoring tmux sessions. Covers reliable targeting, synchronization, and output capture patterns.
tools
Use when converting a PDF into a fold-and-print booklet (zine) — A4 sheets, double-sided, short-edge flip, fold to A5. Triggers: make a zine, make a booklet, booklet PDF, imposition, fold-and-print, 2-up booklet, print as booklet, signature imposition, pdf-zine, pdf2zine, bookletimposer. Wraps the `pdf2zine` Docker-based CLI; prefer it over hand-rolled Ghostscript or pdfjam scripts.