mcpField
R
rules-lawyer

rules-lawyer

github.com/dan-blanchard其他22277 次安装2 天前更新
代码仓库

关于 rules-lawyer

Rules Lawyer 是用于回答 Magic: The Gathering 规则问题的 Skill,通过引用 Comprehensive Rules 和 Scryfall 单卡裁定提供依据。它可独立处理查询,也可由 deck-wizard 或 cube-wizard 调用,并要求引用规则而非凭记忆作答。

主要功能

  1. 01按编号、术语或短语查询规则
  2. 02获取 Scryfall 单卡裁定
  3. 03要求引用 CLI 返回结果
  4. 04对未解决问题继续升级检索
  5. 05支持 deck-wizard 和 cube-wizard 调用

适用场景

  1. 01核实关键字异能的规则
  2. 02判断特定卡牌涉及的互动
  3. 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 未找到匹配项,或匹配项明显与问题不符,请执行以下操作之一:

  1. 扩大搜索范围。 使用同义词尝试 --term 查询,或使用更宽泛的 --grep 模式。CR 术语表很大(2024 年版 CR 约有 670 个术语)——漏掉术语通常意味着查询不佳。
  2. 读取章节片段。 对于复杂的多规则推理(例如层之间的相互作用、同时生效的替代效应、触发式与起动式异能之间的堆叠顺序),直接从已下载的 TXT 中 Read 相关章节:
    • 500-series:回合结构
    • 600-series:咒语、异能、效应(包括堆叠)
    • 700-series:补充规则、关键字异能/动作
    • 800-series:多人游戏 使用 Read <comprehensive-rules-*.txt> offset=<line> limit=<n> 仅提取相关范围。
  3. 启动子 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 阶段:撰写答案

每个答案都必须包含以下三部分:

  1. 结论。 用一句话说明会发生什么/裁定是什么。
  2. 引用。 每条引用的规则编号都必须来自 CLI 输出,不能凭记忆引用。包含 CLI 返回的逐字规则原文(截取与问题直接相关的句子)。
  3. 边缘情况。 如果裁定取决于某个条件(“仅当来源具有死触时”“仅在你的维持阶段”),请明确指出该条件。如果问题听起来像是在问某个常见陷阱,但实际并非如此,也请简要说明。

答案示例:

结论。 是的——同时具有践踏和死触的生物,只需给每个阻挡者分配 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>
在本地下载 / 刷新 CRdownload-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/;调用方无需管理。

评论

支持 Markdown