WebReaserch-Studio
CLAUDE.md0 starsChanged 6 months agoMITView on GitHub
This repo is a Claude Code-native multi-agent web research pipeline. The user runs it via skills (invoked as slash commands); you orchestrate. A pipeline that takes a free-form research topic and produces a markdown report with real citations — every claim tied to a URL the agents actually fetched in this run. It is explicitly not a "summarize from your training data" tool. The pipeline runs symmetrically on Claude Code desktop CLI and on claude.ai/code (web), with a few graceful-degradation…
The file
We split this CLAUDE.md into the rules it gives an agent
4 rules. About 0 are common, 2 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 13
Before giving any answer or decision, think about how you will test and prove that it is correct.
- Very specific: line 46
Reasoning roles run on Opus: Every Agent({subagent_type: "general-purpose", ...}) dispatch specifies an explicit model: field.
- Very specific: line 50
Honor the hard cap: Before each fan-out, check dispatch_count + planned <= max_dispatches.
- Distinctive: line 68
Don't run the pipeline. Read this file and the relevant agent prompt.
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Web Research Studio — instructions for Claude
This repo is a Claude Code-native multi-agent web research pipeline. The user runs it via skills (invoked as slash commands); you orchestrate.
What this project is
A pipeline that takes a free-form research topic and produces a markdown report with real citations — every claim tied to a URL the agents actually fetched in this run. It is explicitly not a "summarize from your training data" tool.
The pipeline runs symmetrically on Claude Code desktop CLI and on claude.ai/code (web), with a few graceful-degradation rules baked into the agents.
Main rule
Before giving any answer or decision, think about how you will test and prove that it is correct.
Pipeline at a glance
The pipeline is an adaptive plan → fan-out → reflect → drill-or-synth loop running in the main session. The user invokes one of three skills:
/research <topic> [--depth N --breadth M --max-dispatches X --mode <lite|standard|deep>]— main entry point. Defaultsdepth=2 breadth=4 max-dispatches=15 mode=standard./analyst <topic>— conversational. Turn 1 =/researchauto-pass (default standard;--litelocks lite params: depth=1 breadth=2 max-dispatches=5 mode=lite). Per-turn drills classified as synthesis Q / clarification / verify / new angle / deep drill. Umbrella mode (--umbrella <id> --angle <slug>,--merge <id>) enables multi-session parallelism.--translate <lang>for post-pipeline translation.
The main session dispatches general-purpose subagents with role-specific prompt fragments inlined into each dispatch's prompt body. There are no persistent .claude/agents/*.md files — each dispatch specifies its model and inherits all tools. Reasoning roles (reflector, synthesizer, merger) use model: "opus"; fetching/rote roles (planner, scout, drill, translator) use model: "sonnet".
The dispatch steps:
planner.md— Layer 0: producesbreadthangles + authoritative sources.scout.md— Layer 1: one worker per angle, in parallel. Each scout self-ratescoverage_score.reflector.md— reads all findings, decides drill vs synthesize, writes targeted drill questions. Opus.- (Loop steps 2–3 until
coverage_score ≥ thresholdORdepth == max_depthORdispatch_count >= max_dispatches.) synthesizer.md— composes the final report with the density contract. Opus.- (Umbrella only:)
merger.md— cross-session synth acrossreports/umbrellas/<id>/angle_*/. Opus.
Reports land in reports/<run-id>.md. Intermediate artifacts in reports/.work/<run-id>/. Umbrella artifacts in reports/umbrellas/<id>/.
Why no persistent agent files? Per-dispatch model and tool specification keeps each call explicit and self-contained — no shared agent definition to forget to update when a role's contract changes.
Why no research-orchestrator agent? CC v2.1.x forbids nested subagent dispatch. The orchestration logic lives in the skill body (/research/SKILL.md) and runs in the main session.
Why general-purpose subagents don't call Write. CC platform-level enforcement returns a tool_use_error when ANY general-purpose subagent invokes Write (scouts, drills, translators alike — the error text "Subagents should return findings as text..." is platform-generated). Every worker returns its full output as its final response text; the main session persists it via Write({ file_path, content: <verbatim worker response text> }). The orchestrator must NEVER paraphrase, abridge, or "tidy up" the worker's response between receiving it and writing it — that is a bug, not a feature. Mention this constraint explicitly in each dispatch's prompt body so workers don't waste a tool slot trying Write.
Hard rules — apply these in every research run
- Never produce a claim without a source URL fetched in this run. No "as is well known". No URLs from training data.
- Run the planner (Layer 0) first. Skipping it = surface-level results.
- Spawn workers in parallel from the main session — multiple
Agenttool calls in one message — whenever fanning out (Layer 1 scouts; Layer 2+ drills). Sequential dispatch wastes wall-clock time. - Reasoning roles run on Opus. Every
Agent({subagent_type: "general-purpose", ...})dispatch specifies an explicitmodel:field. Passmodel: "opus"forreflector,synthesizer,merger. Passmodel: "sonnet"forplanner,scout,drill,translator. - Stay within tool budgets per role: planner 1/2/0, scout 4/8/3, reflector 0/0/0, drill 2/5/2, synth 0/0/0, merger 0/0/0 (WebSearch / WebFetch / Playwright deep).
- Output language matches input language — don't translate.
- Reports are immutable once written. To re-run, generate a new
RUN_ID. - Honor the hard cap. Before each fan-out, check
dispatch_count + planned <= max_dispatches. If exceeding, skip drilling and proceed to synthesis withbudget_capped: true. - Verbatim worker-text → file Write. When a worker's contract is "final response IS the file" (scout findings, drill findings, translator output), the orchestrator MUST write the worker's response text byte-for-byte. No paraphrasing, no abridging, no "cleanup", no fixing of stray preambles. If a worker violates its no-preamble contract, surface it and re-dispatch — do not silently edit. This rule's failure mode is amplified in parallel batches (e.g., umbrella batch-translate), where multiple long worker outputs in the orchestrator's context tempt the model to "process" them.
Files you'll touch
.claude/skills/research/SKILL.md— the adaptive-loop orchestrator. The main entry point..claude/skills/research/prompts/{planner,scout,reflector,synthesizer}.md— role-specific worker prompts inlined into each dispatch..claude/skills/analyst/SKILL.md— conversational drill skill (--lite,--deep, umbrella,--translatemodes)..claude/skills/analyst/prompts/merger.md— cross-session umbrella synthesizer prompt..claude/skills/analyst/prompts/translator.md— post-pipeline translation prompt.tools/searxng_query.py— stdlib-only SearXNG fallback search backend.config/searxng-instances.txt— public SearXNG instance list.reports/<run-id>.md— final report (immutable).reports/.work/<run-id>/— per-run scratch (grounding, findings, reflections).reports/umbrellas/<umbrella-id>/— multi-session shared state (manifest, per-angle subdirs, merged.md).
When the user asks general questions about the repo
Don't run the pipeline. Read this file and the relevant agent prompt. Answer concisely.
When something fails
- Search backend down: workers auto-fall-back from
searxng_query.py→WebSearch→ authoritative-list fetches. Don't try to fix the backend; just log and continue. - A worker hits a tool budget: that worker stops, writes what it has, and reports back. Other workers continue. The synthesizer marks the gap in the report's "Open questions" section. Do not silently overrun budgets.
- Hard dispatch cap reached: skip remaining drills and proceed to synthesis with
budget_capped: truein the reflector output.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

