← ClaudeAtlas

hackathon-radarlisted

黑客松雷达——扫描国内黑客松/开发者大赛/AI 应用赛,生成每日简报,重点整理「报名方式」(报名截止、报名入口、主办方、奖金、赛题方向),并推送到飞书 + 邮件。 触发词:「黑客松雷达」「扫黑客松」「扫一下黑客松」「最近有什么黑客松」「黑客松推送」「hackathon-radar」「有什么 AI 大赛报名」「跑一遍黑客松」。 即使用户只说「看看最近有啥比赛能报名」且上下文是开发者/AI/大学生竞赛,也应触发。 不触发:具体某场比赛的技术方案讨论、写参赛作品代码(那不是本 skill)。
duliangkuan/hackathon-radar · ★ 0 · AI & Automation · score 70
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` | 主办方