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: INLINECODE1
- 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
research does NOT return results. It
returns a
jobId. You must poll
research_status and then call
get_results only after status is
"completed".
- -
get_results on a running job is an error. Don't call it until
research_status returns
"completed". You will get
JOB_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
synthesis field is markdown. Present it as-is with citations.
Don't strip the formatting.
- -
research always creates a new thread. Do NOT pass a INLINECODE15
to the
research tool. For follow-up research in the same thread, use
the
follow_up tool with the parent
jobId. Completed research
reports are immutable and must not be overwritten.
- -
fast mode 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... |
|---|
| INLINECODE20 | User wants to investigate a topic with sourced analysis | Question is simple enough to answer from memory |
| INLINECODE21 |
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:
- 1. Call
balance to check the user's current credits and payment status. - Call
list_providers with the anticipated budgetTier to show what
providers and cost range that tier includes.
- 3. 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.
- 4. Tell the user: "Your balance is $X.XX. A [tier] research will cost
up to $Y. That will query [providers]. Want to proceed?"
- 5. If balance is insufficient and no payment method is on file, direct
them to https://parallect.ai/settings/billing before proceeding.
- 6. 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) - INLINECODE38 : The tier confirmed in Step 1
- INLINECODE39 :
"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:
CODEBLOCK0
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_results in case partial results are available - Start a new query with fewer providers or
fast mode
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":
- 1. Call
get_results with jobId.
- Set
includeProviderReports: false unless the user wants raw data.
- Set
includeClaimsJson: false unless the user wants structured claims.
- 2. 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
synthesis markdown 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 -- call
balance and report: "Remaining
balance: $X.XX." If below $5, flag it: "Heads up -- your balance
is getting low."
- 3. If the job
status is "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:
- 1. [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_up with the parent jobId and topicIndex (0-based)
or
customQuery for 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 |
|---|
| INLINECODE75 | Accuracy and breadth matter (default) | 2-10 min | Multi-provider synthesis with claims and citations |
| INLINECODE76 |
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
threadId and jobId from 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_threads to find
it, then
get_thread for the full context.
- - Track cumulative spend across the session as a running total.
- INLINECODE82 creates a new thread every time.
follow_up continues
an existing thread. Never confuse the two -- using the wrong tool
can overwrite a completed report.
Parallect 深度研究技能
你可以访问 Parallect.ai,这是一个多提供商深度研究平台。它能同时查询多个前沿 AI 提供商,并将其发现综合成一份带有交叉引用、提取主张、冲突解决和后续建议的单一报告。
研究是异步的——根据模式和提供商的不同,任务耗时从 30 秒到 10 分钟以上不等。你必须轮询以获取完成状态。切勿阻塞。
连接
Parallect 通过其托管的 MCP 服务器访问。连接已通过你的 openclaw.json 技能配置文件预先配置。
- - 端点: https://parallect.ai/api/mcp/mcp
- 认证: 使用你的 PARALLECTAPIKEY(parlive*)的 Bearer 令牌
如果工具不可用,请确认密钥已在你的技能环境中设置,并且该技能已启用。
注意事项
请先阅读这些内容。它们能防止最常见的错误:
- - 研究是异步的。 调用 research 不会返回结果。它返回一个 jobId。你必须轮询 researchstatus,并且仅在状态变为 completed 后才调用 getresults。
- 对正在运行的任务调用 getresults 是错误的。 在 researchstatus 返回 completed 之前不要调用它。你会收到 JOBNOTCOMPLETE 错误。
- 你正在花费用户的资金。 在未先讨论预算的情况下,切勿提交研究。即使是最小规模(XXS)也需花费约 1 美元。
- 轮询过快会触发速率限制。 使用带有抖动的指数退避策略(参见步骤 3)。不要每 5 秒轮询一次。
- 研究前必须检查余额。 如果用户没有余额且没有付款方式,研究调用将失败。请先检查。
- synthesis 字段是 Markdown 格式。 按原样呈现并保留引用。不要去除格式。
- research 始终创建一个新线程。 不要向 research 工具传递 threadId。如需在同一线程中进行后续研究,请使用 follow_up 工具并传入父级 jobId。已完成的研究报告是不可变的,不得覆盖。
- fast 模式跳过综合。 它只返回单个提供商的原始报告,没有交叉引用或冲突解决。仅当用户明确优先考虑速度时使用。
可用工具
| 工具 | 何时使用... | 何时不要使用... |
|---|
| research | 用户想调查一个需要来源分析的主题 | 问题简单到凭记忆即可回答 |
| research_status |
你已提交研究,需要检查进度 | 你尚未调用 research |
| get
results | researchstatus 显示 completed | 任务仍在运行或综合中 |
| follow_up | 用户想对已完成的研究主题深入挖掘 | 没有先前已完成的任务 |
| list_threads | 用户提到过去的研究或想恢复 | 你已有 threadId |
| get_thread | 你需要之前研究会话的完整上下文 | 你只需要当前任务状态 |
| balance | 开始研究前,或之后报告剩余积分 | 轮询过程中(浪费一次调用) |
| usage | 用户询问他们的消费历史 | 默认情况——仅当被明确询问时 |
| list_providers | 研究前向用户展示他们的层级包含什么 | 已与用户讨论过预算 |
工作流程:运行研究
步骤 1:讨论预算并检查余额
在提交任何研究之前:
- 1. 调用 balance 检查用户当前的积分和付款状态。
- 调用 list_providers 并传入预期的 budgetTier,以显示该层级包含哪些提供商和成本范围。
- 与用户讨论预算,用自然语言表述:
| 用户说... | 映射到层级 | 最高费用 | 提供商数量 | 持续时间 |
|-------------|-------------|----------|-----------|----------|
| 快速查一下、就看一眼 | XXS | ~$1 | 1 个提供商 | ~30 秒 |
| 快速看看、简要 | XS | ~$2 | 1-2 个提供商 | ~1 分钟 |
| 标准、正常 | S | ~$5 | 2 个提供商 | ~2 分钟 |
| 彻底、详细 | M | ~$15 | 3-4 个提供商 | ~5 分钟 |
| 全面、深入 | L | ~$30 | 4-5 个提供商 | ~8 分钟 |
| 详尽、全部 | XL | ~$60 | 所有提供商 | ~10 分钟 |
关于每个层级的详细信息、提供商优势以及选择启发式方法,请参见 references/budget-tiers.md。
- 4. 告诉用户:你的余额为 $X.XX。[层级] 研究最高花费 $Y。将查询 [提供商]。要继续吗?
- 5. 如果余额不足且没有存档的付款方式,请引导他们前往 https://parallect.ai/settings/billing,然后再继续。
- 6. 如果用户在本会话中之前已设定预算偏好,则静默复用该偏好,除非主题需要不同的层级。不要再次询问。
为什么这很重要: 你正在代表用户花费真金白银。代理绝不能在未先建立预算预期的情况下自动提交研究。正确处理能建立信任;处理不当会导致账单冲击和用户流失。
步骤 2:提交研究
调用 research,参数如下:
- - query:一个具体、表述良好的研究问题(参见下面的提示)
- budgetTier:步骤 1 中确认的层级
- mode:methodical(默认)用于多提供商综合。仅当用户明确要求速度优先于深度时,才使用 fast。
- providers:省略则让 Parallect 自动选择。仅当用户对特定提供商有强烈偏好时才指定。
research 工具始终创建一个新线程。不要尝试传递 threadId。如需对已完成报告进行后续研究,请使用 follow_up 工具并传入父级 jobId。
保存返回的 jobId 和 threadId。
告诉用户:研究已提交给 [N] 个提供商。我大约 30 秒后回来检查进度。
步骤 3:轮询完成状态(带抖动的指数退避)
研究是异步的。使用 research_status 进行轮询,并采用指数退避。不要以固定间隔轮询。
轮询计划:
attempt = 1
base_delay = 30 秒
while job not complete:
wait(base_delay * (1.5 ^ (attempt - 1)) + random(0, 5 秒))
call research_status(jobId)
attempt += 1
实际效果如下:
| 检查次数 | 大约等待时间 | 累计时间 |
|---|
| 1 | ~30 秒 | 30 秒 |
| 2 |
~50 秒 | 1 分 20 秒 |
| 3 | ~75 秒 | 2 分 35 秒 |
| 4 | ~110 秒 | 4 分 25 秒 |
| 5+ | ~120 秒(上限) | 每次 +2 分钟 |
将最大间隔上限设为 120 秒。 轮询频率绝不低于每 30 秒一次。
每次轮询时,自然地报告进度:
- - 3 个提供商中已有 1 个完成,还有 2 个正在运行...
- 所有提供商已完成,现在正在进行综合...
- 研究完成!让我获取结果。
捷径: 如果状态为 synthesizing,则几乎完成。30 秒后再次检查。
超时: 如果任务在 15 分钟后仍未完成,通知用户:这项研究花费的时间比预期的要长。要我继续检查,还是我们尝试不同的方法? 提供以下选项:
- - 继续轮询(设置 2 分钟间隔)
- 检查 get_results,看是否有部分结果可用
- 用更少的提供商或 fast 模式开始新的查询
静默停滞检测: 如果连续 3 次轮询返回完全相同的进度(相同的提供商完成,相同的状态),则任务可能卡住了。通知用户并建议重新开始。
步骤 4:交付结果
当 research_status 返回 completed 时:
- 1. 调用 get_results,传入 jobId。
- 除非用户想要原始数据,否则设置 includeProviderReports: false。
- 除非用户想要结构化主张,否则设置 includeClaimsJson: false。
- 2. 按以下顺序呈现发现:
a.
简要总结(3-5 句话),用你自己的话概括关键发现。以最重要的见解开头。
b.