Parallect Deep Research Skill
You have access to Parallect.ai, a multi-provider deep research platform. It queries multiple frontier AI providers simultaneously and synthesizes their findings into a single report with cross-referenced citations, extracted claims, conflict resolution, and follow-on suggestions.
Research is asynchronous -- jobs take 30 seconds to 10+ minutes depending on mode and providers. You MUST poll for completion. Never block.
Connection
Parallect is accessed via its hosted MCP server. The connection is
pre-configured through your openclaw.json skill config.
- Endpoint:
https://parallect.ai/api/mcp/mcp - Auth: Bearer token using your
PARALLECT_API_KEY(par_live_*)
If tools are not available, verify the key is set in your skill env and the skill is enabled.
Gotchas
Read these first. They prevent the most common mistakes:
- Research is async. Calling
researchdoes NOT return results. It returns ajobId. You must pollresearch_statusand then callget_resultsonly after status is"completed". get_resultson a running job is an error. Don't call it untilresearch_statusreturns"completed". You will getJOB_NOT_COMPLETE.- You are spending the user's money. Never submit research without discussing budget first. Even an XXS tier costs ~$1.
- Polling too fast triggers rate limits. Use exponential backoff with jitter (see Step 3). Don't poll every 5 seconds.
- Balance check before research is mandatory. If the user has no balance and no payment method, the research call will fail. Check first.
- The
synthesisfield is markdown. Present it as-is with citations. Don't strip the formatting. researchalways creates a new thread. Do NOT pass athreadIdto theresearchtool. For follow-up research in the same thread, use thefollow_uptool with the parentjobId. Completed research reports are immutable and must not be overwritten.fastmode skips synthesis. It returns a single provider's raw report with no cross-referencing or conflict resolution. Only use when the user explicitly prioritizes speed.
Available Tools
| Tool | Use when... | Do NOT use when... |
|---|---|---|
research | User wants to investigate a topic with sourced analysis | Question is simple enough to answer from memory |
research_status | You've submitted research and need to check progress | You haven't called research yet |
get_results | research_status shows "completed" | Job is still running or synthesizing |
follow_up | User wants to dig deeper on a completed research topic | No prior completed job exists |
list_threads | User refers to past research or wants to resume | You already have the threadId |
get_thread | You need full context of a previous research session | You only need current job status |
balance | Before starting research, or after to report remaining credits | Mid-polling (wastes a call) |
usage | User asks about their spending history | Default -- only when explicitly asked |
list_providers | Before research to show user what their tier includes | Already discussed budget with user |
Workflow: Running Research
Step 1: Discuss budget and check balance
Before submitting ANY research:
-
Call
balanceto check the user's current credits and payment status. -
Call
list_providerswith the anticipatedbudgetTierto show what providers and cost range that tier includes. -
Discuss budget with the user, framing it in natural language:
User says... Map to tier Max cost Providers Duration "quick check", "just a glance" XXS ~$1 1 provider ~30s "quick look", "brief" XS ~$2 1-2 providers ~1min "standard", "normal" S ~$5 2 providers ~2min "thorough", "detailed" M ~$15 3-4 providers ~5min "comprehensive", "deep" L ~$30 4-5 providers ~8min "exhaustive", "everything" XL ~$60 All providers ~10min For per-tier details, provider strengths, and selection heuristics see
references/budget-tiers.md. -
Tell the user: "Your balance is $X.XX. A [tier] research will cost up to $Y. That will query [providers]. Want to proceed?"
-
If balance is insufficient and no payment method is on file, direct them to https://parallect.ai/settings/billing before proceeding.
-
If the user set a budget preference earlier in this session, reuse it silently unless the topic warrants a different tier. Don't ask again.
Why this matters: You are spending real money on the user's behalf. The agent must never auto-submit research without first establishing budget expectations. Getting this right builds trust; getting it wrong causes bill shock and churn.
Step 2: Submit the research
Call research with:
query: A specific, well-formed research question (see Tips below)budgetTier: The tier confirmed in Step 1mode:"methodical"(default) for multi-provider synthesis. Only use"fast"if the user explicitly wants speed over depth.providers: Omit to let Parallect auto-select. Only specify if the user has a strong preference for specific providers.
The research tool always creates a new thread. Do NOT attempt to
pass a threadId. For follow-up research on a completed report, use
the follow_up tool with the parent jobId instead.
Save the returned jobId and threadId.
Tell the user: "Research submitted to [N] providers. I'll check back on progress in about 30 seconds."
Step 3: Poll for completion (exponential backoff with jitter)
Research is asynchronous. Poll using research_status with exponential
backoff. Do NOT poll at fixed intervals.
Polling schedule:
attempt = 1
base_delay = 30 seconds
while job not complete:
wait(base_delay * (1.5 ^ (attempt - 1)) + random(0, 5 seconds))
call research_status(jobId)
attempt += 1
In practice this looks like:
| Check # | Approximate wait | Cumulative time |
|---|---|---|
| 1 | ~30s | 30s |
| 2 | ~50s | 1m 20s |
| 3 | ~75s | 2m 35s |
| 4 | ~110s | 4m 25s |
| 5+ | ~120s (cap) | +2min each |
Cap the maximum interval at 120 seconds. Never poll more frequently than every 30 seconds.
On each poll, report progress naturally:
- "1 of 3 providers finished, 2 still running..."
- "All providers done, synthesis is running now..."
- "Research complete! Let me grab the results."
Shortcut: If status is "synthesizing", it's almost done. Next
check in 30 seconds.
Timeout: If the job hasn't completed after 15 minutes, inform the user: "This research is taking longer than expected. Want me to keep checking, or should we try a different approach?" Offer to:
- Keep polling (set 2-minute intervals)
- Check
get_resultsin case partial results are available - Start a new query with fewer providers or
fastmode
Silent stall detection: If 3 consecutive polls return the exact same progress (same providers complete, same status), the job may be stuck. Inform the user and suggest starting fresh.
Step 4: Deliver results
When research_status returns "completed":
-
Call
get_resultswithjobId.- Set
includeProviderReports: falseunless the user wants raw data. - Set
includeClaimsJson: falseunless the user wants structured claims.
- Set
-
Present findings in this order: a. Brief summary (3-5 sentences) of the key findings in your own words. Lead with the most important insight. b. Full synthesis -- share the
synthesismarkdown as-is. It contains inline citations and cross-references. c. Cost report -- "This research cost $X.XX across N providers (took Y minutes)." d. Balance check -- callbalanceand report: "Remaining balance: $X.XX." If below $5, flag it: "Heads up -- your balance is getting low." -
If the job
statusis"failed", report what happened and suggest retrying with a different tier or fewer providers.
Step 5: Offer follow-ons
Results include followOnSuggestions. Present them as numbered options:
"Based on this research, here are directions we could explore next:
- [suggestion 1]
- [suggestion 2]
- [suggestion 3]
Want me to research any of these, or ask your own follow-up question?"
When the user picks one:
- Use
follow_upwith the parentjobIdandtopicIndex(0-based) orcustomQueryfor a custom question. - Mention the estimated cost before submitting.
- Then repeat Steps 3-5.
Follow-ups run in the same thread, so providers have full context.
Cost Awareness Rules
You are spending the user's money at machine speed. Be responsible:
- NEVER auto-submit research in a new session without first establishing budget expectations. This is non-negotiable.
- Track cumulative session spend. After multiple queries, report: "We've spent $X.XX on research so far this session."
- Suggest cheaper tiers proactively. If the question is simple, say: "This seems like a quick lookup -- XXS (~$1) should be enough. Want to save money with that instead of M?"
- Confirm expensive operations. For L/XL tiers or chains of follow-ups, get explicit confirmation: "That'll be up to $60. Want to proceed?"
- Report cost after EVERY research job. Never skip the cost report.
- Alert at low balance. If balance drops below $5, mention it. If below $2, proactively warn that the next research might fail.
- Link to billing on insufficient funds. Don't just say "insufficient balance" -- give them the link: https://parallect.ai/settings/billing
Error Handling
Common errors: INSUFFICIENT_BALANCE, JOB_NOT_COMPLETE, RATE_LIMITED,
PAYMENT_FAILED, JOB_NOT_FOUND, INVALID_TOPIC. See
references/api-errors.md for full error codes, response fields, and
recovery steps.
Tips for Quality Research Queries
A well-formed query saves money and produces better results:
- Be specific: "What are the latest Phase 3 clinical trial results for GLP-1 receptor agonists in treating NASH?" beats "GLP-1 drugs".
- Include constraints: time period, geography, industry sector, comparison criteria.
- If the user is vague, ask ONE clarifying question before spending money. "Could you narrow that down? Are you interested in [X] or [Y]?"
- Don't over-scope. If the user asks about a narrow topic, don't inflate it into a broad research question. Match the query scope to the budget tier.
Mode Selection
| Mode | When to use | Duration | Output |
|---|---|---|---|
methodical | Accuracy and breadth matter (default) | 2-10 min | Multi-provider synthesis with claims and citations |
fast | User says "quick" / "fast" / time-sensitive | 10-30s | Single provider raw report, no synthesis |
Use methodical unless the user explicitly asks for speed. The
synthesis step is where Parallect adds the most value -- cross-
referencing claims, resolving contradictions, deduplicating citations.
Session Memory
- Remember
threadIdandjobIdfrom current research context. - If the user says "the research" or "those results", use the most recent jobId. Don't ask them to repeat it.
- If they want to resume older research, call
list_threadsto find it, thenget_threadfor the full context. - Track cumulative spend across the session as a running total.
researchcreates a new thread every time.follow_upcontinues an existing thread. Never confuse the two -- using the wrong tool can overwrite a completed report.