Skip to content
Productivity
Skill

/pm-search

Use when: 需要进行市场调研数据收集、竞品信息采集、行业舆情监控、合规政策检查 Do NOT use when: 已有完整数据无需补充、仅需内部数据分析无需外部信息

From plugin
super-pm
6648 skills1 hook
Install
$ npx -y skills add konglong87/superPM --skill pm-search --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/pm-search

Context preview

The summary Claude sees to decide when to auto-load this skill.

Use when: 需要进行市场调研数据收集、竞品信息采集、行业舆情监控、合规政策检查 Do NOT use when: 已有完整数据无需补充、仅需内部数据分析无需外部信息

SKILL.md

pm-search.SKILL.md
name: pm-search
description: |
  Use when: 需要进行市场调研数据收集、竞品信息采集、行业舆情监控、合规政策检查
  Do NOT use when: 已有完整数据无需补充、仅需内部数据分析无需外部信息
allowed-tools:
  - Read
  - Write
  - AskUserQuestion
  - Agent
  - Bash
  - WebSearch
  - mcp__exa__web_search_exa
  - mcp__exa__web_fetch_exa

Preamble (run first)

bash "$(dirname "${BASH_SOURCE[0]}")/../../check-update.sh" 2>/dev/null || true
# 创建需求调研目录
mkdir -p docs/01-需求调研

# 自动发现 AnySearch CLI 安装位置
# 支持 Claude Code / OpenCode / OpenClaw / Cursor / pip install / 手动克隆等多种安装方式
ANYSEARCH_CLI=""
for candidate in \
  "$HOME/.claude/skills/anysearch/scripts/anysearch_cli.py" \
  "$HOME/.opencode/skills/anysearch/scripts/anysearch_cli.py" \
  "$HOME/.openclaw/skills/anysearch/scripts/anysearch_cli.py" \
  "$HOME/.cursor/skills/anysearch/scripts/anysearch_cli.py" \
  "$HOME/skills/anysearch/scripts/anysearch_cli.py" \
  "$HOME/.anysearch/scripts/anysearch_cli.py" \
  "/usr/local/bin/anysearch_cli.py" \
  "$HOME/bin/anysearch_cli.py"; do
  if [ -f "$candidate" ]; then
    ANYSEARCH_CLI="$candidate"
    break
  fi
done

# pip install 方式
if [ -z "$ANYSEARCH_CLI" ]; then
  PIP_LOCATION=$(python3 -c "import importlib.util; spec=importlib.util.find_spec('anysearch'); print(spec.submodule_search_locations[0] if spec and spec.submodule_search_locations else '')" 2>/dev/null)
  if [ -n "$PIP_LOCATION" ] && [ -f "$PIP_LOCATION/scripts/anysearch_cli.py" ]; then
    ANYSEARCH_CLI="$PIP_LOCATION/scripts/anysearch_cli.py"
  fi
fi

# which 方式
if [ -z "$ANYSEARCH_CLI" ]; then
  WHICH_CLI=$(which anysearch_cli.py 2>/dev/null)
  if [ -n "$WHICH_CLI" ] && [ -f "$WHICH_CLI" ]; then
    ANYSEARCH_CLI="$WHICH_CLI"
  fi
fi

echo "🔍 PM-Search V2.1 - 联网搜索整合工具"
echo "搜索优先级:AnySearch → Exa MCP → WebSearch"
echo "支持并发搜索:市场调研 | 竞品分析 | 行业数据 | 舆情监控 | 合规检查"

if [ -n "$ANYSEARCH_CLI" ]; then
  echo "✅ AnySearch: $ANYSEARCH_CLI"
else
  echo "⚠️  AnySearch 未安装,将自动降级到 Exa MCP / WebSearch"
  echo "   安装: git clone https://github.com/konglong87/anysearch.git ~/.claude/skills/anysearch"
fi
echo ""

---

搜索工具优先级(核心规则)

**所有搜索必须按以下优先级选择工具,不得跳级:**

| 优先级 | 工具 | 适用场景 | 调用方式 | |--------|------|---------|---------| | **1(首选)** | **AnySearch** | 中文搜索、垂直领域、批量搜索、全文提取 | Bash 调用 `anysearch_cli.py`(路径由 Preamble 自动发现,见上方输出) | | **2(备选)** | **Exa MCP** | 英文/代码/公司搜索、语义搜索 | `mcp__exa__web_search_exa` 工具 | | **3(降级)** | **WebSearch** | 仅当 AnySearch 和 Exa 都不可用时 | `WebSearch` 工具 |

**AnySearch 调用规范**:

  • 搜索:`python3 <anysearch_cli路径> search "查询词" --max_results 5`
  • 垂直域搜索:`python3 <anysearch_cli路径> search "查询词" --domain finance --sub_domain finance.cn_stock`
  • 全文提取:`python3 <anysearch_cli路径> extract "URL"`
  • 批量搜索:`python3 <anysearch_cli路径> batch_search --query "q1" --query "q2"`
  • 列出子域:`python3 <anysearch_cli路径> list_domains --domain finance`

AnySearch 垂直域配置

**垂直域使用优先级**: 1. **先查完整域映射** — Read `skills/_shared/anysearch-pm-domains.md`,按当前 PM 场景找推荐垂直域组合 2. **列出可用子域** — `python3 <anysearch_cli路径> list_domains --domain {domain}` 查看域的最新子域和参数 schema 3. **执行垂直搜索** — `python3 <anysearch_cli路径> search "查询词" --max_results 5 --domain {domain} --sub_domain {sub_domain}`

**pm-search 五种搜索类型的默认垂直域**:

| 搜索类型 | 推荐垂直域 | 子域 | 适用原因 | |---------|-----------|------|---------| | 市场调研 | `finance` | `finance.us_stock`, `finance.cn_stock`, `finance.news` | 上市对标公司数据、行业新闻 | | 竞品分析 | `business` + `finance` | `business.company`, `finance.cn_stock` | 公司注册信息、财务数据 | | 行业数据 | `finance` | `finance.news`, `finance.cn_stock` | 行业新闻、市场规模 | | 舆情监控 | 通用搜索 | 无垂直域 | 社交媒体、用户评价覆盖广 | | 合规检查 | `legal` | `legal.statute`, `legal.case` | 法律法规、司法案例 |

> 💡 完整 17 域 × 37 技能 × 11 行业 PM 场景的垂直域映射见 `skills/_shared/anysearch-pm-domains.md`。

降级判断规则

1. **AnySearch 不可用**:脚本未安装、API key 缺失、网络超时 → 降级到 Exa MCP 2. **Exa MCP 不可用**:工具调用返回错误 → 降级到 WebSearch 3. **使用 WebSearch 时**:在报告中标注「⚠️ 数据来源:WebSearch(降级模式),建议配置 AnySearch 以提升中文搜索质量」

全文提取优先级

| 优先级 | 工具 | 调用方式 | |--------|------|---------| | **1** | AnySearch extract | `python3 <anysearch_cli路径> extract "URL"` | | **2** | Exa MCP fetch | `mcp__exa__web_fetch_exa` 工具 | | **3** | WebFetch | `WebFetch` 工具 |

---

跨 Agent 交互规则

当流程要求与用户交互时:

1. 如果当前环境支持 AskUserQuestion,使用 AskUserQuestion(最佳体验)。 2. 如果当前环境不支持 AskUserQuestion,必须用普通聊天消息提出同样问题。 3. 一次只问一个问题。 4. 提问后必须停止当前回合,等待用户回答(STOP and WAIT)。 5. 不得在用户回答前生成文档、写入 docs。 6. 已有 docs 文件不能替代本轮用户回答。

---

执行流程

步骤 0: 参数解析(自动路由)

如果调用时携带 `--type=xxx` 参数(如 `/pm-search --type=competitor`),直接映射到对应搜索类型,**跳过步骤 1 的交互选择**:

| 参数 | 搜索类型 | 执行路径 | |------|---------|---------| | `--type=market` | 市场调研 | 步骤 2A - 市场调研 | | `--type=competitor` | 竞品分析 | 步骤 2A - 竞品分析 | | `--type=data` | 行业数据 | 步骤 2A - 行业数据 | | `--type=opinion` | 舆情监控 | 步骤 2A - 舆情监控 | | `--type=legal` | 合规检查 | 步骤 2A - 合规检查 | | `--type=all` | 综合搜索 | 步骤 2B - 综合并发搜索 |

解析到类型后,直接跳转对应执行路径,无需询问用户。 如果 `--type` 值不在上述映射中,视为未知参数,降级到步骤 1 的交互选择。 **注意**:如果当前对话中用户未明确提及产品/行业领域,应先询问确认后再执行搜索。

如果**未携带** `--type` 参数(用户直接输入 `/pm-search` 或自然语言触发),继续步骤 1 的交互选择。

---

步骤 1: 确定搜索类型(主 agent - 用户交互)

使用 AskUserQuestion 询问:

> 🔍 联网搜索整合工具 - 选择搜索类型 > > 请选择您需要进行的研究类型(可多选): > > A) 市场调研 - 市场规模、趋势、用户画像 > B) 竞品分析 - 竞品功能、定价、策略 > C) 行业数据 - 行业报告、统计数据 > D) 舆情监控 - 用户评价、媒体报道 > E) 合规检查 - 政策法规、行业标准 > F) 综合搜索 - 以上全部(并发执行) > G) 其他(请手动输入)

**用户选择后,根据选择执行不同流程。**

---

Subagent 并发搜索架构

---

步骤 2A: 单一类型搜索(主 agent 直接执行)

**如果用户选择单个搜索类型,直接执行:**

**⚠️ 所有搜索必须遵循「搜索工具优先级」规则,首选 AnySearch,降级到 Exa MCP,最后才用 WebSearch。**

市场调研

按搜索优先级执行:

搜索关键词:"{产品领域} 市场规模 2026"
搜索关键词:"{产品领域} 市场趋势"
搜索关键词:"{产品领域} 用户画像"

首选 AnySearch(带垂直域 --domain finance --sub_domain finance.cn_stock),
调用方式参考「搜索工具优先级」章节。失败则降级到 Exa MCP,最后才用 WebSearch。

数据源优先级:
1. 艾瑞咨询、易观分析、QuestMobile(权威报告)
2. 36氪、虎嗅(行业媒体)
3. 工信部、网信办(政策法规)

整合结果 → 生成:docs/01-需求调研/市场调研报告.md

竞品分析

按搜索优先级执行:

搜索关键词:"{产品领域} 主要竞品"
搜索关键词:"{竞品名称} 产品功能"
搜索关键词:"{竞品名称} 定价策略"

首选 AnySearch(带垂直域 --domain finance --sub_domain finance.cn_stock),
失败则降级到 Exa MCP,最后才用 WebSearch。

数据源:
- 七麦数据、蝉妈妈(应用数据)
- 官网、App Store、产品评测

整合结果 → 生成:docs/01-需求调研/竞品分析报告.md

行业数据

按搜索优先级执行:

搜索关键词
Read more
Ships withsuper-pm

让每个产品经理都能轻轻松松的高效工作 ☕️ 📺 🚀

Get the whole plugin
Stats
65
Stars
8
Forks
Active
Maintenance
JavaScript
Language
MIT
License
11d ago
Last commit
5mo ago
Created

Repo: konglong87/superPM

Other skills on super-pm.

pm-brainstorm
Skill

pm-brainstorm

Use when: 需要创意方案、探索产品方向、发散思维、本质问题分析 用户说"我想做一个XX""帮我规划XX产品""帮我设计一下需求" 用户给出新产品方向,但尚未完成本轮 brainstorm 交互确认 新产品从0到1的第一步 Do NOT use when: 用户明确说"跳过 brainstorm /…

pm-clarify
Skill

pm-clarify

Use when: 有初步需求清单需要细化细节、需明确需求场景和边界条件、需求描述模糊需要结构化 Do NOT use when: 需求已足够详细可直达开发、仅需快速立项无需深入

pm-competitor
Skill

pm-competitor

Use when: 需要持续监控竞品动态、建立竞品情报预警、定期输出竞品监控月报、追踪竞品版本/定价/功能/舆情/融资异动 Do NOT use when: 仅需一次性竞品调研(用 pm-market / pm-search --type=competitor);产品尚无明确竞品

pm-demand
Skill

pm-demand

Use when: 已完成 /pm-brainstorm 后,需要系统化收集需求、验证产品想法真伪、分析用户痛点 用户明确要求"需求调研""需求验证""验证痛点""分析用户痛点" 用户明确选择跳过 brainstorm,直接进入需求调研 Do NOT auto-select when:…

pm-interview
Skill

pm-interview

Use when: 需要设计用户访谈/用户调研方案、编写访谈提纲、规划样本与招募、制定访谈执行与分析方法 Do NOT use when: 仅做案头需求调研(用 pm-demand);已有明确结论只需验证单一假设且无需访谈