Not in the top 1,000 by GitHub stars
waynefu2020/competitor-kol-radar
红人投放雷达— 站在营销总监的角度拆解竞品在 TikTok / Instagram / YouTube / 小红书上的红人营销打法。分析博主量级、播放、选题卖点、转化渠道,输出带建议网页报告。
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
SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
b4bf30cb9c81 → b4bf30cb9c81
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → b4bf30cb9c81
No earlier version was observed for comparison.
Heat
1.4- 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
30-day change not yet available: not enough history.
Individual skills in this repository
How it works
competitor-kol-radar
When your agent uses it
竞品红人营销打法拆解(营销总监视角)——抓取竞品近 N 个月在 TikTok / Instagram / YouTube(国内小红书为实验功能)上的红人与 UGC 内容,判断它是"买量型""自来水型"还是"联盟铺量型",统计博主量级、内容量、播放中位数、主打选题与卖点、销售转化渠道,对标库定位,输出带"对我们意味着什么 + 建议动作"的网页报告和明细 CSV。只要用户想研究某个品牌/竞品怎么做红人营销、KOL 投放、海外社媒种草、出海内容打法、博主合作、UGC 声量、"它在 TikTok/IG/YouTube 上投了哪些博主"、"竞品的红人投放怎么样"、"帮我拆一下 XX 的海外营销",就应使用本技能,即使用户没说"竞品调研"。不用于:日常抖音竞品账号监控(用 competitor-radar)、单条视频解析、给自己找博主建联。
What it loads into context
Frontmatter
261 tokensAlways available to the agent
SKILL.md
2,278 tokensWhen the skill is activated
Reference documents
9,249 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 0. 立项:先定决策问题
- 1. 写 brief
- 2. 成本预估 → 采集
- 3. 抽查(不可跳过)
- 4. 渠道与规模研究
- 5. 分析
- 6. 写结论(总监视角)
- 7. 出报告
- 8. 更新对标库
- 国内市场(实验)
- 参考文件
Scripts executed separately
scripts/agent_reach_import.pyscripts/analyze.pyscripts/build_report.pyscripts/collect.pyscripts/common.pyscripts/doctor.pyscripts/lexicons.pyscripts/normalize.pyscripts/tikhub.py
Files
.gitignoreasset92 bytesINSTALL.mddoc2,599 bytesLICENSEasset1,068 bytesREADME.mddoc8,210 bytesSKILL.mdcore7,872 bytesSKILL.mdcore7,872 bytesSKILL.mdcore7,872 bytesSKILL.mdcore7,872 bytesassets/brief.example.jsonasset1,127 bytesassets/report_template.htmlasset44,689 bytesdocs/styles/brand.pngasset472,493 bytesdocs/styles/consulting.pngasset333,498 bytesdocs/styles/notebook.pngasset381,534 bytesdocs/styles/terminal.pngasset402,752 bytesdocs/styles/wrapped.pngasset351,995 bytesexamples/flowerknows/brief.jsonasset1,441 bytesexamples/flowerknows/narrative.jsonasset6,841 bytesreferences/benchmarks.jsonasset815 bytesreferences/channel-signals.mddoc1,917 bytesreferences/fallback-agent-reach.mddoc3,611 bytesreferences/methodology.mddoc3,897 bytesreferences/pitfalls.mddoc2,984 bytesreferences/platforms-domestic.mddoc2,008 bytesreferences/platforms-overseas.mddoc2,111 bytesreferences/report-spec.mddoc4,212 bytesscripts/agent_reach_import.pyruns8,426 bytesscripts/analyze.pyruns10,846 bytesscripts/build_report.pyruns4,342 bytesscripts/collect.pyruns5,587 bytesscripts/common.pyruns1,346 bytesscripts/doctor.pyruns3,146 bytesscripts/lexicons.pyruns5,006 bytesscripts/normalize.pyruns10,441 bytesscripts/tikhub.pyruns1,681 bytes
Read SKILL.md
# 竞品红人投放雷达
用一套固定口径,把"某品牌在社媒上被谁、以什么方式、讲了什么、导向哪里买"拆清楚,并以营销总监能直接拿去开会的方式交付。
价值不在抓数据,在**口径和判断**:分清付费、寄样、联盟和自来水,剔除噪音,知道哪些数字不能信。这些规则写在 `references/` 里,先读再动手。
## 0. 立项:先定决策问题
动手前用一两句话确认(用户已经说清的就不要再问):
- **品牌和别名**(含中文名、各国写法、产品线名)
- **市场**:海外(默认)/ 国内(小红书,实验)/ 内外对比
- **时间窗**:默认近 90 天
- **这份调研要支撑什么决策**:对标学习、进入新市场、定预算、找可复制打法、做内容选题……决策问题决定报告的"建议动作"往哪写。用户没说就默认"我们能借鉴什么"。View the complete source on GitHubSkills included
- competitor-kol-radar
Repository facts
- License
- MIT
- Created
- Oct 26, 2026
- Last pushed
- Oct 26, 2026
- Forks
- 0
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated 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 3 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 58 network referencesin 12 files: scripts/agent_reach_import.py:66 examples/flowerknows/narrative.json:119 scripts/normalize.py:126 and 9 more
- No hidden or obfuscated text
- No instruction overrides
- 9 executable scriptsin 9 files: scripts/agent_reach_import.py:1 scripts/analyze.py:1 scripts/build_report.py:1 and 6 more
- 14 references to secretsin 7 files: scripts/agent_reach_import.py:4 scripts/tikhub.py:12 references/fallback-agent-reach.md:9 and 4 more
- No requests to vote in Hot
Show all 81 signals by file
.gitignore
- Access to secretsline 4
[Credential-related source omitted]
INSTALL.md
- Network accessline 14
DEST=~/.claude/skills/competitor-kol-radar # 按上表换成你的目录 if [ -d "$DEST/.git" ]; then git -C "$DEST" pull --ff-only; else git clone https://github.com/waynefu2020/competitor-kol-radar.git "$DEST"; fi - Network accessline 15
if [ -d "$DEST/.git" ]; then git -C "$DEST" pull --ff-only; else git clone https://github.com/waynefu2020/competitor-kol-radar.git "$DEST"; fi - Network accessline 21
mkdir -p "$DEST" && curl -L https://github.com/waynefu2020/competitor-kol-radar/archive/refs/heads/main.tar.gz | tar -xz --strip-components=1 -C "$DEST" - Network accessline 38
- 数据来自 TikHub,注册地址 https://tikhub.io ,一次海外竞品调研大约花 $0.5–1。
README.md
- Network accessline 76
帮我安装这个 Skill:https://github.com/waynefu2020/competitor-kol-radar - Network accessline 82
- **有 Key**:直接发给它,它会帮你安全保存。到 [tikhub.io](https://tikhub.io) 注册就能拿到,一次海外调研大约 $0.5–1。 - Network accessline 101
git clone https://github.com/waynefu2020/competitor-kol-radar.git ~/.claude/skills/competitor-kol-radar - Access to secretsline 106
[Credential-related source omitted] - Network accessline 112
用 [Agent Reach](https://github.com/Panniantong/Agent-Reach) 的免费工具链(yt-dlp、xhs-cli、网页搜索):
SKILL.md
- Access to secretsline 30
[Credential-related source omitted]
assets/report_template.html
- Network accessline 2
<meta name="claude:viewport-fit-sides" content="cover"> <script>document.documentElement.dataset.style = "__STYLE__";</script> <link rel="preconnect" href="https://fonts.googleapis.com"> - Network accessline 3
<script>document.documentElement.dataset.style = "__STYLE__";</script> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - Network accessline 4
<link rel="preconnect" href="https://fonts.googleapis.com"> - Network accessline 5
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
examples/flowerknows/narrative.json
- Network accessline 119
{ "title": "Beauty Independent", "url": "https://www.beautyindependent.com/flower-knows-brings-fairytale-aesthetic-ulta-beauty-c-beauty-gains-ground/" - Network accessline 120
"title": "Beauty Independent", "url": "https://www.beautyindependent.com/flower-knows-brings-fairytale-aesthetic-ulta-beauty-c-beauty-gains-ground/" }, - Network accessline 121
"url": "https://www.beautyindependent.com/flower-knows-brings-fairytale-aesthetic-ulta-beauty-c-beauty-gains-ground/" - Network accessline 123
{ "title": "PRNewswire / StreetInsider", "url": "https://www.streetinsider.com/PRNewswire/Flower+Knows+Expands+U.S.+Retail+Distribution+By+Entering+Ulta+Beauty/25715380.html" - Network accessline 124
"title": "PRNewswire / StreetInsider", "url": "https://www.streetinsider.com/PRNewswire/Flower+Knows+Expands+U.S.+Retail+Distribution+By+Entering+Ulta+Beauty/25715380.html" }, - Network accessline 125
"url": "https://www.streetinsider.com/PRNewswire/Flower+Knows+Expands+U.S.+Retail+Distribution+By+Entering+Ulta+Beauty/25715380.html" - Network accessline 127
{ "title": "界面新闻", "url": "https://www.jiemian.com/article/13288116.html" - Network accessline 128
"title": "界面新闻", "url": "https://www.jiemian.com/article/13288116.html" } - Network accessline 129
"url": "https://www.jiemian.com/article/13288116.html"
references/fallback-agent-reach.md
references/platforms-overseas.md
- Network accessline 3
[Credential-related source omitted]
references/report-spec.md
- Network accessline 44
{"type": "照搬", "title": "把包装做成值得拍的东西", "detail": "……", "priority": "高", "budget": "中", "measure": "UGC 中'包装/开箱'主题占比;3 个月"} ], "sources": [{"title": "Beauty Independent", "url": "https://..."}], - Network accessline 45
], "sources": [{"title": "Beauty Independent", "url": "https://..."}], "method_notes": ["TikTok 商业标记字段含义为样本推断。"] - Network accessline 46
"sources": [{"title": "Beauty Independent", "url": "https://..."}],
scripts/agent_reach_import.py
- Executable scriptline 1
Executable file - Access to secretsline 4
[Credential-related source omitted] - Network accessline 66
rows = [] for q in queries: url = 'https://www.youtube.com/results?' + urllib.parse.urlencode({'search_query': q, 'sp': 'CAI='}) - Network accessline 67
for q in queries: url = 'https://www.youtube.com/results?' + urllib.parse.urlencode({'search_query': q, 'sp': 'CAI='}) out, err = run(['yt-dlp', '--no-update', '--flat-playlist', '--playlist-end', str(20 * pages), '-J', url] - Network accessline 68
url = 'https://www.youtube.com/results?' + urllib.parse.urlencode({'search_query': q, 'sp': 'CAI='}) - Network accessline 77
views=e.get('view_count'), likes=None, comments=None, ts=None, ts_unknown=True, text=(e.get('title') or '') + ' ' + (e.get('description') or ''), title=e.get('title'), url=f"https://youtu.be/{e. - Network accessline 78
text=(e.get('title') or '') + ' ' + (e.get('description') or ''), title=e.get('title'), url=f"https://youtu.be/{e.get('id')}", paidflag=False, shop=False, disclosed=False, source='agent-reach:yt-dlp') if b - Network accessline 79
url=f"https://youtu.be/{e.get('id')}", paidflag=False, shop=False, disclosed=False, source='agent-reach:yt-dlp') if browser: d_out, _ = run(['yt-dlp', '--no-update', '-j', '--skip-download', '--cookies-from-brows - Access to secretsline 81
[Credential-related source omitted] - Network accessline 120
break for it in items: nc = it.get('note_card') or {} - Network accessline 121
for it in items: nc = it.get('note_card') or {} if not nc: - Network accessline 122
nc = it.get('note_card') or {} - Network accessline 130
comments=cn_num(ii.get('comment_count')), ts=ts, ts_unknown=ts is None, text=nc.get('display_title') or '', title=nc.get('display_title'), note_type=nc.get('type'), u - Network accessline 131
[Credential-related source omitted] - Network accessline 132
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Access to secretsline 152
[Credential-related source omitted]
scripts/analyze.py
- Executable scriptline 1
Executable file
scripts/build_report.py
scripts/collect.py
- Executable scriptline 1
Executable file
scripts/common.py
- Executable scriptline 1
Executable file
scripts/doctor.py
- Executable scriptline 1
Executable file - Access to secretsline 52
[Credential-related source omitted] - Network accessline 59
else: ok = False print(f'❌ TikHub Key 无法使用({err})。到 https://tikhub.io 后台确认 Key 是否正确、是否过期,再重新保存。') - Network accessline 60
ok = False print(f'❌ TikHub Key 无法使用({err})。到 https://tikhub.io 后台确认 Key 是否正确、是否过期,再重新保存。') else: - Network accessline 61
print(f'❌ TikHub Key 无法使用({err})。到 https://tikhub.io 后台确认 Key 是否正确、是否过期,再重新保存。') - Network accessline 62
else: print('⚠<U+FE0F> 没有 TikHub Key:可以先用免费兜底方案(数据少一些),或到 https://tikhub.io 注册拿 Key,' '然后把 Key 发给 Agent 保存。') - Network accessline 63
print('⚠<U+FE0F> 没有 TikHub Key:可以先用免费兜底方案(数据少一些),或到 https://tikhub.io 注册拿 Key,'
scripts/lexicons.py
- Executable scriptline 1
Executable file
scripts/normalize.py
- Executable scriptline 1
Executable file - Network accessline 126
views=st.get('play_count'), likes=st.get('digg_count'), comments=st.get('comment_count'), ts=x.get('create_time'), text=(x.get('desc') or '') + ' ' + tags, region=x.get('region'), url=f"https://www. - Network accessline 127
text=(x.get('desc') or '') + ' ' + tags, region=x.get('region'), url=f"https://www.tiktok.com/@{au.get('unique_id')}/video/{x.get('aweme_id')}", paidflag=bool(x.get('is_ads')), shop=shop, disclosed= - Network accessline 128
url=f"https://www.tiktok.com/@{au.get('unique_id')}/video/{x.get('aweme_id')}", - Network accessline 134
followers=None, views=it.get('play_count') or it.get('ig_play_count') or it.get('view_count'), likes=it.get('like_count'), comments=it.get('comment_count'), ts=it.get('taken_at'), text=(it.get('capt - Network accessline 135
likes=it.get('like_count'), comments=it.get('comment_count'), ts=it.get('taken_at'), text=(it.get('caption') or {}).get('text') or '', url=f"https://www.instagram.com/p/{it.get('code')}/", paidflag= - Network accessline 136
text=(it.get('caption') or {}).get('text') or '', url=f"https://www.instagram.com/p/{it.get('code')}/", - Network accessline 162
ts=int(datetime.datetime.fromisoformat(d['publish_date']).timestamp()), text=(d.get('title') or '') + ' ' + desc, clstext=(d.get('title') or '') + '\n' + rel, url=f'https://youtu.be/{vid}', paidflag=False, - Network accessline 164
url=f'https://youtu.be/{vid}', paidflag=False, shop=False, disclosed=False, title=d.get('title')))
scripts/tikhub.py
- Executable scriptline 1
Executable file - Network accessline 8
BASE = 'https://api.tikhub.io' - Access to secretsline 12
[Credential-related source omitted] - Access to secretsline 13
[Credential-related source omitted] - Access to secretsline 19
[Credential-related source omitted] - Network accessline 27
[Credential-related source omitted] - Access to secretsline 27
[Credential-related source omitted] - Network accessline 30
for attempt in range(retries): try: with urllib.request.urlopen(req, timeout=90) as r: - Network accessline 31
try: with urllib.request.urlopen(req, timeout=90) as r: return json.load(r) - Network accessline 32
with urllib.request.urlopen(req, timeout=90) as r:
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.
Declared and executed: 7 facts
- Contacts www.youtube.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/agent_reach_import.py:68High confidence
- Contacts youtu.be, which SKILL.md, the README and the plugin manifest do not mentionscripts/agent_reach_import.py:79High confidence
- Contacts www.xiaohongshu.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/agent_reach_import.py:132High confidence
- Contacts fonts.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/build_report.py:15High confidence
- Contacts www.tiktok.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/normalize.py:128High confidence
- Contacts www.instagram.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/normalize.py:136High confidence
- Contacts youtu.be, which SKILL.md, the README and the plugin manifest do not mentionscripts/normalize.py:164High confidence
Signal confidence: 67 facts
- Network access in code of documentationINSTALL.md:14Low confidence
- Network access in code of documentationINSTALL.md:15Low confidence
- Network access in code of documentationINSTALL.md:21Low confidence
- Network access in prose of documentationINSTALL.md:38Low confidence
- Network access in code of documentationREADME.md:76Low confidence
- Network access in prose of documentationREADME.md:82Low confidence
- Network access in code of documentationREADME.md:101Low confidence
- Access to secrets in prose of documentationREADME.md:106Low confidence
- Network access in prose of documentationREADME.md:112Low confidence
- Access to secrets in prose of the SKILL.mdSKILL.md:30Low confidence
- Network access in prose of documentationreferences/fallback-agent-reach.md:3Low confidence
- Access to secrets in prose of documentationreferences/fallback-agent-reach.md:9Low confidence
- Access to secrets in code of documentationreferences/fallback-agent-reach.md:34Low confidence
- Network access in prose of documentationreferences/platforms-overseas.md:3Low confidence
- Network access in code of documentationreferences/report-spec.md:44Low confidence
- Network access in code of documentationreferences/report-spec.md:45Low confidence
- Network access in code of documentationreferences/report-spec.md:46Low confidence
- Executable script in prose of a file that runsscripts/agent_reach_import.py:1Low confidence
- Access to secrets in prose of a file that runs: a variable, placeholder or call, not a stored valuescripts/agent_reach_import.py:4Low confidence
- Network access in code of a file that runsscripts/agent_reach_import.py:66High confidence
- Network access in code of a file that runsscripts/agent_reach_import.py:67High confidence
- Network access in code of a file that runsscripts/agent_reach_import.py:68High confidence
- Network access in code of a file that runsscripts/agent_reach_import.py:77High confidence
- Network access in code of a file that runsscripts/agent_reach_import.py:78High confidence
- Network access in code of a file that runsscripts/agent_reach_import.py:79High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/agent_reach_import.py:81Low confidence
- Network access in code of a file that runsscripts/agent_reach_import.py:120High confidence
- Network access in code of a file that runsscripts/agent_reach_import.py:121High confidence
- Network access in code of a file that runsscripts/agent_reach_import.py:122High confidence
- Network access in code of a file that runsscripts/agent_reach_import.py:130High confidence
- Network access in code of a file that runsscripts/agent_reach_import.py:131High confidence
- Network access in code of a file that runsscripts/agent_reach_import.py:132High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/agent_reach_import.py:145Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/agent_reach_import.py:152Low confidence
- Executable script in prose of a file that runsscripts/analyze.py:1Low confidence
- Executable script in prose of a file that runsscripts/build_report.py:1Low confidence
- Network access in code of a file that runsscripts/build_report.py:14High confidence
- Network access in code of a file that runsscripts/build_report.py:15High confidence
- Executable script in prose of a file that runsscripts/collect.py:1Low confidence
- Executable script in code of a file that runsscripts/common.py:1High confidence
- Executable script in prose of a file that runsscripts/doctor.py:1Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/doctor.py:52Low confidence
- Network access in code of a file that runsscripts/doctor.py:59High confidence
- Network access in code of a file that runsscripts/doctor.py:60High confidence
- Network access in code of a file that runsscripts/doctor.py:61High confidence
- Network access in code of a file that runsscripts/doctor.py:62High confidence
- Network access in code of a file that runsscripts/doctor.py:63High confidence
- Executable script in prose of a file that runsscripts/lexicons.py:1Low confidence
- Executable script in prose of a file that runsscripts/normalize.py:1Low confidence
- Network access in code of a file that runsscripts/normalize.py:126High confidence
and 17 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md 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.