Agent skill

Geotessera

by ucam-eo in ucam-eo/geotessera

Read Tessera satellite embeddings with the geotessera Python library.

MITAuto-check passedAI & LLM Engineering

Install Geotessera

skills CLI
$ npx skills add ucam-eo/geotessera --skill geotessera -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install ucam-eo/geotessera geotessera --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/ucam-eo/geotessera.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/geotessera .claude/skills/geotessera && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
geotessera
GitHub stars
354
Token cost
~1.6k tokens
SKILL.md length
687 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Read Tessera satellite embeddings with the geotessera Python library.

  • Works in 3 steps: sample_points at labelled coordinates;… → iter_region over the target bounding box; → Write predictions to a GeoTIFF with the…
  • Classifying with Tessera embeddings — reading points
  • SKILL.md covers Rules, Core calls, Dataset versions and depth and Logging and progress, plus 3 more sections
  • Calls pip

What it does

Geotessera is an agent skill from ucam-eo/geotessera. Read Tessera satellite embeddings with the geotessera Python library. Use when sampling, mapping, or classifying with Tessera embeddings — reading points, regions, or patches from the zarr store, selecting dataset versions, or building land-cover and detection workflows on the embeddings.

Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in AI & LLM Engineering, covering Embeddings. It works with Zarr and Python. The repository describes itself as: Python library for the Tessera embeddings. The licence is MIT.

When your agent uses it

  • Classifying with Tessera embeddings — reading points
  • Patches from the zarr store
  • Selecting dataset versions
  • Building land-cover and detection workflows on the embeddings

Example prompts

  • “/geotessera”

Requirements

  • Python 3

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. sample_points at labelled coordinates; train a scikit-learn model
  2. iter_region over the target bounding box;
  3. Write predictions to a GeoTIFF with the yielded transform and CRS;

What it can do on your machine

Read from SKILL.md and the folder at commit 2814c5b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pip

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com
    • geotessera.readthedocs.io

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Geotessera loads about 1.6k tokens when it runs. Until then it costs about 75 tokens; SKILL.md has 687 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~75
When it runs · the whole SKILL.md, loaded when a task matches
~1.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from ucam-eo/geotessera at commit 2814c5b, republished under its MIT licence (© ucam-eo). 687 words, ~1,616 tokens.

Download SKILL.mdSave it as .claude/skills/geotessera/SKILL.md (or your agent's skills folder).
name
geotessera
description
Read Tessera satellite embeddings with the geotessera Python library. Use when sampling, mapping, or classifying with Tessera embeddings — reading points, regions, or patches from the zarr store, selecting dataset versions, or building land-cover and detection workflows on the embeddings.

GeoTessera zarr interface

Tessera is a geospatial foundation model. It compresses a year of Sentinel-1/2 observations into a 128-dimensional embedding for every 10m pixel of land, for every year since 2017. The geotessera library streams these embeddings from a public zarr v3 store. Nothing is downloaded up front, and values return dequantised as float32.

Requires Python 3.12 or later: pip install geotessera.

Rules

  • Use GeoTesseraZarr (the zarr interface), not the tile-download GeoTessera class, unless the user explicitly needs offline NPY or GeoTIFF tile files. NPY tiles are deprecated and will be removed.
  • Never mix embeddings of different dataset versions or variants in the same analysis. Training, prediction, clustering, similarity search, change detection and mosaics must all read one dataset; embeddings from different versions live in unrelated spaces and cannot be compared. v1.1 has two separate runs, dclimate (the default) and cambridge, whose embeddings cannot be interchanged. Check gt.dataset.name when combining data from several sources.
  • Never reproject embeddings before analysis. Embeddings return on their native UTM grid; classify or cluster on that grid, and reproject only the final result (predictions, renders).
  • Coordinates are longitude/latitude in x, y order. Bounding boxes are (min_lon, min_lat, max_lon, max_lat).
  • A NaN vector means no embedding exists: water, or a pixel not yet produced. Use probe to distinguish, and drop NaN rows before fitting a model.
  • Dequantised embeddings cost 512 bytes per pixel. For regions much beyond 1000x1000 pixels, stream with iter_region rather than holding a read_region mosaic in memory.
  • Sample many points with one sample_points call; a per-point loop is an order of magnitude slower.
  • Prefer the latest model version for which tiles exist in the coverage for the user's region of interest; geotessera coverage --bbox ... maps it.

Core calls

python
from geotessera import GeoTesseraZarr

gt = GeoTesseraZarr()                    # default v1.1 dClimate Zarr store
gt.years                                 # [2017, ..., 2025]

vec, status = gt.probe(lon, lat, year)   # status: valid|water|nodata|outside
X = gt.sample_points(coords, year)       # (N, 128), one bulk read per UTM zone
mosaic, transform, crs = gt.read_region(bbox, year)
patch, transform, crs = gt.read_patch(lon, lat, year, size_px=256)
for block, transform, crs in gt.iter_region(bbox, year, strip_rows=512):
    ...                                  # row strips, next strip prefetched

read_region and iter_region read a lon/lat bounding box on the native UTM grid of the zone holding its centre; a box spanning a zone boundary is truncated to that zone. read_patch returns a fixed-size square centred on a point, merging across UTM zones when the window spans one. read_region_quantized returns (values, scales, transform, crs) at a quarter of the memory; dequantise rows on demand with geotessera.store.TesseraAccessor.dequantise(values[rows].transpose(2, 0, 1), scales[rows]), which turns water and no-data pixels into NaN.

gt.export_geotiffs(bbox, year, output_dir, bands=..., depth=...) streams a region to one float32 GeoTIFF per UTM zone on the native grid. The geotessera download command does the same from the shell.

Show full SKILL.md (296 more words)Show less

Dataset versions and depth

python
from geotessera.registry import zarr_store_url

gt = GeoTesseraZarr(zarr_store_url("v2"))   # "v1", "v1.1", "v2", or an explicit store URL
gt = GeoTesseraZarr(zarr_store_url("v1.1", "cambridge"))
gt.dataset.name                             # "1.1-cambridge"

zarr_store_url takes a version and optional variant; geotessera info lists them. GeoTesseraZarr also opens Icechunk repositories (URLs ending in .icechunk), presenting each zone as one utmNN group. gt.dataset is None for a store that is not a published dataset.

v2 stores publish matryoshka prefixes of each embedding. Passing depth=16 (or depth=4) to sample_points, read_region, read_patch, or iter_region reads only the first N dimensions for proportionally fewer bytes. gt.depths lists what a store offers.

Logging and progress

The library never draws progress bars. Long reads log progress through the standard logging module — geotessera.* loggers at INFO with counts and rates; short reads stay silent. Scripts that stream regions or sample many points should surface those lines:

python
import logging

logging.basicConfig(format="%(asctime)s %(message)s", datefmt="%H:%M:%S")
logging.getLogger("geotessera").setLevel(logging.INFO)

The progress= parameters on sample_points/read_region/ iter_region/read_patch are deprecated and ignored; do not pass them, and do not add tqdm or other progress wrappers around reads.

Caching and retries

HTTP retries with exponential backoff are built in; do not add a retry layer. Pass cache_dir to cache reads from a Zarr store locally, the default store included — store metadata persists across runs, chunk data for the session. Icechunk repositories ignore it:

python
gt = GeoTesseraZarr(zarr_store_url("v2"), cache_dir="tessera-cache")

The cache is keyed per store under cache_dir; never share one hand-rolled CacheStore directory between stores.

Zone-level access

gt.open_zone(lon=0.15) returns an xarray Dataset for that UTM zone with a .tessera accessor (sample_at, read_region) that works in the zone's own eastings and northings and performs no projection.

Typical classification workflow

  1. sample_points at labelled coordinates; train a scikit-learn model on the (N, 128) matrix after dropping NaN rows.
  2. iter_region over the target bounding box; model.predict(block.reshape(-1, 128)) per strip.
  3. Write predictions to a GeoTIFF with the yielded transform and CRS; reproject that raster, not the embeddings, if another CRS is needed.

Worked examples: https://github.com/ucam-eo/geotessera-examples API reference: https://geotessera.readthedocs.io/en/latest/zarr_quickstart.html

© ucam-eo, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/geotessera of ucam-eo/geotessera.

Open the folder on GitHubat commit 2814c5b

Compare with similar skills

Geotessera next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Geotessera compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Geotessera this skillucam-eo/geotessera354—~1.6kAutomated safety check: PassMIT
Chroma Vector DatabaseOrchestra-Research/AI-Research-SKILLs13k7 repos~2.3kAutomated safety check: PassMIT
Retail Product Search Agentgoogle/adk-recipes10k—~3kAutomated safety check: PassApache-2.0
Llama Index Wikichujianyun/skills740—~480Automated safety check: PassCustom licence
Sentence Transformers EmbeddingsOrchestra-Research/AI-Research-SKILLs13k2 repos~1.6kAutomated safety check: PassMIT
Ag2 Structured Outputag2ai/build-with-ag2252—~1.8kAutomated safety check: PassApache-2.0

Similar skills

  • Chroma Vector Database

    Orchestra-Research/AI-Research-SKILLs

    Shows how to store documents and embeddings in Chroma, query them by similarity with metadata filters, and persist them to disk for RAG and semantic search projects.

    13k GitHub starsUsed in 7 repos~2.3k tokens
    AI & LLM EngineeringAuto-check passed
  • Retail Product Search Agent

    google/adk-recipes

    Official

    Builds a retail product search agent on Google Cloud, from catalog ingestion into BigQuery and Vector Search to ADK scaffolding, evaluation and Cloud Run deployment.

    10k GitHub stars~3k tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Llama Index Wiki

    chujianyun/skills

    LlamaIndex 官方用户文档离线知识库,用于检索并回答 LlamaIndex Python 框架的安装、RAG、数据加载、索引、检索与查询、Agent、Workflow、模型、Embedding、向量库、评估、可观测性、部署、LlamaCloud 和 LlamaParse 等问题,也可生成有文档依据的示例代码与排障建议。当用户提到…

    740 GitHub stars~480 tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Sentence Transformers Embeddings

    Orchestra-Research/AI-Research-SKILLs

    Generates text embeddings locally with the sentence-transformers library for RAG, semantic search, clustering and similarity, with model picks for general, multilingual and legal text.

    13k GitHub starsUsed in 2 repos~1.6k tokens
    AI & LLM EngineeringAuto-check passed
  • Ag2 Structured Output

    ag2ai/build-with-ag2

    Get a typed Python value back from an AG2 beta Agent instead of free text.

    252 GitHub stars~1.8k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check passed
  • Copilot SDK

    github/awesome-copilot

    Official

    Build agentic applications with GitHub Copilot SDK. An agent skill from github/awesome-copilot.

    40k GitHub starsUsed in 4 repos~6.3k tokens
    AI & LLM EngineeringAuto-check passed

Works with

Questions about Geotessera

What does Geotessera do?

Read Tessera satellite embeddings with the geotessera Python library. Geotessera is an agent skill from ucam-eo/geotessera. Read Tessera satellite embeddings with the geotessera Python library.

When should I use Geotessera?

Geotessera fits situations like: classifying with Tessera embeddings — reading points; patches from the zarr store; selecting dataset versions; building land-cover and detection workflows on the embeddings.

How do I install Geotessera in Claude Code?

Run `npx skills add ucam-eo/geotessera --skill geotessera -a claude-code`. Or copy the skill folder (skills/geotessera in ucam-eo/geotessera) into .claude/skills/geotessera in your project. Claude Code loads it when a task matches its description.

How do I install Geotessera in Codex?

Run `npx skills add ucam-eo/geotessera --skill geotessera -a codex`. Or copy the skill folder (skills/geotessera in ucam-eo/geotessera) into .agents/skills/geotessera in your project. Codex loads it when a task matches its description.

Can I use Geotessera in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ucam-eo/geotessera --skill geotessera -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/geotessera, .gemini/skills/geotessera, .github/skills/geotessera and .opencode/skills/geotessera in your project.

What does Geotessera need to run?

Going by SKILL.md and its folder, Geotessera needs the command-line tools its instructions call (pip). Our summary lists: Python 3.

Does Geotessera access the network?

SKILL.md names 2 domains. As links in the text: github.com and geotessera.readthedocs.io. This is read from the text; nothing was executed.

Is Geotessera safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Geotessera use?

Geotessera is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Geotessera use?

About 1.6k tokens (SKILL.md is roughly 6.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Geotessera?

Skills that share tags, products or a category with Geotessera: Chroma Vector Database (Orchestra-Research/AI-Research-SKILLs, 13k stars), Retail Product Search Agent (google/adk-recipes, 10k stars), Llama Index Wiki (chujianyun/skills, 740 stars) and Sentence Transformers Embeddings (Orchestra-Research/AI-Research-SKILLs, 13k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Geotessera?

ucam-eo (a GitHub organization) maintains it in ucam-eo/geotessera, which has 354 GitHub stars. The repository was last updated on October 4, 2026.

Source: ucam-eo/geotessera on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.