关于 rules-lawyer
Rules Lawyer 是用于回答 Magic: The Gathering 规则问题的 Skill,通过引用 Comprehensive Rules 和 Scryfall 单卡裁定提供依据。它可独立处理查询,也可由 deck-wizard 或 cube-wizard 调用,并要求引用规则而非凭记忆作答。
主要功能
- 01按编号、术语或短语查询规则
- 02获取 Scryfall 单卡裁定
- 03要求引用 CLI 返回结果
- 04对未解决问题继续升级检索
- 05支持 deck-wizard 和 cube-wizard 调用
适用场景
- 01核实关键字异能的规则
- 02判断特定卡牌涉及的互动
- 03在调整套牌时研究时机或触发问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dan-blanchard/ mtg-skills --skill rules-lawyer安装后在 Claude Code 中输入/rules-lawyer确认已加载。
附带文件pyproject.tomluv.lock
详细介绍
规则顾问
通过引用实际的综合规则(CR)和 Scryfall 的单卡裁定,回答《万智牌》规则问题。既可独立使用(“辉映异能会因我施放的咒语触发吗?”),也可在 deck-wizard / cube-wizard 调整套牌时遇到触发互动或时机问题时,通过 Skill 工具调用。
可以把它看作项目的法律研究部门:CR 是成文法,Scryfall 裁定是判例法。始终引用具体条文,绝不要凭记忆转述。
铁律
绝不要依据训练数据回答规则问题。 每个答案都必须引用至少一条具体的 CR 规则编号(例如“702.19a”),并附上 CLI 返回的规则文本。如果 Agent 不确定,或 CLI 没有返回匹配结果,就应如实说明并升级处理(阶段 3),而不是凭空编造。自信地捏造规则编号,比诚实地说“我找不到匹配的规则——这是最接近的相关条文”更糟糕。
设置(首次运行)
uv sync --directory <skill-install-dir>
download-rules --output-dir <working-dir>
download-mtgjson # only for local-first rulings-lookup (API fallback needs no bulk)
download-rules 会下载最新的《万智牌》综合规则 TXT 文件,并进行 24 小时新鲜度检查(与 download-mtgjson 的约定一致)。它会抓取 CR 首页上的最新 MagicCompRules*.txt 下载链接,并将文件保存为
<working-dir>/comprehensive-rules-YYYYMMDD.txt。
工作流
阶段 1:判断问题类型
运行任何 CLI 之前,先判断这是哪类规则问题。查询模式与 rules-lookup 标志一一对应。
| 问题形式 | CLI |
|---|---|
| “702.19a 规则说了什么?” | rules-lookup --rule 702.19a |
| “践踏的规则是什么?” / “定义‘牌库’。” | rules-lookup --term trample |
| “哪些规则提到了‘战斗伤害步骤’?” | rules-lookup --grep "combat damage step" |
| “Card Name 如何与 X 互动?” | rulings-lookup --card "Card Name" + 后续查询 CR |
| “根据这副套牌,Y 是否存在堆叠/层相关问题?” | 使用 deck-wizard 的 cut-check --cite-rules,然后用 rules-lookup 交叉核对 |
关键字 → 术语映射。 大多数 CR 关键字(践踏、死触、连击、威慑、闪现、敏捷、辟邪、不灭等)都对应一条术语表词条,其 see_rules 字段指向权威规则。对于这些关键字,优先使用 --term:一次往返即可同时获得术语表定义和规则编号。
阶段 2:查询
针对已分类的问题,恰好运行一次 rules-lookup。CLI 会写入一个 JSON 伴随文件,并打印易读的摘要。如果摘要已回答问题,就此为止——不要为了升级处理而升级处理。
# Exact rule number
rules-lookup --rule 702.19a --rules-file <wd>/comprehensive-rules-*.txt
# Glossary term (preferred for keyword questions)
rules-lookup --term "deathtouch" --rules-file <wd>/comprehensive-rules-*.txt
# Regex search — use a narrow pattern or you'll get noise
rules-lookup --grep "can't be blocked by more than" --rules-file <wd>/comprehensive-rules-*.txt --limit 5
对于单卡问题,优先先查裁定,再查其中引用的规则:
rulings-lookup --card "Sensei's Divining Top" --bulk-data <wd>/default-cards.json
# Then for any CR rule referenced in a ruling:
rules-lookup --rule 116.1 --rules-file <wd>/comprehensive-rules-*.txt
第 3 阶段:升级处理(仅在必要时)
如果 rules-lookup 未找到匹配项,或匹配项明显与问题不符,请执行以下操作之一:
- 扩大搜索范围。 使用同义词尝试
--term查询,或使用更宽泛的--grep模式。CR 术语表很大(2024 年版 CR 约有 670 个术语)——漏掉术语通常意味着查询不佳。 - 读取章节片段。 对于复杂的多规则推理(例如层之间的相互作用、同时生效的替代效应、触发式与起动式异能之间的堆叠顺序),直接从已下载的 TXT 中
Read相关章节:500-series:回合结构600-series:咒语、异能、效应(包括堆叠)700-series:补充规则、关键字异能/动作800-series:多人游戏 使用Read <comprehensive-rules-*.txt> offset=<line> limit=<n>仅提取相关范围。
- 启动子 Agent。 对于需要跨多个章节推理的问题(例如“层如何与被替代效应关闭的静止式异能相互作用”),启动一位已预载相关章节文本的专业 Agent。提示子 Agent 给出带规则引用的答案,而不是改述。
示例——升级路径 #2(章节片段):
用户提问:“我的特菲力的谜盒触发式异能会和法治之则产生互动吗——我还能抽到新的手牌吗?”
这是一个替代效应与触发式异能之间的互动。先进行一次简单查询:
rules-lookup --term "replacement effect" --rules-file <wd>/comprehensive-rules-*.txt
输出:术语表条目指向规则 614。现在读取该类别本身,看看抽牌是否属于“替代”:
rules-lookup --rule 614 --rules-file <wd>/comprehensive-rules-*.txt
如果 614 的正文较简略(类别标题只是标题),请找到行号并 Read TXT 中的完整章节范围:
grep -n "^614\." <wd>/comprehensive-rules-*.txt | head -1
# Prints e.g.: "3108:614. Replacement Effects"
然后读取第 3108-3250 行(这是典型的类别长度),查看所有子规则:
Read <wd>/comprehensive-rules-20260417.txt offset=3108 limit=140
大多数规则裁定类问题都能在第 2 阶段解决——只有无法解决的问题才需要升级处理。
第 4 阶段:撰写答案
每个答案都必须包含以下三部分:
- 结论。 用一句话说明会发生什么/裁定是什么。
- 引用。 每条引用的规则编号都必须来自 CLI 输出,不能凭记忆引用。包含 CLI 返回的逐字规则原文(截取与问题直接相关的句子)。
- 边缘情况。 如果裁定取决于某个条件(“仅当来源具有死触时”“仅在你的维持阶段”),请明确指出该条件。如果问题听起来像是在问某个常见陷阱,但实际并非如此,也请简要说明。
答案示例:
结论。 是的——同时具有践踏和死触的生物,只需给每个阻挡者分配 1 点伤害,就可以视为“致命”,然后将剩余伤害践踏过去。
CR 702.19b:“……攻击生物的操控者无需对所有这些阻挡生物分配致命伤害,但无论如何,若没有为每个阻挡生物至少分配致命伤害,就不能对玩家、鹏洛客或战役分配战斗伤害。”
CR 702.2b:“韧性大于 0 的生物,如果自上次检查基于状态的动作以来,曾受到具有死触的来源造成的伤害,则会作为基于状态的动作被消灭。”
边缘情况。 来源必须在分配伤害时具有死触;在战斗中途移除死触(例如通过保护异能或连续效应第 6 层中的静止式异能)会破坏这种互动。层次详见 CR 613。
决策表
| 任务 | 工具 |
|---|---|
| 按编号查找规则 | rules-lookup --rule <n> |
| 查找关键词 / 定义术语 | rules-lookup --term <name> |
| 搜索提及某个短语的规则 | rules-lookup --grep "<regex>" |
| 查询单张牌的裁定(Scryfall「判例」) | rulings-lookup --card "<name>" --bulk-data <path> |
| 批量查询一副牌的裁定 | rulings-lookup --batch <deck.json> --bulk-data <path> |
| 在本地下载 / 刷新 CR | download-rules --output-dir <wd> |
| 下载 MTGJSON 卡牌数据 | `download-mtgjson |
| 将卡牌名称解析为 Oracle 文本 | scryfall-lookup "<name>" --bulk-data <path> |
所有 CLI 都会向 stdout 输出易读摘要,并在绝对路径下生成完整的 JSON
附属文件(前缀为 rules-lookup-、rulings-lookup-
等)。若需要摘要中省略的字段,请使用 Read 读取附属文件。
委派:其他技能何时应调用此技能
deck-wizard 的 cut-check 和 legality-audit 支持 --cite-rules
标记。启用后,它们会针对任何被标记的关键词交互调用 rules-lookup --term <keyword>,
并将 CR 引用附加到 JSON 输出中。该标记涵盖常见情况;如果情况更复杂
(Agent 不确定某项删牌建议为何被标记,或用户询问“审计器为什么会提出异议?”),请调用此技能。
临时文件路径
在一个会话中重复使用以下稳定路径:
/tmp/rules-scratch.json、/tmp/rulings-scratch.json。
/tmp 文件会跨会话保留。会话开始时,在首次 Write 之前先 Read 你计划重用的每个临时路径;或者按顺序运行 Write,并在执行依赖它的 Bash 调用前确认成功。
路径要求
- 仅使用绝对路径。
uv会将工作目录重设为技能安装目录;相对路径会解析到错误的根目录。 - **规则文件:**存放在调用方技能的工作目录下(例如
<wd>/comprehensive-rules-20260417.txt),而不是技能安装目录。 - **裁定缓存目录:**会自动使用
$TMPDIR/scryfall-rulings/;调用方无需管理。