Inspiration

Ghost stories are meant to be told out loud, in the dark, to people who can interrupt. Streaming horror is passive, and most "AI story" apps are chat windows. We wanted the version that belongs on an Echo: a narrator who stops at the worst possible moment, asks what do you do?, and carries your answer through to an ending.

Alexa+ is the natural home for that. You don't need a controller or a keyboard, just your voice, alone or with everyone in the room shouting suggestions. Haunt brings interactive horror to Alexa+, on the Echo Show and on a voice-only Echo.

What it does

Say "Alexa, create a terrifying cosmic horror story in Hindi about a lighthouse that lights itself." Haunt writes the opening scene, narrates it, stops at the worst moment and asks what you do next. Whatever you answer changes the story.

  • Create from one sentence, or field by field: sub-genre, your own idea, length (short, medium or long: about 4, 6 or 8 turns), fear level and language.
  • Choose how to play, every time: with choices (answer in your own words, or say "one" / "two") or just listen (it plays like a film, with a timeline, pause, resume, next and previous).
  • Community and My Stories: play finished stories other listeners shared, or pick up your own where you left off.
  • Sign in without a keyboard: scan a QR code with your phone, or say your email and the 8-digit code. Guests can use My Stories; Community and Create need an account.

On an Echo Show (with a screen)

Home, Community, My Stories, Create and Profile, all usable by touch or voice. Each scene is shown with artwork, captions in time with the narration and the narrator's question.

On an Echo (voice only)

There are no tabs to find, so Haunt greets you and runs everything as spoken menus: "community stories, my stories, or create a story?" It reads lists aloud, takes a number or a title, walks you through creating a story and signs you in by voice.

How Alexa+ uses it

Haunt is a self-hosted MCP server (spec 2025-11-25, Streamable HTTP) with eight tools (start_story, answer_story, end_story, resume_story, list_my_stories, get_home, list_library, play_episode), an MCP Apps scene view (ui://haunt/scene-*) for the Echo Show screen, and an Agent Skill (skills/haunt/SKILL.md) that tells the assistant to pass the listener's words to the story verbatim and stay out of its way.

Because Alexa+ add-on testing is limited to select partners, we built a simulated Alexa+ experience at https://haunt-alexa.vercel.app/alexa. Switch between an Echo Show and a voice-only Echo, talk to an assistant (Claude on Amazon Bedrock, following the Haunt skill), and watch every MCP message in a live MCP inspector beside the device.

On Echo Show today

The same experience is also an Alexa skill with APL screens: tap or say "play with choices", "one" or "just listen". Alexa reads every scene word for word, with different voices for the narrator and the characters.

How we built it

  • FireTales (open source, Apache-2.0) is the story engine. It keeps the world, characters, facts, choices and dramatic arc consistent, validates every model reply against a schema, and pre-writes the next scene for each suggested answer while you listen. In our demo a matching answer continued in 42 ms to 1.6 s, instead of about 6 s for a scene written live. That matters a lot when the only interface is your voice.
  • Amazon Bedrock (Claude Haiku 4.5, Converse API) writes every scene as a forced, schema-checked tool call, plays the Alexa+ assistant in the simulator, and decides whether a spoken answer matches a pre-written branch.
  • Serverless on AWS: the Node/Express MCP server runs on AWS Lambda behind Amazon API Gateway, with Amazon DynamoDB for stories, progress, likes and the community library, Amazon Cognito for email-code and phone-pairing sign-in, Amazon Polly for narration and Amazon Transcribe for speech recognition in browsers that can't do it themselves.
  • The /alexa simulator is a React app on Vercel that acts as an MCP host. Vercel forwards /api and /activate to the AWS backend.
  • Alexa skill: TypeScript on the Alexa Skills Kit with APL. Our scene illustrations are converted from SVG to APL vector graphics, so every screen renders with no image hosting.

Challenges we ran into

  • No way to test against Alexa+ itself: the MCP Toolkit, Local Inspector and web simulator are partner-only, so we built our own Echo Show and Echo simulator with an MCP inspector.
  • Verbatim narration: Alexa+ paraphrases tool output, and for a story the wording is the product. Our simulator reads scenes word for word with Polly, and we filed verbatim speech as our top feature request.
  • Signing in on a screenless device: Cognito has no device authorization grant, so we built phone pairing (QR code or spoken email and code) ourselves. Then we found that in-memory pairing state isn't shared between Lambda instances.
  • Latency: generated scenes take seconds, so we pre-write likely branches during narration.
  • Model access on a new AWS account: Bedrock listed models the account couldn't call and only allowed Haiku 4.5 through the Converse API, so we wrote a Converse provider.
  • APL and the simulator: when evaluated only once, nested scrolling, and speech that ran before on-screen commands. Each needed its own fix to keep the Echo Show in sync with the narration.

All 20 issues are in our friction log, each with steps, severity, workaround and a suggestion.

Accomplishments that we're proud of

  • A complete Alexa+ experience from one sentence: create, narrate, branch, continue and end a story through eight MCP tools.
  • A voice-only Echo that is fully usable with no screen at all, including sign-in.
  • Real branching with clues that unlock choices and several endings.
  • An open-source engine, FireTales, that anyone can use to build voice storytelling for Alexa+.

What we learned

Interactive fiction lives or dies on continuity, so structured state and schema-checked model output matter more than prompt flourishes. On Alexa the voice is the interface. Every screen needs a sentence you can say instead of tapping, and a voice-only device needs a spoken menu instead of tabs. A short, clear Agent Skill did more for the assistant's behaviour than long prompts.

What's next for Haunt

The real Alexa+ add-on once access opens, verbatim narration through Alexa+, generated scene art from a Bedrock image model, pairing state moved to DynamoDB, and a family mode for younger listeners.

Links

Built With

Share this project:

Updates

Submission history