Research

Deep research with optional structured output.

marmot research <query> [flags…]

Always async. Submits a research task on the provider, optionally polls until done.

Providers

exa, firecrawl, parallel, tavily.

Flags

FlagDescription
--provider <slug>One of the four. Falls back to defaults.research.provider.
--api-key <key>Override the env var.
--depth <basic|standard|deep>Effort tier. Maps to per-provider model/processor.
--instructions <text>Optional system instructions.
--schema <json>Inline JSON Schema for structured output.
--schema-file <path>JSON Schema from a file.
--waitBlock and poll until terminal status (default).
--asyncReturn the task id immediately.
--rawEmit the provider's native response under raw.
--jsonEmit the structured envelope (default).
--retries <n>Retry the initial submission up to N times. Polling is unaffected. Default 0, max 10.
--timeout <seconds>Per-attempt submit timeout. Default 120.

Async behavior

Default is --wait (poll until done). Pass --async to get the task id and follow up with marmot get <id>.

See Async tasks.

Presets

research-mode presets accept query (concat), depth, schema, schemaFile, instructions (concat), wait, async, pollInterval, maxWait, output, raw, retries, timeout, session. New negation flags: --no-wait, --no-async, --no-raw.

--instructions switches replace → concatenate (Breaking, 0.7.0): preset and runtime instructions compose with \n\n.

marmot preset create deep-fintech --mode research --provider parallel \
  --depth deep --instructions "Cite authoritative sources."
marmot @deep-fintech "competitive analysis on stripe vs adyen"

See Presets — Merge rules.

Config keys

{ "defaults": { "research": { "provider": "parallel" } } }