Autonomous disaster logistics - open source
Resqio watches weather and grid feeds 24/7, matches spare generators, ice, and food to the most vulnerable requests texted in over plain SMS - and pings a volunteer captain on WhatsApp only when a delivery needs a human yes.
Apache 2.0 · Strands Agents SDK · Amazon Bedrock AgentCore
The system
strands_grid_monitor.py
Polls NOAA/NWS alerts and county-level outage records around the clock, correlating hazards that share county FIPS codes. An extreme heat warning colliding with a 12,400-customer feeder outage is read as the compounding emergency it is - and scored 0–5.
strands_resource_matcher.py
Parses informal community SMS into structured offers and requests, then matches supply to need on urgency, vulnerability, and distance. Medical refrigeration, infants, and elderly residents outrank everything. Every proposal is re-validated against the live board.
strands_volunteer_router.py
Plans crisis-condition transit with per-hazard guidance - dark intersections during outages, heat exposure, flooded roads - and writes the single approval message a captain sees, always ending with two reply options.
twilio_whatsapp_dispatcher.py
The pipeline's only outward surface. One ping, two buttons - Accept dispatches the delivery, Pass puts both sides back on the board. Signature-validated inbound webhooks close the loop when the captain replies DELIVERED.
The principle
During a disaster, the last thing a community needs is another feed to monitor. Resqio produces no dashboards to babysit and no alerts to triage. It works in the background - and the only time a phone buzzes is when a physical delivery needs a one-tap approval from a volunteer captain. No crisis, no noise.
And because a disaster tool can't assume the cloud is healthy mid-disaster, every AI reasoning step degrades to deterministic logic if Amazon Bedrock is unreachable. The pipeline keeps flowing on the worst day, not just the demo day.
“HELP: My father is 82, insulin needs refrigeration and our power is out at 42 Maple St. Urgent.”
One cycle later
Matched to a 7.5 kW generator, 1.2 km away. One tap. Delivered.
autonomous watch on weather and grid feeds
Strands agents reasoning on Amazon Bedrock
tap on WhatsApp to dispatch help
messages sent when nothing needs a human
The loop, frame by frame
Four moments from the Austin heatwave scenario - the same loop the live animation above plays end to end, and the same one you can drive yourself on the situation board.
Heat warning × feeder outage on overlapping counties - crisis level 5/5.
Offers and requests arrive as plain SMS. No app, no account, no training.
One WhatsApp ping to a volunteer captain. Two buttons. A human decides.
Generator to 42 Maple St - 1.2 km, ~7 min - confirmed and closed out.
Run it
Demo mode
Live mode
Who it serves
A block captain, a WhatsApp group, and whatever's in the garages - organized the moment the grid fails.
Perishables and cold-chain capacity matched to households that lose refrigeration in an outage.
Cooling, power, and transport needs surfaced and staffed without another spreadsheet.
Volunteer capacity dispatched with routes and hazard guidance instead of group-chat chaos.
One cycle
Feeds polled, hazards correlated, crisis scored. Feed failure means "no change", never "all clear".
Community texts parsed into offers and urgent requests, on the board in seconds.
Supply paired to need - urgency first, then vulnerability, then distance. Never double-booked.
Route planned, hazards flagged, one captain pinged. Silence otherwise.
Questions
Yes. Every agent has a deterministic degraded-mode fallback, so the full loop - detection, matching, routing, approval - runs offline with simulated feeds and console pings. That's how the demo and the 82-test suite run. Add AWS credentials and the same pipeline switches to live Claude reasoning on Amazon Bedrock.
The pipeline keeps flowing. A disaster tool can't assume the cloud is healthy during a disaster, so LLM failures drop each agent to pure logic: severity thresholds for crisis detection, a compatibility matrix plus haversine distance for matching, a deterministic route planner for dispatch. Slower thinking, same protocol.
Plain SMS. "OFFER: generator available in Sector 4" or "HELP: insulin needs refrigeration at 42 Maple St." No app to install, no account to create, nothing to learn during a crisis. Location can come from WhatsApp location sharing or a street address in the text.
Never. Every physical action passes through a one-tap human approval on WhatsApp, and the match lifecycle is a guarded state machine - a second captain's stale PASS can't reopen a delivery someone already accepted, and unanswered pings expire and free both sides for re-matching.
Weather alerts are live from NOAA's api.weather.gov. For power outages there is no free real-time national feed (EAGLE-I is restricted to government accounts; poweroutage.us is a paid API), so the grid source is a pluggable protocol shipping realistic EAGLE-I-schema county records - any utility API can implement the same two methods.
Apache 2.0, the whole thing - the three Strands agents, the AgentCore runtime, the Twilio integration, the situation board, the tests, and the architecture docs. Fork it for your county.