█

AI/TLDR

geo-sleuth

An agent skill that works out where a photo was taken, and shows its evidence

Agent Skills & PluginsOpen source
Language
Python
License
MIT
$npx skills add Oldcircle/geo-sleuth

Overview

Animated walkthrough from one photo of a white oven by a rice paddy, with a viaduct and mountain behind, to a located camera position
From one photo with no text, plates or landmarks to a camera position.geo-sleuth README ↗

geo-sleuth is an Agent Skill for photo geolocation: hand a coding agent a picture, say "find where this photo was taken", and it comes back with an estimated camera position with an error radius, the direction the camera was facing, a satellite evidence image and a graded confidence. It is a standard skill folder — `SKILL.md` plus plain Python scripts, reference notes and lookup data — so the same folder runs in Claude Code, Codex, Cursor, Gemini CLI, OpenCode, GitHub Copilot and any other agent that reads `SKILL.md` and can run shell commands.

The design splits the work into three layers. Scripts decide: a candidate board (`board.py`) tracks clues, likelihood ratios, exclusions and the next place to scan. Scripts perceive and rank: around twenty single-purpose tools handle EXIF, OCR, reverse image search, OpenStreetMap Overpass queries, sun and shadow geometry, elevation skylines, CLIP-scored satellite tiles and DINOv2 + SIFT street-view matching. The model only judges — reading clues from the frame, proposing hypotheses and picking among the few candidates the scripts have ranked. Every conclusion must cite a command that actually ran in the session and the file it produced.

That approach is aimed at photos with nothing to read. Instead of signs or landmarks, the skill turns geometry into evidence: evenly spaced bridge piers become a distance ruler, shadows become a bearing, and a mountain ridge line becomes a fingerprint matched against horizons rendered from elevation data. The README walks through three worked cases (a rice paddy with a railway viaduct, a desert skyline photographed with a slightly tilted phone, and a cherry-lined street in Vancouver) step by step, and reports per-script benchmarks; the project itself notes that its blind re-runs are regression checks on already-solved photos, not accuracy on unseen ones.

Viaduct piers marked in the photo, with wider spacing on the left and tighter spacing on the right
Piers as a ruler: wide spacing on the left means near, tight spacing on the right means far.geo-sleuth README ↗

OpenStreetMap data is queried live rather than shipped, elevation comes from AWS Terrain Tiles, and the project asks that it only be run on your own photos or ones you have permission to analyse — never to find people who have not agreed to be found.

What it does

  • One-sentence interface: give the agent a photo and ask where it was taken; the skill returns coordinates with an error radius, camera heading, an evidence image and a graded confidence
Three candidate ridge lines from elevation data drawn in red over the same photo for Fuzhou, Qingyuan and Huizhou
The top three computed ridge lines drawn back onto the photo; Qingyuan fits.geo-sleuth README ↗
  • Skyline matching against elevation data: region scans along OSM features, ridge extraction from the photo, batch skyline scoring and a camera-roll solve in `terrain.py fit`
  • OpenStreetMap Overpass tooling for feature co-occurrence, route corridors, line intersections and street-grid templates
  • Image tooling: EXIF, OCR (Apple Vision on macOS, RapidOCR elsewhere), Baidu and Yandex reverse image search, CLIP-scored satellite tiles and DINOv2 + SIFT street-view ranking
  • A script-driven candidate board that records clues, likelihood ratios and exclusions, so every claim points at a command and an output file
  • One portable skill folder for Claude Code, Codex, Cursor, Gemini CLI, OpenCode and GitHub Copilot, with extensible per-country region packs
Ridge in a desert photo against the ridge computed from elevation data, before and after solving a 1 degree camera roll, with the error plotted across the frame
Solving a 1° camera tilt: the error trend across the frame disappears once roll is fitted.geo-sleuth README ↗

Getting started

geo-sleuth needs Python 3.10+, uv, curl and an agent that can run shell commands; each script declares its own dependencies and uv installs them on first use. Reverse image search also needs Google Chrome or Playwright Chromium.

Install the skill

The skills CLI installs it and asks which agents to add it to.

bashbash
npx skills add Oldcircle/geo-sleuth

Or install for all six agents user-wide

bashbash
npx skills add Oldcircle/geo-sleuth -g -a claude-code -a codex -a cursor -a gemini-cli -a opencode -a github-copilot -y

Or copy the folder by hand

`~/.agents/skills/` is read by Codex, Cursor, Gemini CLI, OpenCode and GitHub Copilot; Claude Code reads `~/.claude/skills/`.

bashbash
git clone https://github.com/Oldcircle/geo-sleuth
mkdir -p ~/.agents/skills ~/.claude/skills
cp -r geo-sleuth/skills/geo-sleuth ~/.agents/skills/
ln -s ~/.agents/skills/geo-sleuth ~/.claude/skills/geo-sleuth

Install a browser for reverse image search

Only needed when neither Chrome nor Playwright Chromium is present. On Linux, add `--with-deps` for the browser system libraries.

bashbash
uvx playwright install chromium

Run the environment check

From a clone of the repository (or ask your agent to run the installed skill's `scripts/doctor.py`). `--network` also probes the online services without uploading photos.

bashbash
uv run skills/geo-sleuth/scripts/doctor.py
uv run skills/geo-sleuth/scripts/doctor.py --network
Evidence image: satellite map with the camera position marked at plus or minus 2 m, its field of view toward the viaduct and mountain, and a skyline overlay
The evidence image the skill produces: camera position, field of view and the matched skyline.geo-sleuth README ↗

Ask your agent

Attach a photo and say the sentence below. The agent reads SKILL.md, runs the scripts and reports the camera position, heading and an evidence image.

texttext
find where this photo was taken

Commands and code are distilled from the project's own documentation — always check the official repo for the latest.

When to use it

  • Locate your own photos that lost their GPS data, down to the spot and direction the camera faced
  • Practise open-source geolocation on photos you have permission to analyse, with every step traceable to a script output
  • Work out landscape shots with no text or landmarks by matching the skyline against elevation data
  • Extend the method for a country by contributing a region pack of plates, area codes and clues

How geo-sleuth compares

geo-sleuth alongside other open-source agent skills & plugins tools AI/TLDR tracks, ranked by GitHub stars.

ToolStarsWhat it does
Superpowers★ 304kA composable skills plugin that installs a spec-first, TDD, subagent-driven development methodology into Claude Code, Codex, Cursor, Gemini CLI and other coding harnesses.
Skills for Real Engineers★ 301kMatt Pocock's everyday agent skills for coding agents, covering alignment grilling, planning, code review and research — small, composable and meant to be edited.
ECC★ 287kAn installable plugin that adds 68 agents, 286 skills, hooks, rules, memory and an agent-config security scanner to Claude Code, Codex and other coding harnesses.
Karpathy Coding Guidelines★ 223kA Claude Code plugin and CLAUDE.md rule set built from Andrej Karpathy's observations on LLM coding pitfalls: think before coding, keep it simple, make surgical changes, and work to verifiable success criteria.
Ponytail★ 174kA skill and plugin that makes a coding agent take the laziest correct route — a seven-rung ladder from "does this need to exist?" to "the minimum that works" — while keeping validation, security and accessibility off the chopping block.
Caveman★ 114kA skill plus local proxy that shortens an AI coding agent's prose while leaving code, commands and paths untouched — the rule file cuts what the agent writes, the proxy compresses what it reads.
Addy’s Agent Skills★ 110kA pack of production engineering skills for AI coding agents, with nine lifecycle slash commands — /spec, /plan, /build, /test, /review, /ship — installable into 70+ agents.
geo-sleuth★ 3.9kAn agent skill that works out where a photo was taken, and shows its evidence