{
  "name": "emem",
  "version": "1.1.0",
  "protocol": "emem-earth-memory",
  "tagline": "Shared, verifiable memory for AI agents, robots, and sensing platforms. One canonical, citeable identity per place, fact, and object, so different models reason from the same world, not different descriptions. Grounded in signed Earth observation.",
  "description": "Verifiable memory substrate for AI agents. Two layers, one trust surface. Earth-scale spatial fact store: every patch of ground gets a 64-bit address (cell64, about 9.55 m), and every measurement at that cell is a signed fact keyed by (cell, band, tslot), ed25519-signed by the responder over the blake3 of its canonical CBOR. Agent memory: above the fact store sits the writable scratchpad the agent owns: six Anthropic memory-tool verbs (memory_view/create/str_replace/insert/delete/rename), CoALA-typed files (episodic/semantic/procedural/resource), capability-bound writes under /memories/by_attester/, BGE-768 semantic search over notes, multi-attester contradiction scoring per band kind, signed bundles (emem:bundle:<bundle_cid>) and object identities (emem:entity:<entity_cid>), and bi-temporal recall (as_of_tslot for valid time, as_of_signed_at for transaction time, both threaded through every read). 94 MCP tools (14 core, 80 extended), 18 static MCP resources + 8 URI templates, 162 algorithms in a content-addressed registry, 124 materializer-wired band names across 43 cube slots, 46 source schemes, 4 foundation encoders (Clay v1.5, Prithvi-EO-2.0-300M-TL, Tessera, Galileo), three GPU-pinned and Tessera streamed from Cloud-Optimized GeoTIFF on CPU, behind a 1792-D state cube. Every response carries an ed25519 receipt verifiable offline at /verify. No API keys.",
  "homepage": "https://emem.dev",
  "code": "https://github.com/Vortx-AI/emem",
  "license": "Apache-2.0",
  "operator": {
    "name": "Vortx AI Private Limited",
    "country": "India",
    "url": "https://vortx.ai",
    "contact": "avijeet@vortx.ai"
  },
  "policies": {
    "privacy_policy": "https://emem.dev/privacy",
    "terms_of_service": "https://emem.dev/terms",
    "support": "https://emem.dev/support",
    "security": "https://github.com/Vortx-AI/emem/blob/main/SECURITY.md"
  },
  "surfaces": {
    "rest": "/openapi.json",
    "mcp": "/mcp",
    "well_known": "/.well-known/emem.json",
    "agent_card": "/v1/agent_card",
    "quickstart": "/v1/quickstart",
    "tools": "/v1/tools",
    "algorithms": "/v1/algorithms?summary=true",
    "topics": "/v1/topics",
    "manifests": "/v1/manifests",
    "schema": "/v1/schema",
    "facts_by_cid": "/v1/facts/{cid}",
    "state": "/v1/state",
    "state_multi": "/v1/state_multi",
    "state_diff": "/v1/state_diff",
    "memory_token": "/v1/memory_token",
    "memory_token_resolve": "/v1/memory_token/resolve",
    "stream": "/v1/stream",
    "corpus_state_stats": "/v1/corpus_state_stats",
    "benchmark": "/v1/benchmark",
    "benchmark_grade": "/v1/benchmark/grade",
    "verify": "/verify",
    "verify_fact": "/verify/{fact_cid}",
    "humans": "/humans",
    "humans_json": "/humans.json",
    "llms_txt": "/llms.txt",
    "llms_full_txt": "/llms-full.txt",
    "worlds": "/worlds",
    "worlds_artifacts": "/v1/worlds",
    "splats": "/splats"
  },
  "domain_shortcuts": {
    "_purpose": "One-shot locate → recall → polygon-aggregate per place name. REST and MCP equivalents.",
    "any_band": "POST /v1/at      | MCP emem_at",
    "vegetation": "POST /v1/ndvi    | MCP emem_ndvi",
    "elevation": "POST /v1/elevation | MCP emem_elevation",
    "air": "POST /v1/air     | MCP emem_air",
    "lst": "POST /v1/lst     | MCP emem_lst",
    "soil": "POST /v1/soil    | MCP emem_soil",
    "water": "POST /v1/water   | MCP emem_water",
    "forest": "POST /v1/forest  | MCP emem_forest",
    "weather": "POST /v1/weather | MCP emem_weather"
  },
  "primitives": [
    "emem_locate",
    "emem_ask",
    "emem_recall",
    "emem_recall_many",
    "emem_recall_polygon",
    "emem_field_boundaries",
    "emem_query_region",
    "emem_compare",
    "emem_compare_bands",
    "emem_find_similar",
    "emem_trajectory",
    "emem_diff",
    "emem_fetch",
    "emem_backfill",
    "emem_heat_solve",
    "emem_wave_solve",
    "emem_jepa_predict",
    "emem_jepa_predict_v2",
    "emem_verify",
    "emem_verify_receipt",
    "emem_at",
    "emem_ndvi",
    "emem_elevation",
    "emem_air",
    "emem_lst",
    "emem_soil",
    "emem_water",
    "emem_forest",
    "emem_weather",
    "emem_bands",
    "emem_functions",
    "emem_sources",
    "emem_schema",
    "emem_errors",
    "emem_manifests",
    "emem_capabilities",
    "emem_grid_info",
    "emem_coverage_matrix",
    "emem_coverage_map",
    "emem_materializers",
    "emem_data_availability",
    "emem_fleet",
    "emem_temporal_route",
    "emem_algorithms",
    "emem_explain_algorithm",
    "emem_topics",
    "emem_cell_scene_rgb",
    "emem_cell_geojson",
    "emem_intent",
    "emem_state",
    "emem_state_multi",
    "emem_state_diff",
    "emem_memory_token",
    "emem_memory_token_resolve",
    "emem_memory_bundle",
    "emem_memory_contradictions",
    "emem_entity",
    "emem_entity_resolve",
    "emem_entity_link",
    "emem_corpus_state_stats",
    "emem_benchmark",
    "emem_hunt",
    "emem_eudr_dds"
  ],
  "_primitives_note": "curated subset of the tool surface; the MCP tools/list call and /v1/agent_card enumerate the full set",
  "primitive_count": 94,
  "algorithm_count": 162,
  "band_cube_slot_count": 43,
  "materializer_wired_band_names": 124,
  "rest_paths_in_openapi": 118,
  "rest_paths_v1_in_openapi": 114,
  "source_scheme_count": 46,
  "topic_count_declared": 27,
  "address_algebra": {
    "cell": "64-bit cell identifier: 21-bit lat × 22-bit lng on the active grid (~9.54 m × ~9.55 m at the equator, matching Sentinel-1/Sentinel-2 native pitch). Wire form: four base-65,536 bigrams separated by dots, Hilbert-ordered so neighbours share string prefixes.",
    "tslot": "u64 bucket of the Unix timeline at the band's tempo cadence (slot_seconds = 86400 fast / 2592000 medium / 31536000 slow / 3600 ultra_fast / 0 static). Equal across responders for the same band.",
    "band": "logical channel within a 1792-D embedding contract; loaded from content-addressed `bands_cid` manifest. 43 cube slots; 124 (slot × subkey) materializer-wired band names auto-fetchable on miss."
  },
  "crypto": {
    "hash": "BLAKE3 over canonical CBOR (deterministic CIDs across responders)",
    "signature": "ed25519 over (request_id | served_at | primitive | cells, | fact_cids,)",
    "cid_encoding": "base32-nopad-lowercase, 26 chars",
    "merkle_tree": "binary, BLAKE3 leaves, canonically sorted",
    "verify_path": "in-browser via /verify or /verify/{fact_cid} using @noble/curves + @noble/hashes; no callback to issuer"
  },
  "foundation_encoders": {
    "_purpose": "Four foundation encoders: three GPU-pinned and co-resident on a 20 GB VRAM budget, Tessera streamed from Cloud-Optimized GeoTIFF on CPU. Surfaced as their own bands and woven into algorithm consensus voting.",
    "clay_v1.5": {
      "band": "clay_v1",
      "dim": 1024,
      "input": "Sentinel-2 L2A, 10 bands @ 10 m, 256×256 chip",
      "warm_latency_ms": 12,
      "receipt_warning": "frozen_pretrained_encoder",
      "source": "https://clay-foundation.github.io/model/"
    },
    "prithvi_eo2_300m_tl": {
      "band": "prithvi_eo2",
      "dim": 1024,
      "input": "HLS V2 6-band @ 30 m, 224×224 chip",
      "warm_latency_ms": 13,
      "receipt_warning": "frozen_pretrained_encoder",
      "source": "https://research.ibm.com/blog/prithvi2-geospatial"
    },
    "galileo": {
      "band": "galileo",
      "deployed_variant": "base",
      "selectable_via": "EMEM_GALILEO_VARIANT (tiny | base | nano)",
      "advertised_extension": "galileo-base",
      "input": "Sentinel-2 only modality wired today (multimodal scaffold present)",
      "warm_latency_ms": 14,
      "receipt_warning": "frozen_pretrained_encoder",
      "source": "https://arxiv.org/abs/2502.09356"
    },
    "jepa_v2_dynamics": {
      "band": "jepa_v2 (synthesized output)",
      "status": "untrained_baseline",
      "honest_behaviour": "returns last_attested_vintage; receipt carries `via: short_circuit_untrained` and `untrained_baseline` warning",
      "trained_at": null
    }
  },
  "consensus_algorithms": [
    {
      "key": "clay_prithvi_tessera_triple_consensus@1",
      "purpose": "Year-on-year change detection via cosine distance per encoder, ensemble L2-mean, agreement classifier at gate=0.15 (tunable via parameters block).",
      "encoders": [
        "clay_v1",
        "prithvi_eo2",
        "geotessera.multi_year"
      ]
    },
    {
      "key": "deforestation_triple@1",
      "purpose": "Forest-loss-tuned consensus with Hansen GFC mask uplift to `hansen_confirmed` verdict at gate=0.20.",
      "encoders": [
        "clay_v1",
        "prithvi_eo2",
        "geotessera.multi_year",
        "forest_change.lossyear"
      ]
    },
    {
      "key": "wetland_change_triple@1",
      "purpose": "Wetland-tuned consensus, Tessera leg substituted by JRC GSW recurrence delta at gate=0.10.",
      "encoders": [
        "clay_v1",
        "prithvi_eo2",
        "surface_water.recurrence"
      ]
    },
    {
      "key": "urban_expansion_triple@1",
      "purpose": "New-construction consensus with Overture buildings delta + S2 B11 SWIR corroboration at gate=0.20.",
      "encoders": [
        "clay_v1",
        "prithvi_eo2",
        "overture.buildings.count",
        "s2.B11"
      ]
    },
    {
      "key": "disaster_anomaly_triple@1",
      "purpose": "Spatial-anomaly consensus: cell vs 8-neighbour mean per encoder, adaptive z-score gate (2-σ over neighbour distribution).",
      "encoders": [
        "clay_v1",
        "prithvi_eo2",
        "geotessera.multi_year"
      ]
    },
    {
      "key": "climate_archetype_triple@1",
      "purpose": "12-class Köppen-Geiger classifier with per-encoder centroids seeded from Beck et al. 2018 type localities.",
      "encoders": [
        "clay_v1",
        "prithvi_eo2",
        "geotessera.multi_year"
      ]
    },
    {
      "key": "coastal_erosion_triple@1",
      "purpose": "Coastline-clamped consensus: bathymetry clamp restricts execution to active-coastline cells (-5 m ≤ depth ≤ +5 m).",
      "encoders": [
        "clay_v1",
        "prithvi_eo2",
        "geotessera.multi_year",
        "gmrt.topobathy_mean"
      ]
    }
  ],
  "ask_intents": {
    "_purpose": "When /v1/ask classifies the question as Similarity or Change, the response carries a `foundation_embeddings` envelope with per-encoder neighbour lists and cross-encoder consensus voting. Additive: non-matching questions keep the topic-router scalar response.",
    "similarity": [
      "find places like",
      "places like",
      "similar to",
      "looks like",
      "where else",
      "analog of",
      "look-alike",
      "comparable to"
    ],
    "change": [
      "what changed",
      "year over year",
      "since last year",
      "deforestation",
      "forest loss",
      "new construction",
      "urban expansion",
      "wetland change",
      "coastline change",
      "coastal erosion",
      "anomaly"
    ]
  },
  "honest_limits": [
    "No commercial sub-meter imagery: Sentinel-2 (10 m) is the finest native pitch wired today.",
    "No edge / onboard inference.",
    "Single-host deployment: no federation, no global routing, no SOC 2.",
    "JEPA v2 dynamics is untrained; the endpoint short-circuits to the last attested vintage and signs the receipt with `untrained_baseline`.",
    "Tessera multi-vintage coverage is upstream-rate-limited; only 2024 reliably serves today.",
    "Some declared bands have no registered materializer at this responder and appear under `declared_but_no_materializer_at_this_responder`."
  ],
  "agent_first_design": {
    "discoverable_via": [
      "/openapi.json",
      "/mcp",
      "/v1/agent_card",
      "/v1/tools",
      "/.well-known/emem.json",
      "/llms.txt"
    ],
    "signed_receipts": true,
    "signed_absence": true,
    "in_browser_verify": true,
    "auto_materialize_on_miss": true,
    "no_keys_required": true,
    "open_data_default": true,
    "every_tool_annotated_with_when_to_use": true,
    "every_algorithm_has_formula_and_citation": true
  },
  "mcp_tools": {
    "core": 14,
    "extended": 80,
    "total": 94
  },
  "mcp_resources": {
    "static": 18,
    "uri_templates": 8
  }
}
