skills/beat-orchestrator/SKILL.md
Use on every GM response during a Daggerheart session. Pipeline sequencing — mode detection, role dispatch, checkpoint enforcement, scene discipline, roll gate. Works alongside the causal-auditor skill.
npx skillsauth add krystophny/prompts beat-orchestratorInstall 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 sequence all roles and enforce pipeline order. First to fire on every response, last to release. The causal-auditor skill handles the checkpoint validation; you enforce that the checkpoints happen.
Detailed role definitions live in Engine/Roles/. Pipeline architecture lives in Engine/Pipeline/. Axioms live in Engine/Axioms/. This skill contains only the behavioral sequencing that fires on every response.
On every GM response during play, execute this pipeline in order.
lookup().Lightweight path — most responses take this path:
Heavy path — scene transitions, entity generation, new environments:
Engine/Pipeline/WorldGenerator-Dispatch.mdEngine/Pipeline/CausalAuditor-Gate.mdCompression path — montage, time skip, or any response that advances time beyond the current beat:
Follow the selected path. The causal-auditor skill handles the checkpoint validation. You enforce the sequence:
Checkpoint 1 — fires before any dice or state changes. STOP. Let the causal-auditor run its pre-mechanical checks. Do not proceed to mechanics until it passes.
Compression gate — if the response compresses time, the compression gate (CP1 check 7) fires first. If it fails on consent, fall back to the lightweight path at normal pace. If it fails on "nothing playable," present the playable moment and wait. If it passes, collect all mechanical changes for the compressed period into the mechanical block, then proceed through CP2 and prose as normal.
Mechanical block — roll dice, calculate damage, update resources, edit the PC sheet. All in English. The sheet edit happens HERE, before narration.
Checkpoint 2 — fires after mechanics, before prose. STOP. Let the causal-auditor run its post-mechanical checks. Do not proceed to narration until it passes.
── LANGUAGE BOUNDARY ── Everything above: English always. Everything below: player's chosen narration language.
NarrativeRenderer phase — read Engine/Roles/NarrativeRenderer.md for narration discipline. Query semantic pipeline (bottom-up: Campaign → Era → World → Engine) for narrative texture. Apply the session's Storyteller Disposition from Engine/Instruments/Storyteller-Disposition.md. Write prose from CausalAuditor-certified content only.
Checkpoint 3 — fires after prose is written, before output to the player. STOP. Let the causal-auditor run its post-prose checks. If it fails, revise the prose and re-check. Do not output until it passes.
Before narrating ANY outcome where the result is uncertain, STOP.
You are narrating past a roll if you write the result before the dice. If you catch yourself writing the outcome before rolling — stop, delete, present the roll call.
When the declared action uses an invalid mechanism but has valid intent: follow the Reframing Protocol in Engine/Axioms/Player-Action-Judgment.md. Deny the mechanism, describe what the character perceives, offer 2-3 valid alternatives, wait for the player to choose.
The roll call is always a two-step conversation:
Never collapse these into one message.
Player-facing rolls (action, reaction, PC damage, adversary attacks vs PC) must use Python RNG. Never LLM-generate these numbers. GM secret rolls (NPC behavior, off-screen events) are GM discretion.
At every scene transition, query RAG for the Scene Checklist (GM/Scene-Checklist.md) and follow it. A scene transition is: new location, time skip, shift in dramatic focus, or the current scene resolving.
Entity census. Before writing the new scene's narration, count the entities you are tracking. If the count is lower than the previous scene, find what you dropped and add it back at its last known position. Entities outside the current scene do not vanish — they persist where the fiction last placed them.
Drift check. At every scene transition, re-read your last two beats of prose. Verify: (1) every entity is where you last placed it, (2) every constraint still holds unless you narrated its resolution, (3) distances have not collapsed.
Before generating any entity with mechanical details or secrets the player should not see, STOP. Dispatch a WorldGenerator subagent following the protocol in Engine/Pipeline/WorldGenerator-Dispatch.md.
The dispatch template tells you what to include in the subagent prompt: role definition, mode, task, scope content, template, save instructions, and return instructions. The subagent returns only a brief confirmation — entity name and file path.
After the subagent returns, run the CausalAuditor gate following Engine/Pipeline/CausalAuditor-Gate.md. The gate validates the generated content against keyword pipeline state before it enters the main context. Use the inline gate for simple generations; dispatch a gate subagent for complex ones.
WorldGenerator output does NOT enter the main context without gate validation. This is structural — if the gate fails, fix or re-generate before proceeding.
When the keyword pipeline (lookup()) returns results at a scope → constrained mode. Normal pipeline order: keyword first (mechanical constraints), then semantic (narrative texture).
When keyword returns empty at a scope → generative mode. Exception pipeline order: semantic first (read what exists), then generate mechanically valid content from Rules + Engine axioms, then save to vault. After saving, the keyword pipeline is populated for next access.
The session protocols live in GM/ (Rules-layer). Follow them:
GM/Session-Start.md — context recovery, repetition analysis, then GM/Session-Palette.md — pre-session planningGM/Session-End.md — state persistence, narrative writing, entity updates, spatial persistence, pressure tests, previewdata-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.