Dmcheck
What it does
Deterministic conduct verdicts for live tabletop sessions - CI for running a game.
- Connects Läuft auf deinem Computer
- Account or key No key needed
- Category Spiele, Sport, Essen & Lernen
Installation
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
3/3 Prüfungen bestanden · Läuft auf deinem Computer · ✓ Befehle geprüft am 14. Nov. 2026
Zuerst: Welche KI nutzt du?
Wähle deine App, dann erscheinen die Schritte unten.
Klappt mit Claude, aber erst etwas vorbereiten
Installiere zuerst Python (uv) auf deinem Computer (nur einmal) · Nur in der Claude-App für den Computer (Windows oder Mac), nicht im Web oder auf dem Handy
Von der KI installieren lassen
Kopiere diese Nachricht in einen Claude-Chat. Die KI prüft deinen Rechner, sagt dir, welche Datei sie ändert, und wartet jedes Mal auf dein OK.
Installiere bitte den MCP server Dmcheck für Claude auf diesem Rechner, in dieser Reihenfolge: 1) Prüfe uv mit uv --version. Fehlt es, sag mir, dass ich es von https://docs.astral.sh/uv/getting-started/installation/ installiere; installiere es nicht selbst. 2) Verwende nur diese Konfiguration (von PopNx MCP geprüft): { "mcpServers": { "dmcheck": { "command": "uvx", "args": [ "dmcheck" ] } } } 3) Nenne mir den vollständigen Pfad der Datei, die du änderst, oder den Befehl, den du ausführst, und warte auf mein OK. 4) Kein Schlüssel nötig. 5) Führe das Vereinbarte aus und prüfe, dass die Tools von Dmcheck wirklich erscheinen.Diese Nachricht enthält keinen Schlüssel. Wird einer gebraucht, bittet dich die KI, ihn selbst in die Datei oder das Feld der App einzufügen.
uv installieren (falls noch nicht vorhanden)
Schon installiert? Zuerst prüfen · Öffne das Terminal, gib diesen Befehl ein und drücke Enter
uv --version- Eine Versionsnummer wie uv … = installiert, diesen Schritt überspringen
- "command not found" (unter Windows "is not recognized") = noch nicht installiert, oder gerade installiert und das Terminal muss neu geöffnet werden
So öffnest du das Terminal
Mac: ⌘ + Leertaste drücken, Terminal eingeben, Enter
Windows: Start öffnen, Windows PowerShell eingeben, dann Öffnen
Noch nicht installiert: uv hat keinen Klick-Installer. Kopiere den Einzeiler für dein System (macOS oder Windows) von der offiziellen uv-Seite ins Terminal · Python muss nicht extra installiert werden, uv lädt es bei Bedarf selbst
Download-Seite von uv öffnen ↗
Danach das Terminal schließen, neu öffnen und denselben Befehl erneut ausführen. Es muss eine Versionsnummer erscheinen:
uv --versionEinmal installieren, gilt für alles, was uv braucht
Einstellungsdatei der Claude-Desktop-App öffnen
SettingsDeveloperEdit Config
Diese Einstellungen einfügen und speichern
{ "mcpServers": { "dmcheck": { "command": "uvx", "args": [ "dmcheck" ] } } }Claude beenden und neu öffnen
Ausprobieren
Nutze Dmcheck und sag mir, was du für mich tun kannst; zeig mir dann eine Sache✓ Wenn Claude sagt, dass es Dmcheck nutzt, oder ein Werkzeug von Dmcheck in der Antwort zeigt, bist du verbunden
Menünamen am 11. Nov. 2026 mit der Hilfe von Anthropic abgeglichen · dein Bildschirm kann je nach App-Version leicht abweichen
ChatGPT kann Dmcheck noch nicht verbinden
Dmcheck läuft auf deinem Computer, aber ChatGPT verbindet nur Server, die im Web laufen
Das kannst du stattdessen tun
A · Eine App nutzen, die Dmcheck verbinden kann
- Installiere zuerst Python (uv) auf deinem Computer (nur einmal) · Nur in der Claude-App für den Computer (Windows oder Mac), nicht im Web oder auf dem Handy
- Installiere zuerst Python (uv) auf deinem Computer (nur einmal)
- Installiere zuerst Python (uv) auf deinem Computer (nur einmal)
- Installiere zuerst Python (uv) auf deinem Computer (nur einmal)
B · Andere in Spiele, Sport, Essen & Lernen, die mit ChatGPT funktionieren
Aus den meistgenutzten derselben Kategorie, nur solche, die per Adresse ohne Schlüssel verbinden
- ShipSwift✓ ChatGPT
- Anime Garden✓ ChatGPT
- Summer Engine✓ ChatGPT
Klappt mit Claude Code, aber erst etwas vorbereiten
Installiere zuerst Python (uv) auf deinem Computer (nur einmal)
Von der KI installieren lassen
Kopiere diese Nachricht in einen Claude Code-Chat. Die KI prüft deinen Rechner, sagt dir, welche Datei sie ändert, und wartet jedes Mal auf dein OK.
Installiere bitte den MCP server Dmcheck für Claude Code auf diesem Rechner, in dieser Reihenfolge: 1) Prüfe uv mit uv --version. Fehlt es, sag mir, dass ich es von https://docs.astral.sh/uv/getting-started/installation/ installiere; installiere es nicht selbst. 2) Verwende nur diese Konfiguration (von PopNx MCP geprüft): claude mcp add --scope user dmcheck -- uvx dmcheck 3) Nenne mir den vollständigen Pfad der Datei, die du änderst, oder den Befehl, den du ausführst, und warte auf mein OK. 4) Kein Schlüssel nötig. 5) Führe das Vereinbarte aus und prüfe, dass die Tools von Dmcheck wirklich erscheinen.Diese Nachricht enthält keinen Schlüssel. Wird einer gebraucht, bittet dich die KI, ihn selbst in die Datei oder das Feld der App einzufügen.
uv installieren (falls noch nicht vorhanden)
Schon installiert? Zuerst prüfen · Öffne das Terminal, gib diesen Befehl ein und drücke Enter
uv --version- Eine Versionsnummer wie uv … = installiert, diesen Schritt überspringen
- "command not found" (unter Windows "is not recognized") = noch nicht installiert, oder gerade installiert und das Terminal muss neu geöffnet werden
So öffnest du das Terminal
Mac: ⌘ + Leertaste drücken, Terminal eingeben, Enter
Windows: Start öffnen, Windows PowerShell eingeben, dann Öffnen
Noch nicht installiert: uv hat keinen Klick-Installer. Kopiere den Einzeiler für dein System (macOS oder Windows) von der offiziellen uv-Seite ins Terminal · Python muss nicht extra installiert werden, uv lädt es bei Bedarf selbst
Download-Seite von uv öffnen ↗
Danach das Terminal schließen, neu öffnen und denselben Befehl erneut ausführen. Es muss eine Versionsnummer erscheinen:
uv --versionEinmal installieren, gilt für alles, was uv braucht
Terminal öffnen
Mac: Command+Leertaste drücken und Terminal tippen · Windows: PowerShell öffnen
Diesen Befehl einfügen und Enter drücken
claude mcp add --scope user dmcheck -- uvx dmcheck/mcp in Claude Code eingeben
Dmcheck sollte in der Liste als verbunden erscheinen
Ausprobieren
Nutze Dmcheck und sag mir, was du für mich tun kannst; zeig mir dann eine Sache✓ Wenn Claude Code sagt, dass es Dmcheck nutzt, oder ein Werkzeug von Dmcheck in der Antwort zeigt, bist du verbunden
Menünamen am 11. Nov. 2026 mit der Hilfe von Anthropic abgeglichen · dein Bildschirm kann je nach App-Version leicht abweichen
Klappt mit Cursor, aber erst etwas vorbereiten
Installiere zuerst Python (uv) auf deinem Computer (nur einmal)
Von der KI installieren lassen
Kopiere diese Nachricht in einen Cursor-Chat. Die KI prüft deinen Rechner, sagt dir, welche Datei sie ändert, und wartet jedes Mal auf dein OK.
Installiere bitte den MCP server Dmcheck für Cursor auf diesem Rechner, in dieser Reihenfolge: 1) Prüfe uv mit uv --version. Fehlt es, sag mir, dass ich es von https://docs.astral.sh/uv/getting-started/installation/ installiere; installiere es nicht selbst. 2) Verwende nur diese Konfiguration (von PopNx MCP geprüft): { "mcpServers": { "dmcheck": { "command": "uvx", "args": [ "dmcheck" ] } } } 3) Nenne mir den vollständigen Pfad der Datei, die du änderst, oder den Befehl, den du ausführst, und warte auf mein OK. 4) Kein Schlüssel nötig. 5) Führe das Vereinbarte aus und prüfe, dass die Tools von Dmcheck wirklich erscheinen.Diese Nachricht enthält keinen Schlüssel. Wird einer gebraucht, bittet dich die KI, ihn selbst in die Datei oder das Feld der App einzufügen.
uv installieren (falls noch nicht vorhanden)
Schon installiert? Zuerst prüfen · Öffne das Terminal, gib diesen Befehl ein und drücke Enter
uv --version- Eine Versionsnummer wie uv … = installiert, diesen Schritt überspringen
- "command not found" (unter Windows "is not recognized") = noch nicht installiert, oder gerade installiert und das Terminal muss neu geöffnet werden
So öffnest du das Terminal
Mac: ⌘ + Leertaste drücken, Terminal eingeben, Enter
Windows: Start öffnen, Windows PowerShell eingeben, dann Öffnen
Noch nicht installiert: uv hat keinen Klick-Installer. Kopiere den Einzeiler für dein System (macOS oder Windows) von der offiziellen uv-Seite ins Terminal · Python muss nicht extra installiert werden, uv lädt es bei Bedarf selbst
Download-Seite von uv öffnen ↗
Danach das Terminal schließen, neu öffnen und denselben Befehl erneut ausführen. Es muss eine Versionsnummer erscheinen:
uv --versionEinmal installieren, gilt für alles, was uv braucht
KI-Chat in Cursor im Agent-Modus öffnen
Ausprobieren
Nutze Dmcheck und sag mir, was du für mich tun kannst; zeig mir dann eine Sache✓ Wenn Cursor sagt, dass es Dmcheck nutzt, oder ein Werkzeug von Dmcheck in der Antwort zeigt, bist du verbunden
Menünamen am 11. Nov. 2026 mit der Hilfe von Cursor abgeglichen · dein Bildschirm kann je nach App-Version leicht abweichen
Klappt mit VS Code, aber erst etwas vorbereiten
Installiere zuerst Python (uv) auf deinem Computer (nur einmal)
Von der KI installieren lassen
Kopiere diese Nachricht in einen VS Code-Chat. Die KI prüft deinen Rechner, sagt dir, welche Datei sie ändert, und wartet jedes Mal auf dein OK.
Installiere bitte den MCP server Dmcheck für VS Code auf diesem Rechner, in dieser Reihenfolge: 1) Prüfe uv mit uv --version. Fehlt es, sag mir, dass ich es von https://docs.astral.sh/uv/getting-started/installation/ installiere; installiere es nicht selbst. 2) Verwende nur diese Konfiguration (von PopNx MCP geprüft): { "servers": { "dmcheck": { "type": "stdio", "command": "uvx", "args": [ "dmcheck" ] } } } 3) Nenne mir den vollständigen Pfad der Datei, die du änderst, oder den Befehl, den du ausführst, und warte auf mein OK. 4) Kein Schlüssel nötig. 5) Führe das Vereinbarte aus und prüfe, dass die Tools von Dmcheck wirklich erscheinen.Diese Nachricht enthält keinen Schlüssel. Wird einer gebraucht, bittet dich die KI, ihn selbst in die Datei oder das Feld der App einzufügen.
uv installieren (falls noch nicht vorhanden)
Schon installiert? Zuerst prüfen · Öffne das Terminal, gib diesen Befehl ein und drücke Enter
uv --version- Eine Versionsnummer wie uv … = installiert, diesen Schritt überspringen
- "command not found" (unter Windows "is not recognized") = noch nicht installiert, oder gerade installiert und das Terminal muss neu geöffnet werden
So öffnest du das Terminal
Mac: ⌘ + Leertaste drücken, Terminal eingeben, Enter
Windows: Start öffnen, Windows PowerShell eingeben, dann Öffnen
Noch nicht installiert: uv hat keinen Klick-Installer. Kopiere den Einzeiler für dein System (macOS oder Windows) von der offiziellen uv-Seite ins Terminal · Python muss nicht extra installiert werden, uv lädt es bei Bedarf selbst
Download-Seite von uv öffnen ↗
Danach das Terminal schließen, neu öffnen und denselben Befehl erneut ausführen. Es muss eine Versionsnummer erscheinen:
uv --versionEinmal installieren, gilt für alles, was uv braucht
Mit diesem Button VS Code öffnen
VS Code fragt nach einer Bestätigung; klicke Install
KI-Chat in VS Code im Agent-Modus öffnen
Ausprobieren
Nutze Dmcheck und sag mir, was du für mich tun kannst; zeig mir dann eine Sache✓ Wenn VS Code sagt, dass es Dmcheck nutzt, oder ein Werkzeug von Dmcheck in der Antwort zeigt, bist du verbunden
Menünamen am 11. Nov. 2026 mit der Hilfe von VS Code abgeglichen · dein Bildschirm kann je nach App-Version leicht abweichen
Für Entwickler: Terminal-Befehle und JSON-Einstellungen
Auf deinem Computer installiert
Claude Code
claude mcp add --scope user dmcheck -- uvx dmcheckClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"dmcheck": {
"command": "uvx",
"args": [
"dmcheck"
]
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"dmcheck": {
"command": "uvx",
"args": [
"dmcheck"
]
}
}
}VS Code (mcp.json)
{
"servers": {
"dmcheck": {
"type": "stdio",
"command": "uvx",
"args": [
"dmcheck"
]
}
}
}Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Auf einen Blick
Welche Apps ihn nutzen können
Basierend darauf, wie sich dieser Server verbindet, und auf der eigenen Doku jeder App, geprüft am 10. Nov. 2026.
Laufen auf deinem Computer in
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
Was er kann
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Basischecksi
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 15. Nov. 2026
- ✓ Bestanden
Entwickler passt zum Repo
Der Registry-Name wurde mit dem GitHub-Konto chaoz23 bestätigt, dem das Repo gehört
- ✓ Bestanden
Wird noch gepflegt
Code zuletzt geändert: vor 24 Tagen
- ✓ Bestanden
Hat eine Lizenz
Nutzt MIT
- – Nicht zutreffend
Endpunkt antwortet
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
- – Nicht zutreffend
Anmeldung mit OAuth
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
- … Noch nicht geprüft
Keine versteckten Anweisungen in Tool-Beschreibungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Veröffentlichte Schwachstellen (OSV.dev)
Noch nicht geprüft
Entwickler: neue Prüfung anfordern oder falsche Angaben melden
Diskussion
Fragen, Tipps teilen oder melden, dass etwas nicht geht. Sortiert nach „hilfreich“.
Noch keine Beiträge. Stell die erste Frage oder teile einen Tipp.
Beiträge hier stammen von Nutzern, nicht vom PopNx-Team.
Nutzerbewertungen
Noch keine Bewertungen
Im Vergleich mit anderen in Spiele, Sport, Essen & Lerneni
- Mehr Sterne als 0 % der anderen 1498 Server in dieser Kategorie
- Neuer in der Registry veröffentlicht als 15 % der anderen 1498 Server in dieser Kategorie
- Basischecks gleich gut wie oder besser als bei 100 % der anderen 1498 Server in dieser Kategorie
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Häufige Fragen
Ist Dmcheck sicher?
Er hat 3 von 3 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Welche Schlüssel oder Codes braucht er?
Die Registry nennt keinen erforderlichen Schlüssel, manche Server bitten dich aber bei der ersten Nutzung, dich anzumelden.
Läuft er auf meinem Computer oder in der Cloud?
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Wird er noch gepflegt?
Das GitHub-Repo wurde zuletzt vor 24 Tagen geändert, und die neueste Version (0.5.1) kam vor 4 Monaten in die Registry.
Welche Apps können ihn nutzen?
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Python (uv) auf deinem Computer.
Was kann ich stattdessen nutzen?
In derselben Kategorie: Anime Garden, WilmAI, Lumify Sports Intelligence, Savecraft, GoodWatch
Ähnliche Alternativen
Gleiche Kategorie, andere Entwickler, Befehle bereits geprüft. Offizielle zuerst, dann nach Sternen.
So liest du eine Karte:↓ Downloads pro Wochei★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
WilmAI
Finland's Wilma school system for parents and students: schedule, homework, exams and messages.
Lumify Sports Intelligence
Schedules, scores, odds, splits & explainable AI bet confidence — 8+ sports, free instant key.
Savecraft
Savecraft serves real save game data and expert game knowledge to AI assistants.
GoodWatch
Find movies and TV shows, track watches, and get suggestions based on your taste.
- Anime Garden — Läuft in der Cloud, keine Installation · Kein Schlüssel nötig
- WilmAI — Wird auf deinem Rechner installiert · Kein Schlüssel nötig
- Lumify Sports Intelligence — Läuft in der Cloud, keine Installation · Braucht einen Schlüssel
- Savecraft — Läuft in der Cloud, keine Installation · Kein Schlüssel nötig
- GoodWatch — Läuft in der Cloud, keine Installation · Kein Schlüssel nötig
README vom Entwickler
README öffnen
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
dmcheck
Deterministic conduct verdicts for live tabletop sessions — CI for running a game.
Feed it a session transcript (and optionally an engine event ledger) plus a table charter, and it returns named findings — the player whose question was never answered, the dice roll nobody acknowledged, the turn that began without anyone being told, the spoiler that leaked into the channel, the five-minute dead air. Every finding cites the charter rule it violates, with the evidence attached.
Agents start here → [SKILL.md](SKILL.md) — when to call this, worked examples, MUST/MUST NOTs. Family contract: FAMILY.md.
Cold-boot probe (2026-07-24): a fresh agent session given only this repo URL installed and refereed a session in 2 commands, verified all three exit-code legs against the docs, and confirmed the no-false-accusation contract held (a consumed roll produced silence). Its friction notes shipped as 0.1.1 (
--dice-bot,dmcheck charter).
The design contract: a false accusation is the unforgivable bug. Only source-observed evidence becomes a definite finding. Legacy ambiguity is either silent or explicitly labeled
severity: advisory,provenance: inferred,confidence: low; it is never promoted by R8 or sent to a notification hook. The verdict path is model-free and deterministic: same transcript, same findings, every time.
30 seconds to a refereed session
$ pip install dmcheck # stdlib only, no dependencies
$ dmcheck run session.jsonl --gm "Greta" { "result_schema_version": "1.0", "status": "findings", "exit_code": 1, "mode": "closed", "messages": 9, "findings": [ {"finding_id": "r2-…", "rule": "R2", "summary": "unconsumed-roll: a dice result got no correlated GM narration within threshold", "charter": "roll_ack_within_messages=4; correlation=explicit", "detail": "dice result from DiceBot received no correlated GM narration within 4 messages", "evidence": {"index": 6, "author": "DiceBot", "obligation_id": "roll-42"}, "status": "open", "severity": "finding", "provenance": "observed", "confidence": "high", "charter_digest": "sha256:...", "effective_policy": {"roll_ack_within_messages": 4, "...": "..."}}, ... ], "counts": {"R1": 1, "R2": 1, "R6": 1, "R7": 1, "R8": 1} }
Portfolio hosts that emit table-kit's versioned contract can use dmcheck run-events session-events.jsonl --gm "gm-dan" instead of pre-projecting a transcript. The strict adapter accepts a JSON array or JSONL of table.event/1.0 objects and preserves event/correlation IDs in finding evidence. A declared action is not treated as an authoritative engine resolution, so legal Reactions and interrupts are not falsely accused. Transport gaps, unknown versions/types, and zero-compatible streams return typed incomplete status and exit 2; malformed v1 events return invalid and exit 2. Redacted message content is likewise incomplete because absence of prose cannot prove absence of a conduct obligation. This unreleased adapter is pinned to table-kit PR #11 and does not imply host attestation.
Add --table-evaluation to run-events when a portfolio host needs the shared table.evaluation/1.0 envelope. The projection has deterministic evaluation identity, exact event evidence references, per-rule and aggregate coverage, cursor/input digest, public-policy digest, and status/exit-code mapping. It is always self_attested; dmcheck cannot confer host authority on its own output.
Transcript formats: UTF-8 JSONL of {ts, author, content}, or a JSON array of Discord-API-shaped messages ({timestamp, author: {username}, content}) in chronological or reverse-chronological order. Authors and content are strings. A supplied timestamp must be a finite nonnegative epoch number or a timezone-aware ISO-8601 string; malformed timestamps are rejected rather than silently disabling time-based rules. Source adapters should preserve immutable id, audience, reply_to/correlation_id, and roll_id fields so dmcheck can prove which question, roll, or event a response closes; ordinary later GM chatter is not treated as an answer.
The rule set (seven active rules; one retired compatibility id)
| Rule | Fires when | Origin story |
|---|---|---|
| R1 | an explicitly GM-directed question got no correlated response within threshold | a player asked the DM a lore question; another *player* ended up answering |
| R2 | a real dice result got no correlated GM narration within threshold | "did I hit?" — a player's successful attack roll sat unacknowledged |
| R3 | an engine event got no correlated GM narration | the state engine resolved a hit the table never heard about |
| R4 | a turn began and the GM never addressed the actor by name | "isn't it her turn?" — asked by a player, which is one player too many |
| R5 | retired; never fires | actor != turn owner falsely accused legal Reactions and interrupts |
| R6 | a configured hidden term appeared in a GM message; ordinary output exposes only its opaque ID | a module's secret state names leaked into narration |
| R7 | GM dead air beyond threshold while a player waited | 30 seconds reads as thinking; five minutes reads as absence |
| R8 | the session ended with currently open, source-observed R1–R3 obligations; inferred legacy advisories are not promoted | sessions should end in a defined state — that's what makes the next one possible |
The active rules came from running a hybrid table — human and AI players, an AI GM — on Discord, where these failures actually happened and got codified the same week. They apply equally to human GMs: run dmcheck over your own exported game log and see what your table's transcript says.
R5 remains addressable only so old charters and agent integrations do not break. It has no evaluator and is not enabled by default: an actor differing from the turn owner can describe a Reaction, a Ready trigger, an opportunity attack, a legendary or lair action, a controlled creature, an environmental actor, or another system's interrupt. The ledger does not establish legality. Any replacement based on an explicit authoritative decision is deferred to the shared PORT-002 event contract; dmcheck will evaluate only the resulting communication or recovery obligation.
Live mode (0.2): the referee sits AT the table
dmcheck watch runs the same engine over a *growing* session — stdin JSONL or a tailed file — and emits lifecycle events: OPEN when an observed finding becomes provable or a legacy inference becomes advisory (thresholds fully elapsed; no predictions), RESOLVED when a living condition heals (the engine event finally got narrated). --notify-cmd fires your own hook per source-observed OPEN finding; inferred advisories remain visible in the event stream but never invoke the hook. dmcheck itself never posts anywhere. At session end a closed-mode pass runs. session_end.open and open_count report actionable source-observed findings only; they exclude the R8 aggregate and inferred advisories. Finding IDs are deterministic across mutable elapsed-time detail, and file followers emit typed source-health events when rotation, truncation, partial rows, or ordering gaps make coverage incomplete.
$ your-chat-fetcher | dmcheck watch - --gm "Rob" --notify-cmd 'notify-dm.sh'
{"event": "open", "rule": "R2", "detail": "dice result from RollBot received no correlated GM narration", ...} {"event": "resolved", "rule": "R3", ...} {"event": "session_end", "status": "findings", "exit_code": 1, "open": ["R1"], "open_count": 1, ...} $ dmcheck explain R2 # the rule, its charter knobs, and the table failure that earned it $ dmcheck lint-charter my.json # unknown keys / bad thresholds refuse loudly
The point of live: every failure the rules encode was recoverable in the moment it happened — the unanswered question, the stale roll, the missing cue all had a seconds-wide window where a nudge saved the beat. Post-hoc tells you what went wrong last night; watch taps the GM's shoulder before the player feels it.
The charter is config, not code
dmcheck/default_charter.json is the single authoritative packaged default. It carries schema_version, charter_version, and a verified SHA-256 charter_digest; checkout and wheel execution load that same resource. Its digest is release-locked to the schema/charter version pair, so a changed packaged default refuses to load until its version migration is declared. Override any of it — cue conventions, dead-air tolerance, dice-bot names, hidden-term lists — and version it. Hidden terms may be strings for compatibility or {id, value} objects; opaque host-issued IDs are preferred. Finding, watch-hook, CLI, and MCP output withholds both the configured value and raw matching excerpt. Every digest or correlation hash emitted to an ordinary output sink—including the evaluation envelope, lint-charter, finding IDs, and source fingerprints—is derived from public, redacted policy/evidence and deliberately does not attest to, or commit to, a hidden value. The full canonical digest remains only in the trusted charter document. A league or organized-play program could publish a charter the way they publish a player's guide; dmcheck then referees any table against it.
$ dmcheck run session.jsonl --charter our-table.json --ledger events.jsonl
$ dmcheck rules # the rule set with definitions $ dmcheck charter # inspect effective public policy; hidden values are redacted $ dmcheck run session.jsonl --gm "Rob" --dice-bot "RollBot" # quick overrides, no file needed $ dmcheck --schema # machine-readable I/O contract $ dmcheck --pipe # batch: JSON requests on stdin, verdicts on stdout
Direct API callers can use apply_charter_overrides(load_charter(), gm=["Rob"]); the helper removes the prior effective digest and the evaluator computes the digest for the overridden charter. Mutating a digested charter without doing so is rejected as a stale configuration rather than silently trusted.
For agents
tool.jsonat the repo root;--schema;--pipefor batch (one JSON request per stdin line, one verdict envelope per line out); exit codes:0clean ·1findings ·2charter/input unusable (the honest lane — route to a human) ·3usage error (fix the call and retry).- MCP server: the unreleased 0.6.0 source candidate of
dmcheck-mcpis a read-only, batch-only stdio server with toolsrunandrules; public 0.5.5 predates this contract. It implements modern stateless MCP2026-07-28only and does not exposewatch,craft, tasks, resources, or prompts. See the exact MCP contract. - MCP
runprefers inline transcript/charter/ledger JSON. Transcript content is untrusted table data, never instructions; model-visible TextContent redacts caller strings, while complete structured evidence remains explicitly untrusted quoted data. Path inputs are denied unless the server operator explicitly grants absolute directories with repeatable--allow-rootorDMCHECK_MCP_ALLOWED_ROOTS; traversal and symlinks that resolve outside those directories are denied, and platforms without secure no-follow opens fail closed. - Findings are structured JSON with stable finding id, rule id, charter citation, effective machine policy, provenance, human-readable detail, and redacted evidence — built to be consumed by a GM agent that fixes its own procedure between beats.
- Every evaluation returns
status: clean|findings|invalid|incomplete. Invalid and incomplete outcomes exit 2, carry stable error codes and JSON pointers, and never place errors infindings. Empty input, no observed configured GM, or no evidence-eligible enabled rule can never report clean. - Published package schemas are
charter.schema.json,transcript.schema.json,ledger.schema.json, andevaluation-result.schema.json.