srdcheck 是一个为“运行游戏的智能体”设计的确定性规则裁决工具,自称“智能体的规则律师”。它针对 System Reference Document 5.2.1 的特定规则给出机器可判定的结论:应用规则时附带引用、结果可复现、离线运行,并且对超出已发布范围的问题会诚实拒绝。仓库内以 SRD 5.2.1 适配器作为参考实现,同时提供 5.1 适配器。
用途与定位 该项目面向多个智能体共享同一演化游戏状态的场景:GM、玩家智能体、规则裁判、工具调用者。多个模型各自阅读 SRD 后,对擒抱、专注、死亡豁免等会给出不同裁定,导致共享状态悄然失去同步。srdcheck 提供一个共同的确定性规则轨道,所有人调用得到相同的原子结论与引用,每次应用规则的结果都带有可审计的来源,桌面裁定则保留独立的裁定谱系。它把自己描述为“轨道”而非知识库:输入结构化事实,输出确定性的受范围约束结果。
主要能力
- 针对命名且有边界的问题给出判定,例如某个提议是否通过已建模的行动经济检查、还剩哪些已建模的预算选项种类。
- 退出码语义:0 表示通过已检查范围,1 表示与已检查范围冲突,2 表示无法裁决。
- 判定模式 4.0 在每条结果上保留 coverage_level、checked_scope、unchecked_scope、assumptions,并分别报告 asserted/consumed/derived/missing 事实、建议性的 rule_result、受范围的 DM table_decision 以及明确的状态变更。
- 状态提交采用 fail-closed:event.apply 生成绑定到精确求值状态的幂等转换提议,transition.commit 会拒绝过期或乱序的提议,重试返回相同语义回执;原子状态写入仍由 agent-DM 或宿主执行。
- 桌面政策持久化:提供可移植的 table-policy manifest 与 request/encounter/session/campaign ID,匹配的裁定自动应用、与 SRD 结果区分并携带明确的桌面权威谱系。
- 确定性且快速:判定路径中没有任何 LLM 调用,本地离线运行;CI 要求 100 条判定 p95 延迟低于 100 ms。
- 可观测性:可选择开启仅元数据的生命周期事件,包含请求/判定 ID、版本、拒绝类别与耗时,输出到 stderr 或调用方 sink;按契约排除原始提示、状态、裁定、引用与错误信息,SRDCheck 本身不持久化任何内容。
- 面向智能体优先:提供 MCP 与 CLI、--pipe、--schema,仓库根有 tool.json。
- 规则集即适配器:内核不包含任何游戏知识,所有规则内容由适配器包加载,每个适配器携带自己的来源清单(源文档、哈希、许可、署名)。SRD 5.2.1 适配器在本仓库作为参考实现;任何人都可构建其他规则集的适配器。
使用方式
- 智能体从 SKILL.md 入手,其中说明何时调用、示例与 MUST/MUST NOT。
- MCP:安装后命令为 srdcheck-mcp;也可从克隆仓库运行。每次调用以结构化内容返回与 CLI 相同的判定对象。
- CLI:提供 --pipe 与 --schema,query 与 --pipe 可接受 --table-evaluation,用于需要共享 table.evaluation/1.0 信封的宿主;可选 --table-context JSON 可加入调用方自有的 session_id、entity_refs 与 correlation_id。判定输出在 stdout,仅元数据的规范 NDJSON 输出到 stderr。
- Python 库:通过稳定的版本化接口加载某规则集内容,不耦合内部文件路径;适配器标识携带版本,load_adapter("srd-5.2.1") 与 load_adapter("srd-5.1") 可共存。提供跨版本版本陷阱检测(edition_check,例如 2014 的“Goblin”在 2024 为“Goblin Warrior”)。
适用场景 适合多智能体共享状态的桌面游戏运行环境,包括由智能体担任授权 DM 的场景;可嵌入到他人的 DM 产品、VTT 或智能体中。也适合需要一致、可引用规则裁决的评测与裁判流程,仓库包含 bench/ 规则保真裁判:带 SRD 引用金标准的版本化问题集、可给任意模型或智能体打分的 harness(gemini:、ollama: 或 cmd:your-agent)。
限制与边界 当前 SRD 适配器覆盖战斗回合基础,尚未检查:特性前置条件(turn.plan 只判断行动经济,不验证某特性是否授予该动作)、单个法术的具体效果(伤害/HP、死亡豁免、豁免投掷已建模,但法术如火球的 8d6、人类定身术的麻痹效果不处理;srdcheck 计算豁免,不掷骰也不施加法术特有效果)、状态覆盖因查询面而异(15 个 SRD 状态已登记并逐条分类,但每个查询只声称消费它实际使用的效果;位置几何、先攻顺序、潜行/察觉对抗仍是明确边界)。SRD 5.2.1 之外的内容返回退出码 2(管辖权)。0.2.1 适配器对拼写错误或未知查询字段会明确拒绝并指出违规字段,绝不静默使用默认值。只有能改变结果的事实时才会请求补充;无意义输入(负速度、99 级法术、力竭超过 6)返回退出码 2。每当存疑时,srdcheck 会拒绝,因为错误判定是唯一不可原谅的 bug。