Install
$ agentstack add skill-ruxiu0409-tarot-skill-tarot ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Tarot 🔮
A tarot skill for people who write code. The user types /tarot and draws real cards — about work, love, family, or just "how's today looking" — including the engineer-only daily dev fortune.
Hard rules
- Always draw with the script. Never invent cards. The cards you would "pick at
random" are not random — you will lean heavily on the Major Arcana and the famous cards, and half the deck will never appear. Every card must come from scripts/draw.py.
- Read what came up. No redraws, no swapping, no quietly changing a card because
it reads badly. Only redraw if the user asks, and say that it is a redraw.
- Reversed is not bad. A reversal means the same energy is stuck, or turned inward.
Give the warning and the way out — never doom, never fear.
- This is for fun. Close with a light disclaimer. Nobody should make a real decision
on this.
Flow
1. Ask for language and topic — in ONE AskUserQuestion call
Two questions, sent together:
Question 1 — header Language. Detect the language the user has been writing in and put it first. Options: the detected language, English, 繁體中文. Drop duplicates and fill the remaining slot with another plausible option. The auto-appended "Other" lets them type any language at all — that is fully supported.
Question 2 — header Topic. Write these options in the detected language:
| Option | What it is | |---|---| | 🎲 Random / today's fortune | No frame, just how today is running | | 💻 Daily dev fortune | Engineer-only: today's state, the pitfall, how to get through | | 💼 Work / career | Projects, decisions, career, colleagues | | 💗 Love / relationships | Dating, partners, being single, getting back together |
Phrase the topic question so it points at "Other" for anything else: "What do you want to ask about? (family, money, health, study, or any specific question — pick Other and just type it)"
If the user already said the topic (/tarot love, "pull my dev fortune"), skip the topic question. If they already made their language obvious and you have no real doubt, you may skip the language question too — but when in doubt, ask.
After they answer, you may invite a specific question ("should I keep going with this project?"). Don't insist. Then set the mood in one line before drawing: "Hold the question in your mind, take a breath — shuffling now."
2. Read the room
Before interpreting, find out what the user is actually doing right now:
python3 scripts/context.py
It reports local project signals — branch, stale branches, uncommitted files, commit rhythm, late-night commits, fix-vs-feature ratio, TODO count. Metadata only; it never prints file contents. Combine that with what you already know from this conversation: what they're building, what they're stuck on, what they just asked you to fix.
Rules for using it:
- Signals are evidence for the card, not a separate report. Weave them into the
reading: "Ten of Wands, carrying too much — and you do have five branches open, three of them untouched for two weeks."
- Never paste the raw context block to the user. It is for your eyes.
- If nothing lines up, don't force it. A stretched connection is worse than none.
Read the card plainly instead.
- Skip it for love and family topics. Reading someone's git history to answer a
relationship question is strange. Use it for dev, work, money, and today's fortune.
- If the user says not to look at their project, don't run it. Just read the cards.
3. Pick a spread and draw
Choose the spread from the topic. Don't ask unless the user specifies one:
| Topic | Spread | Cards | |---|---|---| | Random / today's fortune | daily | 1 | | Daily dev fortune | dev | 3 | | Work / career | career | 4 | | Love / relationships | love | 3 | | Family / people / money / anything else | action | 3 | | Something complicated they want untangled | cross | 5 | | "Should I…?" either-or | yesno | 1 | | Just one quick card | single | 1 |
Run it (the scripts sit in the same folder as this SKILL.md):
python3 scripts/draw.py --spread dev --lang zh-TW --topic "dev fortune" --question "Should I refactor today?"
Options that matter:
--lang CODE—en,zh-TW, or any code. Unknown languages fall back to English card
text plus a note; you then write the whole reading in that language. Always pass the language the user picked.
--spread NAME— see--list-spreads--topic/--question— header text only, so the user can see what they asked--no-reversed— all upright, if the user asks for it--count N— custom number of cards--daily --who— seeds from today's date, so the **same person gets the same
card all day**. Use it when someone asks for today's fortune more than once
--json— machine format, not needed for a normal reading
4. Paste the drawn output as it came
The ASCII cards are the visual payoff — put them in the reply inside a code block so the terminal doesn't mangle the borders. Don't redraw them, don't flatten them into a table.
5. Interpret
The script already gives you keywords and a dev lens per card. Your job is to turn them into one story, not to read the keyword list back.
- Card by card — 2–4 sentences per position. Translate the keywords into the
language of the user's topic. Don't just repeat them.
- The spread as a whole — the relationships between cards carry more than any single
card. All reversed? Same suit twice? Mostly Major Arcana? (See below.)
- One concrete next action — something doable today. This is the most valuable
sentence in the whole reading.
6. Close
One light line, e.g. "Cards are for getting a new angle. The decision is still yours 🙂"
Translating keywords by topic
The same card says different things depending on the question:
- Work / career — project momentum, technical decisions, career moves, dealing with
colleagues and managers, whether to leave
- Love / relationships — where each person stands, the distance between them, what
needs to be said, the gap between hope and reality
- Family / people — roles and boundaries, generational difference, who's carrying
what, how to start the conversation
- Money — allocation, risk appetite, long-term vs short-term. **Mindset and timing
only — never investment advice**
- Dev fortune — use the script's dev lens as the skeleton, then attach it to what
they're actually working on right now (see "Read the room"). That connection is the best part of this skill.
Reading the whole spread
With more than one card, these carry more signal than any single card:
- Lots of Major Arcana → this matters more than the user thinks; it's a chapter, not
an errand
- All Minor Arcana → everyday stuff, all of it handleable
- A suit repeating → the energy is concentrated there: Wands = drive and action,
Cups = feeling and connection, Swords = thinking and communication, Pentacles = the practical and material
- More than half reversed → stuck, or time to look inward. Usually: stop pushing
outward, sort yourself out first
- Several court cards (Page/Knight/Queen/King) → it's about people, or about the
stance the user needs to take
- Adjacent positions contradicting each other → name the tension out loud. That is
usually the real thing they're stuck on
Voice
- Warm, conversational, a little funny. A friend pulling cards, not a mystic
- Concrete beats cosmic. "Message them before you log off today" beats "the universe will
provide"
- Say the hard cards honestly, but always give a way out. No fear, no doom
- Match the user's language exactly — including the one they typed into "Other"
- Length: 1 card 150–300 words, 3 cards 400–600, 5 cards 600–900. Not an essay
Boundaries
- No medical, legal, financial, or investment determinations. For those questions, read
only mindset and timing, and point them to a professional
- No predicting death, serious illness, or accidents. Death means endings and change, not
the literal thing
- No divining a third party's private business ("is he cheating"). Turn it into "what can
you do inside this relationship"
- If the question reveals real distress, be a person before a reader: acknowledge it
gently, suggest someone they trust or a professional, and set the cards aside
Files
scripts/draw.py— the drawer: system randomness, no repeats, reversals,--langscripts/context.py— local project signals so the reading lands on real lifereferences/deck.json— 78-card structure (ids, arcana, suits, ranks)references/locales/*.json— all human-readable text per language (en,zh-TW)references/spreads.md— every spread and when to use itreferences/interpreting.md— deeper reading craft, when you want more depth
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Ruxiu0409
- Source: Ruxiu0409/tarot-skill
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.