dice-check
Resolve any check, save, attack, or world-roll using the dice-roller MCP — never compute dice results from LLM memory.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Resolve any check, save, attack, or world-roll using the dice-roller MCP — never compute dice results from LLM memory.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Poll trusted Multiple Sclerosis RSS feeds, score credibility, save raw items, filter low-quality material, and promote high-value items into citation-grounded KB processing.
Save a URL, file path, pasted text, DOI, or PMID into the knowledgebase at $KB_ROOT/raw/manual/YYYY/MM/DD/. Enriches via the relevant MCP (pubmed/crossref) when input is a DOI or PMID. NON-DESTRUCTIVE — write-only into raw/, never into pages/.
Append a single timestamped bullet to today's $KB_ROOT/journals/YYYY/MM/YYYY_MM_DD.md describing what the agent just did. Logseq-compatible and date-partitioned. Call this at the end of every meaningful action (page write, ingest, query answered).
Self-heal the MS knowledgebase layout after RSS watch or weekly digest. Migrates legacy flat files into the V2 date/type structure, refreshes Start Here and Index pages, checks links/frontmatter, and journals the maintenance summary.
Answer a research question by searching the kb first, then PubMed → CrossRef → SearXNG, writing a citation-grounded content page under $KB_ROOT/content/<type>/YYYY/MM/. Every claim cites a DOI/PMID/URL or is dropped. This is the heart of the agent.
Safely prune generated RSS watcher raw cache after weekly digest retention, without touching manual raw ingests or the RSS seen ledger.
| name | dice-check |
| description | Resolve any check, save, attack, or world-roll using the dice-roller MCP — never compute dice results from LLM memory. |
| version | 0.1.0 |
| author | dobry-ops |
| license | MIT |
| metadata | {"hermes":{"tags":["koth-dm","dice","resolution"],"category":"campaign-management","related_skills":["roll-initiative","koth-dm-journal"],"config":{"destructive":false}}} |
Use the dice-roller MCP for every roll the GM (you) needs to make. Players
roll their own dice and report results. The GM rolls for: NPCs, the world,
weather, random tables, and anything else the players don't roll for.
Never compute a dice result from memory. LLM dice math drifts toward
middle-of-the-range averages — random feeling is preserved but actual
randomness is not. Every roll goes through dice_roller.roll(expr).
| Expression | Meaning |
|---|---|
1d20+5 | One d20 plus modifier 5 (standard check / save / attack) |
2d6+3 | PbtA-style 2d6 + modifier (the campaign's hard-rule mechanic) |
4d6kh3 | 4d6, keep highest 3 (D&D 5e ability score generation) |
2d20kh1 | 2d20 keep highest (advantage) |
2d20kl1 | 2d20 keep lowest (disadvantage) |
1d100 | Percentile roll for random tables |
1d6-1 | One d6 minus 1 (e.g., poison damage with a negative mod) |
Combine freely: 2d6+1d4+3, etc.
CAMPAIGN.md, ASK the player to roll 2d6+<their_mod>. You do
NOT roll for them. The result they report drives the resolution: 10+
clean, 7–9 mixed, 6– complication.When a player needs to roll, ASK in plain English with the check type, and offer both options:
"Bovf, this is a Brawn check — roll
2d6+Brawnyourself, or sayroll for meand I'll roll it on the table."
Take the number at face value. Don't second-guess. Examples of valid reports: "I got 9", "rolled 4 and 3 plus 2 = 9", "7". Arbitrate the outcome.
roll", "I don't have dice")
Use the character-sheets MCP to compose the expression, then roll. The exact sequence — do this every time a player asks you to roll a check:
Call character_sheets.get_character(player='<their mxid>') to fetch
their sheet.
Read the relevant stat (stats.brawn, stats.cunning).
Compose the expression: f"2d6+{stat}" (e.g. "2d6+2").
Call dice_roller.roll(expression).
Report the breakdown out loud and arbitrate the outcome:
"Rolling Cunning for you (Bovf, +2) —
2d6+2→[4, 3]+2 = 9. Mixed success."
If get_character raises "no character for player …", the player has no
sheet yet. Two graceful options:
dice_roller.roll(f"2d6+{value}") with what they tell you.start campaign
if you want session zero, or just tell me the mod and I'll roll."Do NOT default to a +0 silently. Always confirm or ask.
update_character).When YOU roll, include the expression and the result so the table can audit:
"The goon swings —
1d20+4→ 17. Hit. Damage1d8+2→ 6."
This keeps the roll honest and visible, even though the actual randomness comes from the MCP.
Related: roll-initiative opens combat; koth-dm-journal logs outcomes.