[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DB9K1V8K13PH25DSDZT4HC":3,"skill-same:01M6DB9K1V8K13PH25DSDZT4HC":160},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":14,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M6DB9K1V8K13PH25DSDZT4HC","deep-research",null,"Multi-source deep research with a routing + caching + grading harness over firecrawl, exa, tavily, perplexity, scholarly-access, tooluniverse, huggingface, and context7 MCPs. Fixes scope first via AskUserQuestion (purpose, depth, recency, output form) before any fan-out, then routes each sub-question to the best live provider, caches provider calls by query hash, grades every source by confidence, and delivers cited reports. Use when the user wants thorough, evidence-backed research.","Prekzursil\u002Fagent-skills-toolchain","Prekzursil","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F54636077?v=4","01M6DACZ1PCQHD99SCR1YXG28B","Andrei Mihai Visalon","01M6DACZ670WZF535V3WYYSS4Z",0,"MIT","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"research","deep","deep research","live","tavily","grading","caching","query","exa","context7","provider","reports","evidence","use","question","access","firecrawl","perplexity","harness","routing","2026-11-10 10:12:30",false,"---\nname: deep-research\ndescription: Multi-source deep research with a routing + caching + grading harness over firecrawl, exa, tavily, perplexity, scholarly-access, tooluniverse, huggingface, and context7 MCPs. Fixes scope first via AskUserQuestion (purpose, depth, recency, output form) before any fan-out, then routes each sub-question to the best live provider, caches provider calls by query hash, grades every source by confidence, and delivers cited reports. Use when the user wants thorough, evidence-backed research.\n---\n\n# Deep Research\n\n> **Drift-prone skill.** Firecrawl\u002FExa\u002FTavily MCP tool names, quotas, and\n> result shapes change. Verify the configured MCP tools and current API docs\n> before promising coverage or quoting live source counts. The routing table in\n> `references\u002Fresearch_harness\u002Frouting.py` is the single choke-point to update,\n> and the preflight step catches name\u002Favailability drift at runtime.\n\n## Instrumentation (Wave B passenger, 2026-08-27 — no logic changes)\n\nThis skill measures **42% success over 90 uses** (worst popular skill). Hypothesis: long\nmulti-hop runs outlive their context\u002Ftool budget on this RAM-starved box, so partial runs log\nas failures. To make that measurable instead of guessed: **each run should append phase\ntimestamps** (plan \u002F search \u002F deep-read \u002F synthesize \u002F deliver, plus abort point if any) as\none JSONL line per phase to `C:\\Users\\Prekzursil\\.agents\\logs\\cursor-subagent-lifecycle.jsonl`\n— the same log Cursor's `subagentStart`\u002F`subagentStop` hooks write to — e.g.\n`{\"ts\":\"\u003CISO8601>\",\"source\":\"deep-research\",\"phase\":\"search\",\"note\":\"...\"}`. Do NOT change\nthe research logic based on the hypothesis until this log disproves or confirms it.\n\nProduce thorough, cited research reports from multiple sources. The base\nworkflow (understand to plan to search to deep-read to synthesize to deliver)\nis unchanged; the **Research Harness (M-16)** below slots routing, caching,\nsource-confidence grading, a cited-report renderer, and a provider preflight\ninto that spine.\n\n> This skill is vendored from the ECC `deep-research` skill and extended with\n> the M-16 harness. The base ECC copy is left untouched.\n\n## When to Activate\n\n- User asks to research any topic in depth\n- Competitive analysis, technology evaluation, or market sizing\n- Due diligence on companies, investors, or technologies\n- Any question requiring synthesis from multiple sources\n- User says \"research\", \"deep dive\", \"investigate\", or \"what's the current state of\"\n\n**Wrong lane?** `research-ops` is the thin router over this stack: it escalates *here* for\nanything needing multiple sources, citations, or confidence grading, and routes elsewhere for a\nsingle quick fact (the `exa` MCP) or research-before-*coding* (`search-first`). This skill is the\nsynthesis engine that router points at -- the full loop and output format live here, not there.\n\n## MCP Requirements\n\nAt least one search provider. The harness routes across whichever of these are\nlive (see Preflight):\n\n- **firecrawl** — `firecrawl_search`, `firecrawl_scrape`, `firecrawl_research_search_github` (primary web)\n- **exa** (plugin `mcp__plugin_exa_exa__*`) — `web_search_exa`, `web_fetch_exa` (neural\u002Fsemantic)\n- **tavily** — `tavily_search`, `tavily_extract` (web\u002Fnews fallback)\n- **perplexity** (cookie\u002Fsession-auth web MCP, `jacob-bd\u002Fperplexity-web-mcp`) — `pplx_smart_query`, `pplx_ask`, `pplx_deep_research`, `pplx_council` (synthesized **cited** answers via the user's Pro\u002FMax plan; drives the `synthesis` capability + high-priority web corroboration). Uses the `__Secure-next-auth.session-token` cookie supplied to the server as `PERPLEXITY_SESSION_TOKEN` — no paid API key. Gray-area\u002FToS-adjacent (like the IG\u002FFB cookie MCPs); session can rate-limit\u002Fexpire (~30d) and preflight routes around it when down.\n- **scholarly-access** — `paper_resolve`, `paper_fetch_metadata`, `paper_summarize` (OA academic)\n- **tooluniverse** — `find_tools`, `execute_tool` (bio\u002Fpharma, 1264-tool library)\n- **huggingface** — `paper_search` (ML\u002FarXiv papers)\n- **context7** — `resolve-library-id`, `query-docs` (library\u002FAPI docs)\n- **searxng** (key-free self-hosted metasearch, `mcp-searxng`, `SEARXNG_URL` env) — `searxng_web_search` (no API key, no quota; high-priority **key-free** web corroborator and the `longtail` primary)\n- **cve-mcp** (key-free local MCP, NVD\u002FCIRCL\u002FOSV\u002FCISA-KEV\u002FExploitDB) — `cve_lookup`, `cve_search`, `cve_kev_list` (the `vuln` capability for CVE\u002Fexploit\u002FCVSS\u002FKEV questions)\n\nParked (`~\u002F.mcp.disabled.json`): `scrapegraph`, `apify` — the harness routes\naround them. Never call `mcp__sci-hub__*`; avoid `paper_find_oa_pdf` per the\nstanding regression note. Both are hard-excluded by the router. No dark-web \u002F\nonion provider is routed to; any `.onion` source that reaches grading is\nforce-flagged UNVERIFIED regardless of corroboration.\n\nOpenRouter is **not** a research search provider and must not replace Firecrawl,\nExa, or native Max. T0 summarization of sources **already fetched** by the\nharness MAY use the `openrouter-routing` sidecar (allowlisted free\u002Fcheap chat\ncompletion). `web` \u002F `deep_read` stay on MCP providers. Do not use `:online`\n(deprecated) or `openrouter:web_search` as a search MCP substitute.\n\n## Workflow\n\n### Step 1: Fix the scope BEFORE any fan-out\n\nEvery sub-question costs provider calls and context. Scope is decided up front,\nnot discovered halfway through a fan-out that is already too wide or too narrow.\n**Ask with `AskUserQuestion`** — a structured question the user answers by\nselecting, not a sentence buried in prose they can scroll past.\n\nRead the request and mark each of the four scope dimensions DETERMINED or OPEN:\n\n| dimension | DETERMINED when the request already states… |\n|---|---|\n| **purpose** | what the output is *for* — learning, deciding, or drafting |\n| **depth** | a sub-question count, or a time \u002F token \u002F provider budget |\n| **recency** | a timeframe, or \"latest\" versus \"established consensus\" |\n| **output** | the form — brief, comparison table, annotated bibliography, memo |\n\nThen ask **one** `AskUserQuestion` covering **only the OPEN dimensions**, at most\nfour options each. Asking about a dimension the request already settled wastes a\nturn; fanning out with one still open wastes far more than a turn.\n\n**Skip this step only when all four are DETERMINED.** That is the single\npermitted condition, and it is checkable against the request text — not a\njudgement about how impatient the user sounded.\n\n> **Why this is written as a gate.** Until 2026-10-24 this step asked for \"1-2\n> quick clarifying questions\" and then immediately granted permission to skip\n> them whenever the user sounded like they just wanted the research done. An\n> instruction followed by permission to ignore it is not an instruction, and the\n> measured result was that scope went unasked — the owner reported exactly that.\n> That clause is deleted, and it is described here rather than quoted, because a\n> sentence granting permission to skip reads as permission to skip even inside a\n> note explaining why it was removed.\n>\n> Do not reintroduce a \"they sounded in a hurry\" branch in any form. If the four\n> dimensions are determined you already skip, by the rule above. If they are not,\n> guessing is what produced fan-outs that were too wide, too narrow, or aimed at\n> the wrong output form.\n\n### Step 2: Plan the Research\n\nBreak the topic into 3-5 research sub-questions. Example:\n- Topic: \"Impact of AI on healthcare\"\n  - What are the main AI applications in healthcare today?\n  - What clinical outcomes have been measured?\n  - What are the regulatory challenges?\n  - What companies are leading this space?\n  - What's the market size and growth trajectory?\n\n### Step 2.5: Preflight (which providers are live)\n\nBefore dispatch, probe each routable provider once (a cheap tools-list or\nminimal call) and mark it live \u002F down \u002F quota-exhausted. Route only to live\nproviders; record any that were down for the Methodology section. Preflight is\nREAD-ONLY and never disturbs the live GUI IDA MCP on `:13337`. See\n`research_harness.preflight`.\n\n### Step 3: Execute Multi-Source Search (harness-routed)\n\nFor EACH sub-question, classify its capability and dispatch to the highest-ranked\nlive provider for that capability (see the Routing Table below). For high-stakes\nsub-questions, query the **top-2** providers (different indexes) so the grader\ncan cross-corroborate. Wrap every provider call in the **query-hash cache** so an\nidentical sub-question across runs is a hit, not re-burned quota.\n\n**Search strategy:**\n- Use 2-3 different keyword variations per sub-question\n- Aim for 15-30 unique sources total\n- Prioritize per the source tiers (academic\u002Fofficial > reputable news > forums)\n\n### Step 4: Deep-Read Key Sources\n\nFor the most promising URLs, fetch full content with the `deep_read` capability\n(firecrawl `firecrawl_scrape` -> exa `web_fetch_exa` -> tavily `tavily_extract`).\nRead 3-5 key sources in full; do not rely only on search snippets. Keep raw\npayloads sandboxed to disk (the cache stores them); only the derived finding\nenters the conversation.\n\n### Step 5: Synthesize and Write Report (graded + cited)\n\nGrade every source, then assemble the report with the cited-report renderer\n(`research_harness.report.render`). Template:\n\n```markdown\n# [Topic]: Research Report\n*Generated: [date] | Sources: [N] | Providers: [firecrawl, scholarly-access, ...] | Confidence: [High\u002FMedium\u002FLow]*\n*Cache: [H hits \u002F M misses] | Stale-allowed: [yes\u002Fno]*\n\n## Executive Summary\n[3-5 sentence overview]\n\n## 1. [First Major Theme]\n- Claim [1] `[A.corrob x2.2026]`\n- Claim [2] `[C.single.2024 - UNVERIFIED]`\n\n## Key Takeaways\n- [Actionable insight]\n\n## Sources\n1. [Title](url) - tier A - provider (year)\n2. ...\n\n## Methodology\nSub-questions investigated, providers routed-to, cache hit\u002Fmiss counts,\nand providers that were DOWN at preflight.\n```\n\nThe header `Confidence` is **derived** from the distribution of claim tiers, not\nhand-waved. The Methodology section honestly lists routed providers, cache\nhit\u002Fmiss, and any provider down at preflight.\n\n### Step 6: Deliver\n\n- **Short topics**: Post the full report in chat\n- **Long reports**: Post the executive summary + key takeaways, save full report to a file\n\n### Step 7: Persist to durable memory (basic-memory bridge)\n\nEvery cited report is a durable research artifact — write it to the\n`basic-memory` MCP vault so it survives context compaction and is\nsemantically recallable later, instead of being re-researched from scratch.\n\nAfter delivering, call `mcp__basic-memory__write_note` with:\n\n- **title**: `research \u003Ctopic> \u003CYYYY-MM-DD>`\n- **folder**: `research` (keeps the report findable via the same prefix)\n- **tags**: `research-report`, the confidence tier, and the providers routed-to\n- **content**: the full cited report (the `report.render` output) — the\n  graded claims `[tier.corroboration.year]` and the `## Sources` list are the\n  load-bearing part to preserve, so recall returns the evidence, not just prose.\n\nThis is a documentation convention, not harness code: the harness renders the\nreport; the agent is responsible for the `write_note` push. On a later related\nquestion, **recall first** (`mcp__basic-memory__search_notes` \u002F\n`build_context` for `research \u003Ctopic>`) before re-running the harness — a cache\nhit at the memory layer beats any provider round-trip. Skip the write only if\n`basic-memory` is unavailable or stalls (never block delivery on it).\n\n## Research Harness (M-16)\n\nA thin, stateless orchestration layer (no new MCP server, no daemon) shipped as a\nPython package at `references\u002Fresearch_harness\u002F`. Four components plus preflight:\n\n### 1. Capability to provider routing (`routing.py`)\n\nA **data-driven** table maps a capability (not a tool name) to an ordered list of\nproviders (primary first), with a source-tier prior for grading:\n\n| Capability | Ordered providers (primary first) |\n|---|---|\n| `web` | firecrawl.firecrawl_search -> perplexity.pplx_smart_query -> searxng.searxng_web_search -> exa.web_search_exa -> tavily.tavily_search |\n| `synthesis` | perplexity.pplx_smart_query -> exa.web_search_exa -> firecrawl.firecrawl_search |\n| `neural` | exa.web_search_exa -> firecrawl.firecrawl_search |\n| `academic` | scholarly-access.paper_resolve -> huggingface.paper_search |\n| `bio` | tooluniverse.find_tools -> scholarly-access.paper_resolve |\n| `code` | exa.web_search_exa -> firecrawl.firecrawl_research_search_github -> context7.query-docs |\n| `library_docs` | context7.query-docs -> exa.web_search_exa |\n| `deep_read` | firecrawl.firecrawl_scrape -> exa.web_fetch_exa -> tavily.tavily_extract |\n| `vuln` | cve-mcp.cve_lookup -> cve-mcp.cve_search -> cve-mcp.cve_kev_list |\n| `longtail` | searxng.searxng_web_search -> exa.web_search_exa |\n\n`classify_capability(subquestion)` is a cheap, conservative keyword classifier\n(keywords like cve\u002Fcvss\u002Fexploit\u002Fkev\u002F0-day\u002Frce -> vuln; paper\u002Fstudy\u002Fdoi -> academic;\ngene\u002Fprotein\u002Fdrug -> bio; repo\u002Fgithub -> code; api docs\u002Fsdk -> library_docs;\nobscure\u002Flong-tail\u002Frarely-documented -> longtail; explain\u002Fcompare\u002Fconsensus ->\nsynthesis; else web). The security-specific `vuln` rule runs first; domain rules\nwin over synthesis phrasing (synthesis is the last rule); raw link\u002Fextraction\nstays on firecrawl\u002Fexa while synthesized **cited** answers route to Perplexity.\nThe key-free additions: **searxng** (self-hosted metasearch) is the high-priority\nkey-free corroborator on `web` and the `longtail` primary; **cve-mcp** drives\n`vuln`. `resolve_providers(capability, live_servers, top_n)` returns ordered live\nproviders; Sci-Hub, the regressed `paper_find_oa_pdf`, and parked servers are\nhard-excluded.\n\n### 2. Query-hash cache (`cache.py`)\n\nSHA-256 of a normalized `{capability, provider, query, params}` envelope keys each\n`{hash}.json` entry (a direct application of `content-hash-cache-pattern` with one\nextension: **TTL**). Default cache dir `~\u002F.research-harness\u002Fcache`. Per-capability\nTTL: web\u002Fnews ~24h, code\u002Fdocs ~7d, academic\u002Fbio ~30d. Corruption or expiry == miss.\n`fetch_with_cache(...)` is the service-layer wrapper; pass `cache_enabled=False`\n(the `--no-cache` escape hatch) for \"must be current\" runs.\n\n### 3. Source-confidence grading (`grading.py`)\n\n`confidence(claim) = f(source_tier, corroboration_count, recency)`, fully\ndeterministic. Source tier = best of a domain-authority prior (.gov\u002F.edu\u002Fdoi.org\nplus the security authorities nvd.nist.gov\u002Fcisa.gov\u002Ffirst.org\u002Fosv.dev\u002Fexploit-db.com\n-> A; wikipedia\u002Fgithub\u002Fmajor-news -> B; else C) and the routing provider prior\n(scholarly-access\u002Fcontext7\u002Ftooluniverse\u002F**cve-mcp** -> A; firecrawl\u002Fexa\u002Ftavily\u002F\nhuggingface\u002F**searxng** -> B). A single source is flagged UNVERIFIED; >=2\nindependent sources are corroborated; within ~12 months boosts recency. A\ndark-web \u002F `.onion` source is **force-flagged UNVERIFIED and capped at Low**\nregardless of corroboration (`is_dark_web`). Each source gets a provenance tag\nlike `[A.corrob x2.2026]`; the report header confidence is derived from the grade\ndistribution.\n\n### 4. Cited-report output (`report.py`)\n\n`render(Report(...))` assembles findings into markdown with inline **numbered**\ncitations (`[1]`), a tiered references section, per-claim provenance tags, and a\nMethodology section reporting routed providers + cache hit\u002Fmiss + providers down\nat preflight.\n\n### Preflight (`preflight.py`)\n\n`run_preflight(probe, servers)` probes each routable server (probe injected,\nread-only) and returns live\u002Fdown\u002Fquota statuses; `live_servers(...)` feeds the\nrouter. `harness.plan_research(subquestions, statuses, top_n)` is the pure glue\nthat ties preflight + routing into a research plan.\n\n### Using the package\n\n```python\nimport sys\nsys.path.insert(0, \"references\")  # or install the package\nfrom research_harness import (\n    run_preflight, plan_research, fetch_with_cache,\n    Source, grade_source, build_citations, render,\n)\n\nstatuses = run_preflight(my_probe)              # which MCPs are live\nplan = plan_research(subquestions, statuses)    # route each sub-question\n# ... for each decision, call the live provider through fetch_with_cache(...)\n# ... grade each Source with grade_source(...), then render(Report(...))\n```\n\nRun the tests: `cd references && python -m pytest -q` (pure logic, fake provider\nresponses, no live network).\n\n## Parallel Research with Subagents\n\nFor broad topics, use Claude Code's Task tool to parallelize:\n\n```\nLaunch 3 research agents in parallel:\n1. Agent 1: Research sub-questions 1-2\n2. Agent 2: Research sub-questions 3-4\n3. Agent 3: Research sub-question 5 + cross-cutting themes\n```\n\nEach agent searches, reads sources, and returns findings. The main session\nsynthesizes into the final report. Pass the routing table + grading rubric into\neach agent's prompt so grades stay consistent.\n\n## Quality Rules\n\n1. **Every claim needs a source.** No unsourced assertions.\n2. **Cross-reference.** If only one source says it, the grader flags it UNVERIFIED.\n3. **Recency matters.** Prefer sources from the last 12 months; the grader boosts them.\n4. **Acknowledge gaps.** The Methodology section lists providers that were down.\n5. **No hallucination.** If you don't know, say \"insufficient data found.\"\n6. **Separate fact from inference.** Label estimates, projections, and opinions clearly.\n\n## Examples\n\n```\n\"Research the current state of nuclear fusion energy\"\n\"Deep dive into Rust vs Go for backend services in 2026\"\n\"Research the best strategies for bootstrapping a SaaS business\"\n\"What's happening with the US housing market right now?\"\n\"Investigate the competitive landscape for AI code editors\"\n```\n","# Deep Research\n\n> **Drift-prone skill.** Firecrawl\u002FExa\u002FTavily MCP tool names, quotas, and\n> result shapes change. Verify the configured MCP tools and current API docs\n> before promising coverage or quoting live source counts. The routing table in\n> `references\u002Fresearch_harness\u002Frouting.py` is the single choke-point to update,\n> and the preflight step catches name\u002Favailability drift at runtime.\n\n## Instrumentation (Wave B passenger, 2026-08-27 — no logic changes)\n\nThis skill measures **42% success over 90 uses** (worst popular skill). Hypothesis: long\nmulti-hop runs outlive their context\u002Ftool budget on this RAM-starved box, so partial runs log\nas failures. To make that measurable instead of guessed: **each run should append phase\ntimestamps** (plan \u002F search \u002F deep-read \u002F synthesize \u002F deliver, plus abort point if any) as\none JSONL line per phase to `C:\\Users\\Prekzursil\\.agents\\logs\\cursor-subagent-lifecycle.jsonl`\n— the same log Cursor's `subagentStart`\u002F`subagentStop` hooks write to — e.g.\n`{\"ts\":\"\u003CISO8601>\",\"source\":\"deep-research\",\"phase\":\"search\",\"note\":\"...\"}`. Do NOT change\nthe research logic based on the hypothesis until this log disproves or confirms it.\n\nProduce thorough, cited research reports from multiple sources. The base\nworkflow (understand to plan to search to deep-read to synthesize to deliver)\nis unchanged; the **Research Harness (M-16)** below slots routing, caching,\nsource-confidence grading, a cited-report renderer, and a provider preflight\ninto that spine.\n\n> This skill is vendored from the ECC `deep-research` skill and extended with\n> the M-16 harness. The base ECC copy is left untouched.\n\n## When to Activate\n\n- User asks to research any topic in depth\n- Competitive analysis, technology evaluation, or market sizing\n- Due diligence on companies, investors, or technologies\n- Any question requiring synthesis from multiple sources\n- User says \"research\", \"deep dive\", \"investigate\", or \"what's the current state of\"\n\n**Wrong lane?** `research-ops` is the thin router over this stack: it escalates *here* for\nanything needing multiple sources, citations, or confidence grading, and routes elsewhere for a\nsingle quick fact (the `exa` MCP) or research-before-*coding* (`search-first`). This skill is the\nsynthesis engine that router points at -- the full loop and output format live here, not there.\n\n## MCP Requirements\n\nAt least one search provider. The harness routes across whichever of these are\nlive (see Preflight):\n\n- **firecrawl** — `firecrawl_search`, `firecrawl_scrape`, `firecrawl_research_search_github` (primary web)\n- **exa** (plugin `mcp__plugin_exa_exa__*`) — `web_search_exa`, `web_fetch_exa` (neural\u002Fsemantic)\n- **tavily** — `tavily_search`, `tavily_extract` (web\u002Fnews fallback)\n- **perplexity** (cookie\u002Fsession-auth web MCP, `jacob-bd\u002Fperplexity-web-mcp`) — `pplx_smart_query`, `pplx_ask`, `pplx_deep_research`, `pplx_council` (synthesized **cited** answers via the user's Pro\u002FMax plan; drives the `synthesis` capability + high-priority web corroboration). Uses the `__Secure-next-auth.session-token` cookie supplied to the server as `PERPLEXITY_SESSION_TOKEN` — no paid API key. Gray-area\u002FToS-adjacent (like the IG\u002FFB cookie MCPs); session can rate-limit\u002Fexpire (~30d) and preflight routes around it when down.\n- **scholarly-access** — `paper_resolve`, `paper_fetch_metadata`, `paper_summarize` (OA academic)\n- **tooluniverse** — `find_tools`, `execute_tool` (bio\u002Fpharma, 1264-tool library)\n- **huggingface** — `paper_search` (ML\u002FarXiv papers)\n- **context7** — `resolve-library-id`, `query-docs` (library\u002FAPI docs)\n- **searxng** (key-free self-hosted metasearch, `mcp-searxng`, `SEARXNG_URL` env) — `searxng_web_search` (no API key, no quota; high-priority **key-free** web corroborator and the `longtail` primary)\n- **cve-mcp** (key-free local MCP, NVD\u002FCIRCL\u002FOSV\u002FCISA-KEV\u002FExploitDB) — `cve_lookup`, `cve_search`, `cve_kev_list` (the `vuln` capability for CVE\u002Fexploit\u002FCVSS\u002FKEV questions)\n\nParked (`~\u002F.mcp.disabled.json`): `scrapegraph`, `apify` — the harness routes\naround them. Never call `mcp__sci-hub__*`; avoid `paper_find_oa_pdf` per the\nstanding regression note. Both are hard-excluded by the router. No dark-web \u002F\nonion provider is routed to; any `.onion` source that reaches grading is\nforce-flagged UNVERIFIED regardless of corroboration.\n\nOpenRouter is **not** a research search provider and must not replace Firecrawl,\nExa, or native Max. T0 summarization of sources **already fetched** by the\nharness MAY use the `openrouter-routing` sidecar (allowlisted free\u002Fcheap chat\ncompletion). `web` \u002F `deep_read` stay on MCP providers. Do not use `:online`\n(deprecated) or `openrouter:web_search` as a search MCP substitute.\n\n## Workflow\n\n### Step 1: Fix the scope BEFORE any fan-out\n\nEvery sub-question costs provider calls and context. Scope is decided up front,\nnot discovered halfway through a fan-out that is already too wide or too narrow.\n**Ask with `AskUserQuestion`** — a structured question the user answers by\nselecting, not a sentence buried in prose they can scroll past.\n\nRead the request and mark each of the four scope dimensions DETERMINED or OPEN:\n\n| dimension | DETERMINED when the request already states… |\n|---|---|\n| **purpose** | what the output is *for* — learning, deciding, or drafting |\n| **depth** | a sub-question count, or a time \u002F token \u002F provider budget |\n| **recency** | a timeframe, or \"latest\" versus \"established consensus\" |\n| **output** | the form — brief, comparison table, annotated bibliography, memo |\n\nThen ask **one** `AskUserQuestion` covering **only the OPEN dimensions**, at most\nfour options each. Asking about a dimension the request already settled wastes a\nturn; fanning out with one still open wastes far more than a turn.\n\n**Skip this step only when all four are DETERMINED.** That is the single\npermitted condition, and it is checkable against the request text — not a\njudgement about how impatient the user sounded.\n\n> **Why this is written as a gate.** Until 2026-10-24 this step asked for \"1-2\n> quick clarifying questions\" and then immediately granted permission to skip\n> them whenever the user sounded like they just wanted the research done. An\n> instruction followed by permission to ignore it is not an instruction, and the\n> measured result was that scope went unasked — the owner reported exactly that.\n> That clause is deleted, and it is described here rather than quoted, because a\n> sentence granting permission to skip reads as permission to skip even inside a\n> note explaining why it was removed.\n>\n> Do not reintroduce a \"they sounded in a hurry\" branch in any form. If the four\n> dimensions are determined you already skip, by the rule above. If they are not,\n> guessing is what produced fan-outs that were too wide, too narrow, or aimed at\n> the wrong output form.\n\n### Step 2: Plan the Research\n\nBreak the topic into 3-5 research sub-questions. Example:\n- Topic: \"Impact of AI on healthcare\"\n  - What are the main AI applications in healthcare today?\n  - What clinical outcomes have been measured?\n  - What are the regulatory challenges?\n  - What companies are leading this space?\n  - What's the market size and growth trajectory?\n\n### Step 2.5: Preflight (which providers are live)\n\nBefore dispatch, probe each routable provider once (a cheap tools-list or\nminimal call) and mark it live \u002F down \u002F quota-exhausted. Route only to live\nproviders; record any that were down for the Methodology section. Preflight is\nREAD-ONLY and never disturbs the live GUI IDA MCP on `:13337`. See\n`research_harness.preflight`.\n\n### Step 3: Execute Multi-Source Search (harness-routed)\n\nFor EACH sub-question, classify its capability and dispatch to the highest-ranked\nlive provider for that capability (see the Routing Table below). For high-stakes\nsub-questions, query the **top-2** providers (different indexes) so the grader\ncan cross-corroborate. Wrap every provider call in the **query-hash cache** so an\nidentical sub-question across runs is a hit, not re-burned quota.\n\n**Search strategy:**\n- Use 2-3 different keyword variations per sub-question\n- Aim for 15-30 unique sources total\n- Prioritize per the source tiers (academic\u002Fofficial > reputable news > forums)\n\n### Step 4: Deep-Read Key Sources\n\nFor the most promising URLs, fetch full content with the `deep_read` capability\n(firecrawl `firecrawl_scrape` -> exa `web_fetch_exa` -> tavily `tavily_extract`).\nRead 3-5 key sources in full; do not rely only on search snippets. Keep raw\npayloads sandboxed to disk (the cache stores them); only the derived finding\nenters the conversation.\n\n### Step 5: Synthesize and Write Report (graded + cited)\n\nGrade every source, then assemble the report with the cited-report renderer\n(`research_harness.report.render`). Template:\n\n```markdown\n# [Topic]: Research Report\n*Generated: [date] | Sources: [N] | Providers: [firecrawl, scholarly-access, ...] | Confidence: [High\u002FMedium\u002FLow]*\n*Cache: [H hits \u002F M misses] | Stale-allowed: [yes\u002Fno]*\n\n## Executive Summary\n[3-5 sentence overview]\n\n## 1. [First Major Theme]\n- Claim [1] `[A.corrob x2.2026]`\n- Claim [2] `[C.single.2024 - UNVERIFIED]`\n\n## Key Takeaways\n- [Actionable insight]\n\n## Sources\n1. [Title](url) - tier A - provider (year)\n2. ...\n\n## Methodology\nSub-questions investigated, providers routed-to, cache hit\u002Fmiss counts,\nand providers that were DOWN at preflight.\n```\n\nThe header `Confidence` is **derived** from the distribution of claim tiers, not\nhand-waved. The Methodology section honestly lists routed providers, cache\nhit\u002Fmiss, and any provider down at preflight.\n\n### Step 6: Deliver\n\n- **Short topics**: Post the full report in chat\n- **Long reports**: Post the executive summary + key takeaways, save full report to a file\n\n### Step 7: Persist to durable memory (basic-memory bridge)\n\nEvery cited report is a durable research artifact — write it to the\n`basic-memory` MCP vault so it survives context compaction and is\nsemantically recallable later, instead of being re-researched from scratch.\n\nAfter delivering, call `mcp__basic-memory__write_note` with:\n\n- **title**: `research \u003Ctopic> \u003CYYYY-MM-DD>`\n- **folder**: `research` (keeps the report findable via the same prefix)\n- **tags**: `research-report`, the confidence tier, and the providers routed-to\n- **content**: the full cited report (the `report.render` output) — the\n  graded claims `[tier.corroboration.year]` and the `## Sources` list are the\n  load-bearing part to preserve, so recall returns the evidence, not just prose.\n\nThis is a documentation convention, not harness code: the harness renders the\nreport; the agent is responsible for the `write_note` push. On a later related\nquestion, **recall first** (`mcp__basic-memory__search_notes` \u002F\n`build_context` for `research \u003Ctopic>`) before re-running the harness — a cache\nhit at the memory layer beats any provider round-trip. Skip the write only if\n`basic-memory` is unavailable or stalls (never block delivery on it).\n\n## Research Harness (M-16)\n\nA thin, stateless orchestration layer (no new MCP server, no daemon) shipped as a\nPython package at `references\u002Fresearch_harness\u002F`. Four components plus preflight:\n\n### 1. Capability to provider routing (`routing.py`)\n\nA **data-driven** table maps a capability (not a tool name) to an ordered list of\nproviders (primary first), with a source-tier prior for grading:\n\n| Capability | Ordered providers (primary first) |\n|---|---|\n| `web` | firecrawl.firecrawl_search -> perplexity.pplx_smart_query -> searxng.searxng_web_search -> exa.web_search_exa -> tavily.tavily_search |\n| `synthesis` | perplexity.pplx_smart_query -> exa.web_search_exa -> firecrawl.firecrawl_search |\n| `neural` | exa.web_search_exa -> firecrawl.firecrawl_search |\n| `academic` | scholarly-access.paper_resolve -> huggingface.paper_search |\n| `bio` | tooluniverse.find_tools -> scholarly-access.paper_resolve |\n| `code` | exa.web_search_exa -> firecrawl.firecrawl_research_search_github -> context7.query-docs |\n| `library_docs` | context7.query-docs -> exa.web_search_exa |\n| `deep_read` | firecrawl.firecrawl_scrape -> exa.web_fetch_exa -> tavily.tavily_extract |\n| `vuln` | cve-mcp.cve_lookup -> cve-mcp.cve_search -> cve-mcp.cve_kev_list |\n| `longtail` | searxng.searxng_web_search -> exa.web_search_exa |\n\n`classify_capability(subquestion)` is a cheap, conservative keyword classifier\n(keywords like cve\u002Fcvss\u002Fexploit\u002Fkev\u002F0-day\u002Frce -> vuln; paper\u002Fstudy\u002Fdoi -> academic;\ngene\u002Fprotein\u002Fdrug -> bio; repo\u002Fgithub -> code; api docs\u002Fsdk -> library_docs;\nobscure\u002Flong-tail\u002Frarely-documented -> longtail; explain\u002Fcompare\u002Fconsensus ->\nsynthesis; else web). The security-specific `vuln` rule runs first; domain rules\nwin over synthesis phrasing (synthesis is the last rule); raw link\u002Fextraction\nstays on firecrawl\u002Fexa while synthesized **cited** answers route to Perplexity.\nThe key-free additions: **searxng** (self-hosted metasearch) is the high-priority\nkey-free corroborator on `web` and the `longtail` primary; **cve-mcp** drives\n`vuln`. `resolve_providers(capability, live_servers, top_n)` returns ordered live\nproviders; Sci-Hub, the regressed `paper_find_oa_pdf`, and parked servers are\nhard-excluded.\n\n### 2. Query-hash cache (`cache.py`)\n\nSHA-256 of a normalized `{capability, provider, query, params}` envelope keys each\n`{hash}.json` entry (a direct application of `content-hash-cache-pattern` with one\nextension: **TTL**). Default cache dir `~\u002F.research-harness\u002Fcache`. Per-capability\nTTL: web\u002Fnews ~24h, code\u002Fdocs ~7d, academic\u002Fbio ~30d. Corruption or expiry == miss.\n`fetch_with_cache(...)` is the service-layer wrapper; pass `cache_enabled=False`\n(the `--no-cache` escape hatch) for \"must be current\" runs.\n\n### 3. Source-confidence grading (`grading.py`)\n\n`confidence(claim) = f(source_tier, corroboration_count, recency)`, fully\ndeterministic. Source tier = best of a domain-authority prior (.gov\u002F.edu\u002Fdoi.org\nplus the security authorities nvd.nist.gov\u002Fcisa.gov\u002Ffirst.org\u002Fosv.dev\u002Fexploit-db.com\n-> A; wikipedia\u002Fgithub\u002Fmajor-news -> B; else C) and the routing provider prior\n(scholarly-access\u002Fcontext7\u002Ftooluniverse\u002F**cve-mcp** -> A; firecrawl\u002Fexa\u002Ftavily\u002F\nhuggingface\u002F**searxng** -> B). A single source is flagged UNVERIFIED; >=2\nindependent sources are corroborated; within ~12 months boosts recency. A\ndark-web \u002F `.onion` source is **force-flagged UNVERIFIED and capped at Low**\nregardless of corroboration (`is_dark_web`). Each source gets a provenance tag\nlike `[A.corrob x2.2026]`; the report header confidence is derived from the grade\ndistribution.\n\n### 4. Cited-report output (`report.py`)\n\n`render(Report(...))` assembles findings into markdown with inline **numbered**\ncitations (`[1]`), a tiered references section, per-claim provenance tags, and a\nMethodology section reporting routed providers + cache hit\u002Fmiss + providers down\nat preflight.\n\n### Preflight (`preflight.py`)\n\n`run_preflight(probe, servers)` probes each routable server (probe injected,\nread-only) and returns live\u002Fdown\u002Fquota statuses; `live_servers(...)` feeds the\nrouter. `harness.plan_research(subquestions, statuses, top_n)` is the pure glue\nthat ties preflight + routing into a research plan.\n\n### Using the package\n\n```python\nimport sys\nsys.path.insert(0, \"references\")  # or install the package\nfrom research_harness import (\n    run_preflight, plan_research, fetch_with_cache,\n    Source, grade_source, build_citations, render,\n)\n\nstatuses = run_preflight(my_probe)              # which MCPs are live\nplan = plan_research(subquestions, statuses)    # route each sub-question\n# ... for each decision, call the live provider through fetch_with_cache(...)\n# ... grade each Source with grade_source(...), then render(Report(...))\n```\n\nRun the tests: `cd references && python -m pytest -q` (pure logic, fake provider\nresponses, no live network).\n\n## Parallel Research with Subagents\n\nFor broad topics, use Claude Code's Task tool to parallelize:\n\n```\nLaunch 3 research agents in parallel:\n1. Agent 1: Research sub-questions 1-2\n2. Agent 2: Research sub-questions 3-4\n3. Agent 3: Research sub-question 5 + cross-cutting themes\n```\n\nEach agent searches, reads sources, and returns findings. The main session\nsynthesizes into the final report. Pass the routing table + grading rubric into\neach agent's prompt so grades stay consistent.\n\n## Quality Rules\n\n1. **Every claim needs a source.** No unsourced assertions.\n2. **Cross-reference.** If only one source says it, the grader flags it UNVERIFIED.\n3. **Recency matters.** Prefer sources from the last 12 months; the grader boosts them.\n4. **Acknowledge gaps.** The Methodology section lists providers that were down.\n5. **No hallucination.** If you don't know, say \"insufficient data found.\"\n6. **Separate fact from inference.** Label estimates, projections, and opinions clearly.\n\n## Examples\n\n```\n\"Research the current state of nuclear fusion energy\"\n\"Deep dive into Rust vs Go for backend services in 2026\"\n\"Research the best strategies for bootstrapping a SaaS business\"\n\"What's happening with the US housing market right now?\"\n\"Investigate the competitive landscape for AI code editors\"\n```\n",{"name":5,"description":7},"main","a298c929b6cbd662e1fce54302ce520d5ceea1a5",".agents\u002Fskills\u002Fdeep-research","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain","https:\u002F\u002Fgithub.com\u002FPrekzursil","2026-11-02 14:30:57",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add Prekzursil\u002Fagent-skills-toolchain --skill deep-research",{"tool":64,"command":65},"bunx","bunx skills add Prekzursil\u002Fagent-skills-toolchain --skill deep-research",{"tool":67,"command":68},"pnpm","pnpm dlx skills add Prekzursil\u002Fagent-skills-toolchain --skill deep-research","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002FSKILL.md",true,[72,78,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002F.gitignore","REFERENCE","参考文档",47,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002F.gitignore",{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Fconftest.py","SCRIPT","脚本",146,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Fconftest.py",{"path":85,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Fresearch_harness\u002F__init__.py",2189,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Fresearch_harness\u002F__init__.py",{"path":89,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Fresearch_harness\u002Facademic.py",8043,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Fresearch_harness\u002Facademic.py",{"path":93,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":94,"sourceHtmlUrl":95},"references\u002Fresearch_harness\u002Fcache.py",5529,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Fresearch_harness\u002Fcache.py",{"path":97,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":98,"sourceHtmlUrl":99},"references\u002Fresearch_harness\u002Fcalibration.py",3268,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Fresearch_harness\u002Fcalibration.py",{"path":101,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":102,"sourceHtmlUrl":103},"references\u002Fresearch_harness\u002Fclaims.py",8378,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Fresearch_harness\u002Fclaims.py",{"path":105,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":106,"sourceHtmlUrl":107},"references\u002Fresearch_harness\u002Fgrading.py",6691,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Fresearch_harness\u002Fgrading.py",{"path":109,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":110,"sourceHtmlUrl":111},"references\u002Fresearch_harness\u002Fharness.py",2239,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Fresearch_harness\u002Fharness.py",{"path":113,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":114,"sourceHtmlUrl":115},"references\u002Fresearch_harness\u002Fpreflight.py",2546,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Fresearch_harness\u002Fpreflight.py",{"path":117,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":118,"sourceHtmlUrl":119},"references\u002Fresearch_harness\u002Freport.py",4779,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Fresearch_harness\u002Freport.py",{"path":121,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":122,"sourceHtmlUrl":123},"references\u002Fresearch_harness\u002Frouting.py",13584,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Fresearch_harness\u002Frouting.py",{"path":125,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":126,"sourceHtmlUrl":127},"references\u002Ftests\u002Ftest_academic.py",3353,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Ftests\u002Ftest_academic.py",{"path":129,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":130,"sourceHtmlUrl":131},"references\u002Ftests\u002Ftest_cache.py",3832,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Ftests\u002Ftest_cache.py",{"path":133,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":134,"sourceHtmlUrl":135},"references\u002Ftests\u002Ftest_calibration.py",1820,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Ftests\u002Ftest_calibration.py",{"path":137,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":138,"sourceHtmlUrl":139},"references\u002Ftests\u002Ftest_claims.py",4052,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Ftests\u002Ftest_claims.py",{"path":141,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":142,"sourceHtmlUrl":143},"references\u002Ftests\u002Ftest_grading.py",4688,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Ftests\u002Ftest_grading.py",{"path":145,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":146,"sourceHtmlUrl":147},"references\u002Ftests\u002Ftest_harness.py",3464,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Ftests\u002Ftest_harness.py",{"path":149,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":150,"sourceHtmlUrl":151},"references\u002Ftests\u002Ftest_report.py",3069,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Ftests\u002Ftest_report.py",{"path":153,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":154,"sourceHtmlUrl":155},"references\u002Ftests\u002Ftest_routing.py",7715,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Ftests\u002Ftest_routing.py",{"path":157,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":158,"sourceHtmlUrl":159},"references\u002Ftests\u002Ftest_skill_consistency.py",1213,"https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fdeep-research\u002Freferences\u002Ftests\u002Ftest_skill_consistency.py",[161,182,209,236,250,266],{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":167,"publishedAt":47},"01M6DF7D7478R55P46REYH4QAC","clarify-requirements","Resolve genuine pre-execution ambiguity by scanning repo context, generating 1-6 grounded options, and asking 1-3 focused questions via AskUserQuestion. NOT for mid-task use (injection risk); NOT when the goal is already unambiguous; use to disambiguate vague prompts before any file edits.","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Fworkspace-hooks\u002Fskills\u002Fclarify-requirements\u002FSKILL.md",[],[168,169,170,171,172,173,174,175,176,40,177,178,179,180,181],"clarify requirements","clarify","requirements","risk","options","task","prompts","goal","scanning","context","repo","injection","execution","file",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":189,"publishedAt":47},"01M6DF79CA4BHJS66J8EZDBPWJ","openmm-md","Run FREE, open-source, Windows-native GPU molecular dynamics via the openmm-md MCP (OpenMM + CUDA on the local NVIDIA GPU). Use for protein \u002F protein-ligand MD when you want a free stack or are on Windows without a Schrodinger license. Covers the full workflow (prepare, solvate, minimize, equilibrate, production, analyze, mmgbsa) AND an honest decision guide vs Schrodinger Desmond, including how to run Desmond legitimately on Linux or a cloud GPU with a real license. This is a deliberately LESSER free alternative and does NOT replace the schrodinger MCP tools. Do NOT use it to pick a free tool when a validated FEP+, WaterMap, IFD-MD, or Prime MM-GBSA result is actually required.","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Fmcp\u002Fopenmm-md-mcp\u002Fskill\u002Fopenmm-md\u002FSKILL.md",[188],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[190,191,192,193,194,195,196,197,198,199,200,201,202,203,40,204,205,206,207,208],"openmm md","how","decision","pick","linux","analyze","tool","stack","open","NVIDIA","gpu","license","workflow","windows","free","molecular dynamics","local","do","MCP",{"skillNo":210,"name":211,"nameZh":6,"description":212,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":213,"categories":214,"keywords":221,"publishedAt":47},"01M6DF76C1MG85VEWP8VZCBNMN","visual-review","Take screenshots of web pages and UI using Playwright for visual review and iteration","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fvisual-review\u002FSKILL.md",[215,218],{"categoryNo":216,"categoryName":217,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":219,"categoryName":220,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[222,223,224,225,226,227,228,229,230,231,191,232,233,234,235],"review","visual","visual review","pages","web","false","iteration","take","check","slides","ui","screenshot","playwright","screenshots",{"skillNo":237,"name":238,"nameZh":6,"description":239,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":240,"categories":241,"keywords":242,"publishedAt":47},"01M6DF73AQVCBZKEN0YXEX9FXP","status","Diagnostic status report — shows metaswarm installation state, project setup, and potential issues","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fstatus\u002FSKILL.md",[],[238,243,244,245,246,247,248,249],"setup","report","project","installation","project setup","issues","state",{"skillNo":251,"name":252,"nameZh":6,"description":253,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":254,"categories":255,"keywords":257,"publishedAt":47},"01M6DF6X6C2XB0P6GX76P7TTYV","start","Use when starting work on any task, when the user mentions metaswarm, or when the user wants to begin tracked development work","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fstart\u002FSKILL.md",[256],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[252,258,173,259,260,261,40,262,263,264,265],"start issue","issue","ready","work on issue","user","work","work on","development",{"skillNo":267,"name":243,"nameZh":6,"description":268,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":269,"categories":270,"keywords":271,"publishedAt":47},"01M6DF6QMJ9AJKFKHHKRT005PQ","Interactive project setup — detects your project, configures metaswarm, writes project-local files","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fsetup\u002FSKILL.md",[],[243,245,206,272,247,273],"files","interactive"]