WYRD/TOOLS

Tools / seek / research

research

Autonomous deep research — multi-step investigation that browses, verifies, and compiles a cited report. These calls are slower than web (seconds to tens of minutes) and stream progress to stderr unless quieted.

seek research <provider> "<query...>" [options]

Providers: brave, parallel, google, perplexity.

Resumable jobs

Google, Parallel, and Perplexity can submit research without keeping the local seek process alive. The remote provider owns the durable job. Retain the provider and opaque job id printed by submission.

# Submit and return after provider acceptance
seek research google \
  "compare common methods for preserving paper records" --async

# Perform one status lookup without polling
seek research status google job-opaque-123

# Perform one result lookup without polling
seek research get google job-opaque-123

Async human-readable output includes the provider, job id, normalized and provider-native statuses, and copyable status and result commands. The same lifecycle works with parallel and perplexity.

status exits successfully whenever the provider lookup succeeds, even if the remote job failed. get exits non-zero immediately when a job is queued, running, action-required, incomplete, failed, cancelled, or unknown. It never waits for the job to change state.

JSON lifecycle contract

Pass --json to submission, status, or get for automation:

seek research parallel "compare three soil amendments for container gardens" \
  --async --json
seek research status parallel job-opaque-456 --json
seek research get parallel job-opaque-456 --json

Async submission and status --json use this stable envelope:

{
  "locator": {
    "provider": "parallel",
    "jobId": "job-opaque-456"
  },
  "status": "running",
  "providerStatus": "running",
  "terminal": false,
  "providerPayload": {}
}
FieldContract
locatorStable provider-qualified locator. The opaque jobId is meaningful only with its provider.
statusqueued, running, action-required, completed, incomplete, failed, cancelled, or unknown. Google incomplete is terminal and distinct from provider failure.
providerStatusProvider-native status string.
terminalWhether the normalized state is completed, incomplete, failed, or cancelled.
providerPayloadComplete raw provider status response.
failureOptional provider failure message and details.

Completed get --json also contains normalized result.text and result.citations. Parallel adds providerResult with the unmodified response from its separate result endpoint.

research brave

Brave Answers Deep Research — a quick, surface-level pass. Uses BRAVE_ANSWERS_API_KEY.

seek research brave \
  "compare common methods for preserving paper records" --citations
OptionDescription
--country <cc>Two-letter country code (default us)
--language <code>Response language (default en)
--citationsRequest provider citation tags
--entitiesRequest provider entity tags
--jsonEmit raw JSON response

Output: report text with a citations list appended.

Brave research is synchronous. Its streaming endpoint does not expose a resumable job id, so --async, status, and get do not apply to Brave.

research parallel

Parallel Deep Research — thorough, from ~30s up to ~25 minutes depending on processor depth. Supports strict JSON output via a schema file, giving auditable sources for B2B and data-ops work.

seek research parallel "compare three soil amendments for container gardens" \
  --schema ./schema.json --processor pro
seek research parallel "compare traditional bookbinding methods" --async
OptionDescription
--schema <path>Path to a JSON file describing the desired output schema
--processor <name>Depth: core-fast | core | core2x-fast | core2x | pro-fast | pro | ultra-fast | ultra (default core)
--asyncSubmit and return after provider acceptance
--jsonRaw blocking result, or lifecycle envelope with --async

Processor guidance: -fast variants trade data freshness for speed. core = cross-referenced moderate complexity; core2x = high-complexity cross-referenced; pro = exploratory web research; ultra = advanced multi-source deep research.

Output: report content (JSON-stringified if a schema was used) with unique citation URLs appended.

research google

Gemini Deep Research Agent — comprehensive, 5–20 minutes. It autonomously plans, executes, and synthesizes multi-step research into a detailed, cited report. Uses GEMINI_API_KEY.

seek research google "compare common methods for preserving paper records"
seek research google "compare insulation materials for a small workshop" \
  --interactive --planner perplexity
seek research google "compare insulation materials for a small workshop" \
  --interactive --planner manual --async
OptionDescription
--agent <name>Override the Deep Research agent id
--system <text>Instruction incorporated into the Deep Research input
--interactiveReview and approve a research plan before starting
--planner <provider>Planner for --interactive: perplexity | brave | manual (default perplexity)
--quietSuppress polling progress on stderr
--asyncSubmit and return after provider acceptance
--jsonRaw blocking interaction, or lifecycle envelope with --async

--interactive requires a TTY; it proposes a plan you can approve, revise, or quit before submission. With --async, seek returns the accepted interaction locator after plan approval instead of polling.

--system keeps the instruction distinct from the research question while incorporating both into the Deep Research input. In interactive mode, the planner receives the research question without this instruction. After plan approval, the final Deep Research input contains the instruction and approved plan once each.

Output: report text with a citations list appended.

research perplexity

Perplexity Sonar Deep Research — an informed pass, ~1–3 minutes, run as an async job. Uses PERPLEXITY_API_KEY.

seek research perplexity "compare traditional bookbinding methods"
seek research perplexity "compare archival storage materials" --async
OptionDescription
--model <name>Override model (default sonar-deep-research)
--effort <level>Reasoning effort: low | medium | high (default medium)
--quietSuppress polling progress on stderr
--asyncSubmit and return after provider acceptance
--jsonRaw blocking job, or lifecycle envelope with --async

Output: report text with a citations list appended.