geo-sleuth is a cross-agent skill that locates a phone photo to two metres from OSM data and ridge lines
Image: GitHub
Why it mattersPhoto geolocation without text or landmarks used to require specialists, so a portable skill that runs in every coding agent makes the technique usable inside any developer workflow that already has one installed.
A developer publishing under the handle Oldcircle pushed geo-sleuth to GitHub on 18 September and it stands at 189 stars and 19 forks two days later, according to the GitHub REST API. The MIT-licensed Python project is packaged as an Agent Skill: one folder holding SKILL.md, scripts, references and data, so the same install runs in Claude Code, Codex, Cursor, Gemini CLI, OpenCode and GitHub Copilot.
What it does with one photo
You hand a photo to a coding agent that has the skill installed and say "find where this photo was taken." The agent reads SKILL.md, runs the twenty single-purpose Python scripts the repository ships and returns coordinates with an error radius, the direction the camera was facing, and a satellite evidence image.
The README's case study is a phone photo with the EXIF stripped: a white oven at the edge of a rice paddy, a viaduct in the distance, a mountain on the right, no text in the frame. The pipeline pulled every railway bridge in the region from OpenStreetMap (27,335 segments), sampled every 400 metres and computed the 360 degree horizon from elevation data at each sample (171 sites passed), tried candidate camera positions and rendered ridge lines from each (14,372 positions, 22 top matches), then used the 17 piers as a distance ruler to fix bearings. The last step narrowed the answer to within two metres. The README puts the whole run at 72 minutes end to end, with half of that waiting on computation.
Scripts rank, the model judges
The design deliberately keeps the model out of the ranking. Scripts handle intake, EXIF, OCR, OpenStreetMap corridor scans, sun-angle bearing, elevation skyline matching, CLIP-ranked satellite tiles, and DINOv2 plus SIFT for street view matching. The agent proposes clues and picks among the ranked top few. Every conclusion has to point at the command that ran in the session and the file it produced; population and fame do not count as evidence, and exclusions need read or computed data behind them.
Why the packaging matters
The skill installs into ~/.agents/skills/, a shared folder that Codex, Cursor, Gemini CLI, OpenCode and GitHub Copilot all read, plus a symlink into ~/.claude/skills/ for Claude Code. One folder covers six agents. Skills are new enough that most teams do not yet have one installed, so a well-documented example teaches the pattern: a SKILL.md at the root, a scripts directory doing the mechanical work, and a references directory the model can retrieve.
An open-source photo-geolocation pipeline with elevation-matched skylines is unusual by itself, and the case study is specific enough to reproduce. Teams that already run a coding agent get a working example of a portable skill that installs the same way in six of them without a second copy of the code. The technique also arrives when photo location matters to anyone reasoning about images an agent might read from a browser: the skill shows how much a phone photo still gives away, in practice, when a script has OpenStreetMap and a digital elevation model behind it.
Source
Primary: Oldcircle/geo-sleuth on GitHub. Traction figures from the GitHub REST API at 15:07 UTC on 20 September.
Source: GitHub
This item was written by an AI system from the linked source. Reveneau is responsible for what it publishes.
Get AI News in your inbox
New developer tools, model and agent releases, and how teams are actually using them to release software. Short, and only when there is something worth reading.