System architecture
Sources · normalization · model · agents · review · APIs · endpoints
This is the reference design carried over from the Wildland Response AI demo: the full production shape, read top to bottom. Feeds normalize into two stores kept apart on purpose, live incident facts and reference text. One fire behavior model feeds eight specialist agents, the IC reviews everything, and nothing goes out without that review.
This project builds the first real slice of it: live public feeds through normalization, freshness checks, a briefing tied to its exact inputs, and a recorded human approval. The agents, dispatch, and crew endpoints below remain the reference design, not running code.
01 Sources
What the incident produces.
CAD / dispatch
Incident creation, unit status, dispatch notes
RAWS + NWS weather
Station obs, spot forecasts, HRRR and NDFD grids
Satellite IR
GOES-18 fire detections and VIIRS hot spots via FIRMS
Copernicus Sentinel
True color / NDVI, burn scar (NBR), active fire (SWIR)
Windy point forecast
Wind and weather time series at the fire
NIFC perimeter history
Historic burn scars; real data in this build
LANDFIRE fuels and terrain
Fuel models, canopy, elevation
WUI parcels
County parcels, addresses, structure footprints
GPS tracking
Crew MDTs, vehicle AVL, TAK devices, satellite handhelds, aircraft ADS-B
Field size-ups
Size-ups, spot reports, structure triage
Simulated with deterministic demo data in this build, except the NIFC historic perimeters, which are real.
02 Ingest and normalize
One shape for every feed.
Feed adapters
One per source: poll, push, or stream
Validate and align
Schema checks, UTC alignment, dedupe on source keys, stale flags
├ Two stores
Incident state store
liveSpatial and time-series facts: positions, perimeters, obs, unit status. Queried through tools, never embedded.
Retrieval index (RAG)
referenceReference text chunked with source and version: IRPG, agency SOPs, CWPP and pre-plans, IAPs, after-action reviews.
03 Fire behavior model
One deterministic model every agent keys into.
Spread engine
Wind, slope, and FBFM40 fuels
Treatment overlays
Reused from the mitigation plan of record
Forecast timeline
Synoptic to local: SPC, NDFD, HRRR
Plumes
Now and forecast runs, day 2 and 3 outlooks
Derived status
Ready / Set / Go and structure threat
Outputs are numbers, not prose. The agents narrate the model and never alter it.
04 Agents
Specialists analyze in parallel, then synthesize.
Situation / Intel
Synthesizes dispatch notes, weather, terrain, fuels, access, and known hazards into a current incident picture.
Fire Behavior Analyst
Estimates likely spread direction, rate-of-spread risk, spotting potential, and wind sensitivity from fuels, slope, and weather.
Structure Protection
Triages threatened WUI clusters: driveway access, turnarounds, water supply limits, and defensible-space concerns.
Evacuation
Recommends simulated Ready / Set / Go trigger zones and flags road-constraint and egress warnings.
Logistics
Tracks engines, tenders, crews, dozers, and aircraft; manages staging, water supply, and supply-cache needs.
Communications
Drafts ICS-style radio updates and stakeholder summaries; tracks channel assignments and coverage.
Safety Officer
Flags LCES, escape routes, safety zones, snags, terrain traps, comms gaps, and weather-change hazards.
Synthesis
IC Copilot
Synthesizes the findings with confidence and provenance on each claim
Each agent queries the live store through tools and cites the retrieval index.
05 Human review
The IC decides. Nothing auto-executes.
Incident Commander
Approves, edits, or rejects each output
Ask IC Copilot
reads ↑ 02Questions in, cited answers out. Reads the live store and the retrieval index; never writes or sends.
Confidence on every output
Surfaced per finding and per answer
Edit before it leaves the truck
Nothing goes out unreviewed
Audit log
Who approved what, when, and from which inputs
06 Distribution APIs
Approved outputs, in standard formats.
Incident API
REST for snapshots, WebSocket for live updates
CoT / TAK gateway
Positions and map markers out to TAK clients
CAP alerting
Standard alert messages to paging and alerting systems
Voice service
Text-to-speech of approved alerts and updates
07 Endpoints
Where people see and hear it.
ICP dashboard
IC briefing (exportable), structure triage list, evacuation recommendations, resource orders and staging, Ask panel
Crew MDTs
Live map, dispatch, critical weather alerts; acknowledgements come back
Responder app and pagers
Push and tone-out alerts
Radio path
Voice audio
From the voice service
RoIP gateway
Radio-over-IP interoperability gateway
Repeater or console
Keyed on the assigned channel
Over the air
ICS radio updates and auto-voiced alerts on command and tac
Feedback · MDT acknowledgements, GPS fixes, and field reports return to 01, so the next picture reflects what crews reported from the line.
Data source API catalog: the feeds a production build would sit on
Every public and private API behind the ingestion stage, with current documentation and basic shape. Links verified July 2026, GPS tracking links September 2026. In this build all of these are represented by deterministic demo data except the NIFC fire perimeters, which are real.
Weather: observations and forecasts
- NWS APIPublicNOAA / National Weather Service
REST, GeoJSON-LD. GET /points/{lat},{lon} resolves the grid, then /gridpoints/{wfo}/{x},{y}/forecast and /alerts/active?area=CO. Hourly forecast updates; User-Agent header required, no key.
https://www.weather.gov/documentation/services-web-api - NWS Spot Forecast ProgramPublicNOAA / NWS
Incident-specific request (STQ) in, forecaster-written spot forecast out; GeoJSON feed refreshed ~15 min plus an ArcGIS MapServer of active spots.
https://spot.weather.gov/ - Synoptic Data Weather API (MesoWest)Free keySynoptic Data PBC
REST. GET /v2/stations/timeseries?network=2&token=... (network 2 = RAWS) or /stations/latest; JSON/CSV/GeoJSON; sub-hourly RAWS observations. Free public-data tier, paid tiers above.
https://docs.synopticdata.com/services/weather-api - FEMS (NFDRS, replaced WIMS in 2024)PublicUSDA Forest Service
Read-only REST for hourly NFDRS v4 outputs (ERC, BI, dead/live fuel moistures) and station obs; gov login for write paths.
Exact OpenAPI path not verifiable at review time.
https://www.wildfire.gov/application/fems
Satellite thermal detections
- NASA FIRMS Area APIFree keyNASA LANCE
REST. GET /api/area/csv/{MAP_KEY}/VIIRS_NOAA20_NRT/{w,s,e,n}/{days}; VIIRS 375 m, MODIS, and GOES sources; CSV/JSON; NRT latency ~60-180 min; 5,000 transactions per 10 min per key.
This is the API behind the map’s Active fire (VIIRS) data layer, represented with simulated 375 m detections in this build.
https://firms.modaps.eosdis.nasa.gov/api/area/ - NASA FIRMS US/CanadaFree keyNASA LANCE / USDA Forest Service
Same Area API on a separate US/Canada instance fed by direct-readout ground stations: real-time and ultra-real-time VIIRS/MODIS detections — under a minute after overpass for much of the US and Canada — plus Landsat 30 m detections within ~30 min of overpass.
The initial-attack feed: the global NRT window above collapses to minutes here, and Canada is covered at the same grade. This instance, not the global one, is what a production build over this corridor would ingest.
https://firms2.modaps.eosdis.nasa.gov/usfs/api/area/ - GOES-18/19 ABI L2 Fire (FDC)PublicNOAA (Open Data Dissemination on AWS)
Anonymous S3, NetCDF objects (s3://noaa-goes18/ABI-L2-FDCC/...): fire mask, FRP, temperature per ~2 km pixel; CONUS every 5 min, mesoscale 1 min.
https://registry.opendata.aws/noaa-goes/
Copernicus Sentinel imagery
- Copernicus Data Space Ecosystem APIsFree keyESA / European Commission
Free registration, OAuth2 token. STAC catalogue for search, OData for download, openEO for cloud processing, and Sentinel Hub Process/Statistical APIs (POST an evalscript, get rendered raster or stats). Sentinel-2 revisit ~5 days; free quota, commercial tiers.
https://documentation.dataspace.copernicus.eu/APIs.html
Wind and point forecasts (Windy)
- Windy Point Forecast APICommercialWindy.com / Windyty SE
POST /api/point-forecast/v2 with JSON {lat, lon, model (gfs/ecmwf/iconEu), parameters, key}; JSON time series out; model steps 6-12 h. Trial plus paid Professional subscription.
https://api.windy.com/point-forecast/docs - Windy Webcams / Map Forecast APIsCommercialWindy.com
REST GET /webcams/api/v3/webcams?nearby={lat},{lng},{radius} with x-windy-api-key; embeddable interactive map layers via the Map Forecast API.
https://api.windy.com/webcams/docs
Synoptic guidance and model inputs
- SPC Fire Weather OutlooksPublicNOAA / Storm Prediction Center
Day 1-2 fire weather outlooks (Day 3-8 probabilistic) with Elevated / Critical / Extremely Critical areas; shapefile/KML downloads plus an ArcGIS MapServer; issued twice daily.
https://www.spc.noaa.gov/products/fire_wx/ - NWS NDFDPublicNOAA / NWS
2.5 km CONUS gridded forecast elements (wind, gusts, RH, temperature, sky); GRIB2 via tgftp and AWS Open Data; out to 7 days.
https://vlab.noaa.gov/web/mdl/ndfd - HRRR on AWSPublicNOAA (Open Data Dissemination on AWS)
Anonymous S3 (s3://noaa-hrrr-bdp-pds), GRIB2 plus Zarr; 3 km convection-allowing model, hourly cycles, 18 h forecasts (48 h at 00/06/12/18Z).
https://registry.opendata.aws/noaa-hrrr-pds/ - WFAS / NFDRS fire dangerPublicUSDA Forest Service
Daily national fire danger class and dead fuel moisture maps as rendered images and grids; no formal REST API.
FEMS (under Weather above) is the station-level NFDRS source of record.
https://www.wfas.net/ - NFPORS fuels treatmentsPublicDOI / USGS
ArcGIS REST treatment polygons and points with kind, status, and fiscal year; the production analog of the mitigation-plan overlays this demo reuses.
https://usgs.nfpors.gov/
Incidents and fire perimeters
- NIFC Open Data / WFIGSPublicNational Interagency Fire Center
ArcGIS FeatureServer REST: GET .../FeatureServer/0/query?where=1=1&outFields=*&f=geojson. Current perimeters refresh ~5 min; full interagency perimeter history; incident points via the public IRWIN views.
The one real feed in this build (historic burn scar layer).
https://data-nifc.opendata.arcgis.com/ - IRWINRestrictedDOI / USDA interagency
System-to-system incident data exchange between wildfire applications (CAD, WFDSS, INFORM); GeoPlatform account plus approved integration. Public consumption goes through the WFIGS views above.
https://www.wildfire.gov/application/irwin-integrated-reporting-wildfire-information - InciWebPublicUS Forest Service
RSS 2.0 incident and news feeds plus KML; PIO-entered, irregular cadence (hours). No formal API.
https://inciweb.wildfire.gov/feeds
Fuels and terrain
- LANDFIRE Product Service (LFPS)PublicUSGS / USFS
ArcGIS geoprocessing job API: submit AOI + layer list (FBFM40 fuel models, canopy, slope, aspect), poll job status, download GeoTIFF bundle; products versioned, updated annually or biennially.
This build bakes fuels from an unmodified public FBFM40 stand-in (The Wildland Almanac CONUS v2026.1, CC BY 4.0) and re-points to LANDFIRE with one URL change in the fetch script.
https://lfps.usgs.gov/LFProductsServiceUserGuide.pdf - USGS 3DEP / EPQS elevationPublicUSGS
REST GET /v1/json?x={lon}&y={lat}&units=Meters for point queries; 3DEP dynamic ImageServer/WCS for DEM tiles; lidar-based 1 m where available.
The baked terrain grids in this build come from the Open-Elevation public API (SRTM-derived).
https://epqs.nationalmap.gov/v1/docs
WUI parcels and structures
- County open data (e.g. Jefferson County CO)PublicCounty GIS
ArcGIS Hub GeoServices REST, WMS, WFS; parcel polygons with assessor attributes and the Master Address layer this demo already bakes; typically weekly refresh.
https://data-jeffersoncounty.opendata.arcgis.com/ - Building footprints (Microsoft / Overture)PublicMicrosoft; Overture Maps Foundation
Bulk line-delimited GeoJSON by quadkey (Microsoft Global ML Building Footprints) or GeoParquet on S3 queryable with DuckDB (Overture, which conflates Google + Microsoft + OSM); periodic static releases.
https://docs.overturemaps.org/guides/buildings/
CAD, dispatch, and unit alerting (private integrations)
- Tyler New World / CentralSquare (Zuercher) CADRestrictedTyler Technologies; CentralSquare
Per-agency contracts; CAD-to-CAD interfaces and standard exporter push feeds (XML/JSON on unit status change); integration specs under NDA. This is where dispatch notes and unit statuses originate.
https://www.tylertech.com/products/enterprise-erp/api-catalog - Active911 Open APICommercialActive911 Inc.
OAuth 2.0 with per-agency grants; HTTPS POST to access.active911.com/interface/open_api.php; JSON alerts, personnel responses, and map data pushed on dispatch.
https://github.com/active911/open-api
GPS / AVL resource tracking
- WFTAK (Wildland Fire TAK)RestrictedUSDA Forest Service, Fire and Aviation Management
Near-real-time resource location server built on TAK. Merges phones and crew tablets running ATAK/iTAK, USFS and DOI vehicle locators, satellite handhelds, and aircraft ADS-B into one picture; clients exchange Cursor on Target (CoT) over the WFTAK server.
The federal answer to the Dingell Act (2019) requirement that resource locations on federal incidents be known. Users can stop sharing by closing TAK; it is not a disciplinary tool.
https://wftak.wildfire.gov/pages/location-sharing-wftak - TAK ServerPublicTAK Product Center
Open-source Java server for Cursor on Target: CoT XML/protobuf position and marker events streamed over TLS, plus a REST/Swagger API on 8443. The same server type an agency or county could stand up for non-federal incidents.
https://github.com/TAK-Product-Center/Server - Garmin inReach IPC OutboundCommercialGarmin
Satellite (Iridium) handheld tracking pushed as JSON to an agency web service: WGS84 lat/lon, altitude, course, speed per tracking point. Professional accounts only; covers crews working outside cell and radio coverage.
https://developer.garmin.com/inReach/IPC_Outbound.pdf - Samsara Vehicle Locations FeedCommercialSamsara
REST. GET /fleet/vehicles/locations/feed with a bearer token; lat/lon, heading, speed, UTC time; cursor-based feed (poll the endCursor, at least 5 s between empty pages). One example of vehicle-borne GPS on apparatus.
https://developers.samsara.com/reference/getvehiclelocationsfeed - Geotab MyGeotab SDKCommercialGeotab
JSON-RPC Get/GetFeed on Device and DeviceStatusInfo (lat/lon, speed, heading) with incremental feed tokens; near-real-time. CalAmp Telematics Cloud offers equivalent REST feeds.
In practice AVL often arrives CAD-integrated rather than direct from the telematics vendor.
https://developers.geotab.com/myGeotab/introduction/
Public alerting
- FEMA IPAWS-OPENRestrictedFEMA
CAP v1.2 XML exchange for WEA/EAS origination; requires a signed MOA and alerting-authority status. Archived alerts are public JSON via OpenFEMA (ipaws-archived-alerts-v1).
https://www.fema.gov/emergency-managers/practitioners/integrated-public-alert-warning-system/technology-developers/ipaws-open - Commercial aggregators (Xweather Fires, Ambee)CommercialVaisala; Ambee
REST enrichment feeds: active fires with containment and some perimeters (Xweather /fires/{action}), detections plus risk forecasts (Ambee); useful as cross-checks, not systems of record.
https://www.xweather.com/docs/weather-api/endpoints/fires
Proposed normalized ingestion model: one shape per entity, any source
Source adapters are the only code that knows API formats; agents consume eleven normalized entities. Every record carries a common envelope: source, source_record_id, retrieved_at, valid_at (UTC ISO-8601), geometry (WGS84), confidence (0-1), provenance (raw payload ref), and a dedup_key. Computations run in an equal-area CRS; provenance is preserved so agents can weight and cite sources rather than alter them.
Incident
WFIGS incident locations, CAD, InciWeb, aggregatorsincident_id (IRWIN id canonical), name, type, discovered_at, poo_point, acres, containment_pct, status
Dedup on IRWIN id first, else name + distance + time window; CAD events attach as child dispatch notes until matched.
WeatherObservation
Synoptic (RAWS), FEMS, NWS APIstation_id, network, obs_time, temp_c, rh_pct, wind_ms, wind_dir_deg, gust_ms, fuel_moisture_10h
Timestamps aligned to top-of-interval UTC; dedup on station + time + variable.
WeatherForecast
NWS gridpoints, NWS Spot, Windy Point Forecastlocation, model, issued_at, valid_at, met fields, is_spot, forecaster_text
Never mix issued_at generations in one series; spot forecasts carry incident linkage.
ThermalDetection
FIRMS US/Canada (VIIRS/MODIS/Landsat), GOES FDCdetected_at, sensor, point, frp_mw, brightness_k, pixel_size_m, confidence, day_night
Sensor-specific confidence mapped to 0-1; dedup on sensor + scan time + pixel; clustered for agent use with pixel size kept for weighting.
FirePerimeter
WFIGS current + history (real in this build)incident_id, polygon, perimeter_time, acres_gis, method, is_current
Append-only revisions; area recomputed in an equal-area CRS alongside source acres.
FuelsCell / TerrainCell
LANDFIRE LFPS, USGS 3DEPcell_id, fbfm40, canopy_cover_pct, slope_deg, aspect_deg, elevation_m, landfire_version
Static layers version-pinned per incident and resampled to one lattice so spread models see a single grid.
FuelTreatment
NFPORS, state/county CWPP layerstreatment_id, kind, status, polygon, completed_at, source_plan
Status gates model damping: only completed or active work changes predicted behavior.
Structure
County parcels/addresses, Microsoft/Overture footprintsstructure_id, footprint, centroid, parcel_id, address, occupancy_class, defensible_space_score
Footprints conflated to parcels by spatial join; both sources kept in provenance.
ResourceUnit
CAD export, Active911, WFTAK / TAK Server, vehicle AVL (Geotab, Samsara), inReachunit_id, call_sign, ics_type, position, heading, status, position_time, position_source (mdt / vehicle_avl / handheld / ads_b), accuracy_m, assignment
GPS positions and CAD status merged on a unit crosswalk; when a unit reports from more than one device, the freshest fix wins, with accuracy as a tiebreak. Positions older than 10 min are flagged stale. The same merged picture is sent back to crew MDTs.
AlertMessage
NWS alerts, IPAWScap_identifier, event_type, area, sent_at, effective..expires, severity/certainty/urgency, channel, text
CAP is already the normal form; raw CAP XML kept in provenance; dedup on identifier + update chain.
EvacuationZone
County GIS zone layers where publishedzone_id, polygon, status (ready/set/go), status_time, population_est, structure_count, authority
Status transitions kept as event history and joined to AlertMessage when a WEA covers the zone.