agentleFS
DoctorYanmarDoctorYanmar/WebReaserch-Studio/.claude/skills/research/SKILL.md

research

Skill0 starsChanged 6 months agoMITView on GitHub

Use when the user wants a cited research brief on a topic. Adaptive plan→fan-out→reflect→drill-or-synth loop. Defaults breadth=4 depth=2 max-dispatches=15; pass `--depth N --breadth M --max-dispatches X` to override. Writes report to reports/<run-id>.md.

189 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use daily-arxiv, exp-eval and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • LambenthanSkill

    daily-arxiv

    每日从 arXiv 拉取新论文,过滤相关性,auto-ingest 高优先级论文,检测 SOTA 更新

    Also in 5 projects that use this

  • LambenthanSkill

    exp-eval

    实验判决门:Review LLM 独立评判实验结果 → 4 种判决路径 → 自动更新 claims confidence、ideas status、graph edges

    Also in 5 projects that use this

  • truongtv22Skill

    Problem-Solving Techniques

    Apply systematic problem-solving techniques for complexity spirals (simplification cascades), innovation blocks (collision-zone thinking), recurring patterns (meta-pattern recognition), assumption constraints (inversion exercise), scale uncertainty (scale game), and dispatch when stuck. Techniques derived from Microsoft Amplifier project patterns adapted for immediate application.

    Also in 5 projects that use this

  • liufeng1976Skill

    setup-ts-deep-modules

    Wire dependency-cruiser into a TypeScript repo so each package is a deep module — implementation hidden in subfolders, reachable only through its entry-point files. User-invoked.

    Also in 43 projects that use this

  • skyllwtSkill

    exp-pilot-eval

    Pilot result evaluation — read pilot results, apply success criteria, update idea page (pilot_result, failure_reason if failed), generate PILOT_VERDICT_REPORT. Called by /ideate Phase 5 after /exp-pilot-run.

    Also in 4 projects that use this

  • skyllwtSkill

    exp-pilot-run

    Pilot experiment execution — read Pilot Spec YAML, write pilot code, run experiment(Confirm with the user before operation and require the applicant to conduct manual inspection), return results. Called by /ideate Phase 5. Does NOT modify wiki pages or judge pass/fail.

    Also in 4 projects that use this

  • +5 more from Lambenthan
  • +1 more from skyllwt

The file

Show its rules and text

We split this skill into the rules it gives an agent

14 rules. 0 are common, 3 are distinctive, and 11 are very specific to this project.

  • 0

    Common

    Most of the 169 edited versions we read keep these.

  • 3

    Distinctive

    This author's own choices. Worth a look.

  • 11

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    You personally issue zero WebSearch/WebFetch calls: All web access happens inside worker dispatches.

    line 13
  2. Very specific:

    Spawn workers in parallel: when fanning out — multiple Agent tool calls in a SINGLE message.

    line 14
  3. Very specific:

    Reasoning roles run on Opus: When dispatching the reflector or synthesizer role, pass model: "opus" on the Agent call.

    line 16
  4. Very specific:

    Honor the hard cap: Before each fan-out, check dispatch_count + planned_this_layer <= max_dispatches.

    line 17
  5. Very specific:

    Reports are immutable: Never edit reports/<run-id>.md after writing it.

    line 18
  6. Very specific:

    Wait for completion. Then Read reports/.work/<RUN_ID>/grounding.md.

    line 63
  7. Distinctive:

    After all return, for each scout's response text:

    line 80
  8. Distinctive:

    Verify each file has the expected frontmatter and at least 3 cited claims:

    line 91
  9. Very specific:

    If any scout returned <3 claims OR no coverage_score frontmatter, re-dispatch that one scout with a sharpened angle phrasing (one retry.

    line 103
  10. Very specific:

    Read reports/.work/<RUN_ID>/reflection_L<CURRENT_DEPTH>.md.

    line 124
  11. Very specific:

    If decision == "synthesize", break out of the loop.

    line 126
  12. Very specific:

    Read the ## Drill questions JSON block from reflection_L<CURRENT_DEPTH>.md.

    line 130
  13. Very specific:

    Wait for completion. Verify reports/<RUN_ID>.md exists and contains the required sections per mode:

    line 167
  14. Distinctive:

    Planner returns wrong angle count: stop and ask user. Don't fan out N≠BREADTH scouts.

    line 191

“Common” is measured: kept by at least 6 in 10 of the 169 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

You are the orchestrator of the adaptive web research loop. You do not do research yourself — you dispatch workers via subagent_type: "general-purpose" with role-specific prompts, persist their outputs, and assemble the final report.

Topic: $ARGUMENTS

Hard rules

  1. You personally issue zero WebSearch/WebFetch calls. All web access happens inside worker dispatches.
  2. Spawn workers in parallel when fanning out — multiple Agent tool calls in a SINGLE message. Sequential dispatch wastes wall-clock time.
  3. Scouts and drills cannot Write. Persist each scout/drill response yourself with Write after the parallel fan-out returns. Other roles (planner, reflector, synthesizer) write their own outputs.
  4. Reasoning roles run on Opus. When dispatching the reflector or synthesizer role, pass model: "opus" on the Agent call. Fetching roles (planner, scout, drill) run on Sonnet — pass model: "sonnet".
  5. Honor the hard cap. Before each fan-out, check dispatch_count + planned_this_layer <= max_dispatches. If exceeding, skip drilling and proceed to synthesis with budget_capped: true.
  6. Reports are immutable. Never edit reports/<run-id>.md after writing it; a re-run creates a new RUN_ID.
  7. Output language matches input language. Pass it through; don't translate.

Parameters

Parse $ARGUMENTS for these flags (positional topic goes first):

FlagDefaultMeaning
--depth N2Max loop depth (Layer 1 = scouts; depth=2 means one drill layer; etc.).
--breadth M4Number of angles in Layer 1 and max parallel workers per drill layer.
--max-dispatches X15Hard cap on total worker dispatches before forced synth.
--mode <lite|standard|deep>standardPassed to synth for section list + word target. /analyst --lite sets this to lite.

For arg parsing, use the simplest shell parsing: split $ARGUMENTS on whitespace, walk pairs.

Pipeline

Step 0 — Set up the run

TOPIC=$(cat <<'EOF'
$ARGUMENTS
EOF
)
RUN_ID="$(date +%Y%m%d-%H%M)-$(echo "$TOPIC" | head -c 40 | tr -c 'a-zA-Z0-9' '-' | tr -s '-' | sed 's/^-//;s/-$//')"
mkdir -p "reports/.work/$RUN_ID"
echo "RUN_ID=$RUN_ID"

Initialize DISPATCH_COUNT=0. Read defaults: DEPTH=2, BREADTH=4, MAX_DISPATCHES=15, MODE=standard. Override from parsed flags.

Step 1 — Layer 0: Planner

Agent({
  subagent_type: "general-purpose",
  model: "sonnet",
  description: "Plan: ground the topic",
  prompt: <contents of .claude/skills/research/prompts/planner.md> + "\n\nInputs:\ntopic: <verbatim topic>\nrun_id: <RUN_ID>\nbreadth: <BREADTH>\nlite: <MODE == lite>"
})

Pass the entire planner prompt file's contents as the dispatch prompt body, with the input block appended. DISPATCH_COUNT += 1 after the call returns.

Wait for completion. Then Read reports/.work/<RUN_ID>/grounding.md. Extract the angles array from the JSON-fenced block. Validate len(angles) == BREADTH. If not, print an error and stop — the planner spec failed.

Step 2 — Layer 1: Scout fan-out

For each angle in the grounding brief's angles array (exactly BREADTH of them), construct one Agent dispatch:

Agent({
  subagent_type: "general-purpose",
  model: "sonnet",
  description: "Scout angle: <slug>",
  prompt: <contents of .claude/skills/research/prompts/scout.md> + "\n\nInputs:\ntopic: <verbatim topic>\nangle: <full angle question>\nangle_slug: <slug>\ngrounding_brief_path: reports/.work/<RUN_ID>/grounding.md\nrun_id: <RUN_ID>\ndensity_hint: <hint or 'unset'>\n\nYour entire final response will be saved verbatim by the orchestrator. Do not call the Write tool."
})

Issue all BREADTH Agent calls in a SINGLE message. This is the parallel fan-out — sequential dispatch defeats the purpose.

After all return, for each scout's response text:

Write({
  file_path: "reports/.work/<RUN_ID>/findings_L1_<angle_slug>.md",
  content: <verbatim scout response text>
})

DISPATCH_COUNT += BREADTH.

Verify each file has the expected frontmatter and at least 3 cited claims:

for f in reports/.work/<RUN_ID>/findings_L1_*.md; do
  if [ -e "$f" ]; then
    cov=$(grep -m1 "^coverage_score:" "$f" | sed 's/.*: //')
    claims=$(grep -c "^  - source:" "$f" 2>/dev/null || echo 0)
    echo "$f: coverage=$cov claims=$claims"
  fi
done

If any scout returned <3 claims OR no coverage_score frontmatter, re-dispatch that one scout with a sharpened angle phrasing (one retry; if still short, log to scratch and continue).

Step 3 — Loop: Reflect, then drill or synthesize

Set CURRENT_DEPTH=1.

While CURRENT_DEPTH < DEPTH AND DISPATCH_COUNT < MAX_DISPATCHES:

Step 3a — Dispatch reflector (Opus)

Agent({
  subagent_type: "general-purpose",
  description: "Reflect: gap detection",
  model: "opus",
  prompt: <contents of .claude/skills/research/prompts/reflector.md> + "\n\nInputs:\nrun_id: <RUN_ID>\ncurrent_depth: <CURRENT_DEPTH>\nmax_depth: <DEPTH>\ndispatch_count: <DISPATCH_COUNT>\nmax_dispatches: <MAX_DISPATCHES>\nbreadth: <BREADTH>\nthreshold: 0.70"
})

DISPATCH_COUNT += 1.

Read reports/.work/<RUN_ID>/reflection_L<CURRENT_DEPTH>.md. Parse the **Decision:** line.

If decision == "synthesize", break out of the loop.

Step 3b — Dispatch drill workers (if decision == drill)

Read the ## Drill questions JSON block from reflection_L<CURRENT_DEPTH>.md. For each drill question (up to BREADTH of them), dispatch one worker:

Agent({
  subagent_type: "general-purpose",
  model: "sonnet",
  description: "Drill: <slug>",
  prompt: <contents of .claude/skills/research/prompts/scout.md> + "\n\nInputs:\ntopic: <verbatim topic>\nangle: <drill question text>\nangle_slug: <drill slug>\ngrounding_brief_path: reports/.work/<RUN_ID>/grounding.md\nrun_id: <RUN_ID>\ndensity_hint: <inherit from parent angle, or 'narrative' if contrarian>\n\nThis is a drill (deeper layer follow-up) — tool budget is tighter: 2 WebSearch, 5 WebFetch, 2 Playwright. Stay tightly focused on the drill question. Your final response is your findings document; do not call Write."
})

Issue all drill dispatches in a SINGLE parallel message. After all return, persist each:

Write({
  file_path: "reports/.work/<RUN_ID>/findings_L<CURRENT_DEPTH + 1>_<drill_slug>.md",
  content: <verbatim drill response text>
})

DISPATCH_COUNT += <number of drills>. CURRENT_DEPTH += 1.

Loop back to Step 3a.

Step 4 — Synthesizer (Opus)

Agent({
  subagent_type: "general-purpose",
  description: "Synthesize: compose final report",
  model: "opus",
  prompt: <contents of .claude/skills/research/prompts/synthesizer.md> + "\n\nInputs:\nrun_id: <RUN_ID>\nmode: <MODE>\ndispatch_count: <DISPATCH_COUNT>\nbudget_capped: <true if loop ended via DISPATCH_COUNT >= MAX_DISPATCHES else false>"
})

DISPATCH_COUNT += 1.

Wait for completion. Verify reports/<RUN_ID>.md exists and contains the required sections per mode:

required=("TL;DR" "Findings")
if [ "$MODE" != "lite" ]; then
  required+=("Background" "Cross-angle synthesis" "Confidence map" "Open questions")
fi
for section in "${required[@]}"; do
  grep -q "^## $section" "reports/$RUN_ID.md" || echo "MISSING SECTION: $section"
done

Step 5 — Hand-off

Print to the user (terse — they read the report):

Run complete: <MODE>
Report: reports/<RUN_ID>.md
Dispatches: <DISPATCH_COUNT> / <MAX_DISPATCHES> | Depth reached: <CURRENT_DEPTH> | Budget capped: <yes/no>

Failure-mode notes

  • Planner returns wrong angle count: stop and ask user. Don't fan out N≠BREADTH scouts.
  • Scout returns <3 claims: retry once with a sharpened angle. If still short, log and continue — reflector handles the gap.
  • Reflector says drill but BREADTH budget is exhausted: cap drill workers at MAX_DISPATCHES - DISPATCH_COUNT - 1 (reserve 1 for synth). If 0 remaining, force decision = synthesize, budget_capped = true.
  • Synth fails to produce required sections: print the missing section list and stop. The report file may be partial; do not retry synth.
  • Worker errors during fan-out: collect what returned successfully; don't fail the whole layer if 1 of 4 errors. Log the missing slug in scratch notes; reflector will treat it as low coverage.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.