
Byted Marketing Agent Competitive Watch
- 95 installs
- skills.volces.com
Helps with marketing & seo tasks during AI-assisted development.
About
byted-marketing-agent-competitive-watch is a Claude Code skill in the Marketing & SEO category.
- byted-marketing-agent-competitive-watch
- Marketing & SEO
- AI-coding skill
Byted Marketing Agent Competitive Watch by the numbers
- 95 all-time installs (skills.sh)
- +1 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #1,152 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/skills.volces.com --skill byted-marketing-agent-competitive-watchAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 95 |
|---|---|
| Repository | skills.volces.com ↗ |
What it does
Helps with marketing & seo tasks during AI-assisted development.
Files
竞品重大事件监控
目标
本版本只保留最短主链路:
行业选择 → 拉视频 → 抽品牌 → 确认本品/竞品 → LLM 提取重点事件 → 按固定模板直接输出报告
明确移除以下能力:
- 移除联网搜索与外部核验
- 移除历史记忆读写
- 移除程序渲染报告(不再调用
render_report.py) - 移除行业规则缓存、搜索中间文件、历史去重等重逻辑
因此本 skill 的定位从“核验型情报报告”改为:
基于当期热视频数据的竞品事件线索提取与应对建议。
---
When to Use
/competitive-watch- 用户问“竞品最近有什么大动作”
- 用户问“最近有哪些新品/代言/发布会/营销活动”
- 用户想快速拿到“竞品事件线索 + 本品应对建议”
---
最高优先级规则
输出规则
- 执行过程中禁止向用户输出技术过程、命令、脚本路径、临时文件、接口细节。
- 只输出一次最终业务结果:
竞品重大事件报告- 或
暂无数据 / 需要补充信息 - 最终报告必须直接按本文末模板输出,不要调用程序渲染。
事实边界
- 本版本不联网,所以所有结论都基于视频数据本身。
- 视频中的说法默认视为:视频线索,不是外部已证实事实。
- 禁止写出“已官宣”“已发布”“已落地”“已实施”等确定性表述。
- 推荐使用以下措辞:
视频线索显示画面/标题显示疑似出现当前热视频中反复提及可作为重点跟踪线索
交互边界
- 不要在流程开始时直接从上下文替用户决定行业、本品、竞品。
TASK_DATE可以保留用户输入。COMPETITOR_BRANDS只能在本品确认后使用。- 缺失关键入参时才追问:
- 缺行业:先展示行业列表
- 缺本品:在品牌列表后追问
- 缺竞品:推荐 5 个默认竞品,等待用户确认
---
分析范围
只提取以下 7 类重点事件:
舆情事件新品发布发布会代言冠名行业政策大型营销活动
排除项:
- 普通带货口播
- 常规卖点介绍
- 单纯优惠促销
- 日常种草内容
- 无明确事件属性的内容
若同一品牌多条视频重复表达同一件事:
- 合并为一个事件
- 保留证据最强的 1-2 条代表视频信息
---
执行流程
Step 0:基础定位
SCRIPTS_DIR=$(dirname "$(find "${OPENCLAW_WORKSPACE_ROOT:-$PWD}" -maxdepth 6 -name "openapi_client.py" -path "*skills/byted-marketing-agent-competitive-watch/scripts/*" 2>/dev/null | head -1)")
SKILL_DIR=$(dirname "$SCRIPTS_DIR")
VENV_PY="$SKILL_DIR/venv/bin/python3"只要求:
- 能定位
openapi_client.py - 能使用
$VENV_PY执行脚本
若环境未就绪,只输出一句:
当前环境未就绪,暂时无法生成竞品重大事件报告。
---
Step 1:先拉行业列表,让用户选行业
无论用户是否提过行业,都先获取最新行业列表。
"$VENV_PY" "$SCRIPTS_DIR/openapi_client.py" --format text list-industries规则:
- 必须先展示行业列表,再让用户选行业。
- 不能跳过此步骤直接查数据。
- 若当前是非交互编排且缺行业,则终止并输出:
需要补充行业。
---
Step 2:规范化日期
TASK_DATE支持YYYYMMDD和YYYY-MM-DD- 若用户未传日期,则自动探查最新有数据日期
日期规范化:
TASK_DATE=$("$VENV_PY" -c 'import sys; from datetime import datetime; s=sys.argv[1].strip(); fmt="%Y%m%d" if len(s)==8 and s.isdigit() else "%Y-%m-%d"; print(datetime.strptime(s, fmt).strftime("%Y-%m-%d"))' "$TASK_DATE")自动探查最新日期:
DETECTED_DATE=$("$VENV_PY" "$SCRIPTS_DIR/openapi_client.py" --format text find-latest-date --category "$CATEGORY")规则:
- 用户指定了日期:优先用用户日期
- 用户没指定日期:用
DETECTED_DATE - 若探查失败:输出
当前时间段内未找到相关视频,建议更换行业或补充日期
---
Step 3:拉取候选视频
只拉 1 页,每页 500 条,作为事件候选池。
RESULT=$("$VENV_PY" "$SCRIPTS_DIR/openapi_client.py" \
--format json query \
--category "$CATEGORY" \
--query-type hot_video \
${TASK_DATE:+--task-date "$TASK_DATE"} \
--order-by "vv_all DESC" \
--page 1 \
--page-size 500)将数据落到 rows.json:
CW_SESSION="${CW_SESSION:-cw_$(date +%Y%m%d_%H%M%S)_$$}"
CW_TMP_DIR="${TMPDIR:-/tmp}/${CW_SESSION}"
mkdir -p "$CW_TMP_DIR"
ALL_ROWS_PATH="$CW_TMP_DIR/rows.json"
EVENTS_PATH="$CW_TMP_DIR/events.json"
printf '%s' "$RESULT" | "$VENV_PY" -c 'import json,sys; d=json.load(sys.stdin); json.dump(d.get("data", {}).get("data", []), sys.stdout, ensure_ascii=False)' > "$ALL_ROWS_PATH"若为空:
当前时间段内未找到相关视频,建议扩展日期范围或检查行业设置。
---
Step 4:抽取品牌列表,让用户确认本品
UNIQUE_BRANDS_PATH="$CW_TMP_DIR/unique_brands.json"
"$VENV_PY" "$SCRIPTS_DIR/normalize_brands.py" \
--phase extract \
--input "$ALL_ROWS_PATH" \
--output "$UNIQUE_BRANDS_PATH"读取后,按频次展示品牌列表(最多 30 个)。
规则:
- 必须让用户基于当前品牌列表确认本品。
- 若当前任务为非交互编排且缺本品,终止并输出:
需要补充本品。 - 若用户输入的本品不在列表中,也允许继续,但最终要注明:
本期数据中未检测到本品出现。
---
Step 5:推荐竞品并等待确认
若用户未给 COMPETITOR_BRANDS:
- 从当前品牌列表中,排除本品
- 推荐 5 个最相近、最活跃的品牌作为默认竞品
- 必须等待用户确认后再继续
若非交互编排:
- 可自动采用推荐竞品继续执行
冻结名单:
- 后续统一使用
FINAL_COMPETITOR_BRANDS - 后面不得再新增、删除、替换竞品
---
Step 6:LLM 直接阅读提取重点事件(强制无工具模式)
这一阶段的目标不是“再调用工具做抽取”,而是:
把 Step 3 已得到的候选视频数据作为上下文直接交给 LLM,由模型在当前上下文中直接阅读、比对、归纳、去重并输出事件 JSON。
强制规则
1. 禁止在 Step 6 调用任何额外工具、脚本、程序或搜索能力。 2. 禁止为了抽取事件再次调用 Python / shell / jq / grep / awk / render_report / 搜索脚本 / 记忆模块。 3. 禁止把“事件提取”外包给别的子代理、插件或函数。 4. 只允许使用当前会话里已经拿到的候选视频数据文本作为唯一输入。 5. 必须由当前 LLM 直接完成阅读、筛选、归类、合并和输出。 6. 若模型能力较弱,也不能退化为“调用工具帮忙提取”;宁可少提,也不要转为工具抽取。
执行方式
Step 3 得到 rows.json 后,只做一件事:
- 将候选视频中的关键字段整理为可读文本上下文后直接提供给 LLM
- 由 LLM 在单轮中完成重点事件提取
这里的“整理为可读文本上下文”仅指:
- 把已存在的数据字段按顺序放入提示上下文
- 不是再写一个抽取器去替模型做事件判断
本阶段允许使用的数据
仅允许使用候选视频中已有字段,例如:
- 品牌名/归一化品牌名
- 视频标题
- 口播/字幕/文案摘要(若原始数据中有)
- 画面描述字段(若原始数据中有)
- 发布时间
- 播放、点赞、评论、转发、收藏、5秒完看率等热度字段
- 视频链接
提取目标
- 只提取 7 类重点事件
- 优先提取竞品事件,其次提取行业政策
- 本品相关情况单独汇总,不混入竞品详情主表
提取规则
1. 只从视频内容里抽事件线索,不做外部核验。 2. 常规种草、普通促销、日常卖点介绍全部排除。 3. 同一事件合并,避免重复堆砌。 4. 事件摘要必须短、清楚、可读。 5. 非行业政策事件的 品牌名 必须严格属于 FINAL_COMPETITOR_BRANDS。 6. 若无法稳定归属到已选竞品,则丢弃该事件。 7. 不允许编造链接;链接只能来自原始视频数据本身。 8. 所有具体数值都只能来自原始数据;缺失则写 -。 9. 不要输出“分析过程”“推理过程”“中间草稿”,只输出最终 JSON 结果。 10. 若证据不足,宁可不收录,也不要靠常识补全事件。
给 LLM 的硬约束提示词
在执行 Step 6 时,必须显式加入下面这段约束:
你现在处于“强制无工具抽取模式”。
禁止调用任何工具、脚本、搜索、记忆、函数或外部能力。
禁止把事件提取交给 Python、Shell、正则脚本、子代理或任何程序。
你只能基于当前提供的候选视频文本上下文,直接阅读、比较、归纳并提取重点事件。
你必须自己完成:筛选、分类、去重、合并、生成 JSON。
若证据不足,请丢弃,不要脑补。
不要输出分析过程,不要解释,只输出最终 JSON。LLM 输出格式固定为 JSON
强制规则:LLM 生成的 JSON 必须完整写入文件 `$EVENTS_PATH`,禁止输出到 stdout、传输流或对话上下文。
{
"events": [
{
"品牌名": "品牌A",
"事件类型": "新品发布",
"事件摘要": "推出血橙西柚味新品",
"证据": "标题提到上新,画面出现新品包装",
"代表视频标题": "品牌A血橙西柚味上新",
"代表视频链接": "https://...",
"视频发布时间": "2026-03-20",
"视频发布距查询日天数": 3,
"视频时效": "近期",
"热度信号": "高",
"线索等级": "强",
"影响判断": "可作为春季上新动作重点跟踪"
}
]
}字段要求
品牌名:行业政策类可写{CATEGORY};其他必须来自FINAL_COMPETITOR_BRANDS事件类型:必须是 7 类之一事件摘要:8-30 字证据:来自标题/口播/字幕/画面的依据代表视频链接:只能填原始数据中真实存在的链接;没有就留空视频时效:仅允许近期/较早/未知线索等级:仅允许强/中/弱影响判断:一句业务化解释
若 events 为空,也必须继续输出最终报告,只是写:
未识别到明确重点事件
Step 7:直接按固定模板输出最终报告
不要调用 `render_report.py`。
输入来源:从文件读取事件 JSON
# 读取 Step 6 输出的事件 JSON 文件
if [ -f "$EVENTS_PATH" ]; then
EVENTS_JSON=$(cat "$EVENTS_PATH")
else
echo "未找到事件数据文件,无法生成报告"
exit 1
fi最终报告由 LLM 基于 $EVENTS_PATH 中的 JSON 数据,按下面模板输出。章节、顺序、表头都不要改。
---
固定输出模板
## 竞品重大事件报告|{行业}|{查询日期}
### 重点事件总览
| 事件类型 | 品牌/主体 | 视频发布时间 | 视频时效 | 线索等级 | 事件摘要 | 证据来源 | 热度信号 | 影响判断 |
|----------|-----------|--------------|----------|----------|----------|----------|----------|----------|
| 新品发布 | 品牌A | 2026-03-20 | 近期(3天) | 强 | 推出血橙西柚味新品 | 视频标题/画面显示上新 | 高 | 可作为春季上新动作重点跟踪 |
| 代言 | 品牌B | 2026-03-10 | 较早(13天) | 中 | 视频线索显示官宣代言合作 | 标题提及代言,画面出现代言人物料 | 中 | 有助于拉升品牌声量 |
| - | 品牌C | - | - | - | 未识别到明确重点事件 | - | - | - |
### 各竞品事件详情
#### {品牌名}
- **重点事件**:
- `{事件类型}`|视频发布时间 `{视频发布时间}`|线索等级 `{线索等级}`:{事件摘要}
- `{事件类型}`|视频发布时间 `{视频发布时间}`|线索等级 `{线索等级}`:{事件摘要}
- **代表证据**:{代表视频标题}|播放 {真实播放量或-}|点赞 {真实点赞量或-}|评论 {真实评论量或-}|转发 {真实转发量或-}|收藏 {真实收藏量或-}|5秒完看率 {真实5秒完看率或-}
- **线索说明**:基于当前热视频中的标题、口播、字幕、画面提炼,未做外部联网核验
- **潜在影响**:{对品牌声量、渠道、用户心智、营销节奏的潜在影响}
- **备注**:若没有重点事件,明确写“未识别到明确重点事件”
---
### 行业政策与赛道级变化
- {若有则写行业政策/赛道共性动作}
- 若没有,写:本次未识别到明确行业政策或赛道级重大变化
### 本品({本品名})相关情况
- 出现在 {N} 条视频中,识别到的重点事件:{如有则写}
- 若只有普通曝光但无重点事件,写:有曝光,但未识别到明确重点事件
- 若本期未出现,写:本期数据中未检测到本品出现
### 应对策略建议
1. **舆情响应**:针对争议或负面线索,建议持续跟踪评论区反馈与二次传播。
2. **新品与发布节奏**:若竞品集中上新,本品可评估是否需要加快新品沟通或强化卖点差异化。
3. **代言/冠名/活动跟进**:若竞品近期动作频繁,本品可评估是否需要补充品牌合作或事件营销。
4. **赛道观察**:对当前高频出现的事件主题做持续周度跟踪,避免单日样本误判。---
输出约束
### 重点事件总览与### 各竞品事件详情中的竞品集合必须严格等于FINAL_COMPETITOR_BRANDS- 即使某个竞品没有事件,也必须保留占位
- 不允许把母公司、合作方、平台方替换成新的竞品主体
- 没有真实链接时,写“无”,不要补造链接
- 没有真实数值时,写
- - 所有结论都要维持“视频线索”口径,避免确定性表述
- 不要输出 JSON、脚本、命令、调试信息
---
精简版错误处理
- 无行业:
需要补充行业 - 无本品:
需要补充本品 - 无数据:
当前时间段内未找到相关视频,建议扩展日期范围或检查行业设置 - 品牌为空:
当前数据中未检测到品牌信息,无法生成竞品重大事件报告 - 未识别到重点事件:照常输出报告,但写明
未识别到明确重点事件 - 环境未就绪:
当前环境未就绪,暂时无法生成竞品重大事件报告
---
触发示例
/competitive-watch
/competitive-watch 日期=20260315
/competitive-watch 行业=饮料 日期=20260315
/competitive-watch 本品=元气森林