AI 创业者最怕的不是竞争对手太强,而是对手已经发了新版而你还在手动刷网页——本文给出一个完整的 Agent 自动化竞品监控流水线,配置一次,永久运行。
为什么手动监控已经不可行
2026 年 6 月,AI 工具赛道的发布速度已经快到"日报变时报纸"的地步。我统计了一下过去一个月的发布频率:
| 工具 | 6月发布次数 | 平均间隔 |
|---|---|---|
| Claude Code | 4 次 | 7.5 天 |
| Hermes Agent | 3 次 | 10 天 |
| OpenClaw | 2 次 | 15 天 |
| Cursor | 3 次 | 10 天 |
| MCP Server 生态 | 每天 2-3 个新 Server | — |
如果你是一家 AI 创业公司的创始人,你每天要跟踪的可能不止这些——还有竞争对手的官网更新、HN 上的社区讨论、Twitter/即刻上的行业 KOL 动态、GitHub 上的开源项目进展。
手工刷网页监控这些问题已经不是效率问题,而是不可能完成的任务。
好消息是:你已经在用 AI Agent 写代码了,为什么不让它帮你做竞品监控?
架构总览
整个流水线分为 4 个环节,全部由 Agent 自动执行:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 数据采集层 │ ──→ │ 智能分析层 │ ──→ │ 报告生成层 │ ──→ │ 推送通知层 │
│ │ │ │ │ │ │ │
│ GitHub API │ │ Claude Code │ │ Markdown报告 │ │ 飞书/Slack │
│ HN Algolia │ │ 分析差异 │ │ 自动生成 │ │ 微信推送 │
│ RSS 订阅 │ │ 提取关键变化 │ │ 优先级排序 │ │ 邮件日报 │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
核心思路:Agent 负责"看"和"判断",你只负责"决策"。
第一步:搭建数据采集层
1.1 GitHub Releases 监控脚本
这是最基础也最重要的数据源。绝大多数 AI 工具都通过 GitHub Releases 发布更新。
在你的项目下创建 .claude/scripts/monitor_github.py:
#!/usr/bin/env python3
"""GitHub Releases 监控 - 检查目标仓库的最新 release"""
import subprocess, json, os
from datetime import datetime, timedelta
# 监控目标配置
TARGETS = [
{"owner": "NousResearch", "repo": "hermes-agent", "name": "Hermes Agent"},
{"owner": "openclaw", "repo": "openclaw", "name": "OpenClaw"},
{"owner": "anthropics", "repo": "claude-code", "name": "Claude Code"},
{"owner": "modelcontextprotocol", "repo": "servers", "name": "MCP Servers"},
]
STATE_FILE = os.path.expanduser("~/.monitor_github_state.json")
def load_state():
if os.path.exists(STATE_FILE):
with open(STATE_FILE) as f:
return json.load(f)
return {}
def save_state(state):
with open(STATE_FILE, "w") as f:
json.dump(state, f, indent=2)
def get_latest_release(owner, repo):
"""通过 GitHub API 获取最新 release(无需认证)"""
r = subprocess.run([
"curl", "-s",
f"https://api.github.com/repos/{owner}/{repo}/releases?per_page=3",
"-H", "Accept: application/vnd.github+json",
"-H", "User-Agent: competitor-monitor/1.0"
], capture_output=True, text=True)
try:
releases = json.loads(r.stdout)
if isinstance(releases, list) and len(releases) > 0:
return releases[0] # 最新 release
except:
pass
return None
def check_all():
state = load_state()
updates = []
for target in TARGETS:
key = f"{target['owner']}/{target['repo']}"
latest = get_latest_release(target['owner'], target['repo'])
if not latest:
continue
tag = latest.get("tag_name", "unknown")
prev_tag = state.get(key, {}).get("tag", "")
if tag != prev_tag:
updates.append({
"name": target["name"],
"repo": key,
"tag": tag,
"title": latest.get("name", tag),
"body": latest.get("body", "")[:500],
"published_at": latest.get("published_at", ""),
"url": latest.get("html_url", ""),
"is_new": (prev_tag != "")
})
state[key] = {"tag": tag, "checked_at": datetime.now().isoformat()}
save_state(state)
return updates
if __name__ == "__main__":
updates = check_all()
if updates:
print(f"🚨 {len(updates)} new update(s) found:\n")
for u in updates:
label = "🆕 NEW" if u["is_new"] else "📌 First check"
print(f"{label} {u['name']} - {u['tag']}")
print(f" {u['title']}")
print(f" {u['url']}\n")
else:
print("✅ No new updates.")
运行一次:
python3 .claude/scripts/monitor_github.py
第一次运行会记录所有仓库的当前版本号。之后再运行,只会在发现新版本时输出更新。
1.2 HN 关键词监控
Hacker News 是 AI 工具圈最重要的社区。一个重大更新上 HN 热榜后,5 小时内就会有深度讨论。
用 HN Algolia API 可以按关键词搜索最新讨论:
#!/usr/bin/env python3
"""HN 关键词监控 - 搜索指定关键词的最新讨论"""
import subprocess, json
from datetime import datetime, timedelta
KEYWORDS = [
"Claude Code",
"Hermes Agent",
"MCP tool",
"AI agent startup",
"Cursor AI",
]
def search_hn(keyword, hours=24):
"""搜索 HN 上最近 N 小时的相关讨论"""
r = subprocess.run([
"curl", "-s",
f"https://hn.algolia.com/api/v1/search_by_date?"
f"query={keyword}&tags=story&hitsPerPage=10&numericFilters=points>20"
], capture_output=True, text=True)
data = json.loads(r.stdout)
hits = data.get("hits", [])
cutoff = (datetime.now() - timedelta(hours=hours)).timestamp()
recent = [h for h in hits if h.get("created_at_i", 0) > cutoff]
return recent
if __name__ == "__main__":
print(f"🔍 HN 监控报告 - {datetime.now().strftime('%Y-%m-%d %H:%M')}\n")
for kw in KEYWORDS:
results = search_hn(kw, hours=48)
if results:
print(f"### {kw} ({len(results)} 条)")
for r in results[:3]:
title = r.get("title", "N/A")
points = r.get("points", 0)
comments = r.get("num_comments", 0)
url = r.get("url") or f"https://news.ycombinator.com/item?id={r.get('objectID')}"
print(f" [{points} pts | {comments} cmts] {title}")
print(f" {url}\n")
1.3 竞品官网变更检测
有些竞品更新不在 GitHub(比如 OpenAI 的博客更新)。可以用内容哈希来检测网页变更:
#!/usr/bin/env python3
"""网页变更检测 - 通过内容哈希判断页面是否更新"""
import subprocess, json, hashlib, os
import re
TARGETS = [
{"name": "Anthropic Blog", "url": "https://www.anthropic.com/engineering/"},
{"name": "OpenAI Blog", "url": "https://openai.com/index/"},
{"name": "Cursor Blog", "url": "https://cursor.com/blog"},
{"name": "The Verge AI", "url": "https://www.theverge.com/ai-artificial-intelligence"},
]
STATE_FILE = os.path.expanduser("~/.monitor_page_state.json")
def get_page_hash(url):
r = subprocess.run([
"curl", "-s", "-L", "--max-time", "15",
"-H", "User-Agent: Mozilla/5.0 (compatible; MonitorBot/1.0)",
url
], capture_output=True, text=True)
# 只对正文部分做哈希(去除动态元素)
text = re.sub(r'<[^>]+>', ' ', r.stdout)
text = re.sub(r'\s+', ' ', text)[:5000]
return hashlib.md5(text.encode()).hexdigest()
def check_all():
state = {}
if os.path.exists(STATE_FILE):
with open(STATE_FILE) as f:
state = json.load(f)
changes = []
for t in TARGETS:
try:
h = get_page_hash(t["url"])
prev = state.get(t["url"], "")
if h != prev:
changes.append({"name": t["name"], "url": t["url"], "changed": (prev != "")})
state[t["url"]] = h
except Exception as e:
print(f" ⚠️ {t['name']}: {e}")
with open(STATE_FILE, "w") as f:
json.dump(state, f)
return changes
if __name__ == "__main__":
changes = check_all()
for c in changes:
label = "🔄 CHANGED" if c["changed"] else "📌 First check"
print(f"{label} {c['name']}: {c['url']}")
第二步:用 Claude Code Hook 实现定时调度
上面的脚本写好之后,真正的自动化需要定时运行。最简单的方案是用 Claude Code 的 Hook 功能。
在 .claude/hooks/hooks.json 中配置:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "python3 .claude/hooks/session_monitor.py"
}
]
}
]
}
}
但更实用的做法是用 系统 cron 来驱动,Agent 负责执行和分析:
# crontab 配置示例
# 每4小时运行一次 GitHub 监控
0 */4 * * * cd /path/to/project && python3 .claude/scripts/monitor_github.py >> ~/monitor_log.txt 2>&1
# 每天早上9点运行 HN 监控
0 9 * * * cd /path/to/project && python3 .claude/scripts/monitor_hn.py >> ~/monitor_log.txt 2>&1
# 每2小时检查竞品网页变更
0 */2 * * * cd /path/to/project && python3 .claude/scripts/monitor_pages.py >> ~/monitor_log.txt 2>&1
第三步:让 Claude Code 生成分析报告
数据采集完毕后,我们让 Claude Code 做智能分析。创建一个自定义 slash command .claude/commands/monitor.md:
# /monitor - 竞品监控分析
请执行以下步骤:
1. 运行 `python3 .claude/scripts/monitor_github.py`,读取输出
2. 运行 `python3 .claude/scripts/monitor_hn.py`,读取输出
3. 分析发现的更新和讨论,输出一份结构化的竞品日报,格式如下:
## 📊 竞品日报 {date}
### 🔥 重大更新
- [工具名] [版本号]:[一句话描述变化]
影响评估:[对 AI 创业者意味着什么]
### 📰 社区热点
- [HN 帖子标题]({points} points)
核心观点:[一句话总结]
### 🎯 行动建议
1. [基于今日情报的建议1]
2. [基于今日情报的建议2]
### 🏷️ 需要深入跟踪
- [值得进一步研究的话题]
然后在 Claude Code 中运行 /monitor,Agent 就会自动执行监控脚本并生成日报。
第四步:推送通知到飞书/微信
生成的日报需要通过即时通讯工具推送到你的手机。最简单的方式是用飞书 Webhook:
#!/usr/bin/env python3
"""将监控日报推送到飞书"""
import subprocess, json, sys
FEISHU_WEBHOOK = "https://open.feishu.cn/open-apis/bot/v2/hook/YOUR_KEY"
def send_to_feishu(report_path):
with open(report_path) as f:
content = f.read()
# 飞书消息限制:最多 30KB
payload = {
"msg_type": "interactive",
"card": {
"header": {
"title": {"tag": "plain_text", "content": "📊 竞品监控日报"},
"template": "blue"
},
"elements": [
{
"tag": "markdown",
"content": content[:8000] # 截断到 8000 字符
}
]
}
}
r = subprocess.run([
"curl", "-s", "-X", "POST",
FEISHU_WEBHOOK,
"-H", "Content-Type: application/json",
"-d", json.dumps(payload, ensure_ascii=False)
], capture_output=True, text=True)
print(f"推送结果: {r.stdout}")
if __name__ == "__main__":
report = sys.argv[1] if len(sys.argv) > 1 else "/tmp/monitor_report.md"
send_to_feishu(report)
完整文件结构和一键部署
最终的项目结构:
your-project/
├── .claude/
│ ├── scripts/
│ │ ├── monitor_github.py # GitHub Releases 监控
│ │ ├── monitor_hn.py # HN 关键词监控
│ │ ├── monitor_pages.py # 网页变更检测
│ │ └── notify_feishu.py # 飞书推送通知
│ ├── commands/
│ │ └── monitor.md # /monitor 斜杠命令
│ └── hooks/
│ └── hooks.json # Hook 配置
├── reports/ # 日报输出目录
└── CLAUDE.md # 项目指令
CLAUDE.md 简化配置:
# 竞品监控项目
## 项目目标
自动化监控 AI 工具赛道的竞品动态,每天生成日报。
## 工作流程
1. 运行 monitor_github.py → monitor_hn.py → monitor_pages.py
2. 将发现的新变化整理为结构化日报
3. 日报格式:重大更新 + 社区热点 + 行动建议
## 监控目标
- Hermes Agent(GitHub releases)
- OpenClaw(GitHub releases)
- Claude Code(GitHub releases + Anthropic 博客)
- Cursor AI(官网博客 + HN)
- MCP 生态(MCP Servers 仓库)
## 判断标准
- 新版本发布 → 标记为「重大更新」,需分析新增功能的影响
- HN 帖子 > 50 points → 标记为「社区热点」
- 官网博客更新 → 标记为「动向」,需通读全文提炼要点
实操演示:一次完整的监控到日报流程
假设现在是周一早上,Claude Code 执行了 /monitor:
第一步:Agent 运行数据采集脚本
$ python3 .claude/scripts/monitor_github.py
🚨 2 new update(s) found:
🆕 NEW Claude Code - v2.3.0
Add background agent mode and session restore
https://github.com/anthropics/claude-code/releases/tag/v2.3.0
🆕 NEW Hermes Agent - v0.17.0
Multi-provider support: DeepSeek, Grok, Gemini
https://github.com/NousResearch/hermes-agent/releases/tag/v0.17.0
第二步:Agent 运行 HN 关键词监控
🔍 HN 监控报告
### Claude Code (8 条)
[342 pts | 127 cmts] Claude Code v2.3 adds background agents
[89 pts | 34 cmts] My first week with Claude Code background mode
### Hermes Agent (3 条)
[156 pts | 67 cmts] Hermes Agent v0.17 multi-provider support
第三步:Agent 生成结构化日报
Agent 自动将以上数据整理为一篇日报,包含:
- Claude Code 和 Hermes Agent 各自的新功能详解
- 社区反应分析(从 HN 评论中提取关键观点)
- 对创业者的影响评估
- 本周行动建议
全程你做了什么?零。 只是收到了飞书推送的日报。
进阶玩法:让 Agent 自动回复和互动
当日报生成后,你还可以让 Agent 做更多:
- 自动在 HN 相关帖子下参与讨论:基于你的产品定位生成有见地的评论
- 自动更新竞品对比表格:每次新版本发布后,更新你维护的竞品对比文档
- 自动生成社交媒体内容:把重大更新转化为 Twitter/即刻帖子
- 自动触发内部动作:如果竞品发布了某个功能,自动在 Linear/Jira 里创建任务
这些功能的实现思路类似——Agent 读取监控数据 → 分析 → 执行动作。
# 示例:自动生成竞品更新推文
import subprocess
def generate_tweet(update):
"""基于竞品更新生成推文草稿"""
prompt = f"""
基于以下竞品更新,生成 3 条推文草稿(每条不超过 280 字符):
工具:{update['name']}
版本:{update['tag']}
更新内容:{update['body'][:300]}
要求:
- 突出对 AI 创业者的影响
- 包含 1-2 个 emoji
- 每条推文角度不同(技术分析 / 商业影响 / 个人观点)
"""
# 这里可以调用 Claude API 生成推文
# 或者直接在 Claude Code 中让 Agent 处理
return prompt
时间投入 vs 产出
| 环节 | 初始搭建时间 | 日常维护时间 | 产出 |
|---|---|---|---|
| GitHub 监控脚本 | 30 分钟 | 0 分钟 | 自动发现所有版本更新 |
| HN 关键词监控 | 20 分钟 | 0 分钟 | 自动跟踪社区热点 |
| 网页变更检测 | 15 分钟 | 0 分钟 | 自动发现官网更新 |
| Claude Code /monitor 命令 | 15 分钟 | 2 分钟/天 | 每日结构化日报 |
| 飞书推送通知 | 10 分钟 | 0 分钟 | 日报推送到手机 |
总计:1.5 小时搭建,每天 2 分钟阅读日报。
对比之前每天花 1-2 小时手动刷 GitHub、HN、Twitter、RSS 的效率提升——节省 95% 的时间,覆盖 100% 的信息。
常见问题
Q: 如果 GitHub API 限流了怎么办?
A: GitHub 对未认证的 API 请求限制是 60 次/小时。我们每 4 小时检查 4 个仓库(共 4 次请求),远低于限制。如果监控仓库超过 50 个,建议申请 GitHub Personal Access Token。
Q: HN Algolia API 有频率限制吗?
A: HN Algolia 是免费公开 API,没有硬性频率限制。但建议每个关键词查询间隔至少 10 秒。
Q: 竞品网站被 Cloudflare 拦截怎么办?
A: 这就是为什么我们主要依赖 GitHub API 和 HN Algolia——这两个都是机器友好的 API,不会被拦截。网页变更检测作为补充手段,如果遇到 Cloudflare 可以用 Web Archive 替代。
Q: 能不能监控中文社区的内容?
A: 可以扩展脚本加上知乎/即刻/微信公众号搜索。但中文社区 API 不友好,建议用 RSS 订阅 + 网页解析的方式。
Q: 一天收到太多通知怎么办?
A: 在监控脚本中加上优先级过滤——比如只有 GitHub Release、HN 50+ points 的帖子才推送通知。低优先级的更新只写入日报。
行动建议
- 今天就搭建 GitHub 监控脚本(30 分钟):复制上面的
monitor_github.py,替换TARGETS列表为你关心的仓库 - 创建
/monitor命令(15 分钟):在.claude/commands/下创建monitor.md - 配置飞书 Webhook(10 分钟):在飞书群里添加自定义机器人,获取 Webhook URL
- 第一个周末跑通全流程:确保 Agent 能自动采集→分析→推送
- 每周优化监控目标列表:去掉不再重要的仓库,加上新出现的竞品
