let-fate-decide
Draws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, ma
Install
npx skills add https://github.com/trailofbits/skills/tree/main/plugins/let-fate-decide/skills/let-fate-decide
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install trailofbits-skills@llmmart
git clone https://github.com/trailofbits/skills.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole trailofbits/skills collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Let Fate Decide
When the path forward is unclear, let the cards speak.
Quick Start
Run the drawing script:
uv run --no-config {baseDir}/scripts/draw_cards.pyThe script outputs JSON for the default 12 Houses of the Zodiac spread: 12 houses, each with 1 Major Arcana card and 2 Minor Arcana cards. Each house and card includes a
filepath relative to{baseDir}/Read each house file and each card's meaning file to understand the draw. For faster reads, use
--contentto include house and card text directly in the JSON:uv run --no-config {baseDir}/scripts/draw_cards.py --contentInterpret the spread using the guide at /references/INTERPRETATION_GUIDE.md
When the task belongs to a specialized technical workflow, use /references/TECHNICAL_CONTEXT_LENSES.md to translate the reading into an audit, verification, domain, failure-class, or stakeholder lens
Apply the interpretation to the task at hand
When to Use
- Vague prompts: The user's request is ambiguous and multiple reasonable approaches exist
- Explicit invocations: "I'm feeling lucky", "let fate decide", "dealer's choice", "surprise me", "whatever you think", "YOLO"
- Casual delegation: "whatever", "up to you", "your call", "idk", "just do something", "wing it", "I trust you", "doesn't matter", "do what you want", "I don't care", "any approach works", "you pick"
- Yu-Gi-Oh energy: "Heart of the cards", "I believe in the heart of the cards", "you've activated my trap card", "it's time to duel"
- Shrug-like brevity: Very short prompts that fully delegate the decision without expressing a preference
- Redraw requests: "Try again" or "draw again" when no actual system changes occurred (this means draw new cards, not re-run the same approach)
- Tie-breaking: When you are about to arbitrarily pick between 2+ valid approaches, draw cards instead of silently choosing one
When NOT to Use
- The user has given clear, specific instructions
- The task has a single obvious correct approach
- As the deciding authority for safety-critical work (security, data integrity, production deployments, release approval, incident response)
- The user explicitly asks you NOT to use Tarot
- The user's tone is precision-seeking rather than casual -- ask clarifying questions instead to gather actual requirements
Security and Correctness Use
This skill may be used inside a security, audit, or correctness pipeline as a creative lens for discovery: choosing which angle to inspect next, breaking analysis paralysis, generating hypotheses, or surfacing blind spots.
It is never sufficient by itself. In security and correctness contexts, the reading must be followed by ordinary engineering evidence: source review, tests, proofs, traces, reproduction steps, exploitability analysis, or other domain-appropriate verification. Do not treat a favorable card as permission to ship, suppress a finding, skip validation, or overrule a concrete risk.
How It Works
The Draw
The script uses secrets for cryptographic randomness:
- Builds separate Major Arcana (22 cards) and Minor Arcana (56 cards) decks
- Performs Fisher-Yates shuffles via
secrets.randbelow()(no modulo bias) - Deals the default 12 Houses of the Zodiac spread
- Each house receives 1 Major Arcana card followed by 2 Minor Arcana cards
- Each of the 36 cards independently has a 50% chance of being reversed
The default spread records a conservative unordered-card entropy budget
exceeding 100 bits: roughly log2(C(22,12)) bits from Major Arcana selection,
log2(C(56,24)) bits from Minor Arcana selection (assuming
secrets.randbelow() is cryptographically secure), plus 36 reversal bits. The
exact values are computed and reported in the JSON output under entropy_bits.
The actual ordered assignment of cards to houses contains more entropy.
The Spread
The default spread is 12 Houses of the Zodiac:
| House | Represents | Question It Answers |
|---|---|---|
| 1 | Self | How should this work begin? |
| 2 | Resources | What values, assets, or constraints matter? |
| 3 | Communication | What needs to be clarified or connected? |
| 4 | Foundations | What context or dependency anchors the task? |
| 5 | Creativity | Where should experimentation or delight shape the work? |
| 6 | Practice | What quality, maintenance, or execution concern matters? |
| 7 | Partnership | Who or what must this integrate with? |
| 8 | Transformation | What risk, shared state, or deep change is present? |
| 9 | Exploration | What principle or broader strategy guides the path? |
| 10 | Calling | What delivery or long-term outcome is being served? |
| 11 | Community | What system, network, or shared aspiration is involved? |
| 12 | The Hidden | What blind spot, ending, or unconscious factor matters? |
Within each house, the Major Arcana card sets the archetypal theme and the two Minor Arcana cards provide practical detail.
For compatibility with older workflows, draw_cards.py --legacy returns the
previous 4-card hand, and draw_cards.py --legacy <count> returns a custom
hand of 1-78 cards. A positional count without --legacy is rejected, because
the new default spread has a fixed shape.
Reference Files
Each house's meaning is in its own markdown file under {baseDir}/houses/.
House files describe how the house applies across technical contexts including
building new projects, vulnerability discovery, correctness verification, and
common audit, verification, domain, failure-class, and stakeholder workflows.
Each card's meaning is in its own markdown file under {baseDir}/cards/:
cards/major/- 22 Major Arcana (archetypal forces)cards/wands/- 14 Wands (creativity, action, will)cards/cups/- 14 Cups (emotion, intuition, relationships)cards/swords/- 14 Swords (intellect, conflict, truth)cards/pentacles/- 14 Pentacles (material, practical, craft)
Interpretation
After drawing, read each house file and each card file, then synthesize meaning. See /references/INTERPRETATION_GUIDE.md for the full interpretation workflow. For cross-domain translation, see /references/TECHNICAL_CONTEXT_LENSES.md.
Key rules:
- Reversed cards invert or complicate the upright meaning
- Major Arcana cards carry more weight than Minor Arcana
- The spread tells a story across all 12 houses; don't interpret cards in isolation
- Map abstract meanings to concrete technical decisions
- In security, audit, and correctness work, use the reading to choose an investigation path, then require evidence before accepting or dismissing any risk
- Never output interpretation as a text-only turn. Include the
interpretation alongside your next tool call (the action that
implements the chosen option). Prefer
--contentso all 36 card meanings and all 12 house meanings are available from the draw output.
Example Session (House-Level Fragment)
A real reading synthesizes all 12 houses; the fragment below shows only what one house contributes so the format is clear. Do not stop after one house in actual use.
User: "I dunno, just make it work somehow"
[Draw cards]
1st House (Self): The Magician (upright), Five of Swords (reversed),
Ten of Pentacles (upright)
House contribution: The starting stance is resourceful and tool-rich
(Magician), but the practical details warn against combative edge-case work
(Five of Swords reversed) while still favoring maintainable craft
(Ten of Pentacles). This is one input into the overall reading; combine with
the remaining 11 houses before deciding on an approach.
The named draw agent returns a more compact form for portent questions:
3 concise bullets covering the dominant theme, the main risk or blind spot,
and the recommended next action.
Error Handling
If the drawing script fails:
- Script crashes with traceback: Report the error to the user and skip the reading. Do not invent cards or simulate a draw — the whole point is real entropy.
- Card file not found: Note the missing file, interpret the card from its name and suit alone, and continue with the reading.
- Never fake entropy: If the script cannot run, do not simulate a draw using your own "randomness." Tell the user the draw failed.
Rationalizations to Reject
| Rationalization | Why Wrong |
|---|---|
| "The cards said to, so I must" | Cards inform direction, they don't override safety or correctness |
| "This reading justifies my pre-existing preference" | Be honest if the reading challenges your instinct |
| "The reversed card means do nothing" | Reversed means a different angle, not inaction |
| "Major Arcana overrides user requirements" | User requirements always take priority over card readings |
| "I'll keep drawing until I get what I want" | One draw per decision point; accept the reading |
| "The reading says the risk is fine" | Cards can suggest what to inspect; only evidence can dismiss a security or correctness concern |
Files (skills)
-
agents
-
openai.yaml 236 B
interface: display_name: "Let Fate Decide" short_description: "Use a random Tarot spread to guide ambiguous plans" icon_small: "assets/trail-of-bits-mark.svg" icon_large: "assets/trail-of-bits-mark.svg" brand_color: "#D83A34"
-
-
assets
-
trail-of-bits-mark.svg 3 KB · in bundle
-
-
cards
-
cups
-
ace-of-cups.md 627 B
# Ace of Cups **Suit**: Cups | **Rank**: Ace ## Upright New feelings, emotional awakening, and a surge of creativity and intuition. This card signals the beginning of a deep emotional or creative journey. Open yourself to the flow of inspiration. ## Reversed Emotional loss, blocked creativity, and a sense of emptiness. You may be suppressing your feelings or struggling to connect with your inner voice. Something is damming the flow. ## In Technical Context Treat intuition as a useful signal, not proof. Build a small prototype, user check, or focused test around the approach that feels right before committing to it. -
eight-of-cups.md 666 B
# Eight of Cups **Suit**: Cups | **Rank**: 8 ## Upright Walking away, disillusionment, and leaving behind what no longer serves you. Despite investment, you recognize that this path leads nowhere. It takes courage to turn your back on the familiar. ## Reversed Fear of change, aimless drifting, and avoidance. You know you should leave but cannot bring yourself to act. Clinging to a dead end out of comfort or cowardice. ## In Technical Context Evaluate whether the current approach is still earning its keep. Upright, walk away from a path that no longer works; reversed, name the fear or sunk cost that is keeping you attached before deciding what to change. -
five-of-cups.md 603 B
# Five of Cups **Suit**: Cups | **Rank**: 5 ## Upright Loss, grief, and regret dominate your attention. You are fixated on what has spilled and failed, blind to what remains. Disappointment clouds your judgment. ## Reversed Acceptance, moving on, and finding peace. The grieving period ends and you begin to see what was salvaged. Forgiveness—of yourself or others—opens a new path forward. ## In Technical Context Separate the failed investment from the remaining useful pieces. Upright, stop letting sunk cost dominate the plan; reversed, convert what was learned into a cleaner path forward. -
four-of-cups.md 607 B
# Four of Cups **Suit**: Cups | **Rank**: 4 ## Upright Apathy, contemplation, and disconnection. You are so focused on what you lack that you miss what is being offered. Reevaluation is needed, but don't let it become paralysis. ## Reversed Sudden awareness, acceptance, and moving forward. The fog lifts and you finally see the opportunity that was always there. A renewed sense of motivation takes hold. ## In Technical Context Step back and inventory what is already available. Upright, an obvious option may be getting ignored; reversed, use the renewed clarity to move from evaluation into action. -
king-of-cups.md 511 B
# King of Cups **Suit**: Cups | **Rank**: King ## Upright Emotional balance, control, and diplomatic generosity. The king masters his feelings without suppressing them. He leads with wisdom tempered by genuine compassion. ## Reversed Emotional manipulation, moodiness, and volatility. Control has curdled into repression or weaponized into coercion. The calm surface hides a turbulent undercurrent. ## In Technical Context Balance technical excellence with empathy. Mentor the team through this complexity. -
knight-of-cups.md 478 B
# Knight of Cups **Suit**: Cups | **Rank**: Knight ## Upright Romance, charm, and imagination guide the way. The knight follows the heart toward an elegant vision. Grace and beauty are valued over brute force. ## Reversed Moodiness, unrealistic expectations, and disappointment. The pursuit of perfection has become self-indulgent. Elegance without substance is just decoration. ## In Technical Context Pursue the elegant solution. Prioritize beautiful code and clean APIs. -
nine-of-cups.md 634 B
# Nine of Cups **Suit**: Cups | **Rank**: 9 ## Upright Satisfaction, emotional stability, and contentment. Known as the "wish card," it signals that what you desire is within reach. Enjoy the luxury of a job well done. ## Reversed Inner dissatisfaction lurking beneath surface success. Materialism or vanity may be substituting for genuine fulfillment. What you wanted isn't what you needed. ## In Technical Context The approach may have strong user or maintainer fit, but validate the happy path end to end before calling it done. If reversed, check whether surface satisfaction is hiding a missing requirement or weak tradeoff. -
page-of-cups.md 518 B
# Page of Cups **Suit**: Cups | **Rank**: Page ## Upright Creative opportunity, curiosity, and fresh ideas bubble up from unexpected places. The inner child stirs with wonder. A new emotional or artistic impulse arrives bearing a message. ## Reversed Emotional immaturity, creative block, and insecurity. Self-doubt smothers the spark before it can catch. You are too afraid of looking foolish to try something new. ## In Technical Context Think creatively. The unconventional solution might be the best one here. -
queen-of-cups.md 502 B
# Queen of Cups **Suit**: Cups | **Rank**: Queen ## Upright Compassion, calm, and emotional security. The queen holds space for others with deep intuitive understanding. Comfort flows naturally from genuine empathy and presence. ## Reversed Codependency, neglected inner feelings, and forgotten self-care. You have given so much to others that nothing remains for yourself. Boundaries must be restored. ## In Technical Context Prioritize the user experience. How will the end user feel using this? -
seven-of-cups.md 497 B
# Seven of Cups **Suit**: Cups | **Rank**: 7 ## Upright Fantasy, illusion, and wishful thinking. Too many choices shimmer before you, each more tempting than the last. Not all that glitters is real—discernment is essential. ## Reversed Alignment with personal values and becoming grounded. The illusions dissolve and clarity emerges. You finally see which option is real and which was smoke. ## In Technical Context Too many options causing analysis paralysis. Ground yourself and pick one. -
six-of-cups.md 496 B
# Six of Cups **Suit**: Cups | **Rank**: 6 ## Upright Nostalgia, childhood memories, and innocence. A reunion with the past brings comfort and clarity. Simple joys and familiar patterns offer guidance. ## Reversed Stuck in the past and clinging to unrealistic expectations. Nostalgia has become a trap rather than a guide. You must let go of how things were to see how they could be. ## In Technical Context Look at how this was solved before. Past patterns or prior art may hold the answer. -
ten-of-cups.md 536 B
# Ten of Cups **Suit**: Cups | **Rank**: 10 ## Upright Harmony, happiness, and complete fulfillment. Everything aligns—heart, mind, and circumstance. This is the emotional culmination, where relationships and efforts reach their ideal state. ## Reversed Broken harmony, disillusionment, and misalignment. The picture-perfect vision has cracked. Values are at odds with reality, and the dream doesn't match what was built. ## In Technical Context Full alignment between implementation and requirements. This is the ideal solution. -
three-of-cups.md 482 B
# Three of Cups **Suit**: Cups | **Rank**: 3 ## Upright Celebration, friendship, and joyful collaboration. The community comes together in shared success. This is a time for collective effort and mutual support. ## Reversed Overindulgence, gossip, and isolation. The group dynamic has soured, or you've withdrawn from those who could help. Social excess may be masking deeper issues. ## In Technical Context Involve the team. This is a collaborative effort, not a solo mission. -
two-of-cups.md 500 B
# Two of Cups **Suit**: Cups | **Rank**: 2 ## Upright Partnership, unity, and mutual respect form the core of this card. A meaningful connection or collaboration is forming. Two forces come together in balanced harmony. ## Reversed Breakup, imbalance, and lack of harmony. A partnership may be strained or one side is giving far more than the other. Misaligned expectations are eroding trust. ## In Technical Context Pair program or collaborate closely. This task benefits from two perspectives.
-
-
major
-
00-the-fool.md 563 B
# The Fool **Arcana**: Major | **Number**: 0 ## Upright New beginnings, innocence, and spontaneity. The Fool steps forward without fear, trusting the journey ahead. This card suggests embracing the unknown and taking a leap of faith. ## Reversed Recklessness, carelessness, and negligence. The reversed Fool rushes in without thinking, ignoring obvious risks. Naivety becomes a liability rather than a strength. ## In Technical Context Suggests starting fresh -- a greenfield approach or unfamiliar technology. Embrace experimentation, but have a safety net. -
01-the-magician.md 648 B
# The Magician **Arcana**: Major | **Number**: I ## Upright Manifestation, resourcefulness, and skilled action. The Magician has all the tools needed and knows how to use them. This card says you have everything required to make it happen -- focus your intent and execute. ## Reversed Manipulation, trickery, and unused potential. The reversed Magician either misuses their talents or fails to use them at all. Cleverness without integrity leads nowhere good. ## In Technical Context You already have the tools and knowledge to solve this. Stop researching and start building. The answer is in your existing toolkit, not in another dependency. -
02-the-high-priestess.md 710 B
# The High Priestess **Arcana**: Major | **Number**: II ## Upright Intuition, unconscious knowledge, and hidden truth. The High Priestess sits at the threshold between the seen and unseen. Trust what you sense beneath the surface -- the answer is there but not yet articulated. ## Reversed Secrets, withdrawal, and repressed intuition. The reversed High Priestess warns that important information is being hidden or ignored. Silence here is not wisdom but avoidance. ## In Technical Context The bug or design flaw is there but not obvious yet. Trust your instinct that something feels off. Dig into the logs, read between the lines of the error messages, and investigate the quiet corners of the codebase. -
03-the-empress.md 645 B
# The Empress **Arcana**: Major | **Number**: III ## Upright Abundance, nurturing, and creative growth. The Empress cultivates and sustains, bringing ideas to fruition through patient care. This card suggests fostering what exists rather than forcing something new. ## Reversed Dependence, smothering, and creative emptiness. The reversed Empress over-invests in one thing at the expense of everything else. Nurturing becomes suffocating when there are no boundaries. ## In Technical Context Invest in developer experience, documentation, and onboarding. Grow the project by making it welcoming and sustainable, not by adding more features. -
04-the-emperor.md 651 B
# The Emperor **Arcana**: Major | **Number**: IV ## Upright Authority, structure, and disciplined control. The Emperor brings order from chaos through clear rules and firm boundaries. This card calls for establishing systems, setting standards, and leading with decisive action. ## Reversed Tyranny, rigidity, and inflexibility. The reversed Emperor demands compliance without reason and resists all change. Structure becomes a cage when it cannot adapt. ## In Technical Context Establish clear architecture, coding standards, and review processes. The project needs governance and structure right now -- but keep it pragmatic, not authoritarian. -
05-the-hierophant.md 685 B
# The Hierophant **Arcana**: Major | **Number**: V ## Upright Tradition, established systems, and conventional wisdom. The Hierophant preserves knowledge and teaches through proven methods. This card advises following established patterns and learning from those who came before. ## Reversed Rebellion, subversiveness, and challenging the status quo. The reversed Hierophant questions orthodoxy and breaks from tradition. Sometimes the established way is wrong and a new approach is needed. ## In Technical Context Follow the well-documented, battle-tested approach. Use the standard library, adopt the framework's conventions, and read the RFCs. Now is not the time to be clever. -
06-the-lovers.md 715 B
# The Lovers **Arcana**: Major | **Number**: VI ## Upright Harmony, meaningful choices, and alignment of values. The Lovers represent a crossroads where the decision reflects who you truly are. This card says the choice matters deeply -- pick the option that aligns with your principles. ## Reversed Disharmony, imbalance, and misalignment. The reversed Lovers signal a mismatch between values and actions, or a partnership that is not working. Avoiding the choice is itself a choice. ## In Technical Context You face a genuine architectural fork. Evaluate the trade-offs honestly between competing approaches. Pick the one that aligns with the project's long-term values, not the one that is merely expedient. -
07-the-chariot.md 704 B
# The Chariot **Arcana**: Major | **Number**: VII ## Upright Willpower, determination, and hard-won victory. The Chariot charges forward through sheer force of will, holding opposing forces in balance. This card says push through obstacles with focus and discipline. ## Reversed Lack of direction, scattered effort, and aggression without purpose. The reversed Chariot crashes when willpower becomes stubbornness. Momentum without steering is just a faster way to fail. ## In Technical Context Push through the hard part. The implementation is tough but achievable with focused effort. Set a deadline, minimize distractions, and ship it -- but make sure you are driving toward the right destination. -
08-strength.md 689 B
# Strength **Arcana**: Major | **Number**: VIII ## Upright Courage, patience, and quiet influence. Strength tames not through force but through compassion and persistence. This card advises gentle determination -- the problem yields to steady, patient effort rather than brute force. ## Reversed Self-doubt, weakness, and insecurity. The reversed Strength card signals a loss of confidence or trying to force what requires finesse. Raw power without patience makes things worse. ## In Technical Context The brute-force solution will not work here. Apply patience: profile before optimizing, refactor incrementally, and persuade the team through working examples rather than arguments. -
09-the-hermit.md 644 B
# The Hermit **Arcana**: Major | **Number**: IX ## Upright Introspection, solitude, and inner guidance. The Hermit withdraws from noise to find clarity through deep contemplation. This card says step back, reflect, and let understanding come before action. ## Reversed Isolation, loneliness, and excessive withdrawal. The reversed Hermit retreats too far and loses connection with reality. Solitude becomes avoidance when it has no end. ## In Technical Context Step away and think deeply before coding. Read the docs, study the problem space, and resist the urge to jump in. The answer will come from understanding, not from typing faster. -
10-wheel-of-fortune.md 723 B
# Wheel of Fortune **Arcana**: Major | **Number**: X ## Upright Change, cycles, and decisive turning points. The Wheel spins and what was down comes up -- nothing stays the same forever. This card signals that forces beyond your control are shifting things in a new direction. ## Reversed Bad luck, resistance to change, and clinging to the old cycle. The reversed Wheel warns against fighting inevitable transitions. The harder you grip the current state, the more painful the change will be. ## In Technical Context The landscape is shifting -- a new version, a deprecation, a market change. Adapt now rather than later. What worked before may not work going forward, and that is not a failure, it is just the cycle. -
11-justice.md 664 B
# Justice **Arcana**: Major | **Number**: XI ## Upright Fairness, truth, and cause and effect. Justice weighs evidence impartially and renders a clear verdict. This card demands honesty, accountability, and accepting consequences of past decisions. ## Reversed Unfairness, dishonesty, and avoiding accountability. The reversed Justice card signals bias, blame-shifting, or a system that rewards the wrong behavior. Someone is not playing fair. ## In Technical Context Apply rigorous, objective evaluation. Benchmark before choosing, measure before claiming improvement, and hold all options to the same standard. Let the data decide, not opinions or politics. -
12-the-hanged-man.md 709 B
# The Hanged Man **Arcana**: Major | **Number**: XII ## Upright Surrender, letting go, and radical new perspective. The Hanged Man sees the world upside down and finds wisdom in the inversion. This card advises pausing, releasing control, and looking at the problem from a completely different angle. ## Reversed Delays, resistance to sacrifice, and stalling. The reversed Hanged Man refuses to let go or change perspective, trapped by stubbornness. The pause has become paralysis. ## In Technical Context Invert your assumptions. If you have been trying to make the data fit the schema, change the schema. If the test keeps failing, maybe the test is right and the code is wrong. Look at it upside down. -
13-death.md 702 B
# Death **Arcana**: Major | **Number**: XIII ## Upright Endings, transformation, and necessary transition. Death clears away what no longer serves to make room for what comes next. This card does not mean literal death -- it means something must end so something better can begin. ## Reversed Resistance to change, stagnation, and inability to let go. The reversed Death card clings to what is already gone, refusing the transformation. Decay accelerates when you will not let the dead thing die. ## In Technical Context Kill the feature, deprecate the API, or delete the legacy code. It served its purpose and now it is holding you back. The longer you keep it on life support, the more it costs. -
14-temperance.md 706 B
# Temperance **Arcana**: Major | **Number**: XIV ## Upright Balance, moderation, and purposeful patience. Temperance blends opposing elements into something harmonious through careful, measured action. This card advises finding the middle path and taking a long-term view. ## Reversed Imbalance, excess, and lack of long-term vision. The reversed Temperance card warns of overindulgence in one direction -- too fast, too much, too soon. Haste and extremes undermine what patience would achieve. ## In Technical Context Balance speed with quality, features with stability, innovation with reliability. The right answer is probably a measured combination of approaches, not an all-in bet on one extreme. -
15-the-devil.md 699 B
# The Devil **Arcana**: Major | **Number**: XV ## Upright Bondage, materialism, and the shadow self. The Devil represents chains that are self-imposed -- addictions, dependencies, and patterns you choose to keep. This card exposes what controls you by revealing you have always had the power to leave. ## Reversed Release, breaking free, and reclaiming power. The reversed Devil signals liberation from what held you captive. The chains fall away once you decide to remove them. ## In Technical Context You are trapped by a dependency, vendor lock-in, or sunk-cost fallacy. Acknowledge the chain, then break it. The migration cost is real but finite; the cost of staying is ongoing and growing. -
16-the-tower.md 723 B
# The Tower **Arcana**: Major | **Number**: XVI ## Upright Sudden upheaval, revelation, and the destruction of false structures. The Tower is struck by lightning and what was built on a weak foundation crumbles. This card says the collapse is necessary -- truth cannot be built on lies. ## Reversed Fear of change, averting disaster, and delaying the inevitable. The reversed Tower tries to prop up what is already crumbling. You can delay the fall, but the foundation is still broken. ## In Technical Context Something fundamental about the current approach is wrong. Tear it down and rebuild rather than patching. The outage, the security breach, or the architectural failure is revealing a truth you need to act on. -
17-the-star.md 653 B
# The Star **Arcana**: Major | **Number**: XVII ## Upright Hope, inspiration, and serene renewal. The Star appears after destruction, offering calm guidance and restored faith. This card says healing is underway -- trust the process and let clarity return naturally. ## Reversed Despair, disconnection, and loss of faith. The reversed Star has lost sight of the guiding light and feels adrift. Without hope, even good options look bleak. ## In Technical Context After the incident or the failed launch, take a breath. The path forward exists and the team can recover. Focus on the north star of what you are building and let that guide the rebuild. -
18-the-moon.md 759 B
# The Moon **Arcana**: Major | **Number**: XVIII ## Upright Illusion, fear, and the murky subconscious. The Moon casts shadows that distort perception -- things are not what they seem. This card warns that anxiety and uncertainty are clouding judgment, and the path is less dangerous than it appears. ## Reversed Release of fear, emerging clarity, and truth surfacing. The reversed Moon signals that illusions are fading and reality is becoming visible. What seemed terrifying in the dark is manageable in the light. ## In Technical Context You do not fully understand the system yet and your assumptions may be wrong. Do not trust the documentation at face value -- write tests, add logging, and verify behavior empirically before building on top of it. -
19-the-sun.md 722 B
# The Sun **Arcana**: Major | **Number**: XIX ## Upright Joy, success, vitality, and radiant confidence. The Sun shines without reservation, illuminating everything clearly. This card signals a period of energy, clarity, and well-earned success -- things are going well and will continue to. ## Reversed Diminished joy, sadness beneath the surface, and overconfidence. The reversed Sun warns that excessive optimism may be masking real problems. The light is still there but something is blocking it. ## In Technical Context The approach is working and the team has momentum. Lean into it -- ship the feature, celebrate the milestone, and build on the success. But do not skip the tests just because things feel good. -
20-judgement.md 701 B
# Judgement **Arcana**: Major | **Number**: XX ## Upright Reflection, reckoning, and awakening to purpose. Judgement calls you to honestly evaluate the past, learn from it, and rise renewed. This card demands a clear-eyed accounting of what worked, what failed, and what you are meant to do next. ## Reversed Self-doubt, refusal to learn, and harsh self-judgment. The reversed Judgement card either avoids reflection entirely or drowns in it. Neither denial nor self-flagellation produces growth. ## In Technical Context Conduct a proper retrospective. Review the post-mortem, audit the technical debt, and honestly assess what needs to change. Learn the lesson so you do not repeat the incident. -
21-the-world.md 731 B
# The World **Arcana**: Major | **Number**: XXI ## Upright Completion, accomplishment, and wholeness. The World represents the successful end of a cycle -- everything has come together. This card signals fulfillment, integration, and the satisfying close of a chapter before the next begins. ## Reversed Incompletion, shortcuts, and lingering loose ends. The reversed World warns that the finish line was crossed but the work is not truly done. Declaring victory too early leaves gaps that will haunt you. ## In Technical Context The project is ready to ship -- or it should be. Tie up the loose ends, write the migration guide, update the changelog, and close the milestone properly. A clean ending sets up a clean beginning.
-
-
pentacles
-
ace-of-pentacles.md 458 B
# Ace of Pentacles **Suit**: Pentacles | **Rank**: Ace ## Upright New financial opportunity, prosperity, and manifestation. A seed of material success is being planted. The foundation for something tangible is here. ## Reversed Lost opportunity, poor planning, and scarcity. A promising start slips away due to lack of preparation or follow-through. ## In Technical Context A solid foundation to build on. Start with the fundamentals and get them right. -
eight-of-pentacles.md 486 B
# Eight of Pentacles **Suit**: Pentacles | **Rank**: 8 ## Upright Diligence, mastery, and skill development. Repetitive, detail-oriented work that builds expertise. The apprentice honing their craft one piece at a time. ## Reversed Perfectionism, lack of motivation, and scattered focus. The pursuit of mastery becomes an excuse to never ship, or effort lacks direction. ## In Technical Context Heads-down, detailed craftsmanship. Focus on getting the implementation exactly right. -
five-of-pentacles.md 427 B
# Five of Pentacles **Suit**: Pentacles | **Rank**: 5 ## Upright Financial loss, insecurity, and hardship. Difficult times and material worry. Resources are thin and the path forward feels bleak. ## Reversed Recovery from hardship, inner scarcity, or accepting help. The worst is passing, but the scars of scarcity linger. ## In Technical Context Resources are scarce. Work within constraints rather than wishing for more. -
four-of-pentacles.md 436 B
# Four of Pentacles **Suit**: Pentacles | **Rank**: 4 ## Upright Security, conservation, and control. Holding tightly to what you have out of fear of loss. Stability maintained through a scarcity mindset. ## Reversed Greed, materialism, and reluctance to let go. Over-control stifles growth and prevents necessary change. ## In Technical Context Don't over-protect or over-abstract. Release your grip on the code and let it evolve. -
king-of-pentacles.md 459 B
# King of Pentacles **Suit**: Pentacles | **Rank**: King ## Upright Wealth, business acumen, and disciplined leadership. Security built through steady, responsible stewardship. The master of the material world. ## Reversed Financially inept, obsessed with wealth, or stubbornly rigid. Leadership devolves into greed or an inability to adapt. ## In Technical Context Enterprise-grade thinking. Build with discipline, reliability, and production readiness. -
knight-of-pentacles.md 471 B
# Knight of Pentacles **Suit**: Pentacles | **Rank**: Knight ## Upright Efficiency, routine, and methodical progress. The most reliable and conservative of the knights. Steady effort without flash or shortcuts. ## Reversed Boredom, laziness, and feeling stuck. Methodical progress stalls into perfectionism or an inability to adapt when the plan needs changing. ## In Technical Context Slow, steady, reliable progress. No shortcuts—follow the process methodically. -
nine-of-pentacles.md 447 B
# Nine of Pentacles **Suit**: Pentacles | **Rank**: 9 ## Upright Abundance, luxury, and self-sufficiency. Financial independence earned through discipline and effort. Enjoying the fruits of sustained work. ## Reversed Over-investment in work at the expense of everything else. Superficial success that masks deeper dissatisfaction. ## In Technical Context The solution is self-contained and elegant. Minimal dependencies, maximum reliability. -
page-of-pentacles.md 465 B
# Page of Pentacles **Suit**: Pentacles | **Rank**: Page ## Upright Ambition, desire to learn, and studiousness. A new venture approached with diligence and curiosity. Grounded enthusiasm for mastering something tangible. ## Reversed Lack of progress, procrastination, and learning without doing. Endless preparation that never translates into action. ## In Technical Context Study the problem domain first. Read the docs, understand the data model, then code. -
queen-of-pentacles.md 452 B
# Queen of Pentacles **Suit**: Pentacles | **Rank**: Queen ## Upright Practicality, nurturing, and financial security. A grounded provider who makes things work reliably. Comfort built through attentive, steady care. ## Reversed Self-centeredness, jealousy, and neglecting priorities. Practical wisdom gives way to misplaced focus or resentment. ## In Technical Context Practical, nurturing approach. Make it work reliably before making it clever. -
seven-of-pentacles.md 461 B
# Seven of Pentacles **Suit**: Pentacles | **Rank**: 7 ## Upright Patience, long-term investment, and perseverance. The work has been done and now you wait for the harvest. Rewards come to those who endure. ## Reversed Impatience, poor returns, and frustration. The effort invested feels wasted, or the temptation to abandon a long-term plan grows. ## In Technical Context Long-term investment in quality. Write the tests, document the API, build it right. -
six-of-pentacles.md 428 B
# Six of Pentacles **Suit**: Pentacles | **Rank**: 6 ## Upright Generosity, charity, and sharing wealth. Giving and receiving in balance. Resources flow where they are needed most. ## Reversed Strings attached, debt, and one-sided charity. Generosity with hidden motives or an imbalance of power in the exchange. ## In Technical Context Share knowledge and reuse existing work. Open source it or leverage what others built. -
ten-of-pentacles.md 459 B
# Ten of Pentacles **Suit**: Pentacles | **Rank**: 10 ## Upright Wealth, inheritance, and legacy. Long-term success that extends beyond the individual. Building something that endures for those who come after. ## Reversed Financial failure, loss of legacy, and short-term focus. What was built crumbles because no one planned for succession. ## In Technical Context Build for the long term. Think about maintainability, succession, and future developers. -
three-of-pentacles.md 468 B
# Three of Pentacles **Suit**: Pentacles | **Rank**: 3 ## Upright Teamwork, collaboration, and craftsmanship. Skilled people working together produce something greater than any individual could. Learning through doing. ## Reversed Disharmony, misalignment, and working alone. The team is out of sync, or someone insists on doing everything themselves. ## In Technical Context This requires collaboration and craft. Code review, pair programming, shared ownership. -
two-of-pentacles.md 448 B
# Two of Pentacles **Suit**: Pentacles | **Rank**: 2 ## Upright Balance, adaptability, and juggling priorities. Multiple demands compete for attention, and skillful time management keeps everything in motion. ## Reversed Overwhelmed, disorganized, and overcommitted. Too many spinning plates lead to dropped responsibilities and burnout. ## In Technical Context Juggle the competing priorities. Balance speed and quality—neither can be zero.
-
-
swords
-
ace-of-swords.md 477 B
# Ace of Swords **Suit**: Swords | **Rank**: Ace ## Upright A breakthrough moment of mental clarity and truth. A new idea cuts through confusion like a blade, revealing the path forward. Raw intellectual power at its sharpest. ## Reversed Confusion and chaos cloud your thinking. Lack of clarity leads to poor decisions. The truth is obscured or distorted. ## In Technical Context A breakthrough insight. Cut through the noise—the answer is clear if you think precisely. -
eight-of-swords.md 508 B
# Eight of Swords **Suit**: Swords | **Rank**: 8 ## Upright Feeling trapped, restricted, and imprisoned by circumstances. Self-limiting beliefs create walls that aren't really there. The bindings are looser than they appear. ## Reversed A new perspective breaks the illusion of captivity. Self-acceptance frees you from mental prison. The constraints were never as real as they seemed. ## In Technical Context You're more constrained than you need to be. Question the assumptions limiting your approach. -
five-of-swords.md 498 B
# Five of Swords **Suit**: Swords | **Rank**: 5 ## Upright Conflict and disagreement where winning comes at too high a cost. Competition turns toxic and the victory feels hollow. Someone walks away defeated and resentful. ## Reversed Reconciliation after conflict becomes possible. Forgiveness opens the door to moving forward. The desire to be right gives way to the desire for resolution. ## In Technical Context Winning the argument isn't worth it. Find the solution everyone can live with. -
four-of-swords.md 453 B
# Four of Swords **Suit**: Swords | **Rank**: 4 ## Upright Rest and recuperation after mental exhaustion. Contemplation and solitude restore clarity. Step back from the battle to regain your strength. ## Reversed Restlessness and burnout from refusing to pause. Pushing through exhaustion leads to diminishing returns. The mind demands rest it is not getting. ## In Technical Context Take a break before continuing. Rest and return with fresh eyes. -
king-of-swords.md 518 B
# King of Swords **Suit**: Swords | **Rank**: King ## Upright Intellectual power and authority grounded in truth. Clear thinking and fair judgment command respect. Logic and evidence guide every decision with precision. ## Reversed Manipulative and tyrannical misuse of intellectual power. Authority wielded without fairness or compassion. The mind becomes a weapon against others rather than a tool for truth. ## In Technical Context Apply rigorous analytical thinking. Let logic and evidence drive the decision. -
knight-of-swords.md 615 B
# Knight of Swords **Suit**: Swords | **Rank**: Knight ## Upright Ambition and determination charge forward at full speed. Fast thinking and decisive action cut through obstacles. The drive to succeed overpowers hesitation. ## Reversed Reckless action without direction or regard for consequences. Restlessness leads to scattered energy and unfinished work. Speed without purpose causes collateral damage. ## In Technical Context Move decisively and cut away ambiguity, but do not outrun the evidence. Precision matters more than raw speed: identify the key fact, test it, and act without endless deliberation. -
nine-of-swords.md 597 B
# Nine of Swords **Suit**: Swords | **Rank**: 9 ## Upright Anxiety, worry, and fear keep you awake at night. Overthinking spirals into nightmares about what might go wrong. The mind tortures itself with worst-case scenarios. ## Reversed Hope returns as despair loosens its grip. Reaching out to others brings comfort and perspective. Recovery from anxiety begins with a single honest conversation. ## In Technical Context Separate the real failure mode from the imagined one. Verify the concern with a test, trace, or concrete reproduction, then proceed based on evidence rather than anxiety. -
page-of-swords.md 504 B
# Page of Swords **Suit**: Swords | **Rank**: Page ## Upright Curiosity and mental energy drive a thirst for knowledge. Restless and eager, full of new ideas and questions. The mind is sharp but lacks experience to temper its edge. ## Reversed Deception and manipulation replace honest inquiry. All talk and no action—ideas without follow-through. Cunning used for the wrong purposes. ## In Technical Context Investigate before implementing. Read the source, check the docs, understand the system. -
queen-of-swords.md 517 B
# Queen of Swords **Suit**: Swords | **Rank**: Queen ## Upright Perceptive, clear-thinking, and fiercely independent. Direct communication cuts through pretense and ambiguity. Wisdom earned through experience sharpens every word. ## Reversed Coldness and bitterness replace clarity. Emotions overwhelm rational thought, or rationality suppresses necessary feeling. Sharp words wound rather than illuminate. ## In Technical Context Be precise and direct. Write clear code, clear commits, clear docs. No ambiguity. -
seven-of-swords.md 495 B
# Seven of Swords **Suit**: Swords | **Rank**: 7 ## Upright Deception, stealth, and strategic maneuvering. Someone is getting away with something through cleverness rather than honesty. A shortcut that avoids confrontation but carries risk. ## Reversed Coming clean and letting conscience guide you. Confession and honesty replace cunning. The deception unravels and truth surfaces. ## In Technical Context Watch for hidden assumptions or shortcuts that seem clever but will bite you later. -
six-of-swords.md 494 B
# Six of Swords **Suit**: Swords | **Rank**: 6 ## Upright Transition and moving on toward calmer waters. Leaving behind what no longer serves you. The journey is quiet and bittersweet, but necessary. ## Reversed Resistance to change keeps you anchored to the past. Unfinished business and emotional baggage weigh you down. The crossing is delayed but cannot be avoided forever. ## In Technical Context Migrate away from the old approach. The transition will be uncomfortable but necessary. -
ten-of-swords.md 612 B
# Ten of Swords **Suit**: Swords | **Rank**: 10 ## Upright A painful, decisive ending. Rock bottom has been reached and there is nowhere to go but up. Betrayal or total defeat marks the close of a chapter. ## Reversed Resisting an inevitable ending only prolongs the suffering. Recovery and regeneration are possible, but only after accepting what is truly over. The dawn follows the darkest hour. ## In Technical Context Treat this as a decisive boundary. Upright, the current approach has failed and needs a clean replacement; reversed, stop prolonging the failure mode and plan the recovery deliberately. -
three-of-swords.md 457 B
# Three of Swords **Suit**: Swords | **Rank**: 3 ## Upright Heartbreak, sorrow, and grief from a painful truth. The clarity of swords cuts deep here—what you learn hurts, but it is real. Honesty wounds before it heals. ## Reversed Recovery and forgiveness begin. The pain is fading and you are moving on. Lessons from sorrow start to take root. ## In Technical Context A painful truth about the codebase. Accept the tech debt and address it honestly. -
two-of-swords.md 497 B
# Two of Swords **Suit**: Swords | **Rank**: 2 ## Upright A difficult choice between two seemingly equal options creates a stalemate. Avoidance and indecision keep you frozen. The blindfold must come off before progress can be made. ## Reversed Information overload makes the decision even harder. Indecision deepens into confusion. The cost of not choosing grows by the minute. ## In Technical Context Two equally valid options and you're stuck. Gather more data or just pick one and commit.
-
-
wands
-
ace-of-wands.md 461 B
# Ace of Wands **Suit**: Wands | **Rank**: Ace ## Upright Inspiration, new opportunity, creative spark. A burst of energy ignites a fresh beginning. The seed of something powerful is being offered to you. ## Reversed Delays, lack of motivation, missed opportunity. The spark is there but you are not acting on it. Creative blocks or false starts hold you back. ## In Technical Context A new project or feature idea with real potential. Start the prototype. -
eight-of-wands.md 443 B
# Eight of Wands **Suit**: Wands | **Rank**: 8 ## Upright Speed, swift action, movement, rapid progress. Everything aligns and momentum carries you forward. Strike while conditions are favorable. ## Reversed Delays, frustration, waiting, scattered energy. The rush has stalled and impatience makes things worse. Regroup before pushing ahead. ## In Technical Context Move fast. This is a straightforward implementation--don't overthink it. -
five-of-wands.md 482 B
# Five of Wands **Suit**: Wands | **Rank**: 5 ## Upright Competition, conflict, disagreements, tension. Multiple forces clash and no one is listening. The chaos is unproductive without a unifying direction. ## Reversed Avoiding conflict, compromise, finding common ground. The tension eases as parties move toward resolution. Peace comes from choosing cooperation. ## In Technical Context Competing approaches or team disagreements. Resolve the design debate before proceeding. -
four-of-wands.md 461 B
# Four of Wands **Suit**: Wands | **Rank**: 4 ## Upright Celebration, harmony, milestones, homecoming. A joyful achievement deserves recognition. The foundation is solid and the community gathers around it. ## Reversed Lack of harmony, transition, personal celebration. The milestone is reached but something feels incomplete. Celebrate privately even if others don't notice. ## In Technical Context Celebrate the milestone. Ship what you have--it's ready. -
king-of-wands.md 467 B
# King of Wands **Suit**: Wands | **Rank**: King ## Upright Big vision, leadership, entrepreneurial spirit, honor. A natural leader who sees the whole board and moves with decisive authority. Vision inspires action. ## Reversed Impulsiveness, overbearing, hasty decisions. The desire to lead outpaces wisdom. Grand plans collapse without patience and follow-through. ## In Technical Context Think big-picture. Set the technical vision and let the details follow. -
knight-of-wands.md 547 B
# Knight of Wands **Suit**: Wands | **Rank**: Knight ## Upright Energy, passion, adventure, impulsiveness. A bold charge forward fueled by conviction. Action first, questions later. ## Reversed Haste, delays, frustration, recklessness. Speed without direction causes collisions. The fire burns out of control without discipline. ## In Technical Context Use the momentum for a bold prototype or implementation push, with guardrails that keep the blast radius small. If reversed, slow down enough to restore direction before adding more energy. -
nine-of-wands.md 414 B
# Nine of Wands **Suit**: Wands | **Rank**: 9 ## Upright Resilience, persistence, last stand, boundaries. You carry the scars of effort but remain standing. One final push will see you through. ## Reversed Exhaustion, giving up, paranoia. Wounds accumulate and the will to continue fades. Rest before collapse, not after. ## In Technical Context You're almost done but tired. Push through the last edge cases. -
page-of-wands.md 449 B
# Page of Wands **Suit**: Wands | **Rank**: Page ## Upright Exploration, enthusiasm, discovery, free spirit. A young energy full of curiosity and wonder. New ideas arrive without the burden of past failures. ## Reversed Lack of direction, setbacks to plans, procrastination. Enthusiasm scatters without focus. The explorer wanders but never arrives. ## In Technical Context Spike it. Build a quick experiment to test the idea before committing. -
queen-of-wands.md 466 B
# Queen of Wands **Suit**: Wands | **Rank**: Queen ## Upright Courage, determination, independence, confidence. A commanding presence who inspires through warmth and conviction. Lead boldly and others will follow. ## Reversed Selfishness, jealousy, demanding nature. Confidence curdles into domineering control. The fire that inspires can also burn those nearby. ## In Technical Context Lead with confidence. Own the technical direction and trust your judgment. -
seven-of-wands.md 525 B
# Seven of Wands **Suit**: Wands | **Rank**: 7 ## Upright Defiance, standing your ground, perseverance. Challenges come from all sides but your position is strong. Hold firm against opposition. ## Reversed Exhaustion, giving up, overwhelmed. The constant defense is wearing you down. Know when persistence becomes stubbornness. ## In Technical Context Pressure-test the technical decision instead of folding at the first pushback. Hold your ground when the evidence supports it, but distinguish real critique from noise. -
six-of-wands.md 587 B
# Six of Wands **Suit**: Wands | **Rank**: 6 ## Upright Victory, recognition, success, public acknowledgment. You have earned your triumph and others see it. Confidence is well-placed after hard work. ## Reversed Fall from grace, egotism, lack of recognition. Success breeds arrogance or the win goes unnoticed. Stay grounded regardless of external validation. ## In Technical Context The approach has signs of success, so make the win reproducible. Finish the verification, document why this path worked, and communicate the result without letting confidence turn into complacency. -
ten-of-wands.md 438 B
# Ten of Wands **Suit**: Wands | **Rank**: 10 ## Upright Burden, responsibility, overcommitment, hard work. You carry too much and the weight is crushing. Success has become its own trap. ## Reversed Letting go, delegating, breaking under pressure. Relief comes from releasing what is not yours to carry. Shed obligations before they break you. ## In Technical Context Scope is too large. Break it down or delegate parts of the task. -
three-of-wands.md 464 B
# Three of Wands **Suit**: Wands | **Rank**: 3 ## Upright Expansion, progress, foresight, looking ahead. Early efforts are bearing fruit and the horizon is widening. Momentum is building in your favor. ## Reversed Delays, obstacles to growth, playing it small. Progress stalls because you are not thinking big enough. Unexpected setbacks test your patience. ## In Technical Context Your initial work is paying off. Think about scalability and what comes next. -
two-of-wands.md 445 B
# Two of Wands **Suit**: Wands | **Rank**: 2 ## Upright Planning, decisions about direction, future vision. You hold the world in your hands and must choose a path. Bold decisions now shape what comes next. ## Reversed Fear of the unknown, poor planning. Indecision keeps you stuck in familiar territory. You are avoiding the leap that growth requires. ## In Technical Context Time to plan architecture before coding. Evaluate your options.
-
-
-
houses
-
01-first-house.md 1.4 KB
# First House **Domain**: Self, identity, agency, and first motion ## Core Meaning The First House describes how the work presents itself and how to begin. It sets the operating stance: decisive or exploratory, cautious or bold, solo or collaborative. ## Building New Projects Use this house to choose the initial shape of the project. It points to the first interface, the first workflow, and the identity the system should have before supporting details accumulate. ## Vulnerability Discovery Use this house to identify the attacker's first foothold. It maps to entry points, externally reachable behavior, trust boundaries, and the first action that turns a codebase into an attack surface. ## Correctness Verification Use this house to define what "correct" means at the boundary. It maps to preconditions, initial states, public APIs, input domains, and the first invariant that must hold before deeper reasoning is useful. ## Technical Workflow Lenses - Audit pipeline: scope the first entry points, trust boundaries, and initial assumptions before deeper discovery. - Evidence mode: produce a minimal source trace, call graph, reproduction, or boundary test that proves where the work begins. - Human context: name the decision owner and the first handoff needed to keep the effort from drifting. ## Technical Prompt What is the right stance for beginning, and what first move makes the rest of the work easier to reason about? -
02-second-house.md 1.5 KB
# Second House **Domain**: Resources, values, constraints, and preservation ## Core Meaning The Second House describes what is available, what is scarce, and what must not be wasted. It asks which resources, values, or invariants should constrain the plan. ## Building New Projects Use this house to reason about budgets: time, complexity, dependencies, platform limits, team expertise, and which pieces deserve durable foundations. ## Vulnerability Discovery Use this house to examine assets and incentives. It maps to funds, secrets, privileges, quotas, availability, and anything an attacker could steal, degrade, lock, or manipulate. Contrast with the Eighth House: the Second House treats secrets and privileges as assets to protect; the Eighth House focuses on how they change hands, escalate, or become exposed during transitions. ## Correctness Verification Use this house to protect invariants. It maps to conservation properties, resource accounting, bounds, ownership, permissions, and state that must remain consistent across transitions. ## Technical Workflow Lenses - Audit pipeline: enumerate assets, privileges, quotas, budgets, and incentives before ranking risk. - Evidence mode: prefer accounting tests, invariant checks, permission traces, dimensional analysis, or scarcity proofs. - Domain lens: in DeFi and crypto, treat units, balances, keys, randomness, and token behavior as first-class resources. ## Technical Prompt What resource or invariant gives this task its real value, and what would be costly to lose? -
03-third-house.md 1.3 KB
# Third House **Domain**: Communication, learning, interfaces, and local connections ## Core Meaning The Third House describes exchange: names, messages, protocols, documentation, small decisions, and the local links between parts of a system. ## Building New Projects Use this house to shape APIs, component boundaries, naming, docs, schemas, and the early developer experience. It favors clarity over cleverness. ## Vulnerability Discovery Use this house to inspect parsers, protocol handling, serialization, deserialization, request routing, logs, CLI arguments, and any place where meaning crosses a boundary. ## Correctness Verification Use this house to verify contracts between components. It maps to type boundaries, message formats, state synchronization, error propagation, and whether two parts of the system agree on the same facts. ## Technical Workflow Lenses - Audit pipeline: inspect parsers, schemas, protocol messages, logs, CLI arguments, and API contracts where meaning crosses a boundary. - Evidence mode: use parser fuzzing, schema tests, protocol diagrams, static rules, or spec-to-code comparisons. - Human context: improve names, docs, and report language when ambiguity is the thing creating risk. ## Technical Prompt Where is meaning being translated, and what misunderstanding would cause the system to fail? -
04-fourth-house.md 1.6 KB
# Fourth House **Domain**: Foundations, history, context, and hidden dependencies ## Core Meaning The Fourth House describes what the work rests on. It points to inherited architecture, assumptions, persistence layers, deployment context, and the history that shaped the current state. ## Building New Projects Use this house to decide the base architecture, storage model, configuration strategy, and migration path. It warns against building attractive surfaces on unstable ground. ## Vulnerability Discovery Use this house to inspect implicit trust, legacy behavior, configuration defaults, environment assumptions, deployment topology, and persistent state that outlives a single request. Contrast with the Twelfth House: the Fourth House covers foundations that still shape the system; the Twelfth House covers forgotten paths and assumptions that should be retired or revalidated. ## Correctness Verification Use this house to verify initialization, recovery, migrations, persistence, default values, and assumptions inherited from previous states. ## Technical Workflow Lenses - Audit pipeline: build architectural context before hunting; map persistence, deployment topology, privileged foundations, and legacy behavior. - Evidence mode: use initialization tests, migration checks, config review, code graph summaries, or environment reproductions. - Domain lens: for operations and supply chain work, include devcontainers, CI defaults, deployment paths, and dependency roots. ## Technical Prompt What foundation is this work standing on, and what assumption has become invisible because it has always been there? -
05-fifth-house.md 1.5 KB
# Fifth House **Domain**: Creativity, experimentation, expressiveness, and delight ## Core Meaning The Fifth House describes the creative opening. It points to prototypes, user delight, sharp examples, playful exploration, and the part of the work that benefits from imagination. ## Building New Projects Use this house to identify the prototype, demo path, interactive loop, or opinionated product choice that makes the project feel alive. ## Vulnerability Discovery Use this house to try unusual inputs, creative abuse cases, unexpected feature combinations, and behavior that appears harmless because it was built for convenience or delight. It maps to debug or demo endpoints, feature flags that skip validation, overly flexible APIs, upload or template features, and convenience modes that quietly bypass normal controls. ## Correctness Verification Use this house to generate examples, edge cases, model-based scenarios, property tests, and small experiments that reveal whether the abstraction behaves as intended. ## Technical Workflow Lenses - Audit pipeline: turn intuition into concrete abuse cases, weird feature combinations, fuzz dictionaries, and exploratory probes. - Evidence mode: prefer prototypes, fuzz harnesses, property tests, mutation survivors, screenshots, or small proof-of-concept experiments. - Domain lens: in product and UX work, validate delight with real workflows rather than assuming novelty is useful. ## Technical Prompt Where would a creative experiment teach more than another round of analysis? -
06-sixth-house.md 1.3 KB
# Sixth House **Domain**: Practice, service, quality, routine, and maintenance ## Core Meaning The Sixth House describes the work of making systems reliable. It points to tests, cleanup, repeatable process, health checks, observability, and the small habits that compound into quality. ## Building New Projects Use this house to define the development loop: tests, linting, CI, local setup, error handling, deploy hygiene, and the maintenance burden the team is willing to carry. ## Vulnerability Discovery Use this house to inspect routine paths: retries, cleanup, cron jobs, queues, rate limits, background workers, monitoring gaps, and ordinary code that rarely gets dramatic attention. ## Correctness Verification Use this house to focus on regression tests, invariants in common workflows, fuzz harness stability, determinism, resource cleanup, and operational repeatability. ## Technical Workflow Lenses - Audit pipeline: convert discoveries into repeatable checks, regression tests, coverage targets, and maintenance tasks. - Evidence mode: use CI results, sanitizer output, fuzz coverage, mutation scores, invariants, logs, and observability data. - Human context: reduce recurring toil with documented workflows, ownership, and boring automation. ## Technical Prompt What ordinary practice would prevent this system from drifting into failure? -
07-seventh-house.md 1.3 KB
# Seventh House **Domain**: Partnership, contracts, users, and external counterparts ## Core Meaning The Seventh House describes the other side of the relationship. It points to users, peers, APIs, vendors, collaborators, adversaries, and any contract that requires two parties to agree. ## Building New Projects Use this house to shape user workflows, integration contracts, partner APIs, permissions, handoffs, and the obligations the system accepts on behalf of others. ## Vulnerability Discovery Use this house to examine trust between parties: authentication, authorization, delegation, OAuth flows, webhooks, multi-tenant boundaries, and third-party integrations. ## Correctness Verification Use this house to verify contracts, compatibility, permissions, cross-service state, idempotency, and behavior at integration boundaries. ## Technical Workflow Lenses - Audit pipeline: inspect authentication, authorization, delegation, webhooks, OAuth flows, vendors, and multi-tenant boundaries. - Evidence mode: use integration tests, contract tests, permission matrices, captured traffic, and cross-service traces. - Human context: clarify obligations between teams, users, APIs, reviewers, and external counterparties. ## Technical Prompt Who is on the other side of this interface, and what agreement could fail under pressure? -
08-eighth-house.md 1.7 KB
# Eighth House **Domain**: Transformation, risk, shared state, secrets, and deep change ## Core Meaning The Eighth House describes what changes under pressure. It points to risk, shared ownership, irreversible transitions, secrets, migrations, and places where failure has second-order effects. ## Building New Projects Use this house to reason about migrations, data ownership, auth, secret handling, payment flows, destructive actions, and architectural choices that will be expensive to reverse. ## Vulnerability Discovery Use this house to inspect privilege escalation, confused deputy behavior, secret exposure, shared mutable state, reentrancy, unsafe migrations, and operations that transform authority or value. Contrast with the Second House: the Second House asks what assets need protection; the Eighth House asks what can go wrong when those assets, permissions, or states are transferred, transformed, or partially updated. ## Correctness Verification Use this house to verify state transitions, rollback behavior, atomicity, authorization invariants, data lifecycle rules, and whether partial failure leaves the system in a dangerous state. ## Technical Workflow Lenses - Audit pipeline: hunt transition bugs: escalation, reentrancy, races, partial updates, migrations, secret movement, and shared authority. - Evidence mode: use state-machine analysis, concurrency tests, exploit PoCs, rollback tests, invariant checks, or transaction traces. - Domain lens: in smart contracts and protocols, focus on value movement, authority changes, replay, lifecycle transitions, and cross-component state. ## Technical Prompt What changes irreversibly here, and what risk appears only when ownership or state is shared? -
09-ninth-house.md 1.4 KB
# Ninth House **Domain**: Exploration, principles, standards, and broader strategy ## Core Meaning The Ninth House describes the larger frame. It points to research, standards, philosophy, long-term bets, portability, and the principles that should guide local decisions. ## Building New Projects Use this house to choose frameworks, platform strategy, architectural principles, documentation philosophy, and which constraints should be treated as long-term design commitments. ## Vulnerability Discovery Use this house to look beyond local code: specs, threat models, ecosystem patterns, upstream assumptions, cross-runtime or cross-platform behavior, and classes of bugs known in similar systems. ## Correctness Verification Use this house to compare implementation against specifications, formalize properties, check standards compliance, and identify whether the system's model matches the domain's deeper rules. ## Technical Workflow Lenses - Audit pipeline: bring in external standards, prior vulnerabilities, threat models, protocol specs, and ecosystem patterns. - Evidence mode: use spec-to-code compliance, formal models, property suites, protocol diagrams, Wycheproof-style vectors, or standards checklists. - Domain lens: for crypto and protocols, translate messages, keys, roles, secrecy, authentication, and replay assumptions into explicit properties. ## Technical Prompt What larger principle or external standard should govern the local choice? -
10-tenth-house.md 1.4 KB
# Tenth House **Domain**: Delivery, reputation, public outcome, and long-term direction ## Core Meaning The Tenth House describes what the work becomes in public. It points to shipping, reliability, responsibility, reputation, leadership, and the outcome that will be judged by others. ## Building New Projects Use this house to define the release target, production bar, operational ownership, success metrics, and what must be true before the work is fit to ship. ## Vulnerability Discovery Use this house to prioritize exploitable, high-impact findings over merely interesting behavior. It maps to production exposure, impact, likelihood, blast radius, and reportability. ## Correctness Verification Use this house to focus on user-visible guarantees, service-level behavior, release blockers, acceptance criteria, and whether correctness holds in the environment where the system will be judged. ## Technical Workflow Lenses - Audit pipeline: prioritize reportable impact, exploitability, remediation clarity, release blockers, and regression coverage. - Evidence mode: use production telemetry, acceptance tests, reproducible PoCs, severity scoring, report drafts, and stakeholder-ready summaries. - Human context: make accountability explicit: who signs off, who communicates, and what must be true before shipping. ## Technical Prompt What outcome will this work be accountable for once it leaves the workbench? -
11-eleventh-house.md 1.5 KB
# Eleventh House **Domain**: Community, networks, systems, and shared aspirations ## Core Meaning The Eleventh House describes the broader system of people and tools around the work. It points to teams, ecosystems, shared infrastructure, conventions, and the future others are trying to build with you. ## Building New Projects Use this house to reason about extensibility, plugin points, team workflows, shared libraries, open-source fit, deployment ecosystems, and how the project will participate in a larger technical community. ## Vulnerability Discovery Use this house to inspect supply-chain risk, dependency trust, shared services, multi-party workflows, governance, network effects, and vulnerabilities that emerge only across a system of participants. ## Correctness Verification Use this house to verify distributed assumptions, compatibility across versions, shared schemas, ecosystem contracts, and behavior under many users or many components. ## Technical Workflow Lenses - Audit pipeline: inspect dependency trust, CI/CD workflows, agentic actions, shared infrastructure, open-source health, and governance. - Evidence mode: use dependency analysis, ownership maps, workflow review, compatibility tests, ecosystem scans, and blast-radius analysis. - Human context: account for communities, maintainers, reviewers, customers, and teams who inherit the decision. ## Technical Prompt What network or community does this work depend on, and how could that shared context change the right answer? -
12-twelfth-house.md 1.6 KB
# Twelfth House **Domain**: Blind spots, hidden costs, endings, and unconscious assumptions ## Core Meaning The Twelfth House describes what is hard to see directly. It points to hidden state, deferred cleanup, unresolved risk, unclear ownership, stale assumptions, and endings that need to be handled deliberately. ## Building New Projects Use this house to identify what should be left out, retired, documented as a risk, or postponed consciously. It warns against invisible complexity and features that quietly become obligations. ## Vulnerability Discovery Use this house to inspect forgotten paths: debug modes, test fixtures, backdoors, stale credentials, abandoned endpoints, implicit fallbacks, and assumptions no one has revalidated. Contrast with the Fourth House: the Fourth House asks what foundational context must be understood; the Twelfth House asks what hidden or obsolete context is quietly creating risk. ## Correctness Verification Use this house to test teardown, cancellation, cleanup, error paths, unreachable states, timeouts, and any case that is easy to exclude from the happy-path model. ## Technical Workflow Lenses - Audit pipeline: look for forgotten endpoints, debug paths, stale credentials, dead code, false assumptions, hidden scope, and discarded findings. - Evidence mode: use negative tests, cleanup checks, unreachable-state review, log review, secret scans, and false-positive validation. - Human context: document deferred risk, cleanup ownership, escalation needs, and what should intentionally end. ## Technical Prompt What is hidden, unfinished, or quietly assumed, and what needs to end cleanly?
-
-
references
-
INTERPRETATION_GUIDE.md 7.2 KB
# Interpretation Guide How to read the 12 Houses of the Zodiac Tarot spread and map it to technical decisions. ## The Spread Positions Each house contains 3 cards: - The first card is always Major Arcana and sets the house's archetypal theme. - The second and third cards are Minor Arcana and supply practical details. - The house file under `houses/` explains how that house maps to technical contexts such as building, vulnerability discovery, and correctness work. - `TECHNICAL_CONTEXT_LENSES.md` maps common technical workflows to reusable audit, evidence, domain, failure-class, and human/organizational lenses. | House | Role | Maps To | |-------|------|---------| | 1 - Self | Identity, agency, first impulse | How to begin, the operating stance | | 2 - Resources | Values, assets, limits | Constraints, dependencies, budget, invariants | | 3 - Communication | Learning and exchange | Interfaces, naming, docs, coordination | | 4 - Foundations | Roots and context | Existing architecture, history, hidden coupling | | 5 - Creativity | Experimentation and play | Prototypes, UI choices, expressive design | | 6 - Practice | Service and routine | Testing, quality, maintenance, workflow | | 7 - Partnership | Others and contracts | Users, APIs, integrations, collaboration | | 8 - Transformation | Risk and shared state | Migrations, secrets, permissions, deep refactors | | 9 - Exploration | Principles and broad vision | Strategy, standards, research, long-term bets | | 10 - Calling | Public outcome and reputation | Delivery, reliability, production readiness | | 11 - Community | Groups and systems | Ecosystem fit, shared tooling, team impact | | 12 - The Hidden | Blind spots and endings | Unknown risks, cleanup, deferred costs | ## Reading the Cards ### Step 1: Read Each House and Card File For each house, read its house file. For each drawn card, read its meaning file. Note both the upright and reversed meanings. Use whichever matches the card's orientation in the draw. The `In Technical Context` section in a card file is a starting translation, not a replacement for the orientation. If that technical note sounds too decisive for the card's reversed meaning, adapt it through the reversed text instead of following the sentence literally. ### Step 2: Map to Context Translate the card's archetypal meaning into the current technical situation: **Major Arcana** represent big-picture forces: - Architectural decisions, paradigm shifts, fundamental approaches - These carry more interpretive weight **Minor Arcana** represent practical details: - **Wands** (fire): Action, initiative, creativity, velocity, building - **Cups** (water): Collaboration, user experience, intuition, satisfaction - **Swords** (air): Analysis, logic, debugging, cutting through complexity, hard truths - **Pentacles** (earth): Quality, craft, reliability, testing, maintenance, tangible results **Court Cards** can represent approaches or roles: - **Page**: Learning, experimenting, prototyping, beginner's mind - **Knight**: Focused pursuit, rapid movement, single-minded effort - **Queen**: Mastery with empathy, nurturing growth, mature judgment - **King**: Authority, established patterns, proven approaches When the task resembles a specialized skill workflow, choose the relevant lens from `TECHNICAL_CONTEXT_LENSES.md` before deciding what action the reading supports. This keeps the reading grounded in the actual mode of work: audit pipeline stage, evidence type, technical domain, failure class, or stakeholder coordination. ### Step 3: Synthesize the Story Read all 12 houses as a narrative: 1. "The beginning stance is [House 1]..." 2. "The available resources and constraints are [House 2]..." 3. "The communication or interface concern is [House 3]..." 4. "The foundation or hidden dependency is [House 4]..." 5. "The creative opening is [House 5]..." 6. "The quality and maintenance requirement is [House 6]..." 7. "The integration or collaboration point is [House 7]..." 8. "The transformation or risk is [House 8]..." 9. "The guiding principle is [House 9]..." 10. "The delivery target is [House 10]..." 11. "The ecosystem or team impact is [House 11]..." 12. "The blind spot or closure is [House 12]..." When time is tight, prioritize House 1 for the initial stance, House 6 for execution quality, House 8 for risk, House 10 for delivery, and House 12 for blind spots. ### Step 4: Make a Decision The reading should bias you toward one of the viable approaches. State: - Which approach the reading supports - How specific cards influenced the choice - What the reading suggests you should watch out for For vulnerability discovery and correctness verification, the decision should be about where to investigate next or which hypothesis to test. The reading can prioritize attention, but it cannot prove safety, dismiss a finding, or replace reproduction, testing, formal reasoning, or source-level evidence. ## Reversed Cards Reversed cards don't mean "bad." They indicate: - The energy is internalized rather than expressed - The quality is blocked, delayed, or needs extra attention - An alternative or inverted interpretation applies - Shadow aspects of the card's theme ## Special Patterns The 12-house spread deals 12 Major Arcana, 24 Minor Arcana, and an independent reversal flag per card. The patterns below are calibrated to those baselines (one Major per house is guaranteed, so "multiple Majors" is not a signal in this spread). ### Heavy Reversal Count The spread averages 18 reversed cards out of 36. If 24 or more are reversed (roughly the top 3% of draws), the reading is telling you that many things are blocked, inverted, or shadowed. Step back and reconsider the assumptions driving the work before proceeding. ### Heavy Minor Suit Concentration Each Minor suit is expected to contribute about 6 of the 24 Minor draws. If one suit contributes 10 or more, the reading carries that suit's thematic emphasis across many houses: - Heavy Wands: Focus on action, momentum, and creative drive - Heavy Cups: Focus on user needs, team dynamics, and emotional state - Heavy Swords: Focus on analysis, conflict, and clear thinking - Heavy Pentacles: Focus on craft, resources, and practical quality ### Weighty Majors in Critical Houses Death, The Tower, The Devil, Judgement, or The World landing in House 1 (Self), House 8 (Transformation), or House 12 (The Hidden) amplifies themes of identity, deep change, or unseen factors. Treat these as cues to slow down and investigate before committing. ### Court Cards Clustering in People Houses Court cards (Page, Knight, Queen, King) appearing in Houses 3 (Communication), 7 (Partnership), or 11 (Community) reinforce a people-oriented reading: the work hinges on collaboration, contracts, or social dynamics rather than purely technical execution. ## What the Reading Is NOT - Not a substitute for requirements gathering when requirements are gettable - Not permission to ignore best practices - Not evidence that a security or correctness concern is real or false - Not a way to avoid thinking critically - Not deterministic (it's entropy, that's the point) The reading adds a creative nudge to break analysis paralysis. The cards don't make the decision; they give you a direction to explore when you otherwise have none. -
TECHNICAL_CONTEXT_LENSES.md 4.6 KB
# Technical Context Lenses These lenses apply across a wide range of technical workflows, but they cluster into a small set of recurring patterns. Use them to translate a house or card into the kind of work currently being done. ## Audit Pipeline Stage Use this lens when the task is part of a security review or codebase critique. Map the spread to the current phase: - Scoping and setup: what is in scope, what is excluded, and what must be understood first. - Attack-surface mapping: entry points, trust boundaries, privileged paths, assets, state transitions, and external dependencies. - Discovery: creative hypotheses, known bug classes, unusual inputs, and paths that ordinary review may miss. - Validation: source traces, tests, fuzz cases, proofs, exploitability checks, and false-positive elimination. - Reporting and regression: impact, reproduction, remediation, and tests that keep the issue from returning. ## Evidence Mode Use this lens to decide what kind of evidence should follow the reading. A Tarot spread can prioritize attention, but the next step should produce one of these evidence types: - Source-level trace or code graph path. - Unit, integration, property, fuzz, mutation, or regression test. - Static-analysis query, SARIF finding, or semgrep/codeql rule. - Protocol diagram, formal model, invariant, or spec-to-code comparison. - Exploit proof, crash reproducer, timing measurement, or production telemetry. - Written rationale, report section, decision log, or stakeholder-ready summary. ## Domain Lens Use this lens to adapt general language to the actual domain: - Smart contracts and DeFi: assets, access control, arithmetic precision, state machines, hooks, bridges, governance, MEV, and token behavior. - Crypto and protocols: transcripts, roles, keys, randomness, authentication, secrecy, replay, side channels, and formal security properties. - Appsec, web, and mobile: endpoints, parsers, sessions, OAuth, uploads, webhooks, cloud backends, and captured traffic. - Native, binary, and systems work: memory safety, integer behavior, races, debug data, reverse engineering, crashes, and sanitizer results. - CI/CD, supply chain, and operations: dependencies, workflow permissions, agentic actions, deploy paths, production errors, and ownership. - Product, docs, and stakeholder work: requirements, usability, report quality, positioning, scope, status, and handoff clarity. ## Failure Class Lens Use this lens when the reading needs to become a concrete bug-hunting prompt: - Access control, confused deputy behavior, authorization bypass, and privilege escalation. - State-machine mistakes, broken lifecycle transitions, races, retries, and partial failure. - Arithmetic, precision, unit, dimensional, bounds, overflow, and accounting errors. - Parser, serialization, protocol, type-safety, and interface mismatches. - Secrets, information leakage, side channels, logging exposure, and insecure defaults. - Supply-chain compromise, dependency takeover, CI injection, sandbox escape, and unsafe automation. - Missing tests, weak harnesses, unreachable coverage, survived mutants, and unverified invariants. ## Human and Organizational Lens Use this lens when the work depends on people, teams, or decisions rather than only code: - Who owns the decision, risk, artifact, or follow-up? - What needs to be escalated, documented, or turned into a report? - What context is missing from stakeholders, users, maintainers, or reviewers? - What would reduce ambiguity for the next person to touch the work? - What is the team's capacity, confidence, and tolerance for change? ## House Affinity Map | House | Strongest Corpus Lenses | |-------|--------------------------| | 1 - Self | Scoping, entry points, first assumptions, initial attack surface | | 2 - Resources | Assets, invariants, budgets, ownership, scarcity | | 3 - Communication | APIs, protocols, parsers, schemas, docs, logs | | 4 - Foundations | Architecture, persistence, deployment context, legacy assumptions | | 5 - Creativity | Fuzzing, abuse cases, prototypes, exploratory testing | | 6 - Practice | CI, harnesses, regression tests, observability, maintenance | | 7 - Partnership | Integrations, auth contracts, users, vendors, external APIs | | 8 - Transformation | State transitions, migrations, secrets, escalation, shared authority | | 9 - Exploration | Specs, standards, formal models, protocol reasoning, research | | 10 - Calling | Release readiness, impact, reportability, production accountability | | 11 - Community | Supply chain, ecosystem, shared infrastructure, governance | | 12 - The Hidden | Forgotten paths, cleanup, stale assumptions, blind spots |
-
-
scripts
-
draw_cards.py 9.3 KB
#!/usr/bin/env python3 """Draw Tarot cards using the secrets module for cryptographic randomness. The default draw is the 12 Houses of the Zodiac spread: each house gets one Major Arcana card plus two Minor Arcana cards. Each card has an independent 50/50 chance of being reversed. """ # /// script # requires-python = ">=3.11" # dependencies = [] # /// import json import math import os import secrets import sys SPREAD_NAME = "12 Houses of the Zodiac" def _entropy_bits(): """Conservative unordered-card entropy budget for the default spread.""" major = math.log2(math.comb(22, 12)) minor = math.log2(math.comb(56, 24)) reversals = 36.0 return { "major_arcana": round(major, 2), "minor_arcana": round(minor, 2), "reversals": reversals, "total": round(major + minor + reversals, 2), } ENTROPY_BITS = _entropy_bits() MAJOR_ARCANA = ( ("major", "00-the-fool"), ("major", "01-the-magician"), ("major", "02-the-high-priestess"), ("major", "03-the-empress"), ("major", "04-the-emperor"), ("major", "05-the-hierophant"), ("major", "06-the-lovers"), ("major", "07-the-chariot"), ("major", "08-strength"), ("major", "09-the-hermit"), ("major", "10-wheel-of-fortune"), ("major", "11-justice"), ("major", "12-the-hanged-man"), ("major", "13-death"), ("major", "14-temperance"), ("major", "15-the-devil"), ("major", "16-the-tower"), ("major", "17-the-star"), ("major", "18-the-moon"), ("major", "19-the-sun"), ("major", "20-judgement"), ("major", "21-the-world"), ) RANKS = ( "ace", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "page", "knight", "queen", "king", ) SUITS = ("wands", "cups", "swords", "pentacles") ZODIAC_HOUSES = ( ( "First House", "Self, identity, agency, and first motion", "01-first-house", ), ( "Second House", "Resources, values, constraints, and preservation", "02-second-house", ), ( "Third House", "Communication, learning, interfaces, and local connections", "03-third-house", ), ( "Fourth House", "Foundations, history, context, and hidden dependencies", "04-fourth-house", ), ( "Fifth House", "Creativity, experimentation, expressiveness, and delight", "05-fifth-house", ), ( "Sixth House", "Practice, service, quality, routine, and maintenance", "06-sixth-house", ), ( "Seventh House", "Partnership, contracts, users, and external counterparts", "07-seventh-house", ), ( "Eighth House", "Transformation, risk, shared state, secrets, and deep change", "08-eighth-house", ), ( "Ninth House", "Exploration, principles, standards, and broader strategy", "09-ninth-house", ), ( "Tenth House", "Delivery, reputation, public outcome, and long-term direction", "10-tenth-house", ), ( "Eleventh House", "Community, networks, systems, and shared aspirations", "11-eleventh-house", ), ( "Twelfth House", "Blind spots, hidden costs, endings, and unconscious assumptions", "12-twelfth-house", ), ) def build_deck(): """Build the full 78-card Tarot deck.""" return list(MAJOR_ARCANA) + build_minor_deck() def build_minor_deck(): """Build the 56-card Minor Arcana deck.""" return [(suit, f"{rank}-of-{suit}") for suit in SUITS for rank in RANKS] def fisher_yates_shuffle(deck): """Shuffle deck in-place using Fisher-Yates with secrets.randbelow().""" for i in range(len(deck) - 1, 0, -1): j = secrets.randbelow(i + 1) deck[i], deck[j] = deck[j], deck[i] return deck def is_reversed(): """Return True with 50% probability using secrets.randbits().""" return secrets.randbits(1) == 1 def card_record(suit, card_id, position, role, include_content=False): """Return the JSON-serializable record for a drawn card.""" card = { "suit": suit, "card_id": card_id, "reversed": is_reversed(), "position": position, "role": role, "file": f"cards/{suit}/{card_id}.md", } if include_content: script_dir = os.path.dirname(os.path.abspath(__file__)) cards_dir = os.path.join(os.path.dirname(script_dir), "cards") path = os.path.join(cards_dir, suit, f"{card_id}.md") try: with open(path) as f: card["content"] = f.read() except OSError as e: card["content"] = f"(error reading card file {path}: {e})" return card def read_reference_file(relative_file): """Read a skill-local reference file for --content output.""" script_dir = os.path.dirname(os.path.abspath(__file__)) skill_dir = os.path.dirname(script_dir) path = os.path.join(skill_dir, relative_file) try: with open(path) as f: return f.read() except OSError as e: return f"(error reading reference file {path}: {e})" def draw_cards(n=4, include_content=False): """Shuffle the full deck and draw n cards, each possibly reversed.""" if not isinstance(n, int) or isinstance(n, bool): raise TypeError(f"n must be int, got {type(n).__name__}") deck = build_deck() fisher_yates_shuffle(deck) hand = [] for i in range(min(n, len(deck))): suit, card_id = deck[i] hand.append(card_record(suit, card_id, i + 1, "card", include_content)) return hand def _build_house_record( *, house_number, house_meta, major_card, minor_pair, position, include_content, ): """Build the JSON record for one zodiac house.""" house_name, focus, house_id = house_meta major_suit, major_id = major_card (m1_suit, m1_id), (m2_suit, m2_id) = minor_pair house_file = f"houses/{house_id}.md" record = { "house": house_number, "name": house_name, "focus": focus, "file": house_file, "cards": [ card_record(major_suit, major_id, position, "major_arcana", include_content), card_record(m1_suit, m1_id, position + 1, "minor_arcana_1", include_content), card_record(m2_suit, m2_id, position + 2, "minor_arcana_2", include_content), ], } if include_content: record["content"] = read_reference_file(house_file) return record def draw_zodiac_spread(include_content=False): """Draw the default 12 Houses of the Zodiac spread.""" major_deck = list(MAJOR_ARCANA) minor_deck = build_minor_deck() fisher_yates_shuffle(major_deck) fisher_yates_shuffle(minor_deck) houses = [] for i, house_meta in enumerate(ZODIAC_HOUSES): houses.append( _build_house_record( house_number=i + 1, house_meta=house_meta, major_card=major_deck[i], minor_pair=(minor_deck[2 * i], minor_deck[2 * i + 1]), position=1 + 3 * i, include_content=include_content, ) ) bits = ENTROPY_BITS return { "spread": SPREAD_NAME, "houses": houses, "entropy_bits": bits, "entropy_note": ( "Assumes secrets.randbelow() provides cryptographically secure " "bounded draws. This is a conservative unordered-card budget: " f"{bits['major_arcana']} bits from Major Arcana selection, " f"{bits['minor_arcana']} bits from Minor Arcana selection, and " f"{bits['reversals']} reversal bits. Ordered house assignment " "contains more entropy." ), } USAGE = "Usage: draw_cards.py [--content] [--legacy [count]]" def _parse_args(argv): """Parse CLI argv into (include_content, legacy, count). Exits on error.""" args = list(argv) include_content = "--content" in args if include_content: args.remove("--content") legacy = "--legacy" in args if legacy: args.remove("--legacy") count = None if args: if not legacy: print( f"Error: positional count requires --legacy. {USAGE}", file=sys.stderr, ) sys.exit(1) try: count = int(args[0]) except ValueError: print( f"Error: '{args[0]}' is not a valid integer. {USAGE}", file=sys.stderr, ) sys.exit(1) if count < 1 or count > 78: print(f"Error: card count must be 1-78, got {count}", file=sys.stderr) sys.exit(1) return include_content, legacy, count def main(): include_content, legacy, count = _parse_args(sys.argv[1:]) try: if legacy: hand = draw_cards(count if count is not None else 4, include_content=include_content) else: hand = draw_zodiac_spread(include_content=include_content) except OSError as e: print(f"Error: failed to read system entropy source: {e}", file=sys.stderr) sys.exit(1) print(json.dumps(hand, indent=2)) if __name__ == "__main__": try: main() except Exception as e: print(f"Error: draw_cards.py failed: {e}", file=sys.stderr) sys.exit(1) -
pyproject.toml 144 B
[project] name = "let-fate-decide-scripts" version = "0.0.0" requires-python = ">=3.11" [tool.ruff] line-length = 100 target-version = "py311" -
test_draw_cards.py 14.1 KB
#!/usr/bin/env python3 """Tests for draw_cards.py.""" # /// script # requires-python = ">=3.11" # dependencies = [] # /// import json import math import subprocess import sys from collections import Counter from pathlib import Path # Import the module under test sys.path.insert(0, str(Path(__file__).parent)) import draw_cards SKILL_DIR = Path(__file__).parent.parent def test_build_deck_has_78_cards(): deck = draw_cards.build_deck() assert len(deck) == 78, f"Expected 78 cards, got {len(deck)}" def test_build_deck_has_22_major_arcana(): deck = draw_cards.build_deck() majors = [c for c in deck if c[0] == "major"] assert len(majors) == 22, f"Expected 22 major arcana, got {len(majors)}" def test_build_deck_has_56_minor_arcana(): deck = draw_cards.build_deck() minors = [c for c in deck if c[0] != "major"] assert len(minors) == 56, f"Expected 56 minor arcana, got {len(minors)}" def test_build_minor_deck_has_56_cards(): deck = draw_cards.build_minor_deck() assert len(deck) == 56, f"Expected 56 minor cards, got {len(deck)}" def test_build_minor_deck_excludes_major_arcana(): deck = draw_cards.build_minor_deck() assert all(suit != "major" for suit, _ in deck) def test_build_deck_all_unique(): deck = draw_cards.build_deck() card_ids = [c[1] for c in deck] assert len(card_ids) == len(set(card_ids)), "Duplicate card IDs found" def test_build_deck_four_suits_14_each(): deck = draw_cards.build_deck() suits = Counter(c[0] for c in deck if c[0] != "major") for suit in ["wands", "cups", "swords", "pentacles"]: assert suits[suit] == 14, f"Expected 14 {suit}, got {suits[suit]}" def test_draw_cards_returns_requested_count(): for n in [1, 2, 4, 10]: hand = draw_cards.draw_cards(n) assert len(hand) == n, f"draw({n}) returned {len(hand)} cards" def test_draw_cards_default_is_4(): hand = draw_cards.draw_cards() assert len(hand) == 4 def test_draw_zodiac_spread_default_shape(): hand = draw_cards.draw_zodiac_spread() assert hand["spread"] == draw_cards.SPREAD_NAME assert len(hand["houses"]) == 12 def test_draw_cards_clamps_to_78(): hand = draw_cards.draw_cards(100) assert len(hand) == 78 def test_draw_cards_zero_returns_empty(): hand = draw_cards.draw_cards(0) assert len(hand) == 0 def test_draw_cards_card_structure(): hand = draw_cards.draw_cards(1) card = hand[0] assert "suit" in card assert "card_id" in card assert "reversed" in card assert "position" in card assert "file" in card assert isinstance(card["reversed"], bool) assert card["position"] == 1 assert card["file"].startswith("cards/") assert card["file"].endswith(".md") def test_draw_cards_positions_are_sequential(): hand = draw_cards.draw_cards(4) positions = [c["position"] for c in hand] assert positions == [1, 2, 3, 4] def test_draw_cards_no_duplicate_cards(): hand = draw_cards.draw_cards(78) card_ids = [c["card_id"] for c in hand] assert len(card_ids) == len(set(card_ids)), "Duplicate cards drawn" def test_zodiac_spread_shape(): spread = draw_cards.draw_zodiac_spread() assert spread["spread"] == "12 Houses of the Zodiac" bits = spread["entropy_bits"] expected_major = round(math.log2(math.comb(22, 12)), 2) expected_minor = round(math.log2(math.comb(56, 24)), 2) assert bits["major_arcana"] == expected_major assert bits["minor_arcana"] == expected_minor assert bits["reversals"] == 36.0 assert bits["total"] == round(expected_major + expected_minor + 36.0, 2) assert bits["total"] >= 100, "Entropy budget must clear the 100-bit floor" assert len(spread["houses"]) == 12 for house in spread["houses"]: assert set(house) == {"house", "name", "focus", "file", "cards"} assert house["file"].startswith("houses/") assert house["file"].endswith(".md") assert len(house["cards"]) == 3 def test_zodiac_house_files_exist(): spread = draw_cards.draw_zodiac_spread() for house in spread["houses"]: path = SKILL_DIR / house["file"] assert path.exists(), f"Missing house file: {path}" def test_zodiac_focus_matches_house_domain(): spread = draw_cards.draw_zodiac_spread() for house in spread["houses"]: text = (SKILL_DIR / house["file"]).read_text() domain = next( line[len("**Domain**: ") :].strip() for line in text.splitlines() if line.startswith("**Domain**: ") ) assert house["focus"] == domain, ( f"focus/Domain drift in {house['file']}: {house['focus']!r} != {domain!r}" ) def test_zodiac_house_files_cover_technical_contexts(): spread = draw_cards.draw_zodiac_spread() for house in spread["houses"]: text = (SKILL_DIR / house["file"]).read_text() assert "## Building New Projects" in text assert "## Vulnerability Discovery" in text assert "## Correctness Verification" in text assert "## Technical Workflow Lenses" in text def test_technical_context_lenses_reference_exists(): reference = SKILL_DIR / "references" / "TECHNICAL_CONTEXT_LENSES.md" text = reference.read_text() assert "## Audit Pipeline Stage" in text assert "## Evidence Mode" in text assert "## Domain Lens" in text assert "## Failure Class Lens" in text assert "## Human and Organizational Lens" in text assert "## House Affinity Map" in text def test_security_framing_requires_evidence(): skill_text = (SKILL_DIR / "SKILL.md").read_text() guide_text = (SKILL_DIR / "references" / "INTERPRETATION_GUIDE.md").read_text() assert "Security and Correctness Use" in skill_text assert "never sufficient by itself" in skill_text assert "only evidence can dismiss a security or correctness concern" in skill_text assert "cannot prove safety, dismiss a finding, or replace" in guide_text def test_numbered_ranks_are_numeric_across_all_suits(): word_ranks = ("Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten") for card_file in (SKILL_DIR / "cards").glob("*/*.md"): if card_file.parent.name == "major": continue text = card_file.read_text() for word in word_ranks: assert f"**Rank**: {word}" not in text, ( f"{card_file} still uses word-form rank '{word}'; use the digit form" ) def test_reviewed_cards_avoid_unsafe_shortcuts(): """Regression guard: these exact phrases were removed in 1.2.0; do not reintroduce. This is an exact-string blacklist, not a semantic check. Add new bad phrases here as they are identified during review; rewordings of existing phrases will not trip this test and must be caught manually. """ risky_phrases = ( "Follow your intuition on this one", "The solution that feels right probably is", "Ship it.", "The approach is sound.", "The approach will succeed.", "Speed matters here—refine later.", ) for card_file in (SKILL_DIR / "cards").glob("*/*.md"): text = card_file.read_text() for phrase in risky_phrases: assert phrase not in text, f"{phrase!r} still appears in {card_file}" def test_zodiac_spread_content_includes_house_content(): spread = draw_cards.draw_zodiac_spread(include_content=True) for house in spread["houses"]: assert "content" in house assert house["content"].startswith("# ") def test_zodiac_spread_uses_one_major_per_house(): spread = draw_cards.draw_zodiac_spread() major_cards = [] for house in spread["houses"]: card = house["cards"][0] assert card["role"] == "major_arcana" assert card["suit"] == "major" major_cards.append(card["card_id"]) assert len(major_cards) == 12 assert len(set(major_cards)) == 12 def test_zodiac_spread_uses_two_minors_per_house(): spread = draw_cards.draw_zodiac_spread() minor_cards = [] for house in spread["houses"]: for card in house["cards"][1:]: assert card["role"] in {"minor_arcana_1", "minor_arcana_2"} assert card["suit"] != "major" minor_cards.append(card["card_id"]) assert len(minor_cards) == 24 assert len(set(minor_cards)) == 24 def test_zodiac_spread_all_cards_can_be_reversed(): spread = draw_cards.draw_zodiac_spread() cards = [card for house in spread["houses"] for card in house["cards"]] assert len(cards) == 36 assert all(isinstance(card["reversed"], bool) for card in cards) def test_zodiac_spread_positions_are_sequential(): spread = draw_cards.draw_zodiac_spread() positions = [card["position"] for house in spread["houses"] for card in house["cards"]] assert positions == list(range(1, 37)) def test_fisher_yates_preserves_elements(): deck = draw_cards.build_deck() original = sorted(deck) draw_cards.fisher_yates_shuffle(deck) assert sorted(deck) == original, "Shuffle changed deck elements" def test_fisher_yates_single_element(): deck = [("major", "00-the-fool")] draw_cards.fisher_yates_shuffle(deck) assert deck == [("major", "00-the-fool")] def test_fisher_yates_empty(): deck = [] draw_cards.fisher_yates_shuffle(deck) assert deck == [] def test_is_reversed_returns_bool(): for _ in range(20): assert isinstance(draw_cards.is_reversed(), bool) def test_shuffle_produces_varying_orders(): """Run 5 shuffles; at least 2 should differ (p(all same) ~ 0).""" orders = [] for _ in range(5): deck = draw_cards.build_deck() draw_cards.fisher_yates_shuffle(deck) orders.append(tuple(c[1] for c in deck)) assert len(set(orders)) >= 2, "All 5 shuffles identical" def test_reversal_produces_both_values(): """Over 100 flips, both True and False should appear.""" results = {draw_cards.is_reversed() for _ in range(100)} assert True in results, "Never got reversed=True in 100 flips" assert False in results, "Never got reversed=False in 100 flips" def test_no_os_urandom_import(): """Verify os.urandom is not used; os may be imported for path operations.""" source = Path(__file__).parent / "draw_cards.py" text = source.read_text() assert "os.urandom" not in text, "os.urandom still referenced" def test_uses_secrets_module(): """Verify secrets module is used.""" source = Path(__file__).parent / "draw_cards.py" text = source.read_text() assert "import secrets" in text assert "secrets.randbelow" in text assert "secrets.randbits" in text def test_cli_default_output(): """Run the script and verify JSON output with the default spread.""" result = subprocess.run( [sys.executable, str(Path(__file__).parent / "draw_cards.py")], capture_output=True, text=True, ) assert result.returncode == 0 spread = json.loads(result.stdout) assert spread["spread"] == draw_cards.SPREAD_NAME assert len(spread["houses"]) == 12 def test_cli_legacy_custom_count(): result = subprocess.run( [sys.executable, str(Path(__file__).parent / "draw_cards.py"), "--legacy", "2"], capture_output=True, text=True, ) assert result.returncode == 0 cards = json.loads(result.stdout) assert len(cards) == 2 def test_cli_legacy_default_count(): result = subprocess.run( [sys.executable, str(Path(__file__).parent / "draw_cards.py"), "--legacy"], capture_output=True, text=True, ) assert result.returncode == 0 cards = json.loads(result.stdout) assert len(cards) == 4 def test_cli_positional_count_without_legacy_is_error(): """Positional count requires --legacy; the new default has a fixed shape.""" result = subprocess.run( [sys.executable, str(Path(__file__).parent / "draw_cards.py"), "4"], capture_output=True, text=True, ) assert result.returncode == 1 assert "--legacy" in result.stderr def test_cli_invalid_arg(): result = subprocess.run( [sys.executable, str(Path(__file__).parent / "draw_cards.py"), "--legacy", "abc"], capture_output=True, text=True, ) assert result.returncode == 1 assert "Error" in result.stderr def test_cli_out_of_range(): result = subprocess.run( [sys.executable, str(Path(__file__).parent / "draw_cards.py"), "--legacy", "0"], capture_output=True, text=True, ) assert result.returncode == 1 result = subprocess.run( [sys.executable, str(Path(__file__).parent / "draw_cards.py"), "--legacy", "79"], capture_output=True, text=True, ) assert result.returncode == 1 def test_no_secure_randbelow_function(): """Regression: the custom secure_randbelow must be removed.""" source = Path(__file__).parent / "draw_cards.py" text = source.read_text() assert "def secure_randbelow" not in text, "Custom secure_randbelow still exists" def test_constants_are_immutable(): """Constants must be tuples to prevent mutation.""" assert isinstance(draw_cards.MAJOR_ARCANA, tuple), "MAJOR_ARCANA is not a tuple" assert isinstance(draw_cards.RANKS, tuple), "RANKS is not a tuple" assert isinstance(draw_cards.SUITS, tuple), "SUITS is not a tuple" assert isinstance(draw_cards.ZODIAC_HOUSES, tuple), "ZODIAC_HOUSES is not a tuple" def test_draw_cards_rejects_non_int(): """draw_cards() must reject non-int types cleanly.""" for bad in [None, "3", 2.5, True, False, [4]]: try: draw_cards.draw_cards(bad) assert False, f"draw_cards({bad!r}) should have raised TypeError" except TypeError: pass if __name__ == "__main__": tests = [v for k, v in sorted(globals().items()) if k.startswith("test_")] passed = failed = 0 for test in tests: try: test() passed += 1 print(f" PASS {test.__name__}") except AssertionError as e: failed += 1 print(f" FAIL {test.__name__}: {e}") except Exception as e: failed += 1 print(f" ERROR {test.__name__}: {e}") print(f"\n{passed} passed, {failed} failed, {passed + failed} total") sys.exit(1 if failed else 0)
-
-
SKILL.md 9.7 KB
--- name: let-fate-decide description: "Draws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over asking clarifying questions when the user's tone is casual or playful rather than precision-seeking." allowed-tools: Bash Read Grep Glob --- # Let Fate Decide When the path forward is unclear, let the cards speak. ## Quick Start 1. Run the drawing script: ```bash uv run --no-config {baseDir}/scripts/draw_cards.py ``` 2. The script outputs JSON for the default 12 Houses of the Zodiac spread: 12 houses, each with 1 Major Arcana card and 2 Minor Arcana cards. Each house and card includes a `file` path relative to `{baseDir}/` 3. Read each house file and each card's meaning file to understand the draw. For faster reads, use `--content` to include house and card text directly in the JSON: ```bash uv run --no-config {baseDir}/scripts/draw_cards.py --content ``` 4. Interpret the spread using the guide at [{baseDir}/references/INTERPRETATION_GUIDE.md]({baseDir}/references/INTERPRETATION_GUIDE.md) 5. When the task belongs to a specialized technical workflow, use [{baseDir}/references/TECHNICAL_CONTEXT_LENSES.md]({baseDir}/references/TECHNICAL_CONTEXT_LENSES.md) to translate the reading into an audit, verification, domain, failure-class, or stakeholder lens 6. Apply the interpretation to the task at hand ## When to Use - **Vague prompts**: The user's request is ambiguous and multiple reasonable approaches exist - **Explicit invocations**: "I'm feeling lucky", "let fate decide", "dealer's choice", "surprise me", "whatever you think", "YOLO" - **Casual delegation**: "whatever", "up to you", "your call", "idk", "just do something", "wing it", "I trust you", "doesn't matter", "do what you want", "I don't care", "any approach works", "you pick" - **Yu-Gi-Oh energy**: "Heart of the cards", "I believe in the heart of the cards", "you've activated my trap card", "it's time to duel" - **Shrug-like brevity**: Very short prompts that fully delegate the decision without expressing a preference - **Redraw requests**: "Try again" or "draw again" when no actual system changes occurred (this means draw new cards, not re-run the same approach) - **Tie-breaking**: When you are about to arbitrarily pick between 2+ valid approaches, draw cards instead of silently choosing one ## When NOT to Use - The user has given clear, specific instructions - The task has a single obvious correct approach - As the deciding authority for safety-critical work (security, data integrity, production deployments, release approval, incident response) - The user explicitly asks you NOT to use Tarot - The user's tone is precision-seeking rather than casual -- ask clarifying questions instead to gather actual requirements ## Security and Correctness Use This skill may be used inside a security, audit, or correctness pipeline as a creative lens for discovery: choosing which angle to inspect next, breaking analysis paralysis, generating hypotheses, or surfacing blind spots. It is never sufficient by itself. In security and correctness contexts, the reading must be followed by ordinary engineering evidence: source review, tests, proofs, traces, reproduction steps, exploitability analysis, or other domain-appropriate verification. Do not treat a favorable card as permission to ship, suppress a finding, skip validation, or overrule a concrete risk. ## How It Works ### The Draw The script uses `secrets` for cryptographic randomness: 1. Builds separate Major Arcana (22 cards) and Minor Arcana (56 cards) decks 2. Performs Fisher-Yates shuffles via `secrets.randbelow()` (no modulo bias) 3. Deals the default 12 Houses of the Zodiac spread 4. Each house receives 1 Major Arcana card followed by 2 Minor Arcana cards 5. Each of the 36 cards independently has a 50% chance of being reversed The default spread records a conservative unordered-card entropy budget exceeding 100 bits: roughly `log2(C(22,12))` bits from Major Arcana selection, `log2(C(56,24))` bits from Minor Arcana selection (assuming `secrets.randbelow()` is cryptographically secure), plus 36 reversal bits. The exact values are computed and reported in the JSON output under `entropy_bits`. The actual ordered assignment of cards to houses contains more entropy. ### The Spread The default spread is **12 Houses of the Zodiac**: | House | Represents | Question It Answers | |-------|------------|---------------------| | 1 | **Self** | How should this work begin? | | 2 | **Resources** | What values, assets, or constraints matter? | | 3 | **Communication** | What needs to be clarified or connected? | | 4 | **Foundations** | What context or dependency anchors the task? | | 5 | **Creativity** | Where should experimentation or delight shape the work? | | 6 | **Practice** | What quality, maintenance, or execution concern matters? | | 7 | **Partnership** | Who or what must this integrate with? | | 8 | **Transformation** | What risk, shared state, or deep change is present? | | 9 | **Exploration** | What principle or broader strategy guides the path? | | 10 | **Calling** | What delivery or long-term outcome is being served? | | 11 | **Community** | What system, network, or shared aspiration is involved? | | 12 | **The Hidden** | What blind spot, ending, or unconscious factor matters? | Within each house, the Major Arcana card sets the archetypal theme and the two Minor Arcana cards provide practical detail. For compatibility with older workflows, `draw_cards.py --legacy` returns the previous 4-card hand, and `draw_cards.py --legacy <count>` returns a custom hand of 1-78 cards. A positional count without `--legacy` is rejected, because the new default spread has a fixed shape. ### Reference Files Each house's meaning is in its own markdown file under `{baseDir}/houses/`. House files describe how the house applies across technical contexts including building new projects, vulnerability discovery, correctness verification, and common audit, verification, domain, failure-class, and stakeholder workflows. Each card's meaning is in its own markdown file under `{baseDir}/cards/`: - `cards/major/` - 22 Major Arcana (archetypal forces) - `cards/wands/` - 14 Wands (creativity, action, will) - `cards/cups/` - 14 Cups (emotion, intuition, relationships) - `cards/swords/` - 14 Swords (intellect, conflict, truth) - `cards/pentacles/` - 14 Pentacles (material, practical, craft) ### Interpretation After drawing, read each house file and each card file, then synthesize meaning. See [{baseDir}/references/INTERPRETATION_GUIDE.md]({baseDir}/references/INTERPRETATION_GUIDE.md) for the full interpretation workflow. For cross-domain translation, see [{baseDir}/references/TECHNICAL_CONTEXT_LENSES.md]({baseDir}/references/TECHNICAL_CONTEXT_LENSES.md). Key rules: - Reversed cards invert or complicate the upright meaning - Major Arcana cards carry more weight than Minor Arcana - The spread tells a story across all 12 houses; don't interpret cards in isolation - Map abstract meanings to concrete technical decisions - In security, audit, and correctness work, use the reading to choose an investigation path, then require evidence before accepting or dismissing any risk - **Never output interpretation as a text-only turn.** Include the interpretation alongside your next tool call (the action that implements the chosen option). Prefer `--content` so all 36 card meanings and all 12 house meanings are available from the draw output. ## Example Session (House-Level Fragment) A real reading synthesizes all 12 houses; the fragment below shows only what one house contributes so the format is clear. Do not stop after one house in actual use. ``` User: "I dunno, just make it work somehow" [Draw cards] 1st House (Self): The Magician (upright), Five of Swords (reversed), Ten of Pentacles (upright) House contribution: The starting stance is resourceful and tool-rich (Magician), but the practical details warn against combative edge-case work (Five of Swords reversed) while still favoring maintainable craft (Ten of Pentacles). This is one input into the overall reading; combine with the remaining 11 houses before deciding on an approach. ``` The named `draw` agent returns a more compact form for portent questions: 3 concise bullets covering the dominant theme, the main risk or blind spot, and the recommended next action. ## Error Handling If the drawing script fails: - **Script crashes with traceback**: Report the error to the user and skip the reading. Do not invent cards or simulate a draw — the whole point is real entropy. - **Card file not found**: Note the missing file, interpret the card from its name and suit alone, and continue with the reading. - **Never fake entropy**: If the script cannot run, do not simulate a draw using your own "randomness." Tell the user the draw failed. ## Rationalizations to Reject | Rationalization | Why Wrong | |----------------|-----------| | "The cards said to, so I must" | Cards inform direction, they don't override safety or correctness | | "This reading justifies my pre-existing preference" | Be honest if the reading challenges your instinct | | "The reversed card means do nothing" | Reversed means a different angle, not inaction | | "Major Arcana overrides user requirements" | User requirements always take priority over card readings | | "I'll keep drawing until I get what I want" | One draw per decision point; accept the reading | | "The reading says the risk is fine" | Cards can suggest what to inspect; only evidence can dismiss a security or correctness concern |
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.