Search

Web search across multiple providers.

marmot search <query> [flags…]

Providers

brave, exa, firecrawl, parallel, tavily.

Flags

FlagDescription
--provider <slug>One of the five web providers. Falls back to defaults.search.provider.
--api-key <key>Override the env var for this call.
--limit <n>Max results. Capped per provider (Brave 200, others vary).
--depth <basic|standard|deep>Effort/cost tier; provider-interpreted.
--freshness <day|week|month|year>Relative time-window filter. Per-provider mapping below.
--after-date <YYYY-MM-DD>Absolute lower bound on publication date.
--before-date <YYYY-MM-DD>Absolute upper bound on publication date.
--include-domains <csv>Restrict to listed domains.
--exclude-domains <csv>Exclude listed domains.
--include-contentInline full page content per result if the provider supports it.
--rawEmit the provider's native response under raw instead of the normalized envelope.
--jsonEmit the structured envelope (default).
--no-cacheBypass the response cache for this call. Skip read and skip write.
--refreshSkip cache read but write the fresh response, overwriting any cached entry.
--retries <n>Retry retryable provider errors up to N times with exponential backoff. Default 0, max 10.
--timeout <seconds>Per-attempt request timeout. Default 120.

Cache flags only apply when caching is enabled for this provider via providers.<slug>.cache.enabled. See Caching.

Filter support per provider

Not every provider's API exposes every filter. The CLI accepts the flags uniformly, but if a provider doesn't honor one, marmot search warns on stderr instead of silently dropping it.

Provider--include-domains / --exclude-domains--freshness--after-date--before-date
Brave⚠ ignored (warns)✓ native (pd/pw/pm/py)⚠ ignored (warns)⚠ ignored (warns)
Exa✓ native✓ mapped to startPublishedDate✓ → startPublishedDate✓ → endPublishedDate
Firecrawl✓ native✓ mapped to tbs=qdr:d|w|m|y✓ → tbs=cdr,cd_min✓ → tbs=cdr,cd_max
Parallel✓ → include_domains / exclude_domains✓ mapped to after_date (relative window)✓ → after_date⚠ not supported (warns)
Tavily✓ native✓ native⚠ ignored (warns)⚠ ignored (warns)

When both --after-date and --freshness are passed, the explicit absolute date wins on every provider that honors both. --after-date and --before-date together produce a closed range on Exa and Firecrawl; on Parallel only the lower bound applies.

Presets

search-mode presets accept query, limit, depth, freshness, afterDate, beforeDate, includeDomains, excludeDomains, includeContent, cache, refresh, output, raw, retries, timeout, session. Preset query concatenates with the runtime positional. New negation flags: --cache / --no-cache paired (so a preset's cache: false can be flipped at runtime), plus --no-include-content, --no-refresh, --no-raw. See Presets — Merge rules.

marmot preset create linkedin-people --mode search --provider parallel \
  --include-domains linkedin.com --limit 25 --no-cache
marmot @linkedin-people "Daniel Francis Abel Police"
marmot @linkedin-people --cache "with caching for this call"

Config keys

{ "defaults": { "search": { "provider": "tavily" } } }