Not in the top 1,000 by GitHub stars

blessonism/search-skills

skills for deep search — multi-source search, content extraction, and structured research reports.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

content-extract/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Local scripts → After Local scripts

7de32fac3310 → 7de32fac3310

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Local scripts

First observation → 7de32fac3310

No earlier version was observed for comparison.

Compare on GitHub

mineru-extract/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

7de32fac3310 → 7de32fac3310

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 7de32fac3310

No earlier version was observed for comparison.

Compare on GitHub

search-layer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

7de32fac3310 → 7de32fac3310

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 7de32fac3310

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 7de32fac3310f3d521962562033476e9ce7074db

438GitHub stars
0stars in 7 days
3skills in this repository
0commits in 30 days

Heat

0.3
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Oct 25, 2026438

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

content-extract

When your agent uses it

Robust URL-to-Markdown extraction for OpenClaw workflows. Use when the user wants to "extract/summarize/convert a webpage to markdown" (especially WeChat mp.weixin.qq.com) and web_fetch/browser is blocked or messy. Uses a cheap probe via web_fetch first, then falls back to the official MinerU API (via the local mineru-extract skill) and returns a traceable result contract with source links.

What it loads into context

Frontmatter

95 tokens

Always available to the agent

SKILL.md

1,012 tokens

When the skill is activated

Reference documents

474 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. 工作流(Decision Tree)
  2. MinerU 调用(给 agent 的确定性脚本)
  3. 交付规范(强制)
  4. 本 skill 自身不做什么
  5. References

Scripts executed separately

  • scripts/content_extract.py

Files

  • SKILL.mdcore3,784 bytes
  • SKILL.mdcore3,784 bytes
  • SKILL.mdcore3,784 bytes
  • references/domain-whitelist.mddoc607 bytes
  • references/heuristics.mddoc1,308 bytes
  • scripts/content_extract.pyruns4,828 bytes
Read SKILL.md

# content-extract — 上层内容解析入口(MCP 语义对齐,但不跑 MCP Server)

目标:把“给我一个 URL → 产出可读 Markdown + 可追溯入口”变成一个**统一入口**,供后续所有业务 skill(github-explorer、写作类 skills、日报等)复用。

核心原则(来自你发的 Excel Skill 拆解文章的启发):

- **行为规约层**:永远给出可追溯入口(原文 URL + 解析产物路径/链接),绝不编造来源。
- **Token 探针**:先用低成本 probe 判断可不可以直接抓;不行再走重解析(MinerU)。
- **反弹机制**:失败时返回“下一步动作建议”,而不是一堆异常栈。

## 工作流(Decision Tree)

输入:`url`
View the complete source on GitHub

Skills included

  • content-extract
  • mineru-extract
  • search-layer

Repository facts

License
MIT
Created
Feb 8, 2026
Last pushed
Oct 22, 2026
Forks
32
Open issues
2
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 6, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 15 notes
  • content-extract/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • content-extract/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • mineru-extract/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • mineru-extract/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • mineru-extract/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • mineru-extract/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • mineru-extract/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • search-layer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • search-layer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • search-layer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • search-layer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • search-layer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • search-layer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • search-layer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • search-layer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 154 signals by file

content-extract/SKILL.md

  • Network accessline 90
    - MinerU API docs: https://mineru.net/apiManage/docs
  • Network accessline 91
    - MinerU output files: https://opendatalab.github.io/MinerU/reference/output_files/

content-extract/scripts/content_extract.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 44
    [Credential-related source omitted]

mineru-extract/.env.example

  • Network accessline 1
    # MinerU API credentials # Get your token from https://mineru.net/apiManage
  • Network accessline 2
    # Get your token from https://mineru.net/apiManage
  • Network accessline 4
    MINERU_API_BASE=https://mineru.net

mineru-extract/SKILL.md

  • Network accessline 31
    [Credential-related source omitted]
  • Access to secretsline 31
    [Credential-related source omitted]
  • Network accessline 33
    MINERU_API_BASE=https://mineru.net
  • Network accessline 94
    - MinerU API docs: https://mineru.net/apiManage/docs
  • Network accessline 95
    - MinerU output files: https://opendatalab.github.io/MinerU/reference/output_files/

mineru-extract/scripts/mineru_extract.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 11
    [Credential-related source omitted]
  • Access to secretsline 12
    [Credential-related source omitted]
  • Network accessline 17
    Optional: - MINERU_API_BASE (default: https://mineru.net)
  • Network accessline 18
    - MINERU_API_BASE (default: https://mineru.net)
  • Access to secretsline 47
    [Credential-related source omitted]
  • Access to secretsline 48
    [Credential-related source omitted]
  • Access to secretsline 53
    [Credential-related source omitted]
  • Access to secretsline 54
    [Credential-related source omitted]
  • Access to secretsline 58
    [Credential-related source omitted]
  • Network accessline 72
    req = urllib.request.Request(url=url, data=data, method=method.upper(), headers=hdrs)
  • Network accessline 73
    try:         with urllib.request.urlopen(req, timeout=timeout) as resp:             raw = resp.read()
  • Network accessline 74
    with urllib.request.urlopen(req, timeout=timeout) as resp:
  • Network accessline 90
    if headers:         hdrs.update(headers)     req = urllib.request.Request(url=url, method="GET", headers=hdrs)
  • Network accessline 91
    hdrs.update(headers)     req = urllib.request.Request(url=url, method="GET", headers=hdrs)     try:
  • Network accessline 92
    req = urllib.request.Request(url=url, method="GET", headers=hdrs)
  • Network accessline 93
    try:         with urllib.request.urlopen(req, timeout=timeout) as resp:             return resp.read()
  • Network accessline 94
    with urllib.request.urlopen(req, timeout=timeout) as resp:
  • Network accessline 199
    ap.add_argument("source", help="URL to parse (supports HTML/PDF/Office/images).")     ap.add_argument("--model", dest="model_version", default=None, help="pipeline | vlm | MinerU-HTML (required for HTML).")     ap.add_argument("--api-base",
  • Network accessline 200
    ap.add_argument("--model", dest="model_version", default=None, help="pipeline | vlm | MinerU-HTML (required for HTML).")     ap.add_argument("--api-base", default=os.environ.get("MINERU_API_BASE", "https://mineru.net"))     ap.add_argument(
  • Network accessline 201
    [Credential-related source omitted]
  • Access to secretsline 201
    [Credential-related source omitted]
  • Access to secretsline 218
    [Credential-related source omitted]

mineru-extract/scripts/mineru_parse_documents.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 13
    [Credential-related source omitted]
  • Network accessline 15
    Env - MINERU_TOKEN (required): bearer token - MINERU_API_BASE (optional): default https://mineru.net
  • Network accessline 17
    - MINERU_API_BASE (optional): default https://mineru.net
  • Access to secretsline 39
    [Credential-related source omitted]
  • Access to secretsline 58
    [Credential-related source omitted]
  • Access to secretsline 59
    [Credential-related source omitted]
  • Access to secretsline 64
    [Credential-related source omitted]
  • Access to secretsline 65
    [Credential-related source omitted]
  • Network accessline 77
    req = urllib.request.Request(url=url, data=data, method=method.upper(), headers=hdrs)
  • Network accessline 78
    try:         with urllib.request.urlopen(req, timeout=timeout) as resp:             raw = resp.read()
  • Network accessline 79
    with urllib.request.urlopen(req, timeout=timeout) as resp:
  • Network accessline 95
    if headers:         hdrs.update(headers)     req = urllib.request.Request(url=url, method="GET", headers=hdrs)
  • Network accessline 96
    hdrs.update(headers)     req = urllib.request.Request(url=url, method="GET", headers=hdrs)     try:
  • Network accessline 97
    req = urllib.request.Request(url=url, method="GET", headers=hdrs)
  • Network accessline 98
    try:         with urllib.request.urlopen(req, timeout=timeout) as resp:             return resp.read()
  • Network accessline 99
    with urllib.request.urlopen(req, timeout=timeout) as resp:
  • Access to secretsline 285
    [Credential-related source omitted]
  • Access to secretsline 289
    [Credential-related source omitted]
  • Network accessline 294
    [Credential-related source omitted]
  • Access to secretsline 294
    [Credential-related source omitted]

search-layer/SKILL.md

  • Network accessline 134
    - 当前边界:comparison 需显式对比词/判断词/3+ 子查询;exploratory 需判断/因果/对比词;status/news 需判断/因果词,不因普通多查询扩展误触发 - 暂不把 `deep-reasoning` / `outputSchema` 接进默认主路径,避免基础 search-layer 变成重型 research/synthesis 引擎 - Exa 端点默认是 `https://api.exa.ai/search`;如需自建/代理,可通过 `EX
  • Network accessline 136
    - Exa 端点默认是 `https://api.exa.ai/search`;如需自建/代理,可通过 `EXA_API_BASE`/`EXA_API_URL` 或 `~/.openclaw/credentials/search.json` 里的 `exaApiBase` 覆盖(示例:`https://exa.example.com`)
  • Access to secretsline 142
    [Credential-related source omitted]
  • Network accessline 175
    python3 search.py --extract-refs-urls "https://github.com/owner/repo/issues/123" "https://github.com/owner/repo/issues/456"
  • Network accessline 183
    python3 fetch_thread.py "https://github.com/owner/repo/issues/123" --format json
  • Network accessline 184
    python3 fetch_thread.py "https://github.com/owner/repo/issues/123" --format markdown
  • Network accessline 185
    python3 fetch_thread.py "https://github.com/owner/repo/issues/123" --extract-refs-only

search-layer/scripts/chain_tracker.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 10
    python3 chain_tracker.py \     --query "Rust async runtime performance" \     --urls "https://..." "https://..." \
  • Network accessline 11
    --query "Rust async runtime performance" \     --urls "https://..." "https://..." \     [--depth 3] [--threshold 0.5] [--max-per-level 3] [--output results.json]
  • Network accessline 12
    --urls "https://..." "https://..." \

search-layer/scripts/fetch_thread.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 71
    [Credential-related source omitted]
  • Access to secretsline 73
    [Credential-related source omitted]
  • Access to secretsline 75
    [Credential-related source omitted]
  • Network accessline 82
    # Format: https://user:token@github.com
  • Network accessline 156
    num = m.group(2)                 if repo:                     url = f"https://github.com/{repo}/issues/{num}"
  • Network accessline 157
    if repo:                     url = f"https://github.com/{repo}/issues/{num}"                     _add("issue", url, ctx)
  • Network accessline 158
    url = f"https://github.com/{repo}/issues/{num}"
  • Network accessline 162
    num = m.group(1)                 if repo_context:                     url = f"https://github.com/{repo_context}/issues/{num}"
  • Network accessline 163
    if repo_context:                     url = f"https://github.com/{repo_context}/issues/{num}"                     _add("issue", url, ctx)
  • Network accessline 164
    url = f"https://github.com/{repo_context}/issues/{num}"
  • Network accessline 169
    url_type = m.group(2)  # issues, pull, discussions                 num = m.group(3)                 full_url = f"https://github.com/{repo}/{url_type}/{num}"
  • Network accessline 170
    num = m.group(3)                 full_url = f"https://github.com/{repo}/{url_type}/{num}"                 ref_type = {"issues": "issue", "pull": "pr",
  • Network accessline 171
    full_url = f"https://github.com/{repo}/{url_type}/{num}"
  • Network accessline 177
    repo = m.group(1)                 sha = m.group(2)                 url = f"https://github.com/{repo}/commit/{sha}"
  • Network accessline 178
    sha = m.group(2)                 url = f"https://github.com/{repo}/commit/{sha}"                 _add("commit", url, ctx)
  • Network accessline 179
    url = f"https://github.com/{repo}/commit/{sha}"
  • Network accessline 183
    sha = m.group(1)                 if repo_context:                     url = f"https://github.com/{repo_context}/commit/{sha}"
  • Network accessline 184
    if repo_context:                     url = f"https://github.com/{repo_context}/commit/{sha}"                     _add("commit", url, ctx)
  • Network accessline 185
    url = f"https://github.com/{repo_context}/commit/{sha}"
  • Network accessline 189
    num = m.group(1)                 if repo_context:                     url = f"https://github.com/{repo_context}/issues/{num}"
  • Network accessline 190
    if repo_context:                     url = f"https://github.com/{repo_context}/issues/{num}"                     _add("duplicate", url, ctx)
  • Network accessline 191
    url = f"https://github.com/{repo_context}/issues/{num}"
  • Network accessline 196
    url_type = m.group(2)                 num = m.group(3)                 url = f"https://github.com/{repo}/{url_type}/{num}"
  • Network accessline 197
    num = m.group(3)                 url = f"https://github.com/{repo}/{url_type}/{num}"                 _add("duplicate", url, ctx)
  • Network accessline 198
    url = f"https://github.com/{repo}/{url_type}/{num}"
  • Network accessline 202
    num = m.group(1)                 if repo_context:                     url = f"https://github.com/{repo_context}/issues/{num}"
  • Network accessline 203
    if repo_context:                     url = f"https://github.com/{repo_context}/issues/{num}"                     _add("related", url, ctx)
  • Network accessline 204
    url = f"https://github.com/{repo_context}/issues/{num}"
  • Network accessline 244
    base = f"https://api.github.com/repos/{owner}/{repo}"
  • Network accessline 245
    headers = _gh_headers(token)     result = {         "url": f"https://github.com/{owner}/{repo}/issues/{number}",
  • Network accessline 246
    result = {         "url": f"https://github.com/{owner}/{repo}/issues/{number}",         "type": "github_issue",
  • Network accessline 247
    "url": f"https://github.com/{owner}/{repo}/issues/{number}",
  • Network accessline 271
    if issue.get("pull_request"):         result["type"] = "github_pr"         result["url"] = f"https://github.com/{owner}/{repo}/pull/{number}"
  • Network accessline 273
    result["url"] = f"https://github.com/{owner}/{repo}/pull/{number}"
  • Network accessline 375
    try:         r = _http_get(             f"https://api.github.com/repos/{owner}/{repo}/issues/{number}/timeline",
  • Network accessline 376
    r = _http_get(             f"https://api.github.com/repos/{owner}/{repo}/issues/{number}/timeline",             headers=headers,
  • Network accessline 377
    f"https://api.github.com/repos/{owner}/{repo}/issues/{number}/timeline",
  • Network accessline 396
    src_type = "pr" if source.get("pull_request") else "issue"                 if src_num:                     url = f"https://github.com/{src_repo}/{'pull' if src_type == 'pr' else 'issues'}/{src_num}"
  • Network accessline 397
    if src_num:                     url = f"https://github.com/{src_repo}/{'pull' if src_type == 'pr' else 'issues'}/{src_num}"                     result["refs"].append({
  • Network accessline 398
    url = f"https://github.com/{src_repo}/{'pull' if src_type == 'pr' else 'issues'}/{src_num}"
  • Network accessline 411
    commit = event.get("commit_id")             if commit:                 url = f"https://github.com/{repo_ctx}/commit/{commit}"
  • Network accessline 412
    if commit:                 url = f"https://github.com/{repo_ctx}/commit/{commit}"                 result["refs"].append({
  • Network accessline 413
    url = f"https://github.com/{repo_ctx}/commit/{commit}"
  • Network accessline 459
    topic_data = _http_get(             f"https://www.v2ex.com/api/topics/show.json?id={topic_id}",             headers={"User-Agent": "fetch-thread/1.0"})
  • Network accessline 460
    f"https://www.v2ex.com/api/topics/show.json?id={topic_id}",
  • Network accessline 476
    replies_data = _http_get(                 f"https://www.v2ex.com/api/replies/show.json?topic_id={topic_id}",                 headers={"User-Agent": "fetch-thread/1.0"})
  • Network accessline 477
    f"https://www.v2ex.com/api/replies/show.json?topic_id={topic_id}",                 headers={"User-Agent": "fetch-thread/1.0"})             if replies_data["status"] == 200 and replies_data["json"]:
  • Network accessline 526
    try:         data = _http_get(             f"https://hn.algolia.com/api/v1/items/{item_id}",
  • Network accessline 527
    data = _http_get(             f"https://hn.algolia.com/api/v1/items/{item_id}",             headers={"User-Agent": "fetch-thread/1.0"})
  • Network accessline 528
    f"https://hn.algolia.com/api/v1/items/{item_id}",
  • Network accessline 614
    parsed = urlparse(url)         path = parsed.path.rstrip("/")         json_url = f"https://www.reddit.com{path}.json?limit=500&depth=4"
  • Network accessline 615
    path = parsed.path.rstrip("/")         json_url = f"https://www.reddit.com{path}.json?limit=500&depth=4"     except Exception as e:
  • Network accessline 616
    json_url = f"https://www.reddit.com{path}.json?limit=500&depth=4"
  • Network accessline 947
    ap = argparse.ArgumentParser(         description="Fetch full discussion thread + extract references from a URL")     ap.add_argument("url", help="URL to fetch (GitHub issue/PR/discussion or any web page)")
  • Network accessline 948
    description="Fetch full discussion thread + extract references from a URL")     ap.add_argument("url", help="URL to fetch (GitHub issue/PR/discussion or any web page)")     ap.add_argument("--max-comments", type=int, default=100,
  • Network accessline 949
    ap.add_argument("url", help="URL to fetch (GitHub issue/PR/discussion or any web page)")
  • Network accessline 950
    ap.add_argument("--max-comments", type=int, default=100,                     help="Max comments to fetch (default 100)")     ap.add_argument("--extract-refs-only", action="store_true",
  • Network accessline 951
    help="Max comments to fetch (default 100)")

search-layer/scripts/relevance_gate.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 45
    [Credential-related source omitted]
  • Access to secretsline 47
    [Credential-related source omitted]
  • Access to secretsline 58
    [Credential-related source omitted]
  • Access to secretsline 61
    [Credential-related source omitted]
  • Access to secretsline 73
    [Credential-related source omitted]

search-layer/scripts/search.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 320
    [Credential-related source omitted]
  • Access to secretsline 322
    [Credential-related source omitted]
  • Access to secretsline 324
    [Credential-related source omitted]
  • Access to secretsline 326
    [Credential-related source omitted]
  • Access to secretsline 328
    [Credential-related source omitted]
  • Access to secretsline 330
    [Credential-related source omitted]
  • Access to secretsline 354
    [Credential-related source omitted]
  • Network accessline 397
    r = requests.post(
  • Access to secretsline 399
    [Credential-related source omitted]
  • Network accessline 580
    parsed = urlparse((base_url or "https://api.exa.ai").rstrip("/"))
  • Network accessline 595
    base_url can be either:     - "https://api.exa.ai" (default)
  • Network accessline 596
    - "https://api.exa.ai" (default)
  • Network accessline 597
    - "https://exa.example.com" (we will append /search)
  • Network accessline 598
    - "https://exa.example.com/search" (used as-is)
  • Network accessline 616
    r = requests.post(
  • Network accessline 658
    if freshness in days_map:                 payload["days"] = days_map[freshness]         r = requests.post(
  • Network accessline 659
    payload["days"] = days_map[freshness]         r = requests.post(             "https://api.tavily.com/search",
  • Network accessline 660
    r = requests.post(
  • Network accessline 661
    "https://api.tavily.com/search",
  • Access to secretsline 663
    [Credential-related source omitted]
  • Network accessline 818
    r = requests.post(

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Combined signals: 1 fact
Declared and executed: 5 facts
Signal confidence: 151 facts

and 101 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md content-extract/SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md content-extract/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md content-extract/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md content-extract/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md content-extract/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md content-extract/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.