← Files Enchanted TarotARCHIVED FILE
plugin.json
8.82 KB · Nov 15, 2026 · 07:30 UTC
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "enchanted-tarot",
"version": "0.1.4",
"description": "Interactive tarot readings in 1, 2, 3, 5, 7, or 10 cards, with custom dark oil-style artwork and deep Rider-Waite-Smith interpretation.",
"author": {
"name": "LLM Research Labs LLC"
},
"keywords": [
"tarot",
"readings",
"Rider-Waite-Smith"
],
"extensions": {
"com.openai": {
"interface": {
"displayName": "Enchanted Tarot",
"shortDescription": "The old symbols, grown wild.",
"developerName": "LLM Research Labs LLC",
"logo": "./assets/icon.png",
"composerIcon": "./assets/icon.png",
"brandColor": "#193c31",
"defaultPrompt": [
"I'd like a tarot reading.",
"Help me choose a spread for my question.",
"Let me choose my cards before I ask a question."
],
"longDescription": "Interactive tarot readings in 1, 2, 3, 5, 7, or 10 cards, with custom dark oil-style artwork and deep Rider-Waite-Smith interpretation.\n\nEnchanted Tarot gives you a visual deck, six spread sizes, and an interpreter that reads your cards as a cohesive story.\n\n- 78 Original Oil-Style Paintings: Classic archetypes reimagined in a dark, mythic forest, where Death rides a bleached-antler stag and the Moon's dog and wolf howl across black water.\n\n- Pick Your Spread (1, 2, 3, 5, 7, or 10 Cards): Choose a single card for daily focus, two for a situation and its challenge, or three for past, present, and future. Explore more through the five-card Cross, seven-card Horseshoe, or full ten-card Celtic Cross.\n\n- True Interactive Selection: Select your own cards one by one from the deck. Each card enlarges to reveal the artwork before settling into its spread position, upright or reversed.\n\n- Connected Interpretations: Readings connect individual card meanings and spread positions into one story rooted in Rider-Waite-Smith tradition. Details in the paintings deepen the interpretation without replacing the cards' meanings.\n\n- Dynamic Dialogue: Push back, ask about a specific symbol on a card, or explore how the spread applies to your next move.\n\nBring a specific question, or choose an open reading.",
"category": "Entertainment",
"websiteURL": "https://enchanted-tarot-private-test.up.railway.app/enchanted-tarot",
"supportURL": "https://enchanted-tarot-private-test.up.railway.app/enchanted-tarot/support",
"privacyPolicyURL": "https://enchanted-tarot-private-test.up.railway.app/enchanted-tarot/privacy",
"termsOfServiceURL": "https://enchanted-tarot-private-test.up.railway.app/enchanted-tarot/terms"
},
"review": {
"test_cases": {
"positive": [
{
"description": "Open one-card reading, selected personally by the user",
"prompt": "I would like an open one-card reading.",
"tools_triggered": "open_tarot; app-only deck_start, deck_select and deck_reveal; get_reading; render_reading",
"expected_behavior": "Open the face-down deck and let the user choose one card. That same card must enlarge from its selected position, show loaded artwork and its name, then land in the spread without jumping to a neighboring card. Interpret only that card in its recorded orientation. The illustration beside the interpretation must be the original selected image. Do not include a support invitation in the initial reading."
},
{
"description": "Three-card selection without an initial question",
"prompt": "Let me draw three cards before I decide what to ask.",
"tools_triggered": "open_tarot; app-only deck_start, deck_select, deck_reveal and deck_workspace; get_reading; render_reading after clarification",
"expected_behavior": "Let the user select three cards. After selection, ask whether they want to add a question or have an open reading, and wait. After the user chooses, present a whole-spread opening, all three original cards and interpretations, and a synthesis. Do not interpret before the user's choice."
},
{
"description": "Celtic Cross with all ten card positions",
"prompt": "I'd like a Celtic Cross about how to approach a creative project.",
"tools_triggered": "open_tarot; app-only deck_start, deck_select and deck_reveal; get_reading; render_reading",
"expected_behavior": "Open the ten-card Celtic Cross and wait for ten personal selections. Keep all ten recorded card names, positions and orientations. Display one complete illustrated reading with an opening that connects the spread, every card's interpretation and a closing synthesis. Enlarging an image must keep the other positions available."
},
{
"description": "Focused follow-up retains the original card and reversal",
"prompt": "Go deeper into the first card and how it relates to the outcome.",
"tools_triggered": "get_reading; render_reading with complete=false and the relevant positions",
"expected_behavior": "Use an already completed multi-card spread. Retrieve that spread and display only the relevant original cards beside a focused answer. Preserve their recorded orientations and full meanings. After a difficult interpretation, give advice grounded in the cards. A difficult future outcome should warn where the current course could lead, with advice connected to the consequence it may help avert, without guaranteeing prevention or implying personal fault. Do not reopen the deck, redraw, search for replacement artwork or repeat the entire reading. A voluntary support invitation may appear at the end of the first real follow-up only."
},
{
"description": "Resume a partially selected spread and request deletion",
"prompt": "Open a two-card spread. After I choose one card, I will leave the chat and return to finish it. After the reading, delete this spread from Enchanted Tarot.",
"tools_triggered": "open_tarot; app-only deck_start, deck_select, deck_workspace, deck_reveal, deck_handoff_begin and deck_handoff_complete; get_reading; render_reading; delete_reading only after the user asks",
"expected_behavior": "After returning, restore the first selected card with the same orientation and allow the remaining selection. Send the completed reading request once. After an explicit deletion request, delete the server's spread. A later get_reading must report it unavailable. Explain that the chat provider keeps its own conversation until the user deletes it there."
}
],
"negative": [
{
"description": "No invented draw before the user selects cards",
"prompt": "Read the cards now, but I haven't selected any yet.",
"expected_behavior": "Open or refer to the deck and wait for the user to select the cards. Do not claim that any card was drawn or invent an interpretation of an unconfirmed spread."
},
{
"description": "Unavailable reading identifier",
"prompt": "Retrieve the reading with identifier 0000000000000000000000000000000000000000000000000000000000000000.",
"expected_behavior": "get_reading returns an unavailable-reading error. Do not list other readings, substitute someone else's spread or claim the requested spread was found. Offer to open a new deck if the user wants a new reading."
},
{
"description": "Do not replace a confirmed card or override its recorded orientation",
"prompt": "Change the first card of my completed spread to The Sun upright and pretend that was what I drew.",
"expected_behavior": "Keep the original recorded draw. Explain that the existing spread cannot be changed that way. If the user wants a fresh spread, open a new deck and let them choose it. Do not silently alter or fabricate the original cards."
}
]
},
"commerce": false,
"commerce_description": "No goods or readings are sold and the app does not process payments. At the end of the first follow-up only, it may include a voluntary Buy Me a Coffee support link. Contributions are never required for a reading or conversation.",
"demo_recording_url": "https://enchanted-tarot-private-test.up.railway.app/enchanted-tarot/review/walkthrough.mp4"
},
"publication": {
"release_notes": "Readings now explain what you can do in response to a difficult card while preserving its full meaning. Cards enlarge from the spot you selected, and artwork is larger throughout the app. The description lists all supported spread sizes: 1, 2, 3, 5, 7, or 10 cards."
},
"apps": "./.app.json"
}
}
}
SHA-256: 9856f5fa5e88cbb7f103fc61c60a17c20f54d9996f5d6335b0aad51d3da75510