decision-labs/geobase-skills/geobase-worker-geoai-embeddings
Claude Code and agent skill by decision-labs/geobase-skills
- community
Checking that the SKILL.md file is still in the repository.
Create and validate GeoAI embeddings worker jobs (createGeoEmbeddings): model selection, payload, job status. Triggers on GeoAI embeddings, createGeoEmbeddings, vision/geo model embeddings.
Install
npx vskill@latest install decision-labs/geobase-skills/geobase-worker-geoai-embeddingsSKILL.md
Worker: GeoAI Embeddings
When to use this skill
- Submit or debug a
createGeoEmbeddingsworker job - GeoAI / vision model embeddings for geospatial imagery
- After
@geobase-embeddings-create-via-workersrouting confirms worker-first creation
Secrets (human in the loop)
Worker HTTP calls need `GEOBASE_SERVICE_ROLE_KEY`. The CLI and agents cannot obtain it. Ask the user to put the real key in a gitignored `.env.secrets` before any worker API step. Do not paste the key in chat. See @geobase → Secrets (human in the loop).
Required Inputs
@geobase→ Private beta (CLI not shipped) ifgeobase-cliis unavailable- authenticated CLI session (
geobase-cli login) when CLI is installed project_refGEOBASE_SERVICE_ROLE_KEYfrom user-provided.env.secrets(not from chat or CLI placeholders)- payload JSON with:
geotiffPath(URL)tableName- optional:
modelName,tileSize,normalizeEmbeddings,bands,uploadArtifactsToStorage
Procedure
- Validate session and project:
geobase-cli whoamigeobase-cli projects refs
- Bootstrap non-secret env, then load secrets from disk:
geobase-cli projects env <project-ref> --persona web --format dotenv→GEOBASE_PROJECT_REF,GEOBASE_API_URI, anon key, etc.- user must provide `GEOBASE_SERVICE_ROLE_KEY` in `.env.secrets` (human in the loop)
set -a && source .env.secrets && set +a(user runs locally; agent does not read secret values)
- Fetch canonical model registry JSON and validate selected model:
https://gist.githubusercontent.com/mhassanch/5acd83c04618c83e29d118ac722bb805/raw/geobase_models_registry.json- map payload
modelNameto registryid(do not match on label/name text). - ensure that registry entry is available.
- Validate payload before submit:
- table name rule (canonical):
^[a-z][a-z0-9_]{0,62}$ - strict check (required): verify target table does not already exist before submit.
- use
@geobase-embeddings-catalogue-managementto list embedding tables (catalogue) before submit.
- Inspect GeoTIFF band metadata with GDAL:
gdalinfo "<geotiffPath>"- map payload
bandsto desired channels from output. - strict indexing rule:
bandsare 0-based (first band is index0). - for RGB imagery, use
[0, 1, 2].
- Check worker capacity first:
- call
GET https://${GEOBASE_PROJECT_REF}.geobase.app/worker/capacitywith: - header:
apikey: ${GEOBASE_SERVICE_ROLE_KEY} - header:
Authorization: Bearer ${GEOBASE_SERVICE_ROLE_KEY} - read
maxGeoPatchesfrom response.
- Estimate GeoAI patches before submit:
- read width/height with
gdalinfo -json. - compute tile count from
tileSize. - compute
estimated_geo_patches = total_tiles * patches_per_tile.
- If over capacity, stop and ask for explicit user approval. Do not change payload silently.
- decision order:
1) increase tileSize (must still satisfy model minimum tile size), 2) switch to a lower patches_per_tile model, 3) clip AOI / split imagery into multiple jobs.
- Submit using worker endpoint:
- direct project worker API:
POST https://${GEOBASE_PROJECT_REF}.geobase.app/worker/jobs/createGeoEmbeddings- required headers:
apikey: ${GEOBASE_SERVICE_ROLE_KEY}Authorization: Bearer ${GEOBASE_SERVICE_ROLE_KEY}Content-Type: application/json
- Poll by id (match path used at submit):
- direct project worker API:
GET https://${GEOBASE_PROJECT_REF}.geobase.app/worker/jobs/createGeoEmbeddings/<job_id>- required headers:
apikey: ${GEOBASE_SERVICE_ROLE_KEY}Authorization: Bearer ${GEOBASE_SERVICE_ROLE_KEY}Content-Type: application/json
- Polling timing guidance:
- start every 5s for first minute, then use backoff (10s, 20s, 30s max).
- common long-running phase: uploading embeddings to database.
- do not treat long upload phase as failure unless status is
failedor request times out repeatedly.
- Stop only on terminal state (
successorfailed). - Validate output table row count, schema, and embeddings availability.
Submit Rule (Mandatory)
Submit only after all checks pass:
gdalinfosucceeded and dimensions were parsed.estimated_geo_patches <= maxGeoPatches.- table-name and collision checks passed.
- payload fields are unchanged from user intent unless user explicitly approved edits.
modelNameis validated against registryid.
Example Payload
Failure Handling
- If auth fails: run
geobase-cli login, then retry. - If table validation fails: use
^[a-z][a-z0-9_]{0,62}$and a new name. - If GeoTIFF fetch fails: verify URL/path accessibility and format.
- If job appears stalled in upload phase: continue polling with backoff before retrying.
- If 5xx worker errors: capture payload shape + project ref + timestamp; retry once.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/geobase-worker-geoai-embeddings/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/decision-labs/geobase-skills/geobase-worker-geoai-embeddings)