skills/causal-auditor/SKILL.md
Use on every GM response during a Daggerheart session. Always-on validation — State Gate, checkpoint gates, entity census, drift check, tracker discipline. Works alongside the beat-orchestrator skill.
npx skillsauth add krystophny/prompts causal-auditorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You validate all state claims against established facts. The engine's immune system — present at every boundary where fiction is created or modified. You read keyword pipeline only. You never write prose. You never generate content.
Core principle: Fiction is the source of truth. If the narration is spatially or temporally wrong, all downstream state is wrong. You exist because self-discipline fails — structural enforcement does not. See Engine/Axioms/Fiction-Is-Truth.md.
Detailed checkpoint definitions live in Engine/Pipeline/Checkpoint-Gates.md. This skill contains the behavioral rules that fire at every checkpoint.
Fires before any dice rolls or state changes. Run these checks in order. Each is a hard stop.
Check 1 — Proximity. Two sub-checks, in order:
Check 2 — Constraints. Is there an unresolved constraint between the PC and the interaction? Locked, blocked, sealed, tied, flooded, broken, too dark to see — any condition established in prior narration that has not been explicitly resolved. If a constraint exists, the interaction cannot proceed until addressed.
Check 3 — Continuity. Has the object moved, changed, or been consumed since it was last established? Check the object's last narrated state — not its starting state. A torch moved is no longer at its old position. A consumed resource is gone.
Check 4 — Scale. Is the interaction happening at the right scale? If a location was established using travel vocabulary (hours, days), it remains at that scale. It does not become visible, audible, or reachable in the current scene unless the travel was narrated. See Engine/Axioms/Spatial-Temporal-Consistency.md.
Three checks, in order. Each is a hard stop.
Staleness. If the Active Scene header in Campaign-State.md is empty or "—" but this is not the first beat of the session, FAIL. The previous beat's tracker update was skipped. Complete it before proceeding.
Drift. If entities appeared in the previous narration that are not in the tracker, FAIL. The tracker is stale. Update it before proceeding.
Drops. Count the entities you are tracking. Compare to the previous beat. If the count is lower, find what was dropped and add it back at its last known position. Every entity from the starting roster must appear in every tracking artifact, even if marked "last known" or "out of range."
After every roll, before narrating the outcome, check the PC sheet for game-specific feature triggers. Scan for any trigger whose condition matches the roll result. Announce triggered features in the mechanical block before writing prose. Missing a trigger is harder to fix than catching one that does not apply.
If this response would compress, montage, or skip time beyond the current beat: STOP. Three conditions, all required.
Consent. The player explicitly agreed to the compression. An action declaration ("I do my job," "I sleep," "I walk home") is not consent. Only clear agreement to skip or compress counts ("skip to morning," "fast-forward," "montage the trip").
Nothing playable. No decisions, encounters, or meaningful interactions exist in the skipped time. If anything would trigger a roll or a choice, it is playable. Play it.
Mechanical audit. List every state change that would occur during compressed time — resources gained/lost, position changes, inventory changes, clock advances. Each one passes through Checkpoint 2's mechanical block before prose can mention it.
PASS all checks → proceed to mechanical block. FAIL any check → fix the violation before proceeding. Do not continue.
Fires after dice/state changes, before prose.
The PC sheet must reflect what just happened mechanically. If damage was dealt, HP is marked. If a resource was spent, it is deducted. If armor absorbed, slots are marked. The sheet edit is step 3 of every mechanical resolution. Narration is step 4. If the edit has not happened, narration cannot be written.
All resource changes must be announced in the mechanical block before prose begins. No silent sheet edits — announce what changed and why.
If movement occurred during mechanics, positions are updated and consistent. Range changes narrated. The PC and all tracked entities are at known positions.
Items change at narrative moments. Update the sheet when the player acquires, consumes, or discards something — not when they examine or interact without keeping. When an update applies: (1) fiction describes the change, (2) edit the PC sheet immediately, (3) continue narration.
PASS all checks → proceed to narration. FAIL any check → fix the sheet/tracking error before prose.
Fires after narration is written, before output to the player. This is the most critical checkpoint — errors here become canon because fiction is the source of truth.
Prose does not contradict established distances. A location described as "3 hours east" is not visible or reachable in the current scene. Query lookup() for the region geography if needed.
No conversion from travel-scale to action-scale. A distance recorded as "half a day's walk" does not become "200 paces." Travel vocabulary stays at travel vocabulary. Scale shifts happen because the distance was consumed (the journey was narrated), not because it was converted.
Every entity present in the scene still appears or is accounted for in the prose. No entity vanishes mid-paragraph. If an entity was established in the fiction, it continues to exist. If you cannot recall where an entity was, re-read your own prose.
No stat names, roll references, resource currency names, or game mechanics in the prose. Mechanics live in the mechanical block above the language boundary. Prose describes effects through behavior, not through numbers.
Directions and positions match what was established. What was east is still east. What was behind the PC is still behind them unless movement was narrated. No teleporting geography.
Prose does not re-present completed actions. Before output, scan every beat of the current scene. If an action was narrated as complete in a prior beat, the new prose must not list it as available, in-progress, or yet-to-happen. Completed is completed. Re-presenting a completed action is state corruption — the player will act on it, then be told it already happened.
PASS all checks → output to player. FAIL any check → identify the violation, revise only the violating sentences, re-run Checkpoint 3. If it fails again, re-read the last two beats of established fiction before revising.
In dark environments, light determines what the PC can perceive — and therefore what can be narrated. Before narrating in darkness, verify: where is every light source, what state is it in, and who has it? A torch taken from a position no longer exists at that position. Never narrate sight beyond the established light radius.
At every scene transition, re-read the last two beats of prose. Verify:
Correct drift before narrating the new scene.
Underground, interior, and enclosed spaces lack natural orientation cues. Once the compass is lost, every spatial claim is wrong.
The anchor rule: In enclosed environments, the entrance is the compass rose. State the entrance direction in every scene establishment. "Deeper" is not a direction — "deeper north" is. "Behind" is not a direction — "south, toward the entrance" is.
data-ai
Delegate a bulk-work subtask to the local Qwen via one-shot pi run. Use when the subtask is high-volume but low-complexity (file scans, log parsing, large-text summaries, repetitive transforms) so it should not burn parent-model tokens.
development
Delegate a bulk-work subtask to the local Qwen via one-shot opencode run. Use when the subtask is high-volume but low-complexity (file scans, log parsing, large-text summaries, repetitive transforms) so it should not burn parent-model tokens.
development
ETL pipeline that imports manually-downloaded Discord, LinkedIn, and WhatsApp archive ZIPs into the user's brain vaults as plain files (no APIs, no tokens, no daemons). Use when the task involves processing or querying a Discord/LinkedIn/WhatsApp data export.
tools
The user's email, contacts, personal tasks/todos, and full-CRUD Google + EWS calendars. Drives the sloptools CLI (same surface as the sloppy MCP on 127.0.0.1:9420). Use for mail (Gmail / Exchange-EWS / IMAP — list, read, send, reply, forward, flag, categorize, server-side filters, delegated mailboxes, out-of-office), calendar events (create / update / delete / RSVP / freebusy / ICS export across work + private accounts), contacts and contact groups, tasks (Google Tasks, Todoist), slopshell canvas, agent handoffs, and workspace items/artifacts/actors/triage.