hackathon-radarlisted
Install: claude install-skill duliangkuan/hackathon-radar
# 黑客松雷达 hackathon-radar
**一句话**:不靠脆弱爬虫,靠 Claude 自适应读页 + 一份人工精选的源清单,扫出国内正在报名的黑客松,把「怎么报名」整理清楚,推到飞书和邮箱。
## 何时用
用户想知道"最近有什么黑客松/AI 大赛能报名",或要一份定期的黑客松简报。用户手动喊一声就跑一轮。
## 目录约定
- 源清单:`sources.yaml`(同目录)—— 分层的国内黑客松信息源,皇冠资产
- 状态机:`scripts/radar.py` —— 去重/分类/归档,纯 stdlib
- 状态文件:`../state/seen.json`(相对仓库根)—— 已推过的活动,用于去重
- 归档:`../digests/YYYY-MM-DD.md` —— 每期简报存档
- 推送配置:`config.json`(同目录,可选)—— 飞书目标 chat/user id
> 当本 skill 被复制进 `~/.claude/skills/hackathon-radar/` 使用时,state/digests 落在该 skill 目录下即可;用 `radar.py --state <path>` 显式指定。
---
## 执行流程(跑一轮 = 6 步)
### Step 1 · 读源清单
Read `sources.yaml`。拿到三层源 + `watch_queries` + 已排除清单(别浪费时间去碰已排除的源)。
### Step 2 · 扫描发现(列表层)
目标:捞出"当前正在报名 / 即将开始"的黑客松候选。**默认只扫 tier 1 + watch_queries**(快、稳)。用户说"扫全一点/深扫"再加 tier 2。
- **tier 1(fetch: html)**:对每个源 `WebFetch` 其 `url`,让模型从列表里挑出**未截止**的黑客松/大赛条目,记下标题 + 详情页链接。忽略线下沙龙、纯算法刷榜(除非用户要)。
- **watch_queries**:逐条 `WebSearch`,捞清单外新开的临时黑客松(尤其企业/AI Agent 赛)。
- **tier 2(可选,fetch: spa)**:raw WebFetch 常拿不到字段。要覆盖天池/讯飞这类,两条路:
- 优先:`WebSearch "<源名> 黑客松 2026 报名"` 迂回拿到具体活动落地页再抓;
- 或:调用 `browser-cdp` skill 渲染后再读(重,用户明确要才上)。
- **tier 3(fetch: search)**:只跑其 `search_queries`,不轮询首页。
⚠️ **别编造**:只登记你真的在页面/搜索结果里看到的活动。拿不准是否在报名,进 Step 3 详情页确认,确认不了就标 `active: 存疑` 并在简报里注明"待核实",不硬报。
### Step 3 · 详情富集(详情层)⭐最关键
列表页只有标题。对 Step 2 每个候选,`WebFetch` 其详情页,抽出这些字段(这是用户最在意的):
| 字段 | 说明 |
|---|---|
| `title` | 活动全名 |
| `deadline` | **报名截止** `YYYY-MM-DD`(拿不到留 null,别猜) |
| `register` | **⭐报名方式**:官网表单链接 / 小程序 / 报名群 / 邮件报名——写清楚"点哪、怎么报" |
| `organizer` | 主办方