Build a structured research outline (items + field definitions) on a topic, mixing model knowledge with a single web-search supplement pass. Writes outline.yaml and fields.yaml to a topic-named subdirectory. Entry point of the 5-phase research pipeline.
59
68%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Fix and improve this skill with Tessl
tessl review fix ./plugins/ultra-research/skills/research/SKILL.md/ultra-research:research <topic>
Manual-only. disable-model-invocation: true is set in frontmatter so Claude never auto-runs this skill from description matching — it only fires when the user types the slash command.
This is phase 1 of 5. The full flow is:
/ultra-research:research <topic> — (this skill) builds outline.yaml + fields.yaml/ultra-research:research-add-items (optional) — extend the item list/ultra-research:research-add-fields (optional) — extend the field list/ultra-research:research-deep — fan out parallel web-search subagents, one per item, write per-item JSON to results//ultra-research:research-report — consume results/*.json and emit a single markdown report.mdAt the end of this skill, ask the user which phase to enter next (see Step 5).
Use the model's existing knowledge of {topic} to draft:
Print the draft as {step1_output}. Use AskUserQuestion to confirm:
Ask the user for a time range via AskUserQuestion (offer "last 6 months", "since 2024", "unlimited", or custom).
Get the current date once with date +%Y-%m-%d and bind it to {YYYY-MM-DD}.
⛔ Dispatch-only. The orchestrator MUST NOT call WebSearch, WebFetch, or mcp__exa_websearch__* directly. Instead, launch one web-search-agent subagent (background, via the harness's Agent/Task tool) with the verbatim prompt template documented in references/prompt-templates.md. The template is a hard constraint — only substitute the {variable} placeholders; do not rewrite the structure or wording. See that file for the template, the variable table, and a one-shot example.
The subagent returns supplementary items, recommended fields, and source links — capture this as {step2_output}.
Use AskUserQuestion to ask if the user has an existing field-definition file to merge in. If yes, read it and union the definitions.
outline.yaml and fields.yamlMerge {step1_output}, {step2_output}, and any imported user fields. Write two files into ./{topic_slug}/:
outline.yaml — items list and execution config:
topic: <Research topic>
items:
- name: <item name>
category: <optional grouping>
description: <one-line description>
execution:
batch_size: <parallel-agent count, confirm with AskUserQuestion>
items_per_agent: <items per agent, confirm with AskUserQuestion>
output_dir: resultsfields.yaml — field definitions:
field_categories:
- category: Basic Info
fields:
- name: <field name>
description: <what to capture>
detail_level: brief | moderate | detailed
required: true | false
uncertain: [] # reserved — populated by /ultra-research:research-deepThe detail_level ladder (brief → moderate → detailed) hints to the deep-research subagents how thorough to be per field.
Before asking, Read the two files you just wrote and apply this thinness rubric to decide which next-step options to mark (Recommended):
| Check | Trigger for (Recommended) |
|---|---|
outline.yaml items count | < 8 items, OR no category field used, OR clearly missing well-known entrants in the domain → recommend Add more items |
fields.yaml total fields | < 6 fields, OR only one field_categories entry, OR no field with detail_level: detailed → recommend Add more fields |
Both checks are independent — mark either, both, or neither.
Then use AskUserQuestion with header: "Next step" and these options (append (Recommended) to the label when the rubric flags it):
outline.yaml (description: "Run /ultra-research:research-add-items to grow the item list.")fields.yaml (description: "Run /ultra-research:research-add-fields to enrich the field schema.")/ultra-research:research-deep to fan out parallel subagents.")In the question body, briefly tell the user why each recommendation was made (e.g., "Only 5 items so far; add more before deep research"). Be one sentence per reason.
If the user picks one of the first three, invoke the corresponding skill immediately via the Skill tool (no need for them to type the slash command). If "Done for now," print the directory path and stop.
{cwd}/{topic_slug}/
├── outline.yaml # items list + execution config
└── fields.yaml # field definitionsreferences/prompt-templates.md — verbatim Step 2 prompt template, variable table, one-shot example. Read it before launching the web-search subagent.48bf6a4
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.