Skill: sapereaude2014/thinktank-skill-finder (version 1.0.9)

--- name: thinktank-skill-finder description: ThinkTank Skill Finder. 面向智库研究场景的技能检索、推荐、比选与技能包安装。用户提到“找 skill”“推荐 skill”“安装 skill”“装一套研究技能”“给我配智库研究工具链”“有没有适合行业研究/学术研究/新闻监测/报告写作/画图/PDF/表格/PPT 的 skill”时使用。 --- # ThinkTank Skill Finder v1.0.9 面向智库研究场景的一站式 Skill 发现与安装工具。支持通过 ClawdHub 镜像进行检索与安装，便于中国网络环境使用；既可按需推荐和安装单个 Skill，也可直接安装智库研究核心包，以及学术研究、动态监测、分析建模等增强包。技能包安装默认使用 `restricted` 模式，不安装需要 API Key 或依赖中国以外网络的 skill；如需完整能力，可切换到 `standard` 模式。个别 skill 若中国镜像暂未收录，脚本会自动回退到 ClawdHub 官方源安装。 路径约定：本文所有路径都相对于本 skill 目录。执行前先定位 `skills/thinktank-skill-finder/`，下文用 `<skill_dir>` 表示。默认安装目标是用户目录下的 `.agents/skills/`；也就是安装到 `<user_home>/.agents/skills/<skill-name>/`，适合 Trae IDE 这类读取 `.agents/skills/` 的环境。 ## 功能 当用户问： - "有什么 skill 可以做智库研究？" - "找一个能做行业研究的 skill" - "有没有画图/报告相关 skill" - "安装智库研究技能包" ## 使用方法 ### 1. 搜索 Skills ```bash clawdhub search "<英文检索词>" ``` ### 2. 查看详情（含统计数据） ```bash clawdhub inspect <skill-name> ``` 或者直接 API 查询 stats： ```bash curl "https://clawhub.ai/api/v1/skills/<skill-name>" | jq '.skill.stats' ``` ### 3. 安装单个 Skill ```bash clawdhub install <skill-name> --no-input --registry=https://cn.clawhub-mirror.com # 如果中国镜像里没有这个 skill，再回退到官方源 clawdhub install <skill-name> --no-input ``` ### 4. 安装智库研究技能包（按 skills.csv） ```bash # 列出可用的技能包 cd <skill_dir> && python scripts/install_bundle.py --list # 安装核心包（默认 restricted 模式） cd <skill_dir> && python scripts/install_bundle.py thinktank-core # 安装多个包（自动去重） cd <skill_dir> && python scripts/install_bundle.py thinktank-core academic-research-plus # 完整安装模式 cd <skill_dir> && python scripts/install_bundle.py thinktank-core --mode standard # 如果要覆盖默认安装目录，可显式指定 clawdhub workdir/dir cd <skill_dir> && python scripts/install_bundle.py thinktank-core --workdir "D:/demo/.agents" --dir skills ``` ### 5. 验证安装 ```bash clawdhub --workdir ~/.agents --dir skills list 或者查看单个 Skill 详情： clawdhub --workdir ~/.agents --dir skills inspect <skill-name> ``` ## 工作流程 ```text 场景 A：推荐单个技能 1. 理解用户需求 2. 理解意图并改写为英文检索词 3. 搜索 ClawdHub 4. 列出相关 Skills（含下载量/stars） 5. 推荐最合适的单个 Skill，并提供安装命令 6. 如有需要，补一句引导：如果你后面还会经常做这类任务，我也可以继续帮你配一组相关技能。 7. 用户想配一组相关技能时，转入场景 B；用户只要当前单个 Skill 时，执行安装命令并完成验证 场景 B：安装技能包 1. 识别“安装技能包/全套/bundle”等意图 2. 调用脚本查看可用的技能包 3. 向用户介绍各个 bundle 的用途和适用场景，并确认：是按默认的 restricted 模式安装，还是连同需要 API Key 或依赖中国以外网络的 skill 一起安装（standard 模式） 4. 如果用户指定了一个或多个 bundle，且接受默认模式，就执行“安装智库研究技能包”里的 restricted 命令 5. 如果用户指定了一个或多个 bundle，并明确要把需要 API Key 或依赖中国以外网络的 skill 也一起装上，就执行“安装智库研究技能包”里的 standard 命令 6. 安装完成后执行验证，并简要说明当前使用的是 restricted 还是 standard 模式 ``` ## 输出格式 搜索结果应包含： - Skill 名称 - 简短描述（中文） - 下载量 - Stars 数 - 是否已安装 ## 示例 **用户**: "找一个能做行业研究的 skill" **搜索**: `clawdhub search "market research"` **推荐输出**: ```text 🔎 "行业研究" 结果： 1. market-research-agent 描述：行业研究、竞品分析和市场规模拆解 下载：5,433 | Stars: 17 | ❌ 未安装 → 推荐安装 安装命令: clawdhub install market-research-agent --no-input --registry=https://cn.clawhub-mirror.com 安装后验证: clawdhub --workdir ~/.agents --dir skills inspect market-research-agent ``` --- *帮助用户发现需要的智库研究 Skills 🔎*

path: MAINTENANCE.md
content: # ThinkTank Skill Finder 维护说明

更新时间：2026-04-14

本文档用于说明这份 Skill 清单的研究场景划分、技能包定义、主数据表字段，以及质量检查与维护规则。

## 智库研究场景

### 信息获取

对应研究任务中的资料入口阶段，重点覆盖：

- 网页抓取
- 学术检索
- 新闻与行业动态获取
- 外部证据和来源发现

### 调研执行

对应问卷、访谈、开放题整理和调研材料回收分析，重点覆盖：

- 问卷设计与发布
- 访谈提纲设计
- 访谈纪要与洞察整理
- 调研回收材料分析

### 文档处理

对应 PDF、Word、Excel、PPT 等材料的读取、编辑、转换和抽取，重点覆盖：

- PDF 处理与 OCR
- Word 文稿处理
- Excel 表格处理
- PPT 材料处理
- 多类型文档转 Markdown

### 知识整理

对应跨资料的中间整理层，重点覆盖：

- 多文档总结
- 结构化摘要
- 资料清洗
- 中间知识沉淀

### 分析建模

对应从信息走向洞察的研究阶段，重点覆盖：

- 市场分析
- 竞品分析
- 趋势分析
- SWOT 等分析框架
- 数据分析

### 报告输出

对应最终成果交付阶段，重点覆盖：

- Word 报告成稿
- PPT 汇报材料
- 结论提炼
- 政策建议或咨询式表达

### 可视化

对应研究框架图、流程图、架构图和信息图表达，重点覆盖：

- draw.io 图表
- Mermaid 图表
- Excalidraw 草图
- 信息图

## Bundle 定义

### `thinktank-core`

智库研究核心包。覆盖信息获取、文档处理、分析和基础交付，是默认主力技能包。

### `academic-research-plus`

学术研究增强包。用于补强 arXiv、Google Scholar、论文精读和论文对比等学术研究场景。

### `monitoring-and-insight`

动态监测增强包。用于新闻跟踪、趋势观察，以及补充搜索与网页抓取等持续监测类任务。

### `analysis-modeling-plus`

分析建模增强包。用于市场分析、商业分析框架、SWOT 和数据分析等研究建模任务。

### `delivery-plus`

材料转换与展示增强包。用于处理非常规输入材料和展示化输出，比如扫描版 PDF 转 Word、文章转信息图。

## `skills.csv` 字段说明

- `bundle_id`：所属技能包；不保留在正式清单中的条目留空
- `slug`：Skill slug
- `title`：Skill 标题
- `keep`：是否保留在当前正式清单中，取值为 `yes` 或 `no`
- `restricted_keep`：是否可进入默认的 `restricted` 安装模式，取值为 `yes` 或 `no`
- `primary_stage`：主流程阶段
- `dependencies`：主要使用前提、外部依赖或平台绑定情况
- `downloads`：下载量
- `stars`：收藏或点赞量
- `installs_current`：当前安装量
- `checked_at`：最近检查日期
- `reason`：当前保留或不保留的简要原因
- `review_note`：质量检查摘要

## 质量检查逻辑

质量检查不只看 ClawdHub 排名和下载量，更看下面 4 个维度：

1. 包内容是否完整
   - 是否只有 `SKILL.md`
   - 是否带 `scripts/`、`README.md`、`references/`、`package.json` 等真实落地内容
2. 使用门槛是否可接受
   - 是否依赖 API Key、登录、桌面 CLI、浏览器网页或外部服务
   - 是否存在明确价格、免费次数限制、调用计费
   - 是否强绑定某个平台、某个机构系统或特定账号体系
   - 是否依赖中国以外网络或平台才能发挥核心能力
3. 名称与实际能力是否一致
   - 名称是否容易让人误判
   - 实际上是工具能力、方法模板，还是外部服务包装
4. 平台验证度是否足够
   - `downloads`、`stars`、`installs_current` 作为辅助判断
   - 只作为加减分项，不单独决定去留

## 维护规则

- 新增 skill 时，直接在 `skills.csv` 追加一行
- 复查 skill 时，更新同一行，不新增重复记录
- bundle 调整时，只改 `bundle_id`
- 质量结论调整时，只改 `keep`、`restricted_keep`、`reason`、`review_note`
- 如果某个 skill `keep=no`，原则上 `bundle_id` 也应清空，避免和正式技能包混淆
- `restricted` 模式的含义是：默认不安装需要 API Key 或依赖中国以外网络的 skill
- `dependencies` 继续保留给人阅读；脚本过滤只读取 `keep` 和 `restricted_keep`


path: scripts/install_bundle.py
content: #!/usr/bin/env python3
"""
Install skill bundles from skills.csv.
"""
import argparse
import csv
import os
import shutil
import subprocess
import sys
from pathlib import Path
from typing import Dict, List, Set, Tuple


BUNDLE_INFO: List[Dict[str, str]] = [
    {
        "id": "thinktank-core",
        "name": "智库研究核心包",
        "purpose": "覆盖信息获取、文档处理、分析和基础交付，是默认主力技能包。",
    },
    {
        "id": "academic-research-plus",
        "name": "学术研究增强包",
        "purpose": "用于补强 arXiv、Google Scholar、论文精读和论文对比等学术研究场景。",
    },
    {
        "id": "monitoring-and-insight",
        "name": "动态监测增强包",
        "purpose": "用于新闻跟踪、趋势观察，以及补充搜索与网页抓取等持续监测类任务。",
    },
    {
        "id": "analysis-modeling-plus",
        "name": "分析建模增强包",
        "purpose": "用于市场分析、商业分析框架、SWOT 和数据分析等研究建模任务。",
    },
    {
        "id": "delivery-plus",
        "name": "材料转换与展示增强包",
        "purpose": "用于处理非常规输入材料和展示化输出，比如扫描版 PDF 转 Word、文章转信息图。",
    },
]

MODE_INFO: Dict[str, str] = {
    "restricted": "默认模式：不安装需要 API Key 或依赖中国以外网络的 skill。",
    "standard": "完整模式：安装 bundle 中全部 keep=yes 的 skill。",
}

REQUIRED_COLUMNS = {
    "bundle_id",
    "slug",
    "keep",
    "restricted_keep",
}


def load_skills(csv_file: Path) -> List[dict]:
    """Load and parse the skills.csv configuration."""
    if not csv_file.exists():
        print(f"Error: {csv_file} not found", file=sys.stderr)
        sys.exit(1)

    with csv_file.open("r", encoding="utf-8-sig", newline="") as f:
        reader = csv.DictReader(f)
        fieldnames = set(reader.fieldnames or [])
        missing = REQUIRED_COLUMNS - fieldnames
        if missing:
            print(
                f"Error: {csv_file} is missing required columns: {', '.join(sorted(missing))}",
                file=sys.stderr,
            )
            sys.exit(1)
        return list(reader)


def is_keep(row: dict) -> bool:
    return row.get("keep", "").strip().lower() in {"yes", "true", "1"}


def is_restricted_keep(row: dict) -> bool:
    value = row.get("restricted_keep", "").strip().lower()
    if value not in {"yes", "no", "true", "false", "1", "0"}:
        slug = row.get("slug", "<unknown>")
        print(
            f"Error: invalid restricted_keep value for {slug}: {row.get('restricted_keep', '')}",
            file=sys.stderr,
        )
        sys.exit(1)
    return value in {"yes", "true", "1"}


def bundle_meta(bundle_id: str) -> Dict[str, str] | None:
    for bundle in BUNDLE_INFO:
        if bundle["id"] == bundle_id:
            return bundle
    return None


def command_exists(command: str) -> bool:
    return resolve_command(command) is not None


def resolve_command(command: str) -> str | None:
    resolved = shutil.which(command)
    if resolved:
        return resolved

    probe_cmd = f"where {command}" if os.name == "nt" else f"command -v {command}"
    probe = subprocess.run(
        probe_cmd,
        shell=True,
        text=True,
        capture_output=True,
    )
    if probe.returncode != 0:
        return None

    for line in probe.stdout.splitlines():
        candidate = line.strip()
        if candidate:
            return candidate
    return None


def powershell_quote(value: str) -> str:
    return "'" + value.replace("'", "''") + "'"


def run_cli_command(
    command: str,
    args: List[str],
    cwd: Path | None = None,
) -> subprocess.CompletedProcess[str]:
    if os.name == "nt":
        shell_path = resolve_command("pwsh") or resolve_command("powershell")
        if not shell_path:
            print(
                "Error: no PowerShell executable found to run CLI commands on Windows.",
                file=sys.stderr,
            )
            sys.exit(1)

        command_expr = "& " + " ".join(powershell_quote(part) for part in [command, *args])
        return subprocess.run(
            [shell_path, "-NoProfile", "-Command", command_expr],
            text=True,
            encoding="utf-8",
            errors="replace",
            capture_output=True,
            cwd=str(cwd) if cwd else None,
        )

    shell_path = resolve_command("bash") or resolve_command("sh")
    if not shell_path:
        print(
            "Error: no bash/sh executable found to run CLI commands.",
            file=sys.stderr,
        )
        sys.exit(1)

    import shlex
    command_expr = " ".join(shlex.quote(part) for part in [command, *args])
    return subprocess.run(
        [shell_path, "-lc", command_expr],
        text=True,
        encoding="utf-8",
        errors="replace",
        capture_output=True,
        cwd=str(cwd) if cwd else None,
    )


def combined_output(result: subprocess.CompletedProcess[str]) -> str:
    return "\n".join(part for part in [result.stdout, result.stderr] if part).strip()


def default_install_workdir() -> Path:
    return Path.home() / ".agents"


def resolve_install_target(workdir: str, skills_dir: str) -> Tuple[Path, str, Path]:
    workdir_path = Path(workdir).expanduser().resolve()
    skills_dir_norm = skills_dir.strip().replace("\\", "/").strip("/")
    if not skills_dir_norm:
        print("Error: install dir must not be empty.", file=sys.stderr)
        sys.exit(1)

    install_path = workdir_path.joinpath(*skills_dir_norm.split("/"))
    return workdir_path, skills_dir_norm, install_path


def list_bundles(rows: List[dict]) -> None:
    """Print available bundles with their descriptions."""
    print("Available bundles:")
    print(f"Default mode: restricted")
    print(f"  {MODE_INFO['restricted']}")
    print(f"  如需完整安装，可使用 --mode standard")
    print()
    for bundle in BUNDLE_INFO:
        bundle_id = bundle["id"]
        standard_count = sum(
            1
            for row in rows
            if is_keep(row) and row.get("bundle_id", "").strip() == bundle_id
        )
        restricted_count = sum(
            1
            for row in rows
            if is_keep(row)
            and is_restricted_keep(row)
            and row.get("bundle_id", "").strip() == bundle_id
        )
        print(
            f"  - {bundle_id} | {bundle['name']} "
            f"(restricted {restricted_count} / standard {standard_count})"
        )
        print(f"    {bundle['purpose']}")


def get_bundle_skills(rows: List[dict], bundle_id: str, mode: str) -> List[str]:
    """Get skill slugs for a specific bundle under the selected mode."""
    skills = [
        row["slug"].strip()
        for row in rows
        if is_keep(row)
        and row.get("bundle_id", "").strip() == bundle_id
        and row.get("slug")
        and (mode == "standard" or is_restricted_keep(row))
    ]
    return skills


def bundle_exists(bundle_id: str) -> bool:
    return bundle_meta(bundle_id) is not None


def collect_skills(rows: List[dict], bundle_ids: List[str], mode: str) -> Tuple[List[str], List[str]]:
    """Collect and deduplicate skills from multiple bundles."""
    seen: Set[str] = set()
    skills: List[str] = []
    empty_bundles: List[str] = []

    for bundle_id in bundle_ids:
        if not bundle_exists(bundle_id):
            print(f"Error: Unknown bundle: {bundle_id}", file=sys.stderr)
            print(file=sys.stderr)
            list_bundles(rows)
            sys.exit(1)

        bundle_skills = get_bundle_skills(rows, bundle_id, mode)
        if not bundle_skills:
            empty_bundles.append(bundle_id)
            continue

        for slug in bundle_skills:
            if slug not in seen:
                seen.add(slug)
                skills.append(slug)

    return skills, empty_bundles


def install_skills(skills: List[str], registry: str, workdir: str, skills_dir: str) -> None:
    """Install skills using clawdhub CLI."""
    if not skills:
        print("Error: No skill slugs found for the selected bundle(s).", file=sys.stderr)
        sys.exit(1)

    if not command_exists("clawdhub"):
        print(
            "Error: clawdhub command not found. Please install clawdhub CLI first.",
            file=sys.stderr,
        )
        sys.exit(1)

    workdir_path, skills_dir_norm, install_path = resolve_install_target(workdir, skills_dir)
    workdir_path.mkdir(parents=True, exist_ok=True)
    install_path.mkdir(parents=True, exist_ok=True)

    print(f"Install target: {install_path}")
    print("Skills to install:")
    for slug in skills:
        print(f"  - {slug}")
    print()

    for slug in skills:
        print(f"Installing {slug}...")
        result = run_cli_command(
            "clawdhub",
            [
                "--workdir",
                str(workdir_path),
                "--dir",
                skills_dir_norm,
                "install",
                slug,
                "--no-input",
                f"--registry={registry}",
            ],
            cwd=workdir_path,
        )
        if result.returncode == 0:
            stdout = combined_output(result)
            if stdout:
                print(stdout)
            continue

        output = combined_output(result)
        already_installed = "Already installed:" in output
        if already_installed:
            print(output)
            print(f"Skipping {slug}; already installed.")
            continue

        not_found = "SkillsHubNotFound" in output or f"skill not found: {slug}" in output
        can_fallback = registry == "https://cn.clawhub-mirror.com" and not_found

        if can_fallback:
            print(f"Mirror missing {slug}; falling back to clawdhub official registry...")
            fallback_result = run_cli_command(
                "clawdhub",
                [
                    "--workdir",
                    str(workdir_path),
                    "--dir",
                    skills_dir_norm,
                    "install",
                    slug,
                    "--no-input",
                    "--registry=https://clawhub.ai",
                ],
                cwd=workdir_path,
            )
            if fallback_result.returncode == 0:
                fallback_output = combined_output(fallback_result)
                if fallback_output:
                    print(fallback_output)
                continue

            print(combined_output(fallback_result), file=sys.stderr)
            print(
                f"Error installing {slug}: official-registry fallback failed with exit code {fallback_result.returncode}.",
                file=sys.stderr,
            )
            sys.exit(1)

        if output:
            print(output, file=sys.stderr)
        print(
            f"Error installing {slug}: clawdhub install failed with exit code {result.returncode}.",
            file=sys.stderr,
        )
        sys.exit(1)


def main() -> None:
    parser = argparse.ArgumentParser(
        description="Install skill bundles from skills.csv",
        formatter_class=argparse.RawDescriptionHelpFormatter,
    )
    parser.add_argument("bundles", nargs="*", help="Bundle IDs to install")
    parser.add_argument("--list", action="store_true", help="List available bundles")
    parser.add_argument(
        "--mode",
        choices=["restricted", "standard"],
        default="restricted",
        help="Install mode (default: restricted)",
    )
    parser.add_argument("--registry", default="https://cn.clawhub-mirror.com", help="Registry URL")
    parser.add_argument(
        "--workdir",
        default=str(default_install_workdir()),
        help="ClawdHub workdir (default: ~/.agents)",
    )
    parser.add_argument(
        "--dir",
        default="skills",
        help="Skills directory relative to --workdir (default: skills)",
    )

    args = parser.parse_args()

    script_dir = Path(__file__).parent
    skill_dir = script_dir.parent
    csv_file = skill_dir / "skills.csv"
    rows = load_skills(csv_file)

    if args.list:
        list_bundles(rows)
        return

    if not args.bundles:
        parser.print_help()
        print()
        list_bundles(rows)
        sys.exit(1)

    print(f"Selected bundles: {' '.join(args.bundles)}")
    print(f"Install mode: {args.mode}")
    print(f"  {MODE_INFO[args.mode]}")
    workdir_path, skills_dir_norm, install_path = resolve_install_target(args.workdir, args.dir)
    print(f"Install destination: {install_path}")
    skills, empty_bundles = collect_skills(rows, args.bundles, args.mode)

    for bundle_id in empty_bundles:
        print(
            f"Note: {bundle_id} has no installable skills under mode={args.mode}.",
            file=sys.stderr,
        )

    if not skills:
        print(
            f"Error: none of the selected bundles have installable skills under mode={args.mode}.",
            file=sys.stderr,
        )
        sys.exit(1)

    install_skills(skills, args.registry, str(workdir_path), skills_dir_norm)


if __name__ == "__main__":
    main()


path: skills.csv
content: bundle_id,slug,title,keep,restricted_keep,primary_stage,dependencies,downloads,stars,installs_current,checked_at,reason,review_note
academic-research-plus,arxiv-watcher,ArXiv Watcher,yes,no,information_acquisition,公共 API,9585,9,111,2026-04-08,如果研究涉及大模型、算力、算法前沿，ArXiv 监测仍然是高价值入口，适合作为学术包中的轻量前沿跟踪条目。,已实装检查；带脚本；直接调用 ArXiv API；能力与名称一致；但核心依赖 arXiv，按当前 restricted 口径视为依赖中国以外网络。
academic-research-plus,google-scholar-search-skill,Google Scholar Search Skill,yes,no,information_acquisition,网页抓取/爬取,820,1,3,2026-04-08,Google Scholar 方向可选项不多，这个条目是相对更完整的候选。,已实装检查；带 Python 脚本和 requirements.txt；本质是 Google Scholar 爬取方案，按当前 restricted 口径视为依赖中国以外网络。
academic-research-plus,paper-parse,Paper Parse,yes,yes,knowledge_structuring,需要论文 PDF 或 URL,2992,7,17,2026-04-14,适合作为论文精读与结构化拆解能力，能补强学术研究包里“找到论文之后怎么快速吃透”的环节。,已实装检查；带双模报告模板；要求先抽全文再生成 Part A/Part B 两部分研读报告；更适合作为论文解析补位项，不替代检索类 skill。
academic-research-plus,research-paper-compare,Research Paper Compare,yes,yes,analysis_modeling,需要论文全文,172,1,1,2026-04-08,对比分析是高价值研究动作，这个方向值得保留。,已实装检查；方法约束清楚；强调必须获取全文后再比较；适合作为高价值论文对比技能。
academic-research-plus,academic-research-hub,Academic Research Hub,yes,no,information_acquisition,本地 Python 与外部检索工作流,5200,7,49,2026-04-14,多源学术检索能力更强，适合作为学术研究包里的主力检索条目。,已实装检查；带 scripts 和 references；覆盖 arXiv、PubMed、Semantic Scholar、Google Scholar 与 PDF 下载/引文导出；其中 arXiv、Semantic Scholar、Google Scholar 按当前 restricted 口径视为依赖中国以外网络，因此 restricted_keep=no。
analysis-modeling-plus,afrexai-swot-analyzer,SWOT Analyzer,yes,yes,analysis_modeling,分析框架，可配合检索,832,2,5,2026-04-08,适合作为固定分析模板型技能，尤其是策略部分。,已实装检查；更像高质量 SWOT 模板，适合分析建模增强包。
analysis-modeling-plus,competitor-analysis-report,Competitor Analysis Report,yes,yes,analysis_modeling,外部检索工作流,1034,0,3,2026-04-09,竞对研究是常见智库任务，这个条目直接面向结构化竞品报告产出，适合补回分析建模包。,已实装检查；提供完整竞对报告框架、矩阵、SWOT 和建议结构；更像高质量研究模板，需结合公开资料检索使用。
analysis-modeling-plus,data-analysis,Data Analysis,yes,yes,analysis_modeling,无,25032,84,299,2026-04-13,数据分析与可视化是研究建模的重要补充，这个条目质量明显高于此前的数据分析候选，值得纳入。,已实装检查；带 metric-contracts、chart-selection、decision-briefs 等参考文件；更像成熟的数据分析方法框架，不是空壳或收费服务。
analysis-modeling-plus,mckinsey-research,McKinsey Research,yes,yes,analysis_modeling,外部检索工作流,3187,8,19,2026-04-13,适合补强行业研究、竞争分析、市场进入和战略分析等高阶研究建模任务。,已实装检查；带 README、模板、参考资料和 12 个分析提示；结构完整，适合作为策略研究增强项；依赖在线检索，但未明确绑定特定境外 API 平台。
analysis-modeling-plus,porters-five-forces,Porters Five Forces,yes,yes,analysis_modeling,分析框架,99,0,1,2026-04-09,五力模型是典型商业分析框架，和分析建模包定位高度一致，值得保留一个专门条目。,已实装检查；内容较轻但框架清楚、边界明确；属于方法模板型 skill，不是自动抓数工具。
analysis-modeling-plus,strategic-competitor-analysis,Strategic Competitor Analysis,yes,yes,analysis_modeling,分析框架,150,0,0,2026-04-09,适合补强竞对画像和竞争格局分析，让分析建模包不只剩 SWOT。,已实装检查；结构化程度高；覆盖竞争集合、画像、对比矩阵和战略含义；属于分析框架型 skill。
delivery-plus,article-to-infographic,Article to Infographic,yes,yes,visualization,浏览器自动化,814,0,1,2026-04-08,信息图方向可选项不多，更适合做成果展示和传播材料。,已实装检查；包结构完整；但流程较重、确认步骤多，更适合增强包。
delivery-plus,summarize-1-0-0,Summarize 1.0.0,yes,no,knowledge_structuring,需本地 summarize CLI 和模型 API Key,3425,1,149,2026-04-13,通用总结能力很强，但因依赖 CLI 和模型 API，更适合作为增强包里的摘要与提炼补充项。,已实装检查；能力覆盖网页、PDF、本地文件和 YouTube 内容总结；依赖本地 summarize CLI，并需配置对应模型提供商 API Key。
monitoring-and-insight,brave-api-search,Brave Api Search,yes,no,information_acquisition,需要 API Key,6309,1,29,2026-04-09,适合作为 Tavily 之外的补充搜索源，用于交叉验证和备份检索。,已实装检查；有独立 JS 工具文件；需要 BRAVE_SEARCH_API_KEY 和 BRAVE_ANSWERS_API_KEY。
monitoring-and-insight,firecrawl-search,Firecrawl Search,yes,no,information_acquisition,需要 API Key,16870,48,133,2026-04-09,网页抓取和结构化提取能力很强，适合作为动态监测与补充抓取能力。,已实装检查；带 scripts 和参考文档；明确依赖 FIRECRAWL_API_KEY。
monitoring-and-insight,news-aggregator,News Aggregator,yes,yes,information_acquisition,外部检索工作流,9324,9,110,2026-04-08,对政策环境、产业动态和舆情跟踪类研究有直接价值。,已实装检查；更像新闻聚合工作流模板；本身不带抓取脚本，依赖 Tavily 或 web_fetch。
thinktank-core,multi-search-engine,Multi Search Engine,yes,yes,information_acquisition,无,114525,538,1725,2026-04-13,聚合搜索能力很强，且不需要 API Key，适合作为核心包里的免配置搜索入口。,已核 API 与线上页面；覆盖多搜索引擎与高级检索语法；公开说明为 instruction-only，无额外凭据依赖。
thinktank-core,document-summary,Document Summary,yes,yes,knowledge_structuring,无,2899,2,24,2026-04-08,适合作为跨 PDF 和 Word 的摘要中间层。,已实装检查；内容偏轻；更像结构化摘要模板，不是强工具能力。
thinktank-core,drawio,Draw.io Professional Diagrams,yes,yes,visualization,本地桌面 CLI,1199,4,10,2026-04-13,相比现有 draw.io 候选更完整、验证度更高，适合作为核心包里的主力 draw.io 条目。,已实装检查；带 ERD、类图、时序图、流程图、架构图等细分模板；仍依赖本地 draw.io CLI，但完整度和平台数据优于 drawio-pro-skill。
thinktank-core,excalidraw-diagram-generator,Excalidraw Diagram Generator,yes,yes,visualization,无,2214,2,21,2026-04-08,适合头脑风暴、草图和早期结构表达。,已实装检查；定位清晰；输出 .excalidraw 文件；适合草图和头脑风暴。
thinktank-core,excel-xlsx,Excel / XLSX,yes,yes,document_processing,无,47257,186,541,2026-04-08,当前 Excel 类最强头部技能之一，适合作为稳定表格工具链的一部分。,已实装检查；规则完整；覆盖公式、日期、重算、模板保真等关键问题。
thinktank-core,in-depth-research,Deep Research,yes,yes,information_acquisition,无,6376,7,52,2026-04-08,适合作为智库研究总控入口，能把找资料、扩材料、追证据、形成研究路径串起来。,已实装检查；带 methodology、sources、output-formats，属于完整研究方法框架，不是空壳；未见明确要求 API Key 或绑定特定境外平台。
thinktank-core,market-research-agent,Market Research Agent,yes,yes,analysis_modeling,分析框架,5392,17,29,2026-04-08,比纯搜索类技能更贴近从资料走向洞察的分析中层。,已实装检查；更像结构化市场研究框架，不是自动抓数工具。
thinktank-core,markitdown-skill,MarkItDown Skill,yes,yes,document_processing,需 pip 安装命令行工具,1514,0,7,2026-04-09,统一覆盖多类型文档转 Markdown，适合资料清洗和内容提取。,已实装检查；包内容完整；但实际转换依赖 pip 安装的 markitdown CLI。
thinktank-core,mermaid-diagrams,Mermaid Diagrams,yes,yes,visualization,Mermaid CLI 可选,4503,5,46,2026-04-09,相比 mermaid-architect 更完整、数据更稳，适合作为默认 Mermaid 主力技能。,已实装检查；内容和参考资料完整；平台数据明显优于 mermaid-architect。
thinktank-core,openclaw-tavily-search,Tavily 搜索,yes,no,information_acquisition,需要 API Key,75851,208,1118,2026-04-09,当前 ClawdHub 上最强的通用搜索类 skill 之一，适合作为默认基础搜索入口。,已实装检查；带本地脚本；本质是 Tavily API 封装，需要 TAVILY_API_KEY。
thinktank-core,powerpoint-pptx,Powerpoint / PPTX,yes,yes,report_delivery,无,29332,93,299,2026-04-08,研究成果经常以 PPT 交付，这个技能成熟度很高，应作为默认装机项。,已实装检查；方法论完整；适合作为 PPT 主力条目。
thinktank-core,word-docx,Word / DOCX,yes,yes,report_delivery,无,52576,236,549,2026-04-08,当前 ClawdHub 上最强的 Word 类技能，正式报告和研究成稿都离不开它。,已实装检查；虽主包结构轻，但文档方法论完整，是高质量 DOCX/OOXML 技能。
thinktank-core,pdf-pro,Pdf Pro,yes,yes,document_processing,本地 Python,859,1,5,2026-04-09,相比其他 PDF 候选更完整，适合作为基础 PDF 处理候选；当前默认源可装，中国镜像暂未收录，后续可继续观察。,已实装检查；带 scripts/pdf_tools.py；覆盖 PDF 合并、分割、提取、旋转、压缩和图片互转；默认源安装成功，但中国镜像安装时报 not found。
,baoyu-infographic,Baoyu Infographic,no,no,visualization,依赖图像生成工作流,1367,1,44,2026-04-13,不具备独立闭环生成能力，当前不再保留在正式清单中。,已实装检查；更像信息图策划与提示词工作流；最终出图仍依赖外部图像生成能力。
,office-to-pdf,office-to-pdf,no,no,report_delivery,本地桌面 CLI,257,0,2,2026-04-13,能力范围较窄，当前不再保留在正式清单中。,已实装检查；依赖本地 LibreOffice headless CLI；可用但更像专项补充，不必长期保留在正式 bundle 中。
,pdf-to-word,pdf-to-word,no,no,document_processing,本地 Python,820,1,6,2026-04-13,能力范围较窄，当前不再保留在正式清单中。,已实装检查；带 convert.py 和 requirements.txt；依赖 pdf2docx；可用但更像专项补充，不必长期保留在正式 bundle 中。
,interview-analysis,Interview Analysis,no,no,knowledge_structuring,模板工作流,2045,1,10,2026-04-13,默认语境偏招聘面试，当前不再保留在正式清单中。,已实装检查；带 README 和多份模板；但核心场景是招聘访谈分析，不够贴合智库调研材料整理。
,interview-designer,Interview Designer,no,no,information_acquisition,模板工作流,1847,3,10,2026-04-13,默认语境偏招聘面试，当前不再保留在正式清单中。,已实装检查；带 README、模板和参考资料；但核心场景是招聘面试设计，不够贴合智库调研访谈。
,betasurvey,Beta Survey Analysis,no,no,knowledge_structuring,本地 Python，需模型 API,48,0,0,2026-04-10,依赖模型 API 且平台验证度偏低，当前先不保留在正式清单中。,已实装检查；带 analyze.py 和示例数据；结构真实；但热度很低，还依赖外部模型能力。
,limesurvey-openclaw-skill,LimeSurvey Openclaw Skill,no,no,information_acquisition,需要环境变量和平台账号,305,0,1,2026-04-10,平台绑定很强，当前先不保留在正式清单中。,已实装检查；这里的平台是自建或机构已有的 LimeSurvey 系统；依赖 RemoteControl API 地址、服务账号和环境变量。
,wenjuan-survey,Questionnaire Assistant,no,no,information_acquisition,需要平台登录/授权,30,0,0,2026-04-10,平台绑定很强且验证度偏低，当前先不保留在正式清单中。,已实装检查；这里的平台是问卷网；包体完整，但依赖问卷网账号登录、授权和特定平台流程。
,market-analysis-cn,Market Analysis CN,no,no,analysis_modeling,付费服务,8330,18,109,2026-04-09,服务化属性明显，当前不再保留在正式清单中。,已实装检查；SKILL.md 和 metadata 都写了定价信息，属于商业分析服务。
,pdf-ocr,Pdf Ocr,no,no,document_processing,需要 API Key，且有额度限制,4201,1,55,2026-04-09,依赖外部 OCR 且存在安全与额度问题，当前不再保留在正式清单中。,已实装检查；专项能力真实；依赖百度 OCR；SKILL.md 中直接写出 key、secret 和免费额度。
,trend-watcher,Trend Watcher,no,no,analysis_modeling,GitHub Trending,5369,7,46,2026-04-08,当前实现偏开发者生态趋势监测，不再保留在正式清单中。,已实装检查；实际是 GitHub Trending 和开发者生态监测，不太贴合智库研究场景。
,data-analyst-pro,Data Analyst,no,no,analysis_modeling,无,5153,5,48,2026-04-08,内容偏薄，当前不再保留在正式清单中。,已实装检查；内容很薄；更像简短代理提示，不像成熟工具技能。
,cnki-scholar,CNKI Scholar,no,no,information_acquisition,名称易误导,167,0,0,2026-04-08,名称容易让人误判，不建议继续纳入。,已实装检查；更像 OpenAlex 和 Crossref 检索说明，不是真正的 CNKI 接入。
,drawio-exporter-skill,Draw.io Diagram Generator And Exporter,no,no,visualization,本地桌面 CLI,0,0,0,2026-04-09,本地 draw.io CLI 路线可用，但当前优先保留一个 draw.io 代表项即可。,已实装检查；也是本地 draw.io CLI 路线；当前未纳入以避免重复。
,drawio-generator,drawio-generator,no,no,visualization,浏览器链接/网页,714,1,6,2026-04-09,被更本地化的 draw.io 方案替代。,已实装检查；更像浏览器打开 draw.io 链接的轻量入口，不如本地 draw.io 方案。
,drawio-pro-skill,Drawio Skill,no,no,visualization,本地桌面 CLI,83,1,0,2026-04-13,已被更完整的 drawio 条目替代。,已实装检查；同样依赖本地 draw.io CLI；但完整度和平台验证度都弱于 drawio。
,mermaid-architect,Mermaid Architect,no,no,visualization,文档不完整,1718,0,11,2026-04-09,被内容更完整、数据更稳的 Mermaid 条目替代。,已实装检查；内容和引用不够完整；平台数据也弱于 mermaid-diagrams。
,patent-scanner,Patent Scanner,no,no,information_acquisition,名称易误导,2528,14,9,2026-04-08,名称与实际能力不符，不建议继续纳入。,已实装检查；实际是可专利性分析模板，不是专利检索或扫描工具。
,pdf-helper,PDF 助手,no,no,document_processing,付费服务,865,0,3,2026-04-09,明显外部服务型，不建议纳入。,已实装检查；带调用计费信息。
,pdf-processing,pdf-processing,no,no,document_processing,偏占位/半成品,2292,0,16,2026-04-09,内容偏占位，完成度不足。,已实装检查；包里几乎没有真实脚本。
,pdf-smart-tool-cn,Pdf Smart Tool Cn,no,no,document_processing,次数限制服务,0,0,0,2026-04-09,存在明显免费次数限制，不适合作为高质量基础能力。,已检查使用限制；免费次数限制明显。
,pdf-to-markdown,PDF to Markdown,no,no,document_processing,本地 CLI,699,0,6,2026-04-09,质量不错但能力范围偏窄，当前未纳入主清单。,已实装检查；偏本地且结构完整；更适合 PDF 提取和转 Markdown。
,pdf-toolkit-pro,PDF Toolkit Pro,no,no,document_processing,付费服务,2242,0,23,2026-04-09,存在明确价格分层，不适合作为默认核心能力。,已实装检查；结构完整；但有清晰收费档位。

Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)