Agent工坊

【Agent工坊】AI Agent 竞品监控自动化——7×24情报收集流水线搭建

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 做更多:

  1. 自动在 HN 相关帖子下参与讨论:基于你的产品定位生成有见地的评论
  2. 自动更新竞品对比表格:每次新版本发布后,更新你维护的竞品对比文档
  3. 自动生成社交媒体内容:把重大更新转化为 Twitter/即刻帖子
  4. 自动触发内部动作:如果竞品发布了某个功能,自动在 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 的帖子才推送通知。低优先级的更新只写入日报。

行动建议

  1. 今天就搭建 GitHub 监控脚本(30 分钟):复制上面的 monitor_github.py,替换 TARGETS 列表为你关心的仓库
  2. 创建 /monitor 命令(15 分钟):在 .claude/commands/ 下创建 monitor.md
  3. 配置飞书 Webhook(10 分钟):在飞书群里添加自定义机器人,获取 Webhook URL
  4. 第一个周末跑通全流程:确保 Agent 能自动采集→分析→推送
  5. 每周优化监控目标列表:去掉不再重要的仓库,加上新出现的竞品

AI创业 #Agent工坊 #竞品监控 #自动化运营 #一人公司