Geo-sleuth treats the AI model as a judge, not a detective, and that's the point
Geo-sleuth is a photo geolocation agent skill that locates where a picture was taken using geometry, elevation data, and OpenStreetMap queries — without relying on readable text, recognizable landmarks, or reverse image search hits. The design principle is explicit: population and fame are not evidence. Every conclusion must name the command that ran and the file it produced.
The architecture splits work into three layers. Twenty single-purpose Python scripts handle searching, scoring, and ranking. The model only picks among the top few candidates those scripts surface. This matters because it keeps the expensive, error-prone judgment step narrow: the model is a judge, not a detective.
The worked example in the README is the clearest argument for the approach. A phone photo with stripped EXIF shows a white oven beside a harvested rice paddy, a viaduct in the distance, a steep mountain to the right. No text anywhere in the frame. The skill pulled 27,335 railway bridge segments from OpenStreetMap, computed 360-degree horizon profiles from elevation data at sampled points, rendered 14,372 candidate camera positions, and narrowed to a single location. Pier spacing on the viaduct — 17 piers, each one a bearing — combined with skyline matching to fix the final position to within 2 meters. The run took about 72 minutes, roughly half of that waiting on computation.
The benchmark numbers are honest about scope. The sat_scan.py CLIP-based satellite cell scorer achieved recall of 17 out of 40 ground-truth running tracks at rank 20, and 32 out of 40 at rank 100, on a 4×8 km test area. The match.py street-view ranker placed ground truth in the top 6 across all 8 test cases, at rank 1 in half of them. These are per-operator measurements on small test sets, not end-to-end accuracy numbers — the roadmap explicitly lists a public blind-test set as unfinished work.
Installation follows the Agent Skill convention: a SKILL.md file plus plain Python scripts in a folder, readable by Claude Code, Codex, Cursor, Gemini CLI, OpenCode, and GitHub Copilot. Dependencies are declared per-script and installed on first use via uv run, so there is no global environment to manage. The only hard requirements are Python 3.10 or later and an agent that can execute shell commands.
The responsible-use note at the bottom is brief but direct: run it on your own photos or ones you have permission to analyze, never to locate people who have not consented. That caveat deserves weight. The same geometry that finds a camera position from pier spacing can find a person from a background detail.
Serious geolocation tooling that keeps the model as judge and lets geometry do the actual work — honest about what it can and cannot yet measure.