## Inspiration We make dozens of household decisions: an internet plan, a sofa, a phone contract. Each has a reason ("it's cheapest") and a silent condition ("...unless the price goes up"). Months later the reason is forgotten, the condition untracked, and we overpay out of inertia. The "tripwire" technique (deciding in advance what would make you reconsider) comes from Chip and Dan Heath's book Decisive. We wanted to make it voice-native and automatic.

What it does

Tripwire is an Alexa+ add-on. You say a decision out loud with the reason and what would change your mind. It stores the decision with explicit tripwires (e.g. "price above $50", "outages more than twice a month"). When you later mention relevant news, such as "the provider raised our price to $55", it checks every armed tripwire and tells you when one trips. You can ask "why did we pick that plan?" and hear the reasoning and timeline. It warns when you're close to a limit, and it asks you when a tripwire is too vague to judge. Alexa's own reminders are time-based; Tripwire is condition-based.

How we built it

  • A self-hosted MCP server (Python, Streamable HTTP, MCP 2025-11-25) with 8 voice-friendly tools.
  • Amazon Bedrock (Converse API, forced tool use) extracts structured decisions from speech and relates new facts to tripwires.
  • Amazon DynamoDB stores every decision, so a tripwire set in one conversation fires in another, weeks later.
  • The model proposes; the server decides. Numeric thresholds are compared by server code, never by the model.
  • Engineered for failure: compare-and-swap writes, timeouts and a circuit breaker, retry-safe tools, spoken errors.
  • 119 automated tests, including a forced-race concurrency test, adversarial model output, and end-to-end tests over real HTTP.
  • Because Alexa+ access was unavailable, we built a simulated Alexa+ experience (/sim): simple routing rules stand in for Alexa+'s AI and call the same Tripwire logic the MCP tools use.

Challenges

Making an assistant act without being asked while never acting on a guess. That led to server-side numeric truth, human confirmation for vague conditions, and clarifying questions over guesses. Voice needed short, speakable answers.

What we learned

Forced tool use makes Bedrock output dependable, but the model should never be the source of truth for decisions that change state. Concurrency and retries matter even in a small project.

What's next

Account linking so each family member has their own decisions, proactive notifications, range and compound tripwires, and MCP Apps cards for Echo Show.

Built With

  • alexa-plus
  • amazon-bedrock
  • amazon-dynamodb
  • aws-cloudformation
  • boto3
  • mcp
  • model-context-protocol
  • pydantic
  • pytest
  • python
  • starlette
  • uvicorn
Share this project:

Updates

Submission history