tarot
Skill0 starsChanged 4 months agoMITView on GitHub
Read the user's recent Claude Code sessions and render the Gwelh-di-nees living tarot board — a bird's-eye board of the 22 Major Arcana where cards glow, pulse, or gray out based on inferred themes, emotions, and behavioral telemetry from the last 15-25 sessions, opening with a Spotify-Wrapped-style synthesized reading. Use when the user invokes /tarot, asks for their tarot board, a "reading" of their sessions, or to refresh/update the board.
7 other projects use a version of this.
Adopted by
Most recently taken up by
- Liz-van/divination-skillstheir own version, first seen Oct 25, 2026
- CharlotteShen/astro-tarot-bazi-divination-skillstheir own version, first seen Oct 8, 2026
- CorySchulz/skillstheir own version, first seen Sep 2, 2026
- Ruxiu0409/tarot-skilltheir own version, first seen Aug 15, 2026
- wave2234/divination-skillstheir own version, first seen Aug 6, 2026
- daman-ovo-0404/tarot-skilltheir own version, first seen May 28, 2026
Other versions7 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 7
- daman-ovo-0404/tarot-skill★ 166same name
- wave2234/divination-skills★ 19same name
- stvlynn/qclaw-skills★ 4same name
- CorySchulz/skills★ 2same name
- Ruxiu0409/tarot-skill★ 1same name
- CharlotteShen/astro-tarot-bazi-divination-skills★ 0same name
- Liz-van/divination-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 0 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 22
Read ~/.gwelh-di-nees/sessions.json.
- Very specific: line 52
Read board-state.json, readings.json, and profile.json (if present) from ~/.gwelh-di-nees/.
- Very specific: line 81
If artifact publishing is available: publish ~/.gwelh-di-nees/board.html (favicon 🔮, keep it stable.
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/tarot — the Gwelh-di-nees living board
$SKILL below means the directory containing this SKILL.md (it holds engine/ and assets/cards/).
User state lives in ~/.gwelh-di-nees/ — the engine creates it automatically; it must NEVER be written inside the plugin directory.
Privacy (tell the user on their first run): this skill reads their local Claude Code session logs (~/.claude/projects). Everything — transcripts, annotations, profile — stays on their machine in ~/.gwelh-di-nees/. Nothing leaves it unless they choose to publish the rendered board as an artifact.
Pipeline (run all steps, in order)
1. Ingest
python3 "$SKILL/engine/ingest.py" --n 20Writes ~/.gwelh-di-nees/sessions.json (default 20 sessions, clamp 15-25; pass the user's number if they gave one). Sessions include human-typed messages, titles, and telemetry.
2. Annotate (you do this — the LLM pass)
Read ~/.gwelh-di-nees/sessions.json. For each session not already present in ~/.gwelh-di-nees/readings.json (merge — never re-annotate cached session_ids, and drop cached entries no longer in the window), produce a reading. Write readings.json:
{"readings": [{
"session_id": "<uuid>",
"theme": "short-kebab-slug of what the session was about",
"topical": ["new_start"|"ending"|"decision"|"shipped"|"stuck"|"reflection"|"structure"|"convention"|"tending"|"retro"|"purpose"|"play"|"crisis"|"recovery"|"external_change"|"shortcut"|"names_compulsion"],
"emotions": {"<goemotions-label>": 0.0-1.0},
"valence": 0.0-1.0, "arousal": 0.0-1.0,
"outcome": "resolved"|"unresolved"|"abandoned"|"partial"|"n/a",
"evidence": [{"quote": "verbatim user words, <=200 chars", "why": "what it signals"}]
}]}Annotation rules (binding — see docs/SPEC-archetype-signatures.md in the plugin repo for the full spec):
- Judge ONLY the user's human messages — never the assistant's replies.
- Technical jargon is NOT emotional negativity ("kill the process", "fatal", "crash" are neutral).
- Multi-label emotions with honest confidences; presence over magnitude; when uncertain, lower the confidence rather than dropping the label.
- Valence x arousal matter more than labels: stressed-frustrated = low valence HIGH arousal; flat-fogbound = low valence LOW arousal.
- Evidence quotes must be verbatim, specific, falsifiable. They ground your synthesis internally and are NEVER shown in the UI.
3. Score
python3 "$SKILL/engine/score.py"Deterministic: constellation gates, 7-day half-life decay, suppression pairs, shadow flags, confidence. Writes ~/.gwelh-di-nees/board-state.json.
3.5 Synthesize insights + maintain the profile (you do this)
The board shows SYNTHESIS, never sources — the user trusts the process and judges accuracy against their own life.
Read board-state.json, readings.json, and profile.json (if present) from ~/.gwelh-di-nees/. Write insights.json:
{
"persona": {"title": "The <evocative chapter name for this window>", "body": "2-3 sentences naming who they were this window"},
"draw": [{"card_id": "...", "heading": "...", "body": "..."}],
"crooked": {"card_id": "...", "heading": "...", "body": "..."},
"changes": [{"card_id": "...", "direction": "rising"|"waning", "body": "1-2 sentences on what shifted and what it suggests"}],
"stats": [{"label": "...", "value": "...", "note": "..."}],
"atlas": {"<every card_id>": "1-2 sentence second-person reading, including the dark cards"}
}Writing rules (binding):
- Second person, psychologically specific, grounded ONLY in what the readings/telemetry actually show — never invent. Dark cards get insights too ("dark, and healthily so").
- Spotify-Wrapped energy inside the tarot world: name their window like a chapter, surface patterns they'd recognize but haven't named (speech tics, rhythms, tensions), keep it fun and a little profound. No quotes, no dates, no session names, no jargon.
draw= top 3 cards;crooked= the most notable reversed card (omit if none).stats= 5-6 wrapped-style tiles in world language, computed from sessions.json (messages, tokens, longest session, walk-aways (away_summaries), late nights, favorite phrases — count them with a quick python one-liner).changes: empty on first run. Otherwise diff board intensities vsprofile.last_board— narrate the 2-4 biggest movements (rising/waning) against the profile's threads and tensions.
Then update ~/.gwelh-di-nees/profile.json: bump updated_at and readings_count, append to persona_history, refresh baseline threads/tensions/rhythms where the new window genuinely changes them (evolve, don't rewrite), and overwrite last_board with the new intensities. If no profile exists, seed it (baseline: dominant_arcana, rhythms, threads, tensions, speech_signature) and tell the user their profile has been seeded.
4. Render
python3 "$SKILL/engine/render.py"Writes self-contained ~/.gwelh-di-nees/board.html (card art inlined as data URIs).
5. Launch
- If artifact publishing is available: publish
~/.gwelh-di-nees/board.html(favicon 🔮, keep it stable; reuse the URL recorded in~/.gwelh-di-nees/artifact-url.txtvia theurlparam; write that file on first publish). - Also deliver the file directly (SendUserFile with display: render, or
open ~/.gwelh-di-nees/board.html).
After launching
Give a 3-5 sentence reading in prose: the persona line, the draw, whether anything is reversed, one conspicuously dark card, and (from the second reading on) the biggest turning since last time. Tone: reflective mirror, never prediction or diagnosis. Remind the user they can argue with any card — and that the full lore lives in the plugin's docs/guidebook.html.
Regenerating card art
Card art ships in $SKILL/assets/cards/*.jpg (style + original Higgsfield job IDs in assets/jobs.json). Only regenerate if the user asks and has Higgsfield access; keep the locked style preamble from jobs.json.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

