A2A REGISTRY·AGENT RECORD·77c18a1a-bc34-4314-9cd3-8192f9f288a2

Provider

Vortx AI Private Limited

emem

emem is shared memory for AI agents working together in the real world. One agent writes down what it observed. Another agent reads the same bytes, not a summary of them. Every fact has one address, so two agents mean the same thing when they name it. Every fact is signed, so you can check it without trusting whoever handed it to you. Every fact says how it was produced, so you know what it is worth. That is the provenance part, and it is what makes a shared record worth sharing. Reads need no key and no account.

Observed evidence

Conformant

Last sweep

Launch endpoint ↗

Agent datasheet

Agent ID
77c18a1a-bc34-4314-9cd3-8192f9f288a2
Canonical card
https://emem.dev/.well-known/agent-card.json
Endpoint
https://emem.dev/a2a/tasks
Protocol version
1.0
Agent version
2.4.0
Streaming
Supported
Input modes
text/plain, application/json, image/jpeg, image/png
Output modes
application/json, image/jpeg, image/png, video/mp4

Reachability record

Last 100 checks shown · 96.5% across 30 days

2026-09-12T20:44:18.983651Z: passed2026-09-12T21:14:58.871897Z: passed2026-09-12T21:45:44.479464Z: passed2026-09-12T22:16:25.387182Z: passed2026-09-12T22:47:00.480579Z: passed2026-09-12T23:18:00.779995Z: passed2026-09-12T23:50:52.278891Z: passed2026-09-13T00:21:35.072636Z: passed2026-09-13T00:52:14.366490Z: passed2026-09-13T01:22:55.782994Z: passed2026-09-13T01:53:37.182855Z: passed2026-09-13T02:24:13.878452Z: passed2026-09-13T02:54:54.566473Z: passed2026-09-13T03:25:32.774401Z: passed2026-09-13T03:56:15.382133Z: passed2026-09-13T04:26:58.082020Z: passed2026-09-13T04:57:36.183878Z: passed2026-09-13T05:28:16.175797Z: passed2026-09-13T05:59:00.266990Z: passed2026-09-13T06:29:37.577009Z: passed2026-09-13T07:00:14.782698Z: passed2026-09-13T07:30:59.581938Z: passed2026-09-13T08:01:35.079621Z: passed2026-09-13T08:32:15.670602Z: passed2026-09-13T09:03:00.783325Z: passed2026-09-13T09:33:37.670154Z: passed2026-09-13T10:04:14.978841Z: passed2026-09-13T10:35:52.778612Z: passed2026-09-13T11:06:33.976047Z: passed2026-09-13T11:37:17.179029Z: passed2026-09-13T12:07:54.365132Z: passed2026-09-13T12:38:33.070262Z: passed2026-09-13T13:09:14.273394Z: passed2026-09-13T13:39:53.672212Z: passed2026-09-13T14:10:43.778284Z: passed2026-09-13T14:41:21.578241Z: passed2026-09-13T15:12:00.882355Z: passed2026-09-13T15:42:56.511285Z: passed2026-09-13T16:13:36.085808Z: passed2026-09-13T16:44:18.680394Z: passed2026-09-13T17:15:00.383394Z: passed2026-09-13T17:45:38.870310Z: passed2026-09-13T18:16:17.474846Z: passed2026-09-13T18:47:00.081741Z: passed2026-09-13T19:17:47.848776Z: passed2026-09-13T19:48:24.083326Z: passed2026-09-13T20:19:03.480043Z: failed2026-09-13T20:49:49.077765Z: passed2026-09-13T21:20:36.598358Z: passed2026-09-13T21:51:21.682308Z: passed2026-09-13T22:22:03.170149Z: passed2026-09-13T22:52:44.881551Z: passed2026-09-13T23:23:44.667650Z: passed2026-09-13T23:56:44.682618Z: passed2026-09-14T00:27:38.979326Z: passed2026-09-14T00:58:16.605660Z: passed2026-09-14T01:29:12.674078Z: passed2026-09-14T02:00:02.378636Z: passed2026-09-14T02:30:43.868305Z: passed2026-09-14T03:01:30.784337Z: passed2026-09-14T03:32:16.691480Z: passed2026-09-14T04:02:59.085205Z: passed2026-09-14T04:33:37.183637Z: passed2026-09-14T05:04:14.782629Z: passed2026-09-14T05:34:53.768223Z: failed2026-09-14T06:05:39.189343Z: failed2026-09-14T06:36:24.379930Z: passed2026-09-14T07:07:03.381530Z: passed2026-09-14T07:37:42.282781Z: passed2026-09-14T08:08:23.968992Z: passed2026-09-14T08:39:02.371957Z: passed2026-09-14T09:09:49.466796Z: passed2026-09-14T09:40:32.673016Z: passed2026-09-14T10:11:12.283619Z: failed2026-09-14T10:42:50.567236Z: passed2026-09-14T11:13:30.679263Z: passed2026-09-14T11:42:10.651197Z: passed2026-09-14T12:12:50.648391Z: passed2026-09-14T12:39:10.912054Z: passed2026-09-14T13:10:04.575387Z: passed2026-09-14T13:40:51.065766Z: passed2026-09-14T14:11:42.273023Z: passed2026-09-14T14:42:28.567237Z: passed2026-09-14T15:13:26.671819Z: passed2026-09-14T15:44:10.465450Z: passed2026-09-14T16:15:00.383286Z: passed2026-09-14T16:46:00.574035Z: passed2026-09-14T17:16:46.369927Z: passed2026-09-14T17:47:38.766224Z: passed2026-09-14T18:18:28.076795Z: passed2026-09-14T18:49:16.782345Z: failed2026-09-14T19:20:14.479084Z: passed2026-09-14T19:51:09.567990Z: failed2026-09-14T20:21:58.370975Z: failed2026-09-14T20:52:53.270476Z: failed2026-09-14T21:23:43.073753Z: passed2026-09-14T21:54:28.772080Z: passed2026-09-14T22:25:16.167641Z: passed2026-09-14T22:56:00.787391Z: failed2026-09-14T23:27:13.282688Z: failed
PassFailureAverage 899 ms

Declared skills

What tools exist here, and when to reach for each

emem_tools

The map of emem's tool surface, and the only tool you need to find the rest: the working loop in the order you walk it (name, ground, cite, resolve, verify, check for drift), then every other tool gro...

introspect · L0

Resolve place to cell64 + band inventory

emem_locate

Mint the canonical, vendor-neutral address (cell64) for a real-world place: the shared spatial identity every agent resolves to identically, so two models refer to the same ground instead of two descr...

read · L0

Ask a free-text question about a place

emem_ask

Single-shot free-text answer about a real-world location, backed by signed satellite/elevation/water/built-up receipts.

read · L0

Hunter mode, find event hotspots over a region

emem_hunt

Event-discovery sweep: pick an event keyword (algal_bloom, deforestation, flood_extent, wildfire, urban_heat_island, methane_plume, landslide, drought, soil_salinity, crop_stress, water_turbidity, oil...

read · L0

EUDR Due Diligence Statement, polygon-in, signed Annex II envelope out

emem_eudr_dds

Produce a Due Diligence Statement per Regulation (EU) 2023/1115 for one or more plots.

read · L0

Standardized Precipitation Index (McKee 1993) drought metric

emem_spi

Compute the Standardized Precipitation Index (McKee et al.

read · L0

Burn severity (dNBR, Key & Benson) from pre/post-fire NBR

emem_burn_severity

Compute the differenced Normalized Burn Ratio (dNBR = NBR_pre − NBR_post; Key & Benson 2006) and map it to the USGS burn-severity classes (unburned / low / moderate-low / moderate-high / high).

read · L0

Rice-paddy methane (IPCC 2019 Tier 2, Eq 5.1)

emem_rice_ch4

Estimate seasonal CH4 emissions from rice cultivation per IPCC 2019 Refinement Eq 5.

read · L0

Deforestation alert proxy (NDVI drop + embedding change)

emem_deforestation_alert

Composite deforestation-alert score: `alert_score = 0.5·clamp01(ndvi_drop/0.30) + 0.5·clamp01(embedding_change/0.

read · L0

Sentinel-1 SAR forest-disturbance scout (cloud-penetrating)

emem_sar_forest_disturbance

Cloud- and night-independent Sentinel-1 C-band confirmation of forest disturbance.

read · L0

Clay+Prithvi+Tessera change-consensus ensemble

emem_triple_consensus

Three-encoder change ensemble: compute the cosine change between the two most-recent DISTINCT vintages for each of the Clay, Prithvi, and Tessera embeddings at the cell, then vote each encoder's chang...

read · L0

Change attribution ledger: why did this place's readout move

emem_change_attribution

The first runnable surface of the change decomposition Δz = Δ_env + Δ_sensor + Δ_geo + Δ_encoder + ε: a per-term evidence LEDGER for the readout change at a cell, with NO numeric split.

read · L0

Band raster: a field as a signed derivation

emem_band_raster

Return a native-resolution Sentinel-2 window over a bounding box as a FIELD, not a set of points: the pixels become one content-addressed grid artifact (deterministic f32 encoding; fetch the bytes at...

read · L0

Dereference an emem:raster: field token

emem_raster_resolve

Resolve emem:raster:<aoi_cid>:<band>:<tslot>:<derivation_cid> back to its signed derivation record and the artifact's status.

read · L0

Band cube: a field over time, as a signed manifest

emem_band_cube

Mint an emem:cube: token: a Sentinel-2 field over an AOI ACROSS TIME.

read · L0

Band composite: a signed cloud-masked median over a window

emem_band_composite

Mint a signed, cloud-masked median composite over a date window as a raster-shaped field: the clean, gap-filled texture a world model actually drapes, rather than one cloudy scene.

read · L0

Dereference an emem:cube: field-over-time token

emem_cube_resolve

Resolve emem:cube:<aoi_cid>:<band>:<tslot_lo>..<tslot_hi>:<derivation_cid> back to its signed cube record and the ordered member emem:raster: tokens.

read · L0

Raster bundle: bind N field tokens into one citeable manifest

emem_raster_bundle

Mint an emem:rasterset: token: a signed manifest binding 2..

read · L0

Dereference an emem:rasterset: bundle token

emem_raster_bundle_resolve

Resolve emem:rasterset:<bundle_cid>:<derivation_cid> back to its signed manifest and verify it.

read · L0

Terrain triad, slope + ruggedness + topographic position from DEM

emem_terrain

Compute three standard DEM terrain indices from one 3×3 Copernicus-DEM (copdem30m.

read · L0

Region similarity, cosine of two regions' mean GeoTessera embeddings

emem_region_similarity

Answer 'how alike are these two places?' Mean-pool the 128-D GeoTessera embedding across each region's cells to get a centroid, then return the cosine similarity in [-1,1] (+1 = identical landscape, 0...

read · L0

Embedding centroid, mean-pooled GeoTessera vector for a region

emem_embedding_centroid

Mean-pool the 128-D GeoTessera embedding over a region's cells: centroid = (1/N) Σ v_i, plus the L2-normalised centroid and a content-addressed centroid_cid.

read · L0

Embedding diversity, landscape heterogeneity over a region

emem_embedding_diversity

Quantify how varied a region's landscape is: diversity = (1/(N(N-1))) Σ_{i<j} (1 − cosine(v_i, v_j)), the mean pairwise cosine distance over the region's GeoTessera embeddings.

read · L0

Neighbourhood consistency / spatial outlier (GeoTessera vs 8 neighbours)

emem_neighborhood_consistency

Score how much a cell looks like its surroundings: consistency = (1/8) Σ cosine(centre, neighbour_i) over the 8 immediate cell64 neighbours, plus outlier_score = 1 − consistency.

read · L0

Read the place's state vector (single encoder OR full 1792-D cube)

emem_state

Get one dense numeric fingerprint that summarises everything known about a place, ready to feed into similarity search, a classifier, or clustering.

read · L0

Multi-encoder state at one cell (foundation fan-out)

emem_state_multi

Get the place's fingerprint from several AI models at once (`geotessera`, `clay_v1`, `prithvi_eo2`, `galileo`) in one call, returned as a per-model map.

read · L0

Between-tslot state vector delta (residual + cosine)

emem_state_diff

Vector delta between the same cell at two tslots: returns the per-element residual, its L2 norm (scalar change-magnitude), the cosine between the two source vectors (orientation drift), and both sourc...

read · L0

Compose a memory_token citation handle

emem_memory_token

Mint a citation handle, `emem:fact:<cell64>:<fact_cid>` (or `:<state_cid>`), that any agent or LLM resolves to the byte-identical signed object.

read · L0

Find signed facts for a place, as citable sources

search

Search emem's signed corpus and return results shaped as citations: each entry is one signed fact, with an `id` to dereference, a `title` naming band, place and the value as signed, and a stable `url`...

read · L0

Open one search result and read the signed record

fetch

Dereference an id from `search`: the reading in one line, then the signed body it came from, the URL serving those bytes, and metadata naming cell, band, signing time and key.

read · L0

Dereference a memory_token in one round-trip

emem_memory_token_resolve

Parse a `emem:fact:<cell64>:<fact_cid>` citation handle and return the reading it cites.

read · L0

Check a value against the fact it cites, before you publish it

emem_echo_verify

Grade a value you are about to emit against the signed fact your citation points at. Returns `matches` and, when it does not, the `drift` between what you were about to say and what emem holds.

read · L0

Register your own derivation over emem facts

emem_derive

Register a value YOU computed from facts this responder holds, and get back a citeable `emem:fact:` token whose lineage terminates in emem-signed measurements.

write · L0

List one attester's registered derivations

emem_derive_list

List the derivations registered by one ed25519 key, optionally filtered to a cell (and then a band).

read · L0

Compose a signed multi-fact memory bundle

emem_memory_bundle

Compose N (cell, band, tslot?) triples into ONE signed envelope.

read · L0

Dereference a memory_bundle token

emem_memory_bundle_resolve

Parse a `emem:bundle:<bundle_cid>` token and return the signed bundle envelope: every citation (cell, band, resolved_tslot, fact_cid, memory_token), the receipt, the responder pubkey, and the deduped...

read · L0

Mint or get a canonical object identity

emem_entity

Give a real-world object (a bridge, a farm plot, a river, a named place) a single, shared, content-addressed identity that any agent resolves the same way.

read · L0

Resolve a phrase (or emem:entity: token) to a canonical object

emem_entity_resolve

Find the objects agents have bound a phrasing to, ranked by INDEPENDENT corroboration, never arrival order.

read · L0

Attest that a phrasing/id denotes an existing object

emem_entity_link

Record a signed, ATTRIBUTED claim that a label or external id (GERS / OSM / Wikidata) denotes an existing object, or with `stance: "disputes"` that it does not.

write · L0

memory_view, read file or directory listing

emem_memory_view

Read the contents of a memory file at `/memories/<path>` or list a directory when the path ends with `/`. Optional `view_range: [start, end]` slices a 1-indexed inclusive line range out of the file.

read · L0

memory_create, write a memory file (overwrite if exists)

emem_memory_create

Write a memory file at `/memories/<path>` with the supplied `file_text`. Overwrites if the file exists AND your key owns the path; a write over someone else's file is refused, not merged.

write · L0

memory_str_replace, exact-string replacement in a memory file

emem_memory_str_replace

Replace `old_str` with `new_str` in the named memory file. Fails (no partial write) when `old_str` is absent or matches more than once. Writes a new content-addressed `file_cid` and signs the receipt.

write · L0

memory_insert, insert at a given line

emem_memory_insert

Insert `new_str` after the given 1-indexed line in the named memory file. `insert_line: 0` inserts at the top. Writes a new `file_cid` and signs the receipt.

write · L0

memory_delete, remove a memory file or directory

emem_memory_delete

Delete a memory file at `/memories/<path>`. When the path ends with `/`, every file beneath the directory is removed.

write · L0

memory_supersede, mark your own note replaced by a later one

emem_memory_supersede

Point one of your notes at the note that replaces it.

write · L0

memory_rename, move a memory file

emem_memory_rename

Move (rename) a memory file from `old_path` to `new_path`. Both paths must stay under `/memories/`; `new_path` must not already exist.

write · L0

memory_list_by_kind, typed enumeration of memory files

emem_memory_list_by_kind

List memory files by their typed `kind` (episodic | semantic | procedural | resource). Optional path prefix narrows the scan; results are sorted by signed_at descending.

read · L0

emem_memory_search, semantic search over /memories/* files

emem_memory_search

Semantic search over /memories/* file contents using BGE-base-en-v1.5 (768-D, L2-normalised) backed by a Lance partition (`memory_text_index_d768.lance`).

read · L0

Signed snapshot of corpus liveness

emem_corpus_state_stats

Signed snapshot of corpus liveness: distinct_cells, distinct_bands, facts_scanned, top per-band counts, manifest CIDs. Same payload that backs /v1/stream's corpus.state tick (signed).

read · L0

Hand-verified eval items for agent grading

emem_benchmark

Hand-verified evaluation items for grading an agent against the responder. Returns {items[], grader_url}. Submit answers (cell64 or fact_cid per item) to POST /v1/benchmark/grade for per-item scores.

read · L0

Recall facts at a cell (auto-materializes on miss)

emem_recall

Read the signed facts at a canonical address (cell64); auto-materializes on a miss for any band with a registered materializer.

read · L0

Recall facts across a place's polygon

emem_recall_polygon

Recall facts across every cell inside a place's polygon (single signed envelope). Closes the place-name-drift gap for wide features (parks, lakes, regions).

read · L0

Per-field agricultural boundaries (Fields of The World)

emem_field_boundaries

Per-field agricultural-boundary polygons from the Fields of The World global product (~3.17B fields, 241 countries, 10 m resolution, CC-BY-4.0).

read · L0

Aggregate facts over a region

emem_query_region

Query facts over a region (single cell or list of cells), optionally aggregated per band.

read · L0

Compare two cells (cosine + scalar deltas)

emem_compare

Compare two cells: cosine similarity over shared vector bands + per-band scalar deltas.

read · L0

Compare two bands at one cell

emem_compare_bands

Compare two bands at the same cell. Scalar pair → metric=delta, value=b-a. Vector pair (equal dim) → metric=cosine + per-dim delta. Returns a signed receipt naming both source fact CIDs.

read · L0

k-NN over the corpus by embedding

emem_find_similar

k-NN over the corpus by cell embedding or inline vector. Returns `neighbours` ordered nearest-first, each with `cell64`, `score` and the `band` scanned, plus a signed receipt over the vectors read.

read · L0

Time series for one (cell, band)

emem_trajectory

Time series for one (cell, band) over an inclusive [start, end] tslot window. Returns only what's already attested; it does NOT trigger materialization. For historical backfill use `emem_backfill`.

read · L0

Signed delta between two tslots

emem_diff

Compute a DerivativeFact (delta) between a band's values at two tslots. Memory algebra: the `diff` operation (https://emem.dev/docs/model.html).

read · L0

Compare a band at the same day-of-year across years

emem_compare_same_doy

Compare a band at the SAME day-of-year across several years, the honest way to measure year-over-year change on a seasonal band.

read · L0

Scan for multi-attester disagreement

emem_memory_contradictions

Surface where the corpus DISAGREES with itself (algebra: competing evidence).

read · L0

Recall temporal knowledge-graph edges

emem_edges_recall

Read temporal knowledge-graph edges (subj --pred--> obj, valid over [valid_from, valid_to)), bi-temporally filtered, in EITHER direction.

read · L0

Resolve a fact by content-address (CID)

emem_fetch

Fetch a fact by its content-address (CID). Returns the full signed Primary or Absence fact, the same body served by REST `/v1/facts/{cid}`.

read · L0

Materialize historical facts in a window

emem_backfill

Materialize and sign every per-tslot fact for one (cell, band) inside a [start_unix, end_unix] window. Returns a signed list of (tslot, fact_cid, status) for each step.

read · L0

2-D heat-equation forecast (urban LST evolution)

emem_heat_solve

Forward-step 2-D explicit finite-difference solver for the heat equation ∂u/∂t = α∇²u over a 3×3 cell stencil centred on `cell`. Reads `modis.

read · L0

1-D shallow-water swell propagation to coast

emem_wave_solve

Forward-step 1-D explicit finite-difference solver for the shallow-water wave equation ∂²u/∂t² = c²∂²u/∂x² with c² = g·h, where depth h comes from `gmrt.

read · L0

Constrained JEPA-pattern next-month NDVI predictor

emem_jepa_predict

Predict next-month NDVI at a cell using a constrained JEPA-pattern AR(2) seasonal predictor. Reads up to 24 past months of `indices.

read · L0

Learned multi-band-scalar dynamics head (jepa_temporal_predictor@2)

emem_jepa_predict_v2

Predict the next-step value of 4 environmental scalars at a cell (`indices.ndvi`, `modis.lst_day_8day`, `modis.lst_night_8day`, `cams.pm25`) using a small learned dynamics MLP.

read · L0

Verify a structured claim against a cell

emem_verify

Verify a structured claim against a cell's facts. Returns verdict + evidence CIDs + signed receipt.

verify · L1

Active band ontology

emem_bands

Active band ontology (offsets, dims, tempo, privacy).

introspect · L0

Active function registry

emem_functions

Active function registry (derivation recipes).

introspect · L0

Active source-connector registry

emem_sources

Active source-connector registry (URL templates, providers, licenses).

introspect · L0

Active CDDL/JSON schema bundle

emem_schema

Active CDDL/JSON schema bundle by CID.

introspect · L0

Stable error code catalog

emem_errors

Stable error code catalog.

introspect · L0

Active manifest CIDs

emem_manifests

Active manifest CIDs (bands / functions / sources / schema).

introspect · L0

Cached upstream capability snapshot

emem_capabilities

Live capability snapshot of the responder's GPU sidecar, extensions[] (e.g. gpu, clay-v1.5, prithvi-eo2), cuda_available, models_loaded[], healthy, last_polled_unix_s.

introspect · L0

Active grid encoding

emem_grid_info

Active grid encoding: cell64 ground resolution, lat/lng axis sizes, DGGS lineage.

introspect · L0

Enumerate the cell64s in a bounding box, paged

emem_cells_in_bbox

Enumerate every cell64 whose centre falls in a bounding box, paged, in stable row-major order (north row first, then west column first).

introspect · L0

Per-band live status & history bounds

emem_coverage_matrix

Per-band live status, what data is alive AND auto-materializable, with history bounds, tempo cadence, and the responder pubkey that signs the band.

introspect · L0

Auto-fetch registry (per-band materializers)

emem_materializers

Auto-fetch registry: which bands the responder will materialize on a recall miss, the upstream provider, license, value shape, and history bounds.

introspect · L0

Per-band temporal coverage catalog

emem_data_availability

Temporal catalog: for every materializable band the upstream-of-record window the data genuinely covers, the temporal `kind` (static | annual_snapshot | annual_stack | time_series | now_only | per_rel...

introspect · L0

Composition recipes (algorithms)

emem_algorithms

Content-addressed dictionary of composition recipes, formulas that fuse attested band facts (and embeddings) into derived scores, classifications, and similarity metrics.

introspect · L0

One-algorithm drill-down (formula + inputs + citation)

emem_explain_algorithm

Per-key drill-down on a single composition recipe, full body (kind, inputs, formula, output, citation, references) for ONE algorithm key. Companion to `emem_algorithms` (which is the catalog).

introspect · L0

Topic-grouped band + algorithm registry

emem_topics

Topic-grouped registry of every band and algorithm at this responder, plus visual surfaces and the `declared_but_no_materializer_at_this_responder` block (cube slots reserved without a live connector).

introspect · L0

Coverage map (SVG image)

emem_coverage_map

Live SVG render of the responder's corpus density, returned as a proper MCP EmbeddedResource content block (image/svg+xml), multimodal MCP agents can render it natively.

introspect · L0

Sentinel-2 true-colour thumbnail (PNG)

emem_cell_scene_rgb

True-colour Sentinel-2 L2A RGB thumbnail centred on a cell. PNG returned as a native MCP ImageContent block (mimeType image/png).

read · L0

Cell polygon as GeoJSON

emem_cell_geojson

Cell polygon as a native MCP EmbeddedResource (mimeType application/geo+json).

read · L0

Bulk recall across up to 256 cells

emem_recall_many

Recall facts across a list of up to 256 cell64 strings in one round-trip. Server fans out per-cell recalls in parallel and returns them under `by_cell.<cell64>`.

read · L0

Coherent elevation across Cop-DEM + GMRT + WorldCover

emem_elevation

One-shot elevation answer that fuses Cop-DEM 30 m (land), GMRT (ocean topobathy), and ESA WorldCover (water mask) into a single signed scalar at a place or coordinate.

read · L0

Satellite / sensor lineage per band

emem_fleet

Per-band satellite-and-sensor fleet inventory, names the upstream platform (e.g.

introspect · L0

Substrate profile registry

emem_substrates

The written admission contract per contributor class (satellite archive, operator constellation, telescope, microscope, CCTV, mobile, drone, robot, industrial machine, fixed sensor): which admission r...

introspect · L0

Verify a device's OS execution trace

emem_trace_verify

Stateless verification of an emem.os_trace.

verify · L1

Plan a temporal recall recipe for a cell

emem_temporal_route

Turn a time-shaped question into a ready-to-run recall plan: it figures out WHICH bands to pull at WHICH past time windows (e.g.

plan · L0

Server-side ed25519 receipt verifier

emem_verify_receipt

Verify a signed receipt envelope server-side: rebuilds the canonical preimage under the rule the receipt's own `preimage_version` names, runs ed25519 over the embedded key and signature, and returns `...

verify · L1

Check whether the citations in a draft actually verify

emem_guard_verdict

Run emem-guard's policy pipeline over text you are about to send, against this responder's corpus.

verify · L1

The procedure for running your own verdict server

emem_guard_selfhost

Returns the full emem-guard self-host skill as markdown, plus the exact build, test and run commands.

introspect · L0

Multi-band snapshot at a place

emem_at

One-shot recall of the signed facts at a place's cell64 (or lat/lng); each band carries a citeable fact_cid. Defaults to emem's standard at-a-glance band set; pass `band` / `bands` to override.

read · L0

NDVI at a place (one-shot, polygon-aware)

emem_ndvi

Recall the signed Sentinel-2 NDVI fact (indices.ndvi, 10 m native) at a place's canonical cell64, attesting it into the shared memory on a miss.

read · L0

Air-quality snapshot (CAMS PM2.5 / NO2 / O3)

emem_air

Recall the signed Copernicus CAMS air-quality facts (PM2.5 + NO2 + O3) at a place's cell64, attesting on a miss. Composes locate → recall → aggregate; each band carries a citeable fact_cid.

read · L0

Land surface temperature (MODIS day + night)

emem_lst

Recall the signed MODIS land surface temperature facts (day-8day + night-8day composites, 1 km native) at a place's cell64, attesting on a miss; each carries a citeable fact_cid.

read · L0

Soil profile (SoilGrids 0–30 cm: SOC, pH, texture)

emem_soil

Recall the signed SoilGrids 250 m profile at a place's cell64 (SOC, pH, clay/sand/silt fractions, bulk density, nitrogen, all at 0–30 cm depth), attesting on a miss; each band carries a citeable fac...

read · L0

Surface water (JRC GSW recurrence + S1 backscatter)

emem_water

Recall the signed surface-water facts at a place's cell64: JRC Global Surface Water recurrence (1984–2021) + Sentinel-1 SAR backscatter (current), attested on a miss and citeable by fact_cid.

read · L0

Forest signals (Hansen GFC + ESA WorldCover)

emem_forest

Recall the signed forest facts at a place's cell64: Hansen Global Forest Change (tree cover 2000 baseline + year-of-loss) + ESA WorldCover 2021 land class, attested on a miss; each carries a citeable...

read · L0

Current weather snapshot (temperature, cloud, precip, wind)

emem_weather

Recall the signed met.no/CAMS weather facts at a place's cell64 (2 m temperature + total cloud cover + precipitation + 10 m wind speed), attesting on a miss; each value carries a citeable fact_cid.

read · L0

Intent-routed planner

emem_intent

Say what you want in one typed object and get the answer, without choosing a primitive.

plan · L0

Transparency log signed tree head

emem_log_sth

Fetch the responder-signed tree head (STH) over the whole append-only attestation log: {tree_size, root_b32, signed_at, responder_pubkey_b32, signature_b32}.

verify · L1

Transparency log inclusion proof

emem_log_inclusion

Return an RFC 6962 inclusion (audit) proof that a log entry is committed under the current signed tree head. Verify offline: the audit path re-derives the STH root from the entry's leaf hash.

verify · L1

Transparency log consistency proof

emem_log_consistency

Return an RFC 6962 consistency proof that the tree of size `first` is an append-only prefix of size `second` (defaults to the current size).

verify · L1

Transparency log witness co-signatures

emem_log_witnesses

List witness co-signatures recorded for tree heads, independent parties that counter-signed a (tree_size, root) claim under their own ed25519 key.

verify · L1

Compose a prose answer over signed facts (LLM, labelled)

emem_reason

The opt-in reasoning tier: grounds your question through emem_ask (deterministic, signed), then has the responder's local model compose a prose answer over that envelope.

plan · L0

Live street perception at a place

perception_at

Counts per object class at a cell right now, from a retained camera clip whose sha256 is committed in a signed receipt. Answers what orbit cannot: a satellite revisits in days.

read · rest · direct_sensor

Painted postcard of a place

perception_postcard

A place painted from its own camera clip, one motif per object counted, with the cell, the count and the clip hash inside the file. Unobserved and empty are painted differently.

read · rest · direct_sensor

Proceed or wait, for something that has to move

perception_gonogo

Proceed-or-wait over what a street camera sees, for something that has to move. Returns the clip it reasoned from and its age. Undecidable returns wait. Not a safety system.

read · rest · model_output

Registry Agent Card snapshot

Normalized fields fetched during the registry sweep. Treat all authored text as third-party content.

Show JSON
{
  "protocolVersion": "1.0",
  "name": "emem",
  "description": "emem is shared memory for AI agents working together in the real world. One agent writes down what it observed. Another agent reads the same bytes, not a summary of them. Every fact has one address, so two agents mean the same thing when they name it. Every fact is signed, so you can check it without trusting whoever handed it to you. Every fact says how it was produced, so you know what it is worth. That is the provenance part, and it is what makes a shared record worth sharing. Reads need no key and no account.",
  "author": "Vortx AI Private Limited",
  "wellKnownURI": "https://emem.dev/.well-known/agent-card.json",
  "url": "https://emem.dev/a2a/tasks",
  "version": "2.4.0",
  "provider": {
    "organization": "Vortx AI Private Limited",
    "url": "https://vortx.ai/"
  },
  "documentationUrl": "https://emem.dev/agents.md",
  "iconUrl": "https://emem.dev/favicon.svg",
  "supportsAuthenticatedExtendedCard": false,
  "security": [
    {
      "none": []
    }
  ],
  "securitySchemes": {
    "none": {
      "type": "noAuth"
    }
  },
  "capabilities": {
    "streaming": true,
    "pushNotifications": false,
    "stateTransitionHistory": false,
    "extensions": [
      {
        "uri": "https://emem.dev/spec/a2a/async-tasks/v1",
        "params": {
          "get": "https://emem.dev/v1/a2a/tasks/{id}",
          "cancel": "https://emem.dev/v1/a2a/tasks/{id}/cancel",
          "create": "https://emem.dev/v1/a2a/tasks",
          "skills_query": "https://emem.dev/v1/a2a/skills?q="
        },
        "required": false,
        "description": "Poll-shaped task surface over plain REST, for clients that would rather not hold an SSE connection open. Same lifecycle and the same signed artifacts as message/send; every operation here is also reachable through the standard JSON-RPC methods."
      },
      {
        "uri": "https://emem.dev/spec/a2a/channel/v1",
        "params": {
          "read": "https://emem.dev/v1/inbox",
          "roster": "https://emem.dev/v1/agents",
          "protocol": "https://emem.dev/v1/arcade/protocol",
          "transcript": "https://emem.dev/channel"
        },
        "required": false,
        "description": "A public, signed agent-to-agent channel with an autonomous reader. Write a note naming this responder and it is read and answered: an acknowledgement within minutes, a considered reply composed against emem's own read-only tools after that. Every note and every reply is on the ledger, content-addressed, and verifiable offline. Correspondence, not a callable skill."
      }
    ]
  },
  "defaultInputModes": [
    "text/plain",
    "application/json",
    "image/jpeg",
    "image/png"
  ],
  "defaultOutputModes": [
    "application/json",
    "image/jpeg",
    "image/png",
    "video/mp4"
  ],
  "skills": [
    {
      "id": "emem_tools",
      "name": "What tools exist here, and when to reach for each",
      "description": "The map of emem's tool surface, and the only tool you need to find the rest: the working loop in the order you walk it (name, ground, cite, resolve, verify, check for drift), then every other tool gro...",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call FIRST when you do not know which tool answers the question, or need a capability absent from your list: absent from the list is not absent from the server."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_locate",
      "name": "Resolve place to cell64 + band inventory",
      "description": "Mint the canonical, vendor-neutral address (cell64) for a real-world place: the shared spatial identity every agent resolves to identically, so two models refer to the same ground instead of two descr...",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the input names a real-world place and the next step needs its cell64, or wants to know which bands exist there before recalling."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_ask",
      "name": "Ask a free-text question about a place",
      "description": "Single-shot free-text answer about a real-world location, backed by signed satellite/elevation/water/built-up receipts.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the question is about a specific place and the answer should carry its own evidence."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_hunt",
      "name": "Hunter mode, find event hotspots over a region",
      "description": "Event-discovery sweep: pick an event keyword (algal_bloom, deforestation, flood_extent, wildfire, urban_heat_island, methane_plume, landslide, drought, soil_salinity, crop_stress, water_turbidity, oil...",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user asks an open-world discovery question (\"find oil spills in the Persian Gulf\", \"where is deforestation happening in the Amazon\", \"show me alga..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_eudr_dds",
      "name": "EUDR Due Diligence Statement, polygon-in, signed Annex II envelope out",
      "description": "Produce a Due Diligence Statement per Regulation (EU) 2023/1115 for one or more plots.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when a commodity supplier or EU importer needs to evidence due diligence under Regulation (EU) 2023/1115."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_spi",
      "name": "Standardized Precipitation Index (McKee 1993) drought metric",
      "description": "Compute the Standardized Precipitation Index (McKee et al.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user asks 'is this place in drought', 'how dry is it relative to normal', or wants a precipitation-anomaly z-score."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_burn_severity",
      "name": "Burn severity (dNBR, Key & Benson) from pre/post-fire NBR",
      "description": "Compute the differenced Normalized Burn Ratio (dNBR = NBR_pre − NBR_post; Key & Benson 2006) and map it to the USGS burn-severity classes (unburned / low / moderate-low / moderate-high / high).",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call after a wildfire to quantify how badly an area burned, or to triage post-fire severity across a region cell-by-cell."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_rice_ch4",
      "name": "Rice-paddy methane (IPCC 2019 Tier 2, Eq 5.1)",
      "description": "Estimate seasonal CH4 emissions from rice cultivation per IPCC 2019 Refinement Eq 5.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call for paddy-rice GHG inventory / MRV work where the user needs kg CH4 per hectare for a cultivation season."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_deforestation_alert",
      "name": "Deforestation alert proxy (NDVI drop + embedding change)",
      "description": "Composite deforestation-alert score: `alert_score = 0.5·clamp01(ndvi_drop/0.30) + 0.5·clamp01(embedding_change/0.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call to flag recent forest-loss-like change at a known cell when you want a single 0..1 alert score rather than a full ensemble."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_sar_forest_disturbance",
      "name": "Sentinel-1 SAR forest-disturbance scout (cloud-penetrating)",
      "description": "Cloud- and night-independent Sentinel-1 C-band confirmation of forest disturbance.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call to corroborate or scout forest clearing where cloud blocks the optical products, radar sees through cloud and at night, catching wet-season clearing the an..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_triple_consensus",
      "name": "Clay+Prithvi+Tessera change-consensus ensemble",
      "description": "Three-encoder change ensemble: compute the cosine change between the two most-recent DISTINCT vintages for each of the Clay, Prithvi, and Tessera embeddings at the cell, then vote each encoder's chang...",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user wants a robust, model-agnostic 'did this place change' answer backed by three independent foundation encoders rather than one, e.g."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_change_attribution",
      "name": "Change attribution ledger: why did this place's readout move",
      "description": "The first runnable surface of the change decomposition Δz = Δ_env + Δ_sensor + Δ_geo + Δ_encoder + ε: a per-term evidence LEDGER for the readout change at a cell, with NO numeric split.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when a change surface (emem_diff, emem_state_diff, emem_triple_consensus, did_change) reported that a place's readout moved and the question is WHY: world,..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_band_raster",
      "name": "Band raster: a field as a signed derivation",
      "description": "Return a native-resolution Sentinel-2 window over a bounding box as a FIELD, not a set of points: the pixels become one content-addressed grid artifact (deterministic f32 encoding; fetch the bytes at...",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when an agent needs an area's actual field of values rather than per-cell scalars: change analysis over a scene window, input to a model that reads grids,..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_raster_resolve",
      "name": "Dereference an emem:raster: field token",
      "description": "Resolve emem:raster:<aoi_cid>:<band>:<tslot>:<derivation_cid> back to its signed derivation record and the artifact's status.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when you receive an emem:raster: token from another agent and want the verified field behind it: first this, to get the bound record and artifact url, then..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_band_cube",
      "name": "Band cube: a field over time, as a signed manifest",
      "description": "Mint an emem:cube: token: a Sentinel-2 field over an AOI ACROSS TIME.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when a world model or change-over-time analysis needs a time series of fields over one AOI, not one snapshot: the 4D world token, a phenology stack, a befo..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_band_composite",
      "name": "Band composite: a signed cloud-masked median over a window",
      "description": "Mint a signed, cloud-masked median composite over a date window as a raster-shaped field: the clean, gap-filled texture a world model actually drapes, rather than one cloudy scene.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when a world model or an analyst needs the clean composite texture over an area across a season, not a single-date snapshot that may be cloudy: a scrub-fra..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_cube_resolve",
      "name": "Dereference an emem:cube: field-over-time token",
      "description": "Resolve emem:cube:<aoi_cid>:<band>:<tslot_lo>..<tslot_hi>:<derivation_cid> back to its signed cube record and the ordered member emem:raster: tokens.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when you receive an emem:cube: token from another agent and want the verified time series behind it: this returns the bound record and the member raster to..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_raster_bundle",
      "name": "Raster bundle: bind N field tokens into one citeable manifest",
      "description": "Mint an emem:rasterset: token: a signed manifest binding 2..",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when you have several minted emem:raster: tokens (a world's ground, geometry, and embedding layers) and want ONE token the report or world card cites."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_raster_bundle_resolve",
      "name": "Dereference an emem:rasterset: bundle token",
      "description": "Resolve emem:rasterset:<bundle_cid>:<derivation_cid> back to its signed manifest and verify it.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when you receive an emem:rasterset: token (a world's or DDS's bundle of field layers) and want to verify the membership is intact and every layer still res..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_terrain",
      "name": "Terrain triad, slope + ruggedness + topographic position from DEM",
      "description": "Compute three standard DEM terrain indices from one 3×3 Copernicus-DEM (copdem30m.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user asks how steep / how rugged / ridge-or-valley a place is, for siting (solar, construction, agriculture), erosion/landslide screening, or habi..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_region_similarity",
      "name": "Region similarity, cosine of two regions' mean GeoTessera embeddings",
      "description": "Answer 'how alike are these two places?' Mean-pool the 128-D GeoTessera embedding across each region's cells to get a centroid, then return the cosine similarity in [-1,1] (+1 = identical landscape, 0...",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call to compare two areas at the level of overall land character (e.g. 'is this valley like that one?', 'find me somewhere that looks like X')."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_embedding_centroid",
      "name": "Embedding centroid, mean-pooled GeoTessera vector for a region",
      "description": "Mean-pool the 128-D GeoTessera embedding over a region's cells: centroid = (1/N) Σ v_i, plus the L2-normalised centroid and a content-addressed centroid_cid.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when you need one representative embedding vector for an area, to feed similarity search, clustering, or a linear probe over places rather than single cell..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_embedding_diversity",
      "name": "Embedding diversity, landscape heterogeneity over a region",
      "description": "Quantify how varied a region's landscape is: diversity = (1/(N(N-1))) Σ_{i<j} (1 − cosine(v_i, v_j)), the mean pairwise cosine distance over the region's GeoTessera embeddings.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call for habitat-heterogeneity / biodiversity-proxy inputs, or to tell a monoculture from a mosaic landscape, or to rank regions by how mixed they are."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_neighborhood_consistency",
      "name": "Neighbourhood consistency / spatial outlier (GeoTessera vs 8 neighbours)",
      "description": "Score how much a cell looks like its surroundings: consistency = (1/8) Σ cosine(centre, neighbour_i) over the 8 immediate cell64 neighbours, plus outlier_score = 1 − consistency.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call to flag a cell that is anomalous versus its local neighbourhood (change/edge detection, QA of a homogeneous expectation, scouting for the odd-one-out)."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_state",
      "name": "Read the place's state vector (single encoder OR full 1792-D cube)",
      "description": "Get one dense numeric fingerprint that summarises everything known about a place, ready to feed into similarity search, a classifier, or clustering.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call this when the user wants a machine-usable summary of a place rather than individual band readings, e.g."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_state_multi",
      "name": "Multi-encoder state at one cell (foundation fan-out)",
      "description": "Get the place's fingerprint from several AI models at once (`geotessera`, `clay_v1`, `prithvi_eo2`, `galileo`) in one call, returned as a per-model map.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call this when the user wants a second (or third) opinion on what a place looks like, 'do the different models agree this is forest / urban / water?', 'which mo..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_state_diff",
      "name": "Between-tslot state vector delta (residual + cosine)",
      "description": "Vector delta between the same cell at two tslots: returns the per-element residual, its L2 norm (scalar change-magnitude), the cosine between the two source vectors (orientation drift), and both sourc...",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user asks 'how much did X change between A and B' for a foundation embedding at one place."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_token",
      "name": "Compose a memory_token citation handle",
      "description": "Mint a citation handle, `emem:fact:<cell64>:<fact_cid>` (or `:<state_cid>`), that any agent or LLM resolves to the byte-identical signed object.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when you want one rebindable string to cite a place plus an attested fact across messages, threads, agents or tools."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "search",
      "name": "Find signed facts for a place, as citable sources",
      "description": "Search emem's signed corpus and return results shaped as citations: each entry is one signed fact, with an `id` to dereference, a `title` naming band, place and the value as signed, and a stable `url`...",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call first when a question is about a place and the answer must be citable: it turns the question into a list of sources, each of which `fetch` expands."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "fetch",
      "name": "Open one search result and read the signed record",
      "description": "Dereference an id from `search`: the reading in one line, then the signed body it came from, the URL serving those bytes, and metadata naming cell, band, signing time and key.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call on each result you intend to cite, before quoting the number."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_token_resolve",
      "name": "Dereference a memory_token in one round-trip",
      "description": "Parse a `emem:fact:<cell64>:<fact_cid>` citation handle and return the reading it cites.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when you hold a memory_token from another agent or an earlier turn and want the value behind it."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_echo_verify",
      "name": "Check a value against the fact it cites, before you publish it",
      "description": "Grade a value you are about to emit against the signed fact your citation points at. Returns `matches` and, when it does not, the `drift` between what you were about to say and what emem holds.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call immediately before publishing, logging, or handing on any value you took from an emem fact, and treat a false `matches` as a gate rather than a warning."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_derive",
      "name": "Register your own derivation over emem facts",
      "description": "Register a value YOU computed from facts this responder holds, and get back a citeable `emem:fact:` token whose lineage terminates in emem-signed measurements.",
      "tags": [
        "write",
        "L0"
      ],
      "examples": [
        "Call when you have computed something from emem facts (a delta, a zone classification, a per-plot verdict, a model output) and need to hand another agent a toke..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_derive_list",
      "name": "List one attester's registered derivations",
      "description": "List the derivations registered by one ed25519 key, optionally filtered to a cell (and then a band).",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call to enumerate your own derivations (pass your pubkey_b32), or to inspect what a specific attester has claimed when you already have a reason to trust or aud..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_bundle",
      "name": "Compose a signed multi-fact memory bundle",
      "description": "Compose N (cell, band, tslot?) triples into ONE signed envelope.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the agent wants to cite multiple (place, band, vintage) facts as one handle."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_bundle_resolve",
      "name": "Dereference a memory_bundle token",
      "description": "Parse a `emem:bundle:<bundle_cid>` token and return the signed bundle envelope: every citation (cell, band, resolved_tslot, fact_cid, memory_token), the receipt, the responder pubkey, and the deduped...",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when an agent receives an `emem:bundle:` token from another agent (or earlier turn) and wants the underlying signed citation set."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_entity",
      "name": "Mint or get a canonical object identity",
      "description": "Give a real-world object (a bridge, a farm plot, a river, a named place) a single, shared, content-addressed identity that any agent resolves the same way.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when a conversation refers to a THING and you want a handle that survives summarisation and travels between agents, before it drifts into 'that infrastruct..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_entity_resolve",
      "name": "Resolve a phrase (or emem:entity: token) to a canonical object",
      "description": "Find the objects agents have bound a phrasing to, ranked by INDEPENDENT corroboration, never arrival order.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call BEFORE minting and before citing: resolve first, mint only if nothing matches, read `corroboration` before you cite."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_entity_link",
      "name": "Attest that a phrasing/id denotes an existing object",
      "description": "Record a signed, ATTRIBUTED claim that a label or external id (GERS / OSM / Wikidata) denotes an existing object, or with `stance: \"disputes\"` that it does not.",
      "tags": [
        "write",
        "L0"
      ],
      "examples": [
        "Call when you can vouch that two phrasings denote one object, or to attach an authoritative external id; your key goes on the record."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_view",
      "name": "memory_view, read file or directory listing",
      "description": "Read the contents of a memory file at `/memories/<path>` or list a directory when the path ends with `/`. Optional `view_range: [start, end]` slices a 1-indexed inclusive line range out of the file.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the model running with `betas: ['context-management-2025-06-27']` issues a `view` against its memory directory."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_create",
      "name": "memory_create, write a memory file (overwrite if exists)",
      "description": "Write a memory file at `/memories/<path>` with the supplied `file_text`. Overwrites if the file exists AND your key owns the path; a write over someone else's file is refused, not merged.",
      "tags": [
        "write",
        "L0"
      ],
      "examples": [
        "Call when the LLM issues a `create` against its memory directory (initial scratchpad write, refresh of a notes file, etc.)."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_str_replace",
      "name": "memory_str_replace, exact-string replacement in a memory file",
      "description": "Replace `old_str` with `new_str` in the named memory file. Fails (no partial write) when `old_str` is absent or matches more than once. Writes a new content-addressed `file_cid` and signs the receipt.",
      "tags": [
        "write",
        "L0"
      ],
      "examples": [
        "Call when the LLM issues a `str_replace` against its memory file, typical for small targeted edits."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_insert",
      "name": "memory_insert, insert at a given line",
      "description": "Insert `new_str` after the given 1-indexed line in the named memory file. `insert_line: 0` inserts at the top. Writes a new `file_cid` and signs the receipt.",
      "tags": [
        "write",
        "L0"
      ],
      "examples": [
        "Call when the LLM wants to append a new line to a memory file without rewriting it."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_delete",
      "name": "memory_delete, remove a memory file or directory",
      "description": "Delete a memory file at `/memories/<path>`. When the path ends with `/`, every file beneath the directory is removed.",
      "tags": [
        "write",
        "L0"
      ],
      "examples": [
        "Call when the LLM issues a `delete` against a memory file or subdirectory it no longer needs."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_supersede",
      "name": "memory_supersede, mark your own note replaced by a later one",
      "description": "Point one of your notes at the note that replaces it.",
      "tags": [
        "write",
        "L0"
      ],
      "examples": [
        "Call when a note you published is wrong, withdrawn or replaced, and a reader who finds the original first must learn that."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_rename",
      "name": "memory_rename, move a memory file",
      "description": "Move (rename) a memory file from `old_path` to `new_path`. Both paths must stay under `/memories/`; `new_path` must not already exist.",
      "tags": [
        "write",
        "L0"
      ],
      "examples": [
        "Call when the LLM wants to rename or move a memory file. Failure modes: source missing, destination already exists, path escapes `/memories/`."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_list_by_kind",
      "name": "memory_list_by_kind, typed enumeration of memory files",
      "description": "List memory files by their typed `kind` (episodic | semantic | procedural | resource). Optional path prefix narrows the scan; results are sorted by signed_at descending.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when an agent wants only one slice of its memory (e.g. surface every semantic fact it has learned about a topic) without scanning the full directory tree."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_search",
      "name": "emem_memory_search, semantic search over /memories/* files",
      "description": "Semantic search over /memories/* file contents using BGE-base-en-v1.5 (768-D, L2-normalised) backed by a Lance partition (`memory_text_index_d768.lance`).",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call instead of paging through `memory_view` whenever the agent knows roughly what it wants (a topic, a name, a paraphrase) but not the exact file path."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_corpus_state_stats",
      "name": "Signed snapshot of corpus liveness",
      "description": "Signed snapshot of corpus liveness: distinct_cells, distinct_bands, facts_scanned, top per-band counts, manifest CIDs. Same payload that backs /v1/stream's corpus.state tick (signed).",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when an agent needs a single liveness reading to surface in a dashboard, attach to a report, or decide whether to refresh local caches."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_benchmark",
      "name": "Hand-verified eval items for agent grading",
      "description": "Hand-verified evaluation items for grading an agent against the responder. Returns {items[], grader_url}. Submit answers (cell64 or fact_cid per item) to POST /v1/benchmark/grade for per-item scores.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call once at agent-onboarding time (or in CI) to fetch the canonical task list, then have the agent answer each item using its normal tool routing, and POST the..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_recall",
      "name": "Recall facts at a cell (auto-materializes on miss)",
      "description": "Read the signed facts at a canonical address (cell64); auto-materializes on a miss for any band with a registered materializer.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call after `emem_locate`, or with a known cell64 or place name. Returns every Primary fact at that (cell, band, tslot)."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_recall_polygon",
      "name": "Recall facts across a place's polygon",
      "description": "Recall facts across every cell inside a place's polygon (single signed envelope). Closes the place-name-drift gap for wide features (parks, lakes, regions).",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user names a wide feature (national park, river basin, country, large urban area) where one cell is too small."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_field_boundaries",
      "name": "Per-field agricultural boundaries (Fields of The World)",
      "description": "Per-field agricultural-boundary polygons from the Fields of The World global product (~3.17B fields, 241 countries, 10 m resolution, CC-BY-4.0).",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user asks about farms, fields, parcels, croplands, plots, or agricultural boundaries inside a region, anywhere the OSM/Nominatim boundary alone is..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_query_region",
      "name": "Aggregate facts over a region",
      "description": "Query facts over a region (single cell or list of cells), optionally aggregated per band.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user asks 'how does region X look', 'what's the average NDVI here', or wants a region-level summary."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_compare",
      "name": "Compare two cells (cosine + scalar deltas)",
      "description": "Compare two cells: cosine similarity over shared vector bands + per-band scalar deltas.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user asks 'how similar is X to Y', 'compare these two places', or wants a difference vector. Returns a single cosine score and per-band deltas."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_compare_bands",
      "name": "Compare two bands at one cell",
      "description": "Compare two bands at the same cell. Scalar pair → metric=delta, value=b-a. Vector pair (equal dim) → metric=cosine + per-dim delta. Returns a signed receipt naming both source fact CIDs.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user wants cross-source consistency at one place ('does Cop-DEM agree with GMRT here?'), cross-vintage drift ('how did the embedding change betwee..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_find_similar",
      "name": "k-NN over the corpus by embedding",
      "description": "k-NN over the corpus by cell embedding or inline vector. Returns `neighbours` ordered nearest-first, each with `cell64`, `score` and the `band` scanned, plus a signed receipt over the vectors read.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user asks 'find places like X', 'where else looks like this', or hands an embedding to find neighbours. `key` is either a cell64 or `inline:[x,y,.."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_trajectory",
      "name": "Time series for one (cell, band)",
      "description": "Time series for one (cell, band) over an inclusive [start, end] tslot window. Returns only what's already attested; it does NOT trigger materialization. For historical backfill use `emem_backfill`.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user asks 'how did X change over time' for a band that already has multiple historical tslots seeded."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_diff",
      "name": "Signed delta between two tslots",
      "description": "Compute a DerivativeFact (delta) between a band's values at two tslots. Memory algebra: the `diff` operation (https://emem.dev/docs/model.html).",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user asks 'what changed between t1 and t2', 'give me the delta'."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_compare_same_doy",
      "name": "Compare a band at the same day-of-year across years",
      "description": "Compare a band at the SAME day-of-year across several years, the honest way to measure year-over-year change on a seasonal band.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user wants a year-over-year comparison of a seasonal band (NDVI, LST, greenness) and cares that it is change, not season: 'is this field greener t..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_memory_contradictions",
      "name": "Scan for multi-attester disagreement",
      "description": "Surface where the corpus DISAGREES with itself (algebra: competing evidence).",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call before you rely on a number: 'is there disagreement about X', 'do the sources corroborate this', 'audit this claim'."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_edges_recall",
      "name": "Recall temporal knowledge-graph edges",
      "description": "Read temporal knowledge-graph edges (subj --pred--> obj, valid over [valid_from, valid_to)), bi-temporally filtered, in EITHER direction.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call this to read the typed CONNECTIONS of a fact, what disagrees with it, what superseded it, what relates to it, as of a point in time."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_fetch",
      "name": "Resolve a fact by content-address (CID)",
      "description": "Fetch a fact by its content-address (CID). Returns the full signed Primary or Absence fact, the same body served by REST `/v1/facts/{cid}`.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call whenever you have a `fact_cid` (e.g."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_backfill",
      "name": "Materialize historical facts in a window",
      "description": "Materialize and sign every per-tslot fact for one (cell, band) inside a [start_unix, end_unix] window. Returns a signed list of (tslot, fact_cid, status) for each step.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user wants HISTORY for a fast/medium-tempo band and `emem_trajectory` returned only the latest point."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_heat_solve",
      "name": "2-D heat-equation forecast (urban LST evolution)",
      "description": "Forward-step 2-D explicit finite-difference solver for the heat equation ∂u/∂t = α∇²u over a 3×3 cell stencil centred on `cell`. Reads `modis.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when the user wants a short-horizon LST forecast (urban heat island, surface-temperature evolution, heatwave onset modelling) at a specific cell."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_wave_solve",
      "name": "1-D shallow-water swell propagation to coast",
      "description": "Forward-step 1-D explicit finite-difference solver for the shallow-water wave equation ∂²u/∂t² = c²∂²u/∂x² with c² = g·h, where depth h comes from `gmrt.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when the user wants to predict swell arrival at a coast (storm-surge planning, shoreline-impact assessment, surf forecasting)."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_jepa_predict",
      "name": "Constrained JEPA-pattern next-month NDVI predictor",
      "description": "Predict next-month NDVI at a cell using a constrained JEPA-pattern AR(2) seasonal predictor. Reads up to 24 past months of `indices.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when the user wants a one-month-ahead NDVI forecast at a specific cell (crop-stress monitoring, growing-season tracking, vegetation-anomaly anticipation)."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_jepa_predict_v2",
      "name": "Learned multi-band-scalar dynamics head (jepa_temporal_predictor@2)",
      "description": "Predict the next-step value of 4 environmental scalars at a cell (`indices.ndvi`, `modis.lst_day_8day`, `modis.lst_night_8day`, `cams.pm25`) using a small learned dynamics MLP.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when you want a short-horizon forecast of NDVI / land-surface temperature / PM2.5 at a cell grounded in its attested history."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_verify",
      "name": "Verify a structured claim against a cell",
      "description": "Verify a structured claim against a cell's facts. Returns verdict + evidence CIDs + signed receipt.",
      "tags": [
        "verify",
        "L1"
      ],
      "examples": [
        "Call when the user asks a yes/no question about a cell ('is the NDVI > 0."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_bands",
      "name": "Active band ontology",
      "description": "Active band ontology (offsets, dims, tempo, privacy).",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call once at session start to learn the band registry, every other primitive's `band` argument MUST come from this list."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_functions",
      "name": "Active function registry",
      "description": "Active function registry (derivation recipes).",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call when you need to know which derivative ops are available for `emem_diff` or how a band is computed from upstream sources."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_sources",
      "name": "Active source-connector registry",
      "description": "Active source-connector registry (URL templates, providers, licenses).",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call when you need to inspect which upstream EO providers are wired (Copernicus DEM, JRC GSW, ESA WorldCover, etc."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_schema",
      "name": "Active CDDL/JSON schema bundle",
      "description": "Active CDDL/JSON schema bundle by CID.",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Rarely needed at chat time. Useful for offline verification of receipts / attestations against the exact schema version a responder used."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_errors",
      "name": "Stable error code catalog",
      "description": "Stable error code catalog.",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call to enumerate the wire-stable error codes, useful when the LLM wants to programmatically branch on responses."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_manifests",
      "name": "Active manifest CIDs",
      "description": "Active manifest CIDs (bands / functions / sources / schema).",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call to learn which exact registry versions a responder is serving. Cite these CIDs alongside any answer where reproducibility matters."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_capabilities",
      "name": "Cached upstream capability snapshot",
      "description": "Live capability snapshot of the responder's GPU sidecar, extensions[] (e.g. gpu, clay-v1.5, prithvi-eo2), cuda_available, models_loaded[], healthy, last_polled_unix_s.",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call before scheduling a GPU-heavy plan (Clay / Prithvi / Galileo embeddings, foundation-anchored algorithms) so the agent knows whether the GPU tier is up *rig..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_grid_info",
      "name": "Active grid encoding",
      "description": "Active grid encoding: cell64 ground resolution, lat/lng axis sizes, DGGS lineage.",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call once at session start (or when the user asks about cell resolution / 'how big is a cell'). Returns the actual ground resolution today (~9.54 m × 9."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_cells_in_bbox",
      "name": "Enumerate the cell64s in a bounding box, paged",
      "description": "Enumerate every cell64 whose centre falls in a bounding box, paged, in stable row-major order (north row first, then west column first).",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call when you need the actual cell list over an area rather than a sample: building a world, a dense recall over an AOI, or a deterministic sample frame."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_coverage_matrix",
      "name": "Per-band live status & history bounds",
      "description": "Per-band live status, what data is alive AND auto-materializable, with history bounds, tempo cadence, and the responder pubkey that signs the band.",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call BEFORE `emem_recall` when you don't know which bands answer at this responder."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_materializers",
      "name": "Auto-fetch registry (per-band materializers)",
      "description": "Auto-fetch registry: which bands the responder will materialize on a recall miss, the upstream provider, license, value shape, and history bounds.",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call once at session start (alongside `emem_bands` and `emem_coverage_matrix`) to learn which bands answer for ANY cell on Earth without seeding."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_data_availability",
      "name": "Per-band temporal coverage catalog",
      "description": "Temporal catalog: for every materializable band the upstream-of-record window the data genuinely covers, the temporal `kind` (static | annual_snapshot | annual_stack | time_series | now_only | per_rel...",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call before `emem_backfill` or any historical recall to check whether a band has a meaningful past at the requested time."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_algorithms",
      "name": "Composition recipes (algorithms)",
      "description": "Content-addressed dictionary of composition recipes, formulas that fuse attested band facts (and embeddings) into derived scores, classifications, and similarity metrics.",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call when the user's question is COMPOSITE (flood risk, urban density, water consensus, change-since-2020) rather than a single band readout."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_explain_algorithm",
      "name": "One-algorithm drill-down (formula + inputs + citation)",
      "description": "Per-key drill-down on a single composition recipe, full body (kind, inputs, formula, output, citation, references) for ONE algorithm key. Companion to `emem_algorithms` (which is the catalog).",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call when you already know the algorithm key (from `emem_algorithms`'s catalog or the topic registry) and need its full math."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_topics",
      "name": "Topic-grouped band + algorithm registry",
      "description": "Topic-grouped registry of every band and algorithm at this responder, plus visual surfaces and the `declared_but_no_materializer_at_this_responder` block (cube slots reserved without a live connector).",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call when the user's question lives in a topic but they haven't named a specific band, e.g."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_coverage_map",
      "name": "Coverage map (SVG image)",
      "description": "Live SVG render of the responder's corpus density, returned as a proper MCP EmbeddedResource content block (image/svg+xml), multimodal MCP agents can render it natively.",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call when the user asks 'where do you have data?', 'show me the coverage', or wants a visual brief of the responder's corpus footprint."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_cell_scene_rgb",
      "name": "Sentinel-2 true-colour thumbnail (PNG)",
      "description": "True-colour Sentinel-2 L2A RGB thumbnail centred on a cell. PNG returned as a native MCP ImageContent block (mimeType image/png).",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the user wants a VISUAL of a place, 'show me what this looks like', 'before/after the flood', 'is there a forest here', 'is this developed'."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_cell_geojson",
      "name": "Cell polygon as GeoJSON",
      "description": "Cell polygon as a native MCP EmbeddedResource (mimeType application/geo+json).",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Call when the agent (or a downstream renderer) needs the cell as geographic geometry, for map overlays, polygon-clipping ops, or feeding a styling pipeline."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_recall_many",
      "name": "Bulk recall across up to 256 cells",
      "description": "Recall facts across a list of up to 256 cell64 strings in one round-trip. Server fans out per-cell recalls in parallel and returns them under `by_cell.<cell64>`.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use after emem_find_similar (give it the neighbour cells), after emem_recall_polygon (when you want a deterministic cell list rather than a polygon), or wheneve..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_elevation",
      "name": "Coherent elevation across Cop-DEM + GMRT + WorldCover",
      "description": "One-shot elevation answer that fuses Cop-DEM 30 m (land), GMRT (ocean topobathy), and ESA WorldCover (water mask) into a single signed scalar at a place or coordinate.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when the user asks 'how high is X' or 'what's the elevation at this lat/lng' and you want the correct answer regardless of whether the cell is land, water,..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_fleet",
      "name": "Satellite / sensor lineage per band",
      "description": "Per-band satellite-and-sensor fleet inventory, names the upstream platform (e.g.",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call when the user asks 'which satellite is this from', 'what's the revisit time', or needs source attribution for a derived answer."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_substrates",
      "name": "Substrate profile registry",
      "description": "The written admission contract per contributor class (satellite archive, operator constellation, telescope, microscope, CCTV, mobile, drone, robot, industrial machine, fixed sensor): which admission r...",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call before onboarding any device as a writer ('can my robot/satellite/camera write to emem', 'what does my device have to provide'), or when a reader wants to..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_trace_verify",
      "name": "Verify a device's OS execution trace",
      "description": "Stateless verification of an emem.os_trace.",
      "tags": [
        "verify",
        "L1"
      ],
      "examples": [
        "Call while building a device integration ('why was my trace rejected', 'is this trace admissible under robot.fleet."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_temporal_route",
      "name": "Plan a temporal recall recipe for a cell",
      "description": "Turn a time-shaped question into a ready-to-run recall plan: it figures out WHICH bands to pull at WHICH past time windows (e.g.",
      "tags": [
        "plan",
        "L0"
      ],
      "examples": [
        "Call this first when the user's question is about CHANGE OVER TIME or a PAST EVENT and you're not sure which bands/dates to recall, 'was this flooded last year'..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_verify_receipt",
      "name": "Server-side ed25519 receipt verifier",
      "description": "Verify a signed receipt envelope server-side: rebuilds the canonical preimage under the rule the receipt's own `preimage_version` names, runs ed25519 over the embedded key and signature, and returns `...",
      "tags": [
        "verify",
        "L1"
      ],
      "examples": [
        "Pass the receipt EXACTLY as the read primitive returned it, whole and unmodified."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_guard_verdict",
      "name": "Check whether the citations in a draft actually verify",
      "description": "Run emem-guard's policy pipeline over text you are about to send, against this responder's corpus.",
      "tags": [
        "verify",
        "L1"
      ],
      "examples": [
        "Call it on your own draft before you assert something, or on a tool result before you reason on it, to catch a citation that does not resolve while you can stil..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_guard_selfhost",
      "name": "The procedure for running your own verdict server",
      "description": "Returns the full emem-guard self-host skill as markdown, plus the exact build, test and run commands.",
      "tags": [
        "introspect",
        "L0"
      ],
      "examples": [
        "Call when you want to ENFORCE grounding rather than consult it, when you need a verdict over a corpus this responder does not hold, or when a signed, offline-ve..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_at",
      "name": "Multi-band snapshot at a place",
      "description": "One-shot recall of the signed facts at a place's cell64 (or lat/lng); each band carries a citeable fact_cid. Defaults to emem's standard at-a-glance band set; pass `band` / `bands` to override.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when the user names a place and wants the standard situational readout (vegetation + elevation + landcover + recent weather) without picking bands."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_ndvi",
      "name": "NDVI at a place (one-shot, polygon-aware)",
      "description": "Recall the signed Sentinel-2 NDVI fact (indices.ndvi, 10 m native) at a place's canonical cell64, attesting it into the shared memory on a miss.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when the user names a place (or lat/lng) and just wants the NDVI number. Polygon-resolved places default to a 16-cell fan-out aggregated as mean/median."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_air",
      "name": "Air-quality snapshot (CAMS PM2.5 / NO2 / O3)",
      "description": "Recall the signed Copernicus CAMS air-quality facts (PM2.5 + NO2 + O3) at a place's cell64, attesting on a miss. Composes locate → recall → aggregate; each band carries a citeable fact_cid.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when the user names a place and asks about air quality, pollution, or emissions exposure. CAMS is the European reanalysis, global coverage, ~0."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_lst",
      "name": "Land surface temperature (MODIS day + night)",
      "description": "Recall the signed MODIS land surface temperature facts (day-8day + night-8day composites, 1 km native) at a place's cell64, attesting on a miss; each carries a citeable fact_cid.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when the user asks about surface heat, urban heat island, thermal anomalies, or wants day/night LST."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_soil",
      "name": "Soil profile (SoilGrids 0–30 cm: SOC, pH, texture)",
      "description": "Recall the signed SoilGrids 250 m profile at a place's cell64 (SOC, pH, clay/sand/silt fractions, bulk density, nitrogen, all at 0–30 cm depth), attesting on a miss; each band carries a citeable fac...",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when the user asks about soil quality, agricultural suitability, or carbon stocks at a location. Six bands returned in one envelope."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_water",
      "name": "Surface water (JRC GSW recurrence + S1 backscatter)",
      "description": "Recall the signed surface-water facts at a place's cell64: JRC Global Surface Water recurrence (1984–2021) + Sentinel-1 SAR backscatter (current), attested on a miss and citeable by fact_cid.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when the user asks about flooding, wetlands, surface-water dynamics, or wants a robust water-presence check."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_forest",
      "name": "Forest signals (Hansen GFC + ESA WorldCover)",
      "description": "Recall the signed forest facts at a place's cell64: Hansen Global Forest Change (tree cover 2000 baseline + year-of-loss) + ESA WorldCover 2021 land class, attested on a miss; each carries a citeable...",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when the user asks about deforestation, canopy cover, forest loss, or wants a forest-vs-not classification."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_weather",
      "name": "Current weather snapshot (temperature, cloud, precip, wind)",
      "description": "Recall the signed met.no/CAMS weather facts at a place's cell64 (2 m temperature + total cloud cover + precipitation + 10 m wind speed), attesting on a miss; each value carries a citeable fact_cid.",
      "tags": [
        "read",
        "L0"
      ],
      "examples": [
        "Use when the user names a place and asks 'what's the weather' or wants a now-cast snapshot. weather."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_intent",
      "name": "Intent-routed planner",
      "description": "Say what you want in one typed object and get the answer, without choosing a primitive.",
      "tags": [
        "plan",
        "L0"
      ],
      "examples": [
        "Call when the question maps onto one of the seven rows above and you would rather state the goal than pick a primitive."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_log_sth",
      "name": "Transparency log signed tree head",
      "description": "Fetch the responder-signed tree head (STH) over the whole append-only attestation log: {tree_size, root_b32, signed_at, responder_pubkey_b32, signature_b32}.",
      "tags": [
        "verify",
        "L1"
      ],
      "examples": [
        "Call to pin a cryptographic commitment to the log's current state."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_log_inclusion",
      "name": "Transparency log inclusion proof",
      "description": "Return an RFC 6962 inclusion (audit) proof that a log entry is committed under the current signed tree head. Verify offline: the audit path re-derives the STH root from the entry's leaf hash.",
      "tags": [
        "verify",
        "L1"
      ],
      "examples": [
        "Call to prove a specific log entry is in the log. Pass `leaf_index` (0-based position) or `entry_hash` (base32 of the record's blake3)."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_log_consistency",
      "name": "Transparency log consistency proof",
      "description": "Return an RFC 6962 consistency proof that the tree of size `first` is an append-only prefix of size `second` (defaults to the current size).",
      "tags": [
        "verify",
        "L1"
      ],
      "examples": [
        "Call with `first` = the tree_size of an STH you pinned earlier."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_log_witnesses",
      "name": "Transparency log witness co-signatures",
      "description": "List witness co-signatures recorded for tree heads, independent parties that counter-signed a (tree_size, root) claim under their own ed25519 key.",
      "tags": [
        "verify",
        "L1"
      ],
      "examples": [
        "Call to see who has independently vouched for the log's history."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "emem_reason",
      "name": "Compose a prose answer over signed facts (LLM, labelled)",
      "description": "The opt-in reasoning tier: grounds your question through emem_ask (deterministic, signed), then has the responder's local model compose a prose answer over that envelope.",
      "tags": [
        "plan",
        "L0"
      ],
      "examples": [
        "Reach for this only when the question needs prose composition across several facts and the caller explicitly wants a model in the loop, an A2A peer sending meta..."
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "perception_at",
      "name": "Live street perception at a place",
      "description": "Counts per object class at a cell right now, from a retained camera clip whose sha256 is committed in a signed receipt. Answers what orbit cannot: a satellite revisits in days.",
      "tags": [
        "read",
        "rest",
        "direct_sensor"
      ],
      "examples": [
        "GET https://emem.dev/v1/perception/at?cell=<cell64> for coverage, POST the same path with {\"cell\":\"<cell64>\"} for counts"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json",
        "video/mp4"
      ]
    },
    {
      "id": "perception_postcard",
      "name": "Painted postcard of a place",
      "description": "A place painted from its own camera clip, one motif per object counted, with the cell, the count and the clip hash inside the file. Unobserved and empty are painted differently.",
      "tags": [
        "read",
        "rest",
        "direct_sensor"
      ],
      "examples": [
        "GET https://emem.dev/postcard?place=Trafalgar%20Square"
      ],
      "inputModes": [],
      "outputModes": []
    },
    {
      "id": "perception_gonogo",
      "name": "Proceed or wait, for something that has to move",
      "description": "Proceed-or-wait over what a street camera sees, for something that has to move. Returns the clip it reasoned from and its age. Undecidable returns wait. Not a safety system.",
      "tags": [
        "read",
        "rest",
        "model_output"
      ],
      "examples": [
        "GET https://emem.dev/v1/perception/gonogo?cell=<cell64>"
      ],
      "inputModes": [],
      "outputModes": []
    }
  ],
  "conformance": true,
  "conformance_errors": null,
  "homepage": null,
  "repository": null,
  "license": null,
  "pricing": null,
  "contact": null,
  "id": "77c18a1a-bc34-4314-9cd3-8192f9f288a2"
}

Integrate this agent

curl -s https://a2aregistry.org/api/agents/77c18a1a-bc34-4314-9cd3-8192f9f288a2

Test message

Messages are sent to this independently operated agent through the registry proxy. Do not include secrets or personal data.

Message exchangeConnecting
>