Professional Research
Multi-source research briefs with citations and grading.
Skill metadata
| Source | Bundled (installed by default) |
| Path | skills/research/professional-research |
| Version | 1.0.0 |
| Author | VibeOS |
| License | MIT |
| Platforms | linux, macos, windows |
| Tags | research, citations, analysis, web-search, brief |
| Related skills | arxiv, academic-literature, source-critique, comparative-analysis, visual-source-extract, blogwatcher, llm-wiki, challenge-gate |
Reference: full SKILL.md
info
The following is the complete skill definition that VibeOS loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.
Professional Research Skill
Produce a cited research brief from multiple sources. Prefer existing tools —
web_search, web_extract, browser_navigate / browser_snapshot,
execute_code, and (when installed) Perplexity MCP. Do not invent URLs.
When to Use
- User asks for a professional brief, due diligence, market/tech scan, or “research X with sources”.
- Topic needs more than one search hit or one page summary.
- RU/Cyrillic queries when
web.search_backend: yandex(or Yandex is available).
Do not use for:
- One-shot factual lookup answerable by a single
web_search. - Pure academic paper hunt → prefer
arxivskill (+ Scholar MCP if installed). - GUI desktop work →
computer_use/ browser skills.
Prerequisites
web_searchavailable (any backend). For RU: Yandex Search (YANDEX_SEARCH_API_KEY+YANDEX_FOLDER_ID).- Extract backend for long pages: Firecrawl / Tavily / Exa / Parallel
(
web_extract), or browser snapshot when summarization would drop fields. - Optional: Perplexity MCP (
perplexity_research) for expensive deep synth — only when the user wants one-shot synthesis and accepts higher cost.
How to Run
- Decompose the question into 2–5 sub-queries (synonyms, stakeholders, dates).
- Run
web_searchper sub-query (limit 5–10). For RU topics, prefer Yandex. - Deduplicate URLs; keep top candidates.
- Score with the helper script (from this skill directory):
python3 scripts/score_sources.py <<'EOF'
{"query":"TOPIC","sources":[{"url":"...","title":"...","snippet":"...","published":"YYYY-MM-DD"}]}
EOF
web_extractthe best A/B sources (usually 3–8 URLs). Use browser tools when you need raw structure the extract summarizer might drop.- If
browser_navigatereturnschallenge/bot_detection_warning, followchallenge-gate(avoid → one assist → human → partial). Logchallenge.md. - Check contradictions across sources; mark unresolved conflicts.
- Write the brief (template below). Every non-obvious claim needs a citation.
Quick Reference
| Step | Tool / script |
|---|---|
| Search | web_search |
| Score / dedupe | scripts/score_sources.py |
| Read pages | web_extract or browser_snapshot |
| Deep synth (optional) | Perplexity MCP perplexity_research |
| Tables / stats | execute_code |
Procedure
Source grading (interpret script grades)
| Grade | Meaning |
|---|---|
| A | Primary / official / peer-strong + fresh enough |
| B | Reputable secondary (major news, strong docs) |
| C | Useful but weaker; corroborate before relying |
| D | Low trust or stale — background only |
Signals from the script: primary, news, secondary, fresh, stale,
low-trust-host.
Deliverable templates
Copy from templates/ when the user asks for a specific shape:
| Template | File |
|---|---|
| Default research brief | inline below |
| Executive (≤1 page) | templates/executive-brief.md |
| Technical due diligence | templates/technical-due-diligence.md |
| Market scan | templates/market-scan.md |
| Incident / timeline | templates/incident-timeline.md |
Screenshots / scans / clips → load visual-source-extract first, then merge facts.
Offline structural check (no LLM):
python3 scripts/eval_brief.py --brief brief.md --sources sources.json
Brief template (always use)
# <Topic> — Research Brief
## Question
<one sentence restatement>
## Executive answer
<3–6 sentences; cite inline as [1], [2]>
## Key findings
1. ... [n]
2. ...
## Evidence table
| # | Claim | Source | Grade | Notes |
|---|-------|--------|-------|-------|
| 1 | ... | title + URL | A/B/C | ... |
## Contradictions / gaps
- ...
## Confidence
High | Medium | Low — <why>
## Sources
1. Title — URL (accessed YYYY-MM-DD)
2. ...
## Method
Sub-queries used; backends (e.g. yandex + firecrawl); extract count.
Citation rules
- Prefer primary docs, official pages, peer literature, wire services.
- Never fabricate a URL, quote, date, or statistic.
- If extract fails, say so and fall back to search snippet + browser, or drop the claim.
- Mark paywalled / inaccessible sources explicitly (
access: blocked_by_challengeorpartialinsources.jsonwhen a CAPTCHA/bot-wall blocked the page). - Never invent quotes or facts from a page still behind a challenge.
Pitfalls
- Do not dump raw SERP lists as the answer — synthesize.
- Do not let
web_extractsummarization erase numbers you need; re-fetch with browser tools for structured pages. - Do not enable Perplexity MCP by default for every query — cost and less control over intermediate sources.
- Keep prompt-cache safe: do not ask to swap toolsets mid-session; use what is already loaded.
- Do not spam browser clicks on CAPTCHA; use
challenge-gate+clarify.
Verification
Before finishing:
- Executive answer has at least two citations.
- Every Evidence-table row has a real URL you fetched or searched.
- Contradictions/gaps section is present (even if “none found”).
- Confidence is stated with a reason.
- Method lists backends and sub-queries.