Inspiration
I live in Wailuku, Maui. On August 8, 2023, the Lahaina fire killed 102 people. In the first hours, people were deciding what to do with little or no information. I build Kahu Ola, a free hazard platform for Hawaiʻi residents, and it had no way to see a fire on its own. SmokeWatch is that missing piece: something that watches the sky every few minutes.
What it does
Every 10 minutes, SmokeWatch pulls the newest NOAA GOES-18 scan from AWS Open Data and checks Hawaiʻi for new fires.
- Perceive (OpenCV 5). It reprojects the satellite grid onto Hawaiʻi (
cv2.remap), compares the 3.9 µm fire channel against a 3-day same-hour background, and pulls out hot clusters with morphology, connected components and contours. Volcano zones (Kīlauea, Mauna Loa) are masked so eruptions are never reported as wildfires. - Decide (agent). A Claude agent receives each candidate and chooses its next tool: track the plume across earlier frames with optical flow, check NASA FIRMS for independent fire detections, schedule a recheck, dismiss it, or ask a human to review.
- Act, with a human in control. The agent cannot publish; that rule is enforced in code, not in the prompt. Review also requires that tracking ran, that there is fire evidence, and that the hotspot appears in at least 2 scans. Only after a person approves does a plume reach the public GeoJSON layer, and that layer always carries a disclaimer.
A public timeline viewer lets anyone scrub through stored scans (like NASA Worldview) and replay the Lahaina day.
Results (replay of 7 Maui and Hawaiʻi Island fires, 8 Aug 2023)
- Lahaina: flagged for human review 41 minutes after the first official report, about 6 hours before the first polar-orbiting satellite detection (MODIS).
- 5 of 7 fires reached review. Missed: the small morning Lahaina fire and Kula (202 acres), both too small at 2 km resolution.
- Review precision 0.86 (0.95 when reviews confirmed by FIRMS at fire edges are counted as correct).
- The agent made the same decisions as a deterministic rule policy on all 6 replay candidates, at about $0.02 per scan that has a candidate. Scans with no candidate make no model call.
How I built it
- OpenCV 5: remap, morphology, connected components, contours, distance transform, DIS optical flow, rendering, and
cv2.VideoWriterfor the replay animation. - AWS: Lambda container images on a 10-minute EventBridge schedule, S3 for the scan archive and review queue, SAM for deployment, and Lambda Function URLs. The NOAA bucket sits in the same region, so reading imagery costs nothing.
- Agent: Claude Sonnet with tool use. A rule policy is the fallback, so a model outage never stops scanning.
Challenges
- Smoke was invisible at 2 km. Optical smoke detection missed Lahaina entirely. I switched to detecting fire heat, with smoke kept only as supporting evidence.
- Honest numbers. I corrected my own first claim (26 min became 41 min) once the full evaluation ran. I also tried a published contextual fire test (MODIS-style). It removed every false alarm but delayed three fires and lost one, so I kept it off and documented it.
- New-account limits. Amazon Bedrock quota was 0 on the new account, so the agent calls the Anthropic API directly. The Bedrock path is already built and switches with one parameter.
What I learned
At this resolution, timing is the product. A geostationary satellite sees Hawaiʻi every 10 minutes, while polar satellites pass only a few times a day. A human reviewer is what makes an automated alert safe to publish.
What's next
Add SmokeWatch as a map layer in the Kahu Ola app, add an alert channel for county emergency staff, and use the contextual test as evidence for the agent instead of a hard filter.
Automated satellite estimate, not an official warning. Follow Maui Emergency Management and county alerts. Narration in the demo video is AI-generated.
Log in or sign up for Devpost to join the conversation.