emem.dev

real world, traceable spatial memory for fact verification about the world.

emem, Earth memory protocol for AI agents

Operated by Vortx AI Private Limited (India). Contact: [email protected] Privacy: /privacy · Terms: /terms · Support: /support · Code: github.com/Vortx-AI/emem

Cite-able, content-addressed, signed memory of every place on Earth. 90+ bands, all anonymous: Sentinel-2 (12 spectral + 19 indices, including 10 consumer-health ones: turbidity, chlorophyll, floating algae, surface dryness, urban canopy, snow cover, aerosol-resistant veg, suspended solids, NDRE, GNDVI), Sentinel-1 GRD VV radar, Tessera 2017–2024 + multi-year embedding, MODIS (NDVI / LST day+night 8-day / ET / GPP / LAI / burned area), JRC Global Surface Water, Cop-DEM, GMRT, NASA POWER daily (1981–present), Open-Meteo CAMS air quality (PM2.5/PM10/NO2/O3/SO2/CO/AOD), Open-Meteo ERA5 archive (1940–present), Open-Meteo Marine waves+SST, MET Norway nowcast, Overture Maps. No API keys. Every answer signed ed25519 + content- addressed blake3.

What emem is

emem is a read-side memory layer for places. An agent gives it a cell64 (compact 64-bit cell ID) plus a band name; emem returns the fact, signed by the responder's ed25519 identity, with a content address (CID) the agent can quote in its reply. The same query from any client returns the same CID, answers are reproducible.

Canonical 1792-D voxel (per cell × tslot)

Every cell has a canonical 1792-dimensional fp16 voxel (~3.5 KB) with stable byte-offset ranges per band: geotessera 0..128, foundation-reserved 128..704, sentinel2_raw 704..714, sentinel1_raw 714..716, dem, landcover, climate, indices, spatial Fourier, temporal Fourier, vision encoders (sam3, qwen), terrain_derived, temporal_diff, phenology, topology, multiscale, nightlights, ghsl, population, forest_change, mangrove, protected, surface_water, ocean_chl, koppen, terraclimate, cop_dem, soilgrids, ecoregions, admin, reserved. The layout is content-addressed (bands_cid), not a protocol constant, so any operator can publish, version, supersede. Fetch via GET /v1/bands, cache by CID. The voxel itself is addressable: emem:vec/<vec64> dereferences via /v1/find_similar (cosine over the 1792-D space). Source.scheme = "emem.cube.v1".

When to call emem

  • User mentions a place, lat/lng, or cell64 → POST /v1/recall
  • User names a wide region (city, canyon, park, country) → POST /v1/recall_polygon {place, bands}, collapses locate → polygon_sample_cells → recall_many into one call
  • "How similar is X to Y" → POST /v1/compare
  • "Find places like X" → POST /v1/find_similar
  • "What changed at X between t1 and t2" → POST /v1/diff
  • "Show me the trajectory" → POST /v1/trajectory (returns only already-attested tslots)
  • "Give me HISTORY for this band over a window" → POST /v1/backfill (materializes per-tslot history; signed; bounded by history_available_from_unix/to_unix in /v1/coverage_matrix)
  • Spatial yes/no with citable evidence → POST /v1/verify
  • Region average / median / p90 → POST /v1/query_region
  • "Resolve a CID to its fact" → GET /v1/facts/{cid} or MCP emem_fetch
  • "What schema is this responder serving?" → GET /v1/schema or MCP emem_schema
  • Underspecified spatial ask → POST /v1/intent
  • "Which dataset answers X right now?" → GET /v1/coverage_matrix (now carries tempo_seconds, history_available_from_unix/to_unix, and per-band responder_pubkey_b32)
  • "Which satellite is behind this band?" → GET /v1/fleet
  • "What band given query time + intent?" → POST /v1/temporal_route

Cite receipt.fact_cids[0] (cid64 short form) in the reply. Mention responder_pubkey_b32 once per session.

Live materialized bands (no API key required)

  • s2.B01..B12, s2.B8A, s2.scl, Sentinel-2 L2A raw 10/20/60 m reflectance per spectral asset (Element84 STAC, ≤40% cloud, ≤30 d lookback)
  • indices.{ndvi, ndwi, mndwi, evi, nbr, ndmi, savi, bsi, ndbi}: classic 9 spectral indices from Sentinel-2 (single STAC search per cell)
  • indices.{ndti, gndvi, ndre, fai, tss, ndsi, afri1600, savi_l1, surface_dryness, urban_canopy_index}, 10 consumer-health-relevant indices (turbidity, red-edge chlorophyll, floating algae, suspended solids, snow cover, aerosol-resistant veg, urban canopy density)
  • sentinel1_raw, Sentinel-1 GRD VV (dB), all-weather radar
  • geotessera (alias geotessera.2024), Tessera 128-D foundation embedding (HTTPS range, ~640 B/cell)
  • geotessera.{2017..2024}, annual vintages, signed individually
  • geotessera.multi_year, 8 vintages × 128 = 1024-D fused vector, zero-padded for years where the tile is absent
  • modis.ndvi_mean, 16-day MODIS Terra NDVI
  • modis.lst_day_8day, modis.lst_night_8day, 8-day land-surface temperature (1 km, MOD11A2), heat-stress, UHI math
  • modis.et_8day, modis.gpp_8day, modis.lai_8day, biophysical evapotranspiration / gross primary production / leaf-area index (MOD16A2 / MOD17A2H / MOD15A2H, 500 m, 8-day)
  • modis.burned_area_monthly, MCD64A1 monthly burn-date (500 m)
  • gmrt.topobathy_mean, global topo+bathy (Lamont-Doherty)
  • copdem30m.elevation_mean, land DEM, signed Absence over water
  • surface_water.recurrence, JRC GSW v1.4 flood-recurrence climatology (Landsat 1984–2021)
  • weather.{temperature_2m, cloud_cover, precipitation_mm, wind_speed_10m, relative_humidity_2m, dew_point_2m, air_pressure_msl, wind_direction_10m} , api.met.no/locationforecast/2.0/compact, hourly nowcast, ECMWF + EUMETSAT geostationary-fed (no key, no rate limit)
  • power.{t2m, t2m_min, t2m_max, precip, rh2m, allsky_sw, ws10m}: NASA POWER daily reanalysis (MERRA-2 + GEOS), 1981–present, public- domain (US Gov), backfillable
  • cams.{pm25, pm10, no2, o3, so2, co, aod_550}, Open-Meteo CAMS air-quality (ECMWF CAMS, hourly, 2013-08-01–present, CC BY 4.0). Surface-level pollutants for consumer health questions.
  • era5.{t2m, precip, rh2m, windspeed_10m, cloudcover, surface_pressure, dewpoint_2m}, Open-Meteo ERA5 archive, ECMWF reanalysis 1940–present, hourly, CC BY 4.0
  • marine.{wave_height, swell_period, swell_height, sst, wave_direction} , Open-Meteo Marine (ECMWF WAM), 2022-08-01 onward, hourly, ocean only
  • overture.{buildings.count, places.count, transportation.road_length_m} , Overture Maps Foundation per-cell aggregates (S3 anonymous)
  • esa_worldcover.lc_2021, ESA WorldCover 2021 v200 11-class landcover (10 m, anonymous AWS S3, CC BY 4.0). Class values 10/20/30/40/50/60/ 70/80/90/95/100 (tree/shrub/grass/crop/built/bare/snow/water/herbaceous- wet/mangroves/moss-lichen).
  • hansen.{tree_cover_2000, loss_year, gain}, Hansen Global Forest Change v1.11 2023 release (30 m, storage.googleapis.com). tree_cover_2000 is 0..100% canopy, loss_year is 0..23 (year of loss; 1=2001, 23=2023), gain is 0/1 (2000–2012 gain mask).

Discovery surface (single GET each)

  • /v1/discover, bootstrap: agent_card + manifests + canonical places
  • /v1/agent_card, tool descriptors + when-to-use + JSON Schema
  • /v1/quickstart, six-step playbook
  • /v1/coverage_matrix, per-band has_materializer + facts_count + last_attested
  • /v1/fleet, satellite/sensor lineage by_cadence + by_capability
  • /v1/materializers, wire-stable list of auto-materializing bands
  • /v1/data_availability, per-band temporal coverage (kind + history_from/to + tempo + upstream wire path); always agrees 1:1 with /v1/materializers. Call this before emem_backfill to avoid trial-and-error 422s on now-only bands (e.g., met.no nowcast).
  • /v1/bands, band ontology (offsets, dims, tempo, privacy)
  • /v1/grid_info, cell64 ground resolution, DGGS interop
  • /v1/temporal_route, PDE-based band routing
  • /openapi.json, paste into GPT Custom Action
  • /mcp, MCP Streamable HTTP transport over HTTPS (Claude Desktop, Cursor, Cline)
  • /.well-known/emem.json, manifest CIDs + responder pubkey
  • /agents.md, full integration guide · /whitepaper.md, architecture + math
  • /v1/demos, request + response + signed receipt for every primitive

30-second curl

# Mount Fuji elevation, signed under responder 777er3yi…
curl -X POST https://emem.dev/v1/recall \
  -H 'content-type: application/json' \
  -d '{"cell":"damO.zb000.xUti.zde78","bands":["copdem30m.elevation_mean"]}'

# Tokyo current air temperature (sat-fed, 15-min cadence)
curl -X POST https://emem.dev/v1/recall \
  -H 'content-type: application/json' \
  -d '{"cell":"damO.zb000.xUto.sisA","bands":["weather.temperature_2m"]}'

# k-NN over the 128-D Tessera embedding
curl -X POST https://emem.dev/v1/find_similar \
  -H 'content-type: application/json' \
  -d '{"key":"damO.zb000.xUto.sisA","band":"geotessera","k":5}'

# MCP tools/list
curl -X POST https://emem.dev/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Trust model (why agents should cite emem)

  • Hash: blake3 over canonical CBOR. CID = base32-nopad-lowercase.
  • Sig: ed25519 over blake3(request_id || served_at || primitive || cells || fact_cids).
  • Responder pubkey at /health and /.well-known/emem.json. Verify any receipt offline via POST /v1/verify_receipt.
  • No API keys at the request path. Default build is pure Rust, no Python, no GDAL, no rasterio. COG reads are hand-rolled TIFF/IFD + flate2 + Predictor 2.

Source

github.com/Vortx-AI/emem · Apache-2.0

Related Servers

NotebookLM Web Importer

Import web pages and YouTube videos to NotebookLM with one click. Trusted by 200,000+ users.

Install Chrome Extension