Inspiration

During severe climate events—flash floods, sudden blizzards, windstorms, and grid outages—the difference between minor basement water damage and structural devastation often comes down to minutes. In every neighborhood, the necessary tools already exist: Neighbor Bob has a high-flow submersible pump, Neighbor Sarah owns a 7kW dual-fuel generator, and the community center has palletized sandbags.

However, during a disaster, human coordinators are completely overwhelmed. They juggle frantic group chats, phone calls, social media distress posts, and radar feeds. They don't have time to sit in front of a complex dashboard, filter spreadsheets, or calculate geographic coordinates.

We asked ourselves: What if an AI agent lived entirely in the background, continuously monitoring disaster feeds, doing all the cognitive heavy lifting, and only surfacing when a critical, single-tap decision is required?

This inspired MutualAid-Agent—a resilient, autonomous background agent built with the Strands Agents SDK and Amazon Bedrock that turns neighborhood preparedness into instant, automated mutual aid.


What it does

MutualAid-Agent operates autonomously in the background 24/7 without requiring human management. It bridges the gap between raw emergency alert data and localized community response:

  1. Continuous Background Surveillance: Listens to real-time weather webhooks (National Weather Service, sensor telemetry, community dispatch pings) via serverless AWS API Gateway and Lambda handlers.
  2. Autonomous Disaster Reasoning & Asset Matching: Uses the Strands Agents SDK to parse alert severity, identify required machinery (e.g., classifying flash floods to submersible pumps, downed trees to chainsaws, oxygen-dependent outages to generators), and query local community inventory in Amazon DynamoDB.
  3. Geospatial Proximity Calculations: Employs Haversine distance ranking to find the closest available verified neighborhood resource within minutes.
  4. Single-Decision Human-in-the-Loop SMS: Instead of forcing coordinators to log into an app or manage complex workflows, the agent formulates and sends a single-decision SMS to the coordinator's phone: > "[MutualAid Alert] Flood at 10 Main St. Dispatch Neighbor Bob's 2-inch submersible pump (0.03 mi away)? Reply YES to approve, NO for alternative."
  5. Autonomous Dispatch Execution: When the coordinator replies with a single word (YES), the inbound Twilio webhook triggers the agent to mark the equipment as dispatched in DynamoDB, record audit logs, and automatically text the equipment owner with staging instructions. If the coordinator replies NO, the agent immediately pivots and drafts an alternative match or escalates to municipal services.

How we built it

We designed MutualAid-Agent around a modern, cloud-native, serverless architecture ready for Amazon Bedrock AgentCore:

  • Strands Agents SDK: Orchestrates the multi-step agentic loop. We defined modular @tool decorators for parsing emergency alerts, querying DynamoDB registries with proximity filtering, and generating single-decision SMS prompts.
  • Amazon Bedrock: Serves as the high-accuracy reasoning engine (using Anthropic Claude 3.5 Sonnet / Amazon Nova) for interpreting unstructured meteorological alerts and emergency distress payloads.
  • Amazon DynamoDB & boto3: Acts as the ultra-low latency community registry storing verified equipment profiles, real-time availability states (AVAILABLE, RESERVED, DISPATCHED), and immutable incident logs. Includes an in-memory mock engine for local testing and offline execution.
  • Serverless AWS Lambda Handlers:
    • weather_webhook.py: Ingests automated storm triggers and invokes the agent pipeline asynchronously.
    • sms_webhook.py: Ingests coordinator responses via Twilio webhook and formats TwiML responses.
  • Infrastructure as Code: Configured via serverless.yml and AWS SAM template.yaml for streamlined deployment to AWS Bedrock AgentCore and AWS Lambda.
  • Automated Pytest Suite: 15 comprehensive unit and integration tests covering geospatial mathematics, webhook parsing, state transitions, and rejection fallbacks.

Challenges we ran into

  1. Minimizing Cognitive Load in High-Stress Scenarios: Early prototypes presented coordinators with detailed multi-paragraph summaries and multiple candidate options. In an emergency, coordinators don't have time to analyze options. We redesigned the engine to autonomously pick the optimal match and present only a binary decision (Reply YES / NO), reducing reaction time from 15 minutes to 5 seconds.
  2. Deterministic Fallbacks & State Consistency: In rapid-response environments, LLMs must never hallucinate unavailable equipment or double-dispatch active tools. We combined the Strands Agents SDK with atomic DynamoDB state transitions and conditional updates to guarantee transactional consistency.
  3. Local Reproducibility vs. Cloud Deployability: We wanted anyone (including hackathon judges) to test and verify the entire autonomous loop locally without configuring live AWS IAM credentials or Twilio numbers. We implemented dual-mode data access with automated in-memory DynamoDB emulation while maintaining 100% boto3 compatibility.

What's next

  • Decentralized Neighborhood Mesh Support: Integrating LoRaWAN and APRS radio packet ingestion so MutualAid-Agent can operate even when cellular towers and residential internet fail during grid collapses.
  • Multi-Tier Volunteer Skills Registry: Expanding resource schemas to include certified medical first responders (CPR/AED), bilingual translators, and licensed heavy machinery operators.
  • Predictive Pre-Staging with Bedrock: Using historical flood basin telemetry to autonomously propose sandbag pre-positioning before the storm makes landfall.
  • Multi-Language Coordinator SMS: Dynamic auto-translation for neighborhood coordinators speaking Spanish, Mandarin, Vietnamese, and other community languages.

Built With

Share this project:

Updates

Submission history