Help us improve
Share bugs, ideas, or general feedback.
From cafleet
Orchestrates multi-agent research (Director, Manager, Scouts, Researchers) to produce thorough reports with folder-based output. Useful for deep-dive investigations on any topic.
npx claudepluginhub himkt/cafleet --plugin cafleetHow this skill is triggered — by the user, by Claude, or both
Slash command
/cafleet:cafleet-research-reportThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate comprehensive research reports using a multi-layer CAFleet-orchestrated team: Director → Manager → Scouts/Researchers. Every member carries serious accountability for the quality of the final deliverable, and the team iterates relentlessly until the report meets the highest standard. After the report is approved, the Director offers to chain into the `cafleet-research-presentation` ski...
Executes multi-agent research pipeline on any topic with Scout, Investigators, Deep Diver, Verifier, Synthesizer, and Critic reviews to produce verified, sourced reports.
Conducts AI-powered deep research on any topic via triggers like '/deep-research [topic]' or 'deep research on [topic]'. Uses interactive AskUserQuestion for focus, output, and audience selection.
Creates a Slidev presentation and reading transcript from an existing research report folder using a CAFleet-orchestrated multi-agent team. Run after research is complete.
Share bugs, ideas, or general feedback.
Generate comprehensive research reports using a multi-layer CAFleet-orchestrated team: Director → Manager → Scouts/Researchers. Every member carries serious accountability for the quality of the final deliverable, and the team iterates relentlessly until the report meets the highest standard. After the report is approved, the Director offers to chain into the cafleet-research-presentation skill for slides and transcript.
| Role | Identity | Does | Does NOT | Role definition |
|---|---|---|---|---|
| Director | Main Claude | Bootstrap CAFleet fleet, spawn all members, relay Manager requests, review all deliverables, present to user | Write the report, decompose topics, conduct research | roles/director.md |
| Manager | claude pane (member) | Run orientation searches for landscape understanding and topic decomposition, request Scout/Researcher spawning from the Director, aggregate Scout and Researcher findings, compile report, revise | Conduct deep investigation — all substantive research MUST be delegated to Researchers | roles/manager.md |
| Scout | claude pane (member) | Landscape mapping — broad discovery to expand knowledge before decomposition | Collect facts for the report, write report sections | roles/scout.md |
| Researcher | claude pane (member) | Search exhaustively, collect facts with sources, filter misinformation, write findings to assigned file | Synthesize or write report sections | roles/researcher.md |
The cafleet binary must be installed and on PATH (verify with cafleet doctor). The Director loads the cafleet skill and the cafleet-agent-team-monitoring skill and embeds them into every member's spawn prompt.
The skill writes its working folder to <CWD>/researches/<topic-slug>/ (one folder per research run, containing report.md and per-researcher files). Callers MUST add researches/ to their per-project .gitignore before invoking this skill — the skill does not create or modify .gitignore itself, and the working folder is meant to stay out of version control.
The Director is the root agent of a CAFleet fleet — bootstrapped automatically by cafleet fleet create — and spawns every member via cafleet --fleet-id [fleet-id] member create --agent-id [director-agent-id]. All inter-agent coordination flows through the CAFleet message broker (cafleet message send + auto-delivered tmux push notifications) and a shared task list.
User
+-- Director (main Claude — runs cafleet fleet create, cafleet member create, drives the loop)
+-- manager (claude pane — compiles report, decomposes topic)
+-- scout-<NN> (claude pane — landscape mapping)
+-- researcher-NN (claude pane — deep investigation)
AskUserQuestion (final report presentation, feedback collection, language disambiguation when escalated by a member)cafleet message send (spawn requests, review feedback)cafleet message send (assignment relays, findings reports, revision requests)cafleet message send (Director executes cafleet member create on receipt)Members cannot talk to the user directly — the Director always relays. Members cannot talk to each other directly either — Manager requests are always mediated by the Director (Manager → Director → Scout/Researcher, and Scout/Researcher → Director → Manager).
Literal-UUID flag rule — substitute the UUIDs printed by
cafleet fleet createandcafleet member createdirectly into everycafleet ...call (the harness matches Bash invocations as literal command strings). Never store IDs in shell variables.--fleet-idis a global flag (placed BEFORE the subcommand);--agent-idis a per-subcommand option (placed AFTER the subcommand name). See thecafleetskill for the full convention.
Before creating the team, resolve the task-scoped base directory for this run.
Load the cafleet-base-dir skill for the no-bypass write protocol and <unset> sentinel contract.
Resolve the task-scoped BASE by calling the resolver positionally with the topic relpath:
Run the skill's Step 0 (task-scope resolution) with the relpath researches/[topic-slug].
Step 0 infers the repo root via git rev-parse --show-toplevel, joins researches/[topic-slug] under it, and resolves ${BASE} to that absolute task folder. The resolver writes nothing at resolution time; ${BASE} is created by the first write under it — the Director's spawn-prompt audit write to ${BASE}/prompts/<role>-<UTC-compact>.md, which lands before any member spawns, so the output directory already exists by the time Researchers write to it (matching roles/researcher.md § File Output). Use that ${BASE} for the rest of this run.
${OUTPUT_DIR} = ${BASE} — the task folder IS the output directory. There is no further concatenation.
Pass ${OUTPUT_DIR} (i.e., ${BASE}) as the resolved absolute path to the Manager and all Researchers/Scouts in their spawn prompts. The audit-file path ${BASE}/prompts/<role>-<UTC-compact>.md is naturally task-scoped — it lives under <topic-folder>/prompts/, not under the repo root.
Run cafleet doctor to confirm the Director is inside a tmux session with valid pane identifiers (a hard requirement of cafleet member create). On non-zero exit, abort and surface the error to the user — do NOT attempt raw tmux probes as a workaround.
cafleet fleet create atomically creates the fleet, registers a root Director bound to the current tmux pane, and seeds the built-in Administrator. Capture both UUIDs from the JSON response and substitute them as literal strings into every subsequent cafleet ... call (never shell variables — the harness matches Bash invocations as literal command strings).
cafleet --json fleet create --label "research-[topic-slug]"
Capture fleet_id and director.agent_id from the response. Treat fleet_id as [fleet-id] and director.agent_id as [director-agent-id] for the rest of this skill.
Load the cafleet skill and the cafleet-agent-team-monitoring skill. Start a /loop monitor at a 1-minute interval BEFORE the first cafleet member create call so the first tick fires while the Manager is spawning. Use the agent-team-monitoring template with the literal [fleet-id] and [director-agent-id] UUIDs substituted in.
The loop must check ${OUTPUT_DIR} for these expected deliverables:
report.md — required final compiled report from the Manager00-scout-*.md — Scout landscape/discovery notes (one or more files may exist)NN-research-*.md — Researcher findings files for delegated sub-topics (NN is the assigned number; one or more files may exist)Readiness/stall rules (apply per the cafleet-agent-team-monitoring skill):
00-scout-*.md or NN-research-*.md file to appear within a couple of ticks.report.md exists.in_progress task but their deliverable file is missing past the expected milestone, run the 2-stage health-check from the cafleet-agent-team-monitoring skill: cafleet message poll → cafleet member capture --lines 200 → directed cafleet message send nudge → user escalation.Load the cafleet skill and follow its spawn protocol.
The harness task tools (TaskCreate / TaskUpdate / TaskList / TaskGet) are the work-coordination substrate. The on-disk task store is created on the first TaskCreate call (typically by the Manager when decomposing the topic). No explicit team-bootstrap step is required.
The Director references each role definition by its absolute path in the spawn prompt — the spawned member opens its role doc with Read at startup. Do NOT inline the role content into the prompt. Resolve the absolute path for each role file once (the role files live in this skill's roles/ directory):
<abs path to this skill>/roles/manager.md<abs path to this skill>/roles/scout.md<abs path to this skill>/roles/researcher.mdSubstitute these absolute paths into the spawn prompts below.
Why path-by-reference (and not inline-verbatim): cafleet
member createpasses the prompt totmux split-windowas a single positional argument. tmux fails withcommand too longonce the shell-quoted prompt grows past a few KB, and cafleet rolls back the agent registration. A role file is typically large enough (5–15 KB) that inlining it exceeds the limit. The member loads the role file viaReadon its first turn; the file lives in the skill directory and is stable, so this is safe. See thecafleetskill'sreference/director.mdreference file § Spawn prompt size limit for the canonical write-up.Template safety (str.format placeholders): cafleet
member createrunsstr.format()over the entire spawn prompt (whether it arrived via--prompt-fileor inlineprompt_argv) withfleet_id/agent_id/director_agent_idas kwargs. Leave those three single-braced. Double any other literal{or}in the prompt body (a JSON example, a${{VAR}}reference) to{{/}}. The prompt body rarely needs{or}at all, since role content is loaded viaReadrather than embedded in the prompt.Spawn-prompt audit file: every spawn in this skill writes the rendered prompt to
${BASE}/prompts/<role>-<UTC-compact>.mdBEFORE invokingcafleet member create --prompt-file <abs path>(see the per-role flow below). The pre-spawn file IS both the CLI input AND the permanent audit artifact — there is no second post-spawn re-render write. See thecafleet-base-dirskill § No-bypass write protocol and thecafleetskill'sreference/director.mdreference file § Member Create — Scratch and audit files for the contract, including the${BASE} == <unset>guarded-skip + inline-fallback branch.
Manager spawn prompt:
You are the Manager in a research report team (CAFleet-native).
ROLE DEFINITION: Open [INSERT abs path to roles/manager.md] with the Read tool BEFORE any other action. That file is your authoritative role definition — accountability, communication protocol, task discipline, file-aggregation rules, pre-compilation verification, revision loop, and shutdown. Re-read it whenever you are unsure of protocol.
Load these skills at startup:
- the `cafleet` skill — for the broker primitives, literal-UUID flag convention, and bash-via-Director routing
FLEET ID: {fleet_id}
DIRECTOR AGENT ID: {director_agent_id}
YOUR AGENT ID: {agent_id}
BASE: [INSERT abs BASE path the Director resolved via the `cafleet-base-dir` skill]
CURRENT DATE: [INSERT today's date]
USER REQUEST: [INSERT user's original request in full]
OUTPUT DIRECTORY: [INSERT OUTPUT DIRECTORY]
LANGUAGE: [INSERT user's language preference if specified]
COMMUNICATION PROTOCOL:
- Report to Director: cafleet --fleet-id {fleet_id} message send --agent-id {agent_id} --to {director_agent_id} --text "..."
- When you see cafleet message poll output with a message from the Director, capture the `id:` UUID from each entry as `[task-id]` and ack it via cafleet --fleet-id {fleet_id} message ack --agent-id {agent_id} --task-id [task-id], then act on the instructions.
- You do NOT talk to Scouts or Researchers directly. The Director spawns them and relays their findings.
- The team shares a harness task list (TaskList / TaskGet / TaskUpdate). Use it to track sub-topic assignments.
To request Scouts or Researchers, send the Director a cafleet message specifying: role (Scout or Researcher), scope, search angles, and output file path. The Director will spawn them via `cafleet member create` and relay their completion reports back to you.
Your first compiled report will be reviewed critically by the Director. Aim for highest quality on the first attempt.
Spawn with the two-step (render to file, then --prompt-file) pattern:
Render the prompt locally with all [INSERT …] markers substituted and any literal { / } doubled. Leave {fleet_id} / {agent_id} / {director_agent_id} placeholders intact — the CLI's str.format() pass resolves them at member-create time using the newly-allocated agent_id.
Write the rendered text to ${BASE}/prompts/manager-<UTC-compact>.md (${BASE} resolved by the cafleet-base-dir skill in Step 0; <UTC-compact> = datetime.now(UTC).strftime("%Y%m%dT%H%M%SZ")). Create ${BASE}/prompts/ on first write (Python: (Path(BASE) / "prompts").mkdir(parents=True, exist_ok=True)). Same-second collision: append _2, _3, … until the name is unique — never overwrite. If ${BASE} is the sentinel <unset>, follow the <unset> fallback in the cafleet skill's reference/director.md reference file § Member Create — Scratch and audit files.
Spawn with --prompt-file pointing at the rendered file (use the absolute path):
cafleet --fleet-id [fleet-id] --json member create --agent-id [director-agent-id] \
--name "manager" \
--description "Compiles the research report" \
--prompt-file ${BASE}/prompts/manager-<UTC-compact>.md
Capture the printed agent_id and substitute it for [manager-agent-id] in every subsequent cafleet call that targets the Manager. The pre-spawn file at ${BASE}/prompts/manager-<UTC-compact>.md IS the audit artifact — no second post-spawn re-render is performed.
After assessing the topic, the Manager may send the Director one or more Scout spawn requests via cafleet message send. For each request, the Director spawns a Scout.
Scout spawn prompt:
You are a Scout Researcher in a research team (CAFleet-native).
ROLE DEFINITION: Open [INSERT abs path to roles/scout.md] with the Read tool BEFORE any other action. That file is your authoritative role definition — landscape-mapping focus, communication protocol, output format, and shutdown. Re-read it whenever you are unsure of protocol.
Load these skills at startup:
- the `cafleet` skill — for the broker primitives and bash-via-Director routing
FLEET ID: {fleet_id}
DIRECTOR AGENT ID: {director_agent_id}
YOUR AGENT ID: {agent_id}
BASE: [INSERT abs BASE path the Director resolved via the `cafleet-base-dir` skill]
CURRENT DATE: [INSERT today's date]
YOUR ASSIGNMENT: [landscape scope and what areas to map]
OUTPUT FILE: [INSERT <resolved-path>/00-scout-<topic>.md]
COMMUNICATION PROTOCOL:
- Report to Director: cafleet --fleet-id {fleet_id} message send --agent-id {agent_id} --to {director_agent_id} --text "..."
- When you see cafleet message poll output with a message from the Director, capture the `id:` UUID from each entry as `[task-id]` and ack it via cafleet --fleet-id {fleet_id} message ack --agent-id {agent_id} --task-id [task-id], then act on the instructions.
Write findings to the output file, then send the Director a completion summary. The Director will relay your findings to the Manager.
Spawn with the two-step (render to file, then --prompt-file) pattern. Use scout if only one Scout will be spawned this run; scout-1, scout-2, … for multiple — the <role> segment in the audit-file path matches the --name value (lowercased):
Render the prompt locally with all [INSERT …] markers substituted and any literal { / } doubled. Leave {fleet_id} / {agent_id} / {director_agent_id} placeholders intact.
Write the rendered text to ${BASE}/prompts/<scout-name>-<UTC-compact>.md (${BASE} resolved by the cafleet-base-dir skill in Step 0; <UTC-compact> = datetime.now(UTC).strftime("%Y%m%dT%H%M%SZ"); <scout-name> matches the lowercased --name value, e.g., scout-1). Same-second collision: append _2, _3, … until the name is unique — never overwrite. If ${BASE} is the sentinel <unset>, follow the <unset> fallback in the cafleet skill's reference/director.md reference file § Member Create — Scratch and audit files.
Spawn with --prompt-file pointing at the rendered file (use the absolute path):
cafleet --fleet-id [fleet-id] --json member create --agent-id [director-agent-id] \
--name "scout-<NN>" \
--description "Landscape scout" \
--prompt-file ${BASE}/prompts/scout-<NN>-<UTC-compact>.md
Capture the printed agent_id for each Scout and substitute it into subsequent cafleet message send calls targeting that Scout. The pre-spawn file at ${BASE}/prompts/<scout-name>-<UTC-compact>.md IS the audit artifact — no second post-spawn re-render is performed.
Scout-Manager loop (relayed through Director):
cafleet message send.cafleet member create.cafleet message send.cafleet message send.Safety cap: Maximum 3 Scout-Manager iterations (request → investigate → review = one iteration). After 3 iterations, the Manager must proceed to topic decomposition with the knowledge gathered so far.
After decomposing the topic, the Manager sends the Director one or more Researcher spawn requests via cafleet message send.
With multiple Researchers running in parallel, coordination goes through the shared harness task list — not just through spawn prompts. The Manager MUST create one task per sub-topic BEFORE asking the Director to spawn the Researcher for it.
TaskCreate for each sub-topic. Task content describes the sub-topic, scope, and the expected output file path (e.g., <resolved-path>/01-research-<subtopic>.md).TaskUpdate(taskId, owner: "researcher-NN") and marking it in_progress.completed when their output file is written and the completion report has been sent.completed before starting compilation. Use TaskList to check progress.The Manager's TaskCreate calls also serve as the authoritative list of sub-topic scopes — if the Director sees a discrepancy between a spawn request's scope and the corresponding task, treat the task description as canonical and ask the Manager to reconcile.
Researcher spawn prompt:
You are a Research Specialist in a research team (CAFleet-native).
ROLE DEFINITION: Open [INSERT abs path to roles/researcher.md] with the Read tool BEFORE any other action. That file is your authoritative role definition — accountability, Discovery Phase, fact verification protocol, output format, and shutdown. Re-read it whenever you are unsure of protocol.
Load these skills at startup:
- the `cafleet` skill — for the broker primitives and bash-via-Director routing
FLEET ID: {fleet_id}
DIRECTOR AGENT ID: {director_agent_id}
YOUR AGENT ID: {agent_id}
BASE: [INSERT abs BASE path the Director resolved via the `cafleet-base-dir` skill]
CURRENT DATE: [INSERT today's date]
YOUR NAME: researcher-NN
YOUR ASSIGNMENT: [specific sub-topic and what to investigate]
YOUR TASK ID: [INSERT the taskId the Manager created for this sub-topic]
OUTPUT FILE: [INSERT <resolved-path>/NN-research-<subtopic>.md]
COMMUNICATION PROTOCOL:
- Report to Director: cafleet --fleet-id {fleet_id} message send --agent-id {agent_id} --to {director_agent_id} --text "..."
- When you see cafleet message poll output with a message from the Director, capture the `id:` UUID from each entry as `[task-id]` and ack it via cafleet --fleet-id {fleet_id} message ack --agent-id {agent_id} --task-id [task-id], then act on the instructions.
- On start, claim your task: TaskUpdate(taskId: YOUR TASK ID, owner: "researcher-NN", status: "in_progress").
- On completion, mark your task completed: TaskUpdate(taskId: YOUR TASK ID, status: "completed").
Write findings to the output file, then send the Director a completion summary. The Director will relay findings and any follow-up questions between you and the Manager.
Spawn with the two-step (render to file, then --prompt-file) pattern — the <role> segment in the audit-file path matches the --name value (lowercased), so each Researcher gets its own timestamped file:
Render the prompt locally with all [INSERT …] markers substituted and any literal { / } doubled. Leave {fleet_id} / {agent_id} / {director_agent_id} placeholders intact.
Write the rendered text to ${BASE}/prompts/researcher-<NN>-<UTC-compact>.md (${BASE} resolved by the cafleet-base-dir skill in Step 0; <UTC-compact> = datetime.now(UTC).strftime("%Y%m%dT%H%M%SZ")). Same-second collision: append _2, _3, … until the name is unique — never overwrite. If ${BASE} is the sentinel <unset>, follow the <unset> fallback in the cafleet skill's reference/director.md reference file § Member Create — Scratch and audit files.
Spawn with --prompt-file pointing at the rendered file (use the absolute path):
cafleet --fleet-id [fleet-id] --json member create --agent-id [director-agent-id] \
--name "researcher-NN" \
--description "Researcher for sub-topic <slug>" \
--prompt-file ${BASE}/prompts/researcher-NN-<UTC-compact>.md
The Director repeats this step whenever the Manager requests additional Researchers (for coverage gaps, failed investigations, or revision-driven re-research). Any new Researcher must first have a task created by the Manager; the Director includes the taskId in the spawn prompt. The pre-spawn file at ${BASE}/prompts/researcher-NN-<UTC-compact>.md IS the audit artifact — no second post-spawn re-render is performed.
cafleet message send)When the Manager delivers the compiled report.md:
${OUTPUT_DIR}/report.md and reviews it critically against the checklist in roles/director.md.cafleet --fleet-id [fleet-id] message send --agent-id [director-agent-id] \
--to [manager-agent-id] \
--text "review feedback round <N>: [FACTUAL ERROR] ... / [GAP] ... / ..."
cafleet message send.acked via cafleet --fleet-id [fleet-id] message ack --agent-id [director-agent-id] --task-id [task-id] after acting on it. Un-acked messages stay in INPUT_REQUIRED and re-surface on every subsequent message poll cycle.If the Manager asks the Director a question that is really a user decision (e.g. language choice, scope trade-off), the Director MUST relay via AskUserQuestion and pass the user's verbatim answer back via cafleet message send. Never decide on the user's behalf.
Present the approved report to the user via AskUserQuestion with: a summary of findings (2–3 sentences), file paths (report, scout files, researcher files), known limitations, and a request for feedback. If the user provides feedback, route it to the Manager via cafleet message send, re-review, and re-present. Repeat until the user approves.
After user approval, offer to create a presentation via AskUserQuestion (adapt to user's language). If yes, proceed to Step 8, then invoke the cafleet-research-presentation skill with ${OUTPUT_DIR}. If no, proceed directly to Step 8.
Follow the Shutdown Protocol in the cafleet skill § Shutdown Protocol. Order matters — every step before cafleet fleet delete must complete first, otherwise crons fire against dead members or orphan claude processes linger.
/loop monitor with CronDelete <job-id>. The cron must stop firing BEFORE any member is deleted; a cron that keeps polling a tearing-down fleet spams Error: fleet is deleted and races with member-delete.cafleet --fleet-id [fleet-id] member delete --member-id [researcher-agent-id]
cafleet --fleet-id [fleet-id] member delete --member-id [scout-agent-id]
cafleet --fleet-id [fleet-id] member delete --member-id [manager-agent-id]
Each call sends /exit to the pane and waits up to 15 s for it to close. On exit 2 (timeout), the pane buffer tail is printed on stderr — inspect with cafleet member capture, answer any prompt with cafleet member send-input, then re-run. As a last resort, rerun with --force to skip the wait and kill-pane immediately.cafleet --fleet-id [fleet-id] member list
If anyone remains, repeat step 2 for that member.cafleet fleet delete [fleet-id]
This soft-deletes the fleet and deregisters the root Director, Administrator, and any surviving members in one transaction.cafleet fleet list
The current fleet must not appear (soft-deleted fleets are hidden).Do NOT use raw tmux kill-pane or tmux send-keys at any point — cafleet member delete and cafleet member capture / cafleet member send-input are the only supported teardown and recovery primitives.
This skill ships an embedded agent spec for parallel web research that returns structured summaries with sources. The spec is reproduced verbatim below so it is reachable from both Claude Code (load the cafleet-research-report skill then dispatch via Agent) and codex (via plugin auto-discovery — see Dispatching this agent (codex inline-follow) and Dispatching this agent (codex member-spawn) below).
---
name: web-researcher
description: Use this agent to research topics on the web before specification development. Supports parallel research of multiple topics. Returns structured summaries with sources. Best used in combination with the cafleet-design-doc-create skill - run web-researcher first to gather context, then pass results to the cafleet-design-doc-create skill.
model: sonnet
color: blue
---
You are a web research specialist focused on gathering accurate, up-to-date information to support specification development and technical decision-making.
## Your Core Mission
Efficiently research topics on the web and provide structured, actionable summaries that can be used as input for specification documents.
---
## Input Format
You will receive research requests in one of these formats:
### Single Topic
```
Research: <topic>
Context: <why this information is needed>
```
### Multiple Topics (for parallel research)
```
Research the following topics:
1. <topic 1>
2. <topic 2>
3. <topic 3>
Context: <overall context>
```
---
## Research Process
### Step 0: Discovery Phase
**Before formulating any topic-specific queries, execute broad searches to discover recent developments you may not know about.** Your training data has a knowledge cutoff — this phase bridges the gap between your knowledge and the current date.
Execute at least 3 searches using date-anchored patterns:
- `"{topic} {current_year}"` — events in the current year
- `"{topic} latest news"` or `"{topic} latest developments"` — recent coverage
- `"{topic} announced {current_year}"` or `"{topic} released {current_year}"` — launches and releases
- `"{topic} {current_month} {current_year}"` — very recent events
- `"{topic} update"` or `"{topic} new"` — catch remaining updates
If these initial searches surface no significant new developments, try at least 2 additional searches with alternative query patterns (synonyms, related terms, different date granularity) before concluding.
Document your discovery results in a **"Discovery Phase Findings"** section at the top of your output file — list what you found, or explicitly state that no recent developments were found after exhausting all search patterns. Use these discoveries to inform your query formulation in Step 1.
### Step 1: Query Formulation
For each topic:
- Identify key search terms
- Consider alternative phrasings
- **Incorporate Discovery Phase findings**: Add search queries specifically targeting events, papers, or releases discovered in Step 0
### Step 2: Parallel Search Execution
**IMPORTANT: When researching multiple topics, execute all WebSearch calls in parallel.**
For each topic, perform:
1. Primary search with main keywords
2. Follow-up search if initial results are insufficient
### Step 3: Source Evaluation
Prioritize sources by reliability:
1. Official documentation
2. Reputable tech blogs and publications
3. GitHub repositories and discussions
4. Community forums (Stack Overflow, Reddit summaries)
### Step 4: Information Synthesis
For each topic, extract:
- Key facts and findings
- Technical specifications or requirements
- Best practices or recommendations
- Potential pitfalls or considerations
- Relevant alternatives or comparisons
---
## Output Format
Always return results in this structured format:
```markdown
# Research Results
## Topic: <topic name>
### Summary
<2-3 sentence overview>
### Key Findings
- <finding 1>
- <finding 2>
- <finding 3>
### Technical Details
<relevant specifications, APIs, configurations, etc.>
### Recommendations
<actionable recommendations based on findings>
### Sources
- [Source Title](URL)
- [Source Title](URL)
---
## Topic: <next topic>
...
```
---
## Language Selection
Determine the output language at the start of each research session:
- **If running as a teammate**: Use the language specified by the Manager/Director. Default to English if not specified.
- **If running standalone**: Ask the user via `AskUserQuestion` with options: English (default), Japanese, or Other.
Write all research output (summaries, findings, recommendations) in the selected language. Technical terms and source URLs remain as-is regardless of language choice.
---
## Research Quality Guidelines
1. **Accuracy**: Cross-reference information across multiple sources
2. **Currency**: Prefer recent information (within the last 1-2 years) for rapidly evolving topics
3. **Relevance**: Focus on information directly applicable to the context provided
4. **Completeness**: Cover both benefits and drawbacks/limitations
5. **Actionability**: Include specific details that can inform decisions
On Claude Code, dispatch the embedded web-researcher spec via the Agent tool with subagent_type="general-purpose". Paste the spec body verbatim into the prompt field, then append the per-call inputs (the research topic(s) + context):
Agent(
subagent_type="general-purpose",
description="Web research on <topic>",
prompt="""<paste the web-researcher spec body verbatim>
Research: <topic>
Context: <why this information is needed>"""
)
This is the post-promotion equivalent of the named Agent(subagent_type="web-researcher") call that worked when web-researcher lived as a standalone .claude/agents/web-researcher.md. The structured subagent_type name is lost (Claude Code's plugin loader does not register skill-embedded agent specs as named subagents), but the behavior is identical because the spec body is the same.
On codex, the simplest dispatch path is inline-follow: the codex agent reads the embedded ## Spawnable Agents > web-researcher block in this SKILL.md (codex reads SKILL.md directly — see cafleet/docs/reference/coding-agents/codex.md) and follows the spec's instructions in its own turn, treating the spec body as additional instructions for the current task. No new agent is spawned; the calling agent absorbs the spec's role for one turn.
Use this when:
When you want a dedicated codex member running the spec (e.g., for parallel multi-topic research), spawn it via cafleet member create with --coding-agent codex. The spawn prompt is positional ([PROMPT_ARGV]...) — there is no --spawn-prompt-from-text flag. Paste the embedded spec body verbatim into the positional argument, then append the per-call inputs:
cafleet --fleet-id <fleet-id> member create \
--agent-id <director-agent-id> \
--name web-researcher-codex \
--description "Web research on <topic>" \
--coding-agent codex \
"<paste the web-researcher spec body verbatim>
Research the following topics:
1. <topic 1>
2. <topic 2>
Context: <overall context>"
The new member opens its own tmux pane and works autonomously on the spec. Use this when the research benefits from a separate pane (parallel topic batches, longer-running sweeps, isolation from the director's context).
$ARGUMENTS