A portable research factory for Claude Code. Given a task, it runs structured research and returns a decision-ready, sourced brief — then remembers it, so the next question starts ahead.
Research is the first step of almost every objective. This is the factory for that step — sibling of a code factory (that drives code; this drives research). Same bones: one core loop + swappable modes (one per research scenario), global-installed.
FRAME → GATHER → VERIFY → COMPOUND
| Verb | What |
|---|---|
| Frame | Sharpen the fuzzy question, check the library for a prior answer, pick the mode. The highest-leverage step — ~44% of research-agent failures are bad scoping. |
| Gather | Retrieve via the pipeline the mode dictates. Breadth modes fan out (reuse the deep-research engine); a fact lookup doesn't (fan-out ≈ 15x tokens); an internal question reads the codebase. |
| Verify | Every claim ties to a real source or is marked unverified; confidence + staleness labels. Fabrication is the #1 failure locus (~39%) — this is the safeguard that matters. |
| Compound | File the brief to library/, indexed. The library is checked first next time — the flywheel. |
Grounded in a deep-research pass over how OpenAI / Anthropic / STORM / GPT-Researcher actually build
these (see docs/PLAN.md — the factory's first library entry was the research that
designed it). This public repo ships library/ with two example briefs showing the
format; your own briefs accumulate there as you run it.
| Mode | For | Pipeline |
|---|---|---|
survey |
state of the art / best practice | full fan-out |
build-vs-buy |
does a tool/lib/product exist, or build it | full fan-out + options matrix |
decision |
A vs B vs C for our case | full fan-out + weighted criteria |
diagnostic |
why does X fail / who else hit it | targeted (issues, changelogs, SO) |
fact-lookup |
the actual limit/spec/number | no fan-out — 1 primary source + verify |
internal |
how do WE do X here | no web — codebase + Drive + comms |
The router lives in SKILL.md. Invoke /research <question> (or just ask — the skill
auto-triggers on "research X", "is there a tool for X", "A or B", "why does X fail", "how do we do X here").
Install globally (like ~/.claude/skills) via the existing globalize flow — nothing is copied
into your repos; the engine stays in this checkout. The library/ can live here (global research
memory) or per-repo.
- The
deep-researchengine — fan-out → fetch → diverse-lens adversarial verify (2 Sonnet lenses + tiebreaker) → gap round → synthesize. Breadth modes wrap it; the web avenue runs the local forkengine/deep-research-lean.mjs(fetch+verify tiered to Sonnet, ~half the tokens, same rigor). This repo is the router + modes + axes + compounding memory around the engine, not a reimplementation of it.
| Path | What |
|---|---|
SKILL.md |
the router — Frame → Gather → Verify → Compound, mode dispatch |
modes/ |
one file per research scenario (decomposition, source avenues, output shape) |
tactics/ · avenues/ |
the other two axes: how to search (lenses) × where (substrates) |
references/ |
shared rigor: source-tiers, ach, search-craft, brief-template |
engine/ |
deep-research-lean.mjs — the Sonnet-tiered fork the web avenue runs |
scripts/ |
compound + the empirical loop (related, predict, calibrate, judge-brief, ambient-briefs, learning-loop) |
library/ |
the compounding brief store + _INDEX.md + verdict logs (checked first, filed to last); ships with two example briefs |
docs/PLAN.md |
design, the research it's grounded in, and roadmap |
Live and dogfooded. Three axes (mode × tactic × avenue), the Sonnet-tiered engine, ACH, and the
full empirical loop are shipped and wired: ambient-briefs (auto library-check on every prompt),
judge-brief + calibrate (Stop-hook accuracy scoring), predict-then-calibrate. Retrieval over the
library is lexical by design (an LLM is always the consumer, so semantics is free at query time), not a
vector store. Open roadmap in docs/PLAN.md.
Built by Dylan Pulver, software engineer and entrepreneur in Toronto.