A research skill for Claude Code where every citation is checked against its source before it can be used, and confidence status is computed by an offline deterministic validator — never asserted by the model. Nine source-expert skills (web, GitHub, Reddit, blog, news, academic, official-source, social, and a planner) collect evidence only; a mandatory verify station confirms each quote actually exists at its URL and actually supports the claim in context; a validator recomputes confirmed / probable / contested / insufficient from structure and fails the run if a finding's written status doesn't match.
Generic "research" skills for Claude Code are a saturated category — the largest has 300K+ installs. A survey of 16 of them (research workflows, tool wrappers, GitHub/Reddit-specific skills) found the same gap in every one: none of them re-check a citation against its source. They ask the model to cite a URL and trust it did. This skill's whole design is built around not trusting that step.
- Two-check verification, not a citation format. Every quote is checked mechanically (does this text exist at the URL or its archive) and semantically (does it, in context, actually support the claim). A claim that overstates its evidence gets narrowed to what the evidence supports and re-verified — never silently accepted, never just discarded.
- Independence is counted by voice, not by URL. A project's README, a commit, and its release notes are one project speaking, not three sources. Ten outlets relaying one press release are one source, not ten. A confidence score is only as honest as its independence count.
- Status is computed, never chosen.
scripts/validate_run.pyis the same offline validator every run passes through — it recomputes each finding's status from the evidence and fails the build if what's written doesn't match. - Self-interest is capped. A vendor's own claim about its own product — however authoritative the source — cannot reach
confirmedwithout a second, unaffiliated source.
flowchart LR
P["research-planner\nsub-questions, budget,\nstopping condition"]
subgraph Collect["Source-expert skills"]
direction TB
W[web-research]
G[github-research]
R[reddit-research]
O[+ blog / news / academic /\nofficial-source / social]
end
V["source-verify\nmechanical + semantic check\nshrink → re-verify"]
S["synthesis\nfindings.jsonl"]
D["scripts/validate_run.py\noffline, deterministic\nconfirmed / probable /\ncontested / insufficient"]
Rep["report\nrendered, never hand-written"]
P --> Collect
Collect -->|evidence.jsonl, pending| V
V -->|verified / rejected / unreachable| S
S --> D
D -->|pass| Rep
In Claude Code:
/plugin marketplace add ali-demirbas/research
/plugin install research@research
Or clone and add as a local plugin — persists across sessions (written to settings.json's extraKnownMarketplaces as a directory source), unlike --plugin-dir which only applies for the current invocation:
git clone https://github.com/ali-demirbas/research.git
claude plugin marketplace add ./research
claude plugin install research@researchOr install individual source skills with the skills CLI:
npx skills add ali-demirbas/research --allEach source skill triggers independently — say "search the web for X" and only web-research loads; say "check GitHub for X" and only github-research loads. The full pipeline (planner → collection → verify → validator → report) is its own skill for when you want a cited, confidence-scored answer rather than a raw search.
| You say | What happens |
|---|---|
| "search the web for X" | web-research collects evidence records only — no conclusions |
| "search GitHub for X" / "check the issues on X" | github-research, depth ladder from README to actual implementation to issues/releases |
| "what are people saying about X on Reddit" | reddit-research, community-signal evidence with measured engagement |
| "research X" / "deep research on Y" | Full pipeline: plan → collect → verify → validate → cited report with confidence status |
| "is this still true?" (on a prior run) | update-research — re-verifies old evidence too, outputs only the delta |
The full rule set — 13 locked architecture decisions, the evidence and finding schemas, the confidence ladder, and the audit trail of every contract/validator gap three rounds of external review found and closed — is in ARCHITECTURE.md. 78 tests cover the pipeline: 70 in tests/test_validate_run.py for the validator (including confidence-inflation bugs that were reproduced with a real failing case before being fixed) and 8 in tests/test_render_report.py for the renderer.
MIT © 2026 Ali Demirbaş