关于 mlb-league-state-reader
用于读取 Yahoo Fantasy MLB 联盟状态的技能,供后续分析 Agent 获取阵容、排名、对阵、FAAB 和自由球员信息。它更新当前球队档案并生成带来源和置信度的信号文件。
主要功能
- 01读取阵容、排名和当前对阵
- 02从交易记录计算剩余 FAAB
- 03采集自由球员名单
- 04更新球队状态档案
- 05生成含来源与置信度的信号
适用场景
- 01为每日阵容分析准备最新联盟数据
- 02向弃标分析提供 FAAB 和自由球员信息
- 03让下游 Agent 读取统一状态,避免重复抓取
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ lyndonkl/ claude --skill mlb-league-state-reader安装后在 Claude Code 中输入/mlb-league-state-reader确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
resources/methodology.mdtemplate.mdresources/evaluators/rubric_mlb_league_state_reader.json详细介绍
MLB League State Reader
目录
示例
场景:2026-04-17 运行晨间简报。教练在启动 lineup-optimizer 前,需要当前阵容、对阵、FAAB 和排名。
首先读取的输入:
yahoo-mlb/context/league-config.md(联盟 ID 23756、球队 5、12 支球队、5x5 类别)yahoo-mlb/context/team-profile.md(此前已知的阵容框架)
Chrome 导航顺序(已通过身份验证):
https://baseball.fantasysports.yahoo.com/b1/23756/5— 阵容及每位球员今日的对手https://baseball.fantasysports.yahoo.com/b1/23756?lhst=stand— 排名和各类别排名https://baseball.fantasysports.yahoo.com/b1/23756/matchup— 本周对阵 Los Doyers 的正面对决https://baseball.fantasysports.yahoo.com/b1/23756/transactions— 截至目前已花费的 FAAB → 剩余金额https://baseball.fantasysports.yahoo.com/b1/23756/players?status=A— 顶尖自由球员(第 1 页)
提取的信息包:
| 字段 | 值 |
|---|---|
| 战绩 | 8-6-1 |
| 排名 | 12 支球队中第 5 |
| 已花费 FAAB | $14 |
| 剩余 FAAB | $86 |
| 本周对手 | Los Doyers |
| 实时对阵比分 | 4-3-3(我们在 R、HR、K 领先;在 OBP、ERA、WHIP 落后) |
| 已返回阵容 | 26 个名额全部填满 |
| 排名前 20 的自由球员 | 已为 waiver-analyst 收集 |
写入的输出:
context/team-profile.md— 就地更新阵容快照(位置、球员、MLB 球队、今日对手、状态)signals/2026-04-17-league-state.md— 包含 YAML frontmatter、source_urls 和置信度的信号文件
此后,每个下游 Agent(lineup-optimizer、waiver-analyst、category-strategist)都会读取此信号文件和 team-profile.md,而不是重新抓取 Yahoo。
工作流
复制此清单并跟踪进度:
League State Reader Progress:
- [ ] Step 1: Read context files (league-config.md + team-profile.md)
- [ ] Step 2: Pull Yahoo pages via Claude-in-Chrome (5 URLs)
- [ ] Step 3: Parse roster, standings, matchup, FAAB, free agents
- [ ] Step 4: Update team-profile.md in place
- [ ] Step 5: Emit signal file with frontmatter + source_urls
步骤 1:读取上下文文件
在访问 Yahoo 之前,先加载权威配置和最近一次已知状态。这既能核实联赛 ID/URL,也能提供用于对比的基础数据。
- 读取
yahoo-mlb/context/league-config.md— 确认联赛 ID 为 23756、球队为 5、阵容结构为 C/1B/2B/3B/SS/3OF/2UTIL/3SP/2RP/5P/3BN/3IL = 26,FAAB 预算为 $100 - 读取
yahoo-mlb/context/team-profile.md— 记录上次剩余的 FAAB,以及用于对比的上次阵容 - 读取
yahoo-mlb/context/frameworks/signal-framework.md— 确认信号文件格式 - 读取
yahoo-mlb/context/frameworks/data-sources.md— 确认 5 个 Yahoo URL
步骤 2:通过 Claude-in-Chrome 获取 Yahoo 页面
用户已在浏览器中完成身份验证。按顺序导航并解析页面文本;如果任何步骤失败,仅针对该 URL 跳转到降级模式(不要中止整个流程)。具体的工具调用顺序和页面解析模式,请参阅 resources/methodology.md。
- 球队页面:
https://baseball.fantasysports.yahoo.com/b1/23756/5 - 排名:
https://baseball.fantasysports.yahoo.com/b1/23756?lhst=stand - 对阵:
https://baseball.fantasysports.yahoo.com/b1/23756/matchup - 交易(用于 FAAB):
https://baseball.fantasysports.yahoo.com/b1/23756/transactions - 自由球员:
https://baseball.fantasysports.yahoo.com/b1/23756/players?status=A
步骤 3:解析并规范化
从每个页面提取结构化数据。逐行解析逻辑请参阅 resources/methodology.md;关于如何根据交易日志还原剩余 FAAB,请参阅 resources/methodology.md。
- 阵容:为 26 个位置中的每个位置记录
{slot, player, mlb_team, opp_today, status: active|IL|DTD|NA|BN} - 排名:胜-负-平战绩、排名、各类别排名(10 个类别)
- 对阵:对手名称、各类别的实时比分(本周截至目前 10 个类别的胜-负-平)
- FAAB:汇总本赛季交易记录中所有
-$N条目;剩余金额 = $100 - 已花费总额 - 自由球员:记录按 rostered% 排序的前 25 名,供 waiver-analyst 开始排名
步骤 4:就地更新 team-profile.md
确切的输出格式请参阅 resources/template.md。覆盖现有文件(不要追加);此文件应始终反映“截至最近一次运行”的状态。
- 标题:
## As of YYYY-MM-DD - 状态表:战绩、排名、剩余 FAAB、当前对手、已使用的球员签入次数、已使用的 IL 位置
- 阵容快照:完整的 26 个位置 YAML 代码块
- 未决问题:除非某个页面加载失败,否则留空
步骤 5:生成信号文件
按照信号框架的要求,写入 yahoo-mlb/signals/YYYY-MM-DD-league-state.md,并包含 YAML frontmatter。所有已导航的 URL 都必须出现在 source_urls 中。降级获取时将 confidence 降至 0.5;完全失败的字段降至 0.3 并标记出来。请参阅 resources/template.md。
- Frontmatter:
type: league-state、date、emitted_by: mlb-league-state-reader、confidence、source_urls[] - 正文:阵容表、排名表、对阵表、FAAB 账目、排名前 25 的自由球员
- 写入前通过
mlb-signal-emitter验证(如果本次运行中有此技能);否则直接写入
降级模式
Chrome 可能因多种原因而失败:标签页未打开、会话过期、Yahoo 限流、500 错误、DOM 无法读取。**绝不要中止整个运行。**按 URL 优雅地处理失败。
逐 URL 回退决策树:
| 失败 | 回退方案 |
|---|---|
| 导航错误/超时 | 重试一次。如果仍然失败,询问用户:“请粘贴 {URL} 的内容,我会从中解析。” |
| 会话过期(返回登录页面) | 询问用户:“请在 Chrome 标签页中登录 Yahoo,然后回复‘重试’。”不要尝试重新进行身份验证。 |
| 页面已加载但解析失败(布局未知) | 将 get_page_text 的前约 4000 个字符写入信号文件的 raw_capture: 下,并将该字段的置信度降至 0.4。 |
| 自由球员页面受限/为空 | 标记为 free_agents: [],并在信号中注明。waiver-analyst 仍可根据阵容 + 排名运行。 |
| 交易页面受限 | 询问用户:“你现在还剩多少 FAAB?交易页面顶部可以看到。”接受用户提供的数值;标记 faab_confidence: 0.6。 |
用户粘贴模板(适用于任何 Yahoo 页面):
“我无法访问
{URL}。请复制该页面上可见的表格(全选后粘贴到聊天中),我会从你粘贴的内容中提取所需字段。”
使用与实时页面相同的正则表达式/行模式解析粘贴的文本。请参阅 resources/methodology.md。
防护规则
-
**绝不要假定阵容还是昨天的样子。**弃用名单每天清空,交易随时可能生效。每次运行开始时都要重新读取 Yahoo 球队页面,即使
team-profile.md看起来是最新的也不例外。 -
**剩余 FAAB 是计算得出的,不是直接显示的。**Yahoo 的界面有时会显示“FAAB Balance”,有时不会。权威计算方式是:
$100 减去本赛季交易页面上所有中标金额的总和。不要相信单个可见数值胜过交易记录。 -
**引用每个 URL。**信号文件的
source_urls:列表必须包含实际访问过的每个 Yahoo 页面。如果某个页面因降级而被跳过,请在信号正文中注明,不要默默略过。 -
**不要在下游重复抓取。**此技能发出今天的联赛状态信号后,lineup-optimizer / waiver-analyst / category-strategist 必须读取该信号,而不是重新访问 Yahoo。重复抓取会浪费 token,还可能导致数据不一致。
-
**覆盖
team-profile.md;不要追加内容。**该文件记录的是“当前状态”。保留昨天的阵容会污染它。只追加的日志位于tracker/decisions-log.md,不在此处。 -
**状态值使用规范化枚举。**将 Yahoo 的标签(
P、DTD、IL-10、IL-60、NA、SUSP)映射到规范化枚举:active | BN | IL | DTD | NA | SUSP。下游 Agent 根据枚举分支处理,而不是依据 Yahoo 的字符串。 -
**今天的对手可能为空。**休赛日、比赛延期和双重赛都会产生异常的
opp_today值。准确记录 Yahoo 显示的内容(@TEX、TEX、Off、PPD、DH1/DH2)——不要规范化掉下游 lineup-optimizer 需要的信息。 -
**不要发出
source_urls为空的信号。**如果所有页面都失败,请写入正文为空、confidence: 0.0的信号,并向教练醒目提示:“无法访问 Yahoo——任何下游 Agent 运行前都需要粘贴内容或重试。”
快速参考
五个 Yahoo URL(来自 context/frameworks/data-sources.md):
Team: https://baseball.fantasysports.yahoo.com/b1/23756/5
Standings: https://baseball.fantasysports.yahoo.com/b1/23756?lhst=stand
Matchup: https://baseball.fantasysports.yahoo.com/b1/23756/matchup
Transactions: https://baseball.fantasysports.yahoo.com/b1/23756/transactions
Free agents: https://baseball.fantasysports.yahoo.com/b1/23756/players?status=A
Chrome 工具顺序(先通过 ToolSearch 加载,然后调用):
1. mcp__claude-in-chrome__tabs_context_mcp (confirm active tab, auth state)
2. mcp__claude-in-chrome__navigate (go to URL)
3. mcp__claude-in-chrome__get_page_text (extract DOM text)
4. mcp__claude-in-chrome__read_page (structured read if text fails)
阵容位置顺序(用于 team-profile YAML;与 league-config.md 一致):
C, 1B, 2B, 3B, SS, OF, OF, OF, UTIL, UTIL, SP, SP, SP, RP, RP, P, P, P, P, P, BN, BN, BN, IL, IL, IL
状态枚举映射:
| Yahoo | 标准化后 |
|---|---|
| (空白) / P | active |
| BN | BN |
| DTD | DTD |
| IL-10 / IL-60 / IL | IL |
| NA | NA |
| SUSP | SUSP |
Signal 前置元数据(必需字段):
---
type: league-state
date: 2026-04-17
emitted_by: mlb-league-state-reader
variant_synthesis: false
confidence: 0.9
source_urls:
- https://baseball.fantasysports.yahoo.com/b1/23756/5
- https://baseball.fantasysports.yahoo.com/b1/23756?lhst=stand
- https://baseball.fantasysports.yahoo.com/b1/23756/matchup
- https://baseball.fantasysports.yahoo.com/b1/23756/transactions
- https://baseball.fantasysports.yahoo.com/b1/23756/players?status=A
---
关键资源:
- resources/template.md:team-profile.md 输出格式、signal 文件输出格式、阵容 YAML 架构、自由球员表格架构
- resources/methodology.md:Yahoo 导航顺序、各页面的解析模式、FAAB 重建、粘贴内容解析、降级模式提示词
- resources/evaluators/rubric_mlb_league_state_reader.json:8 项评分标准(阵容完整性、FAAB 准确性、URL 引用、回退处理等)
所需输入:
- Chrome 中已通过身份验证的 Yahoo Fantasy 会话(由用户负责)
context/league-config.md(联盟 ID、球队 ID、阵容结构)context/team-profile.md(先前状态,可能是占位文件)
生成的输出:
- 更新后的
context/team-profile.md(覆盖;反映今天的状态) signals/YYYY-MM-DD-league-state.md(包含前置元数据 + source_urls)- 如果任何页面加载失败,则向用户提供降级模式提示词