An agent skill for finding where any photo, screenshot, video frame or Street View image was taken — the instincts of a strong GeoGuessr player plus the discipline of an OSINT investigation. The agent leads with its own expert read of the scene (a written gut call), then proves, sharpens or overturns it with web research and local tools, down to street or camera level when the evidence allows. Every photo gets its own timestamped archive with a report, evidence images and a scoreboard once the true location is known.
GeoInt builds on geo-sleuth by Oldcircle (MIT) and reuses substantial parts of its toolkit and documentation. GeoInt adds substantial work of its own: 13 new tools, new features in 12 of geo-sleuth's, a rewritten method (97% new), a worldwide clue library, street-level search across 11 providers and a per-photo archive with scoring. In all, 80% of the instructions are GeoInt's own. Credits shows which part is which.
SKILL.md is the method; references/ holds the playbooks and the worldwide clue library; scripts/ holds the
tools.
git clone https://github.com/marouane53/GeoInt.git ~/.agents/skills/geoint # Codex and other agents
ln -s ~/.agents/skills/geoint ~/.claude/skills/geoint # Claude Code
uv run ~/.agents/skills/geoint/scripts/doctor.py --network # check the setup
uv run ~/.agents/skills/geoint/scripts/doctor.py --models # optional: pre-download local models (~6.2 GB)Requirements: Python 3.10+, uv, curl; exiftool and ffmpeg recommended. Each
script declares its own dependencies and runs with uv run. Per-photo archives go to ~/geoint-photos with
timestamps in this computer's time zone; set GEOINT_PHOTOS / GEOINT_TZ, or put
{"photos_root": "…", "timezone": "…"} in a config.local.json next to SKILL.md (git-ignored), to change that.
| Area | Tools |
|---|---|
| Archive and scoring | photo_session.py (start / finish / truth / scoreboard / list), bench.py |
| One-command local first pass | recon.py → meta.py, intake.py, ocr.py, textgeo.py, detect.py, calib.py, prior.py |
| Text → place | textgeo.py (scripts, telltale letters, language, phone numbers incl. unreadable digits, domains, postal codes, currency, regional words, ~50k brands, GeoNames places), geodata.py, clues.py (incl. 2,100 regional plate codes across ten countries, with the years each was in use) |
| Reasoning ledger | board.py — candidates, clues, likelihood ratios capped by evidence type, exclusion rules, rank / next / check / report |
| Street level | pano.py (every provider plus your own manifests: coverage, list, render, sheet), sweep.py (rank every panorama of whole towns with MegaLoc), gsv.py, refsheet.py (real Street View rows per candidate country, region or town), match.py, baidu_pano.py |
| Clue → short list | opendata.py (city open-data portals: bus lanes, street trees, hydrants… filtered to candidate points), osm.py addr (house numbers, alone or co-occurring) |
| Maps and geometry | osm.py, poi.py, gazetteer.py, tiles.py (incl. NASA daily satellite passes), sat_scan.py, terrain.py, sun.py (incl. past weather by day), geo.py, pose.py, evidence.py (incl. colour-coded match sheets) |
| Local models | StreetCLIP + GeoCLIP world prior (prior.py), OWLv2 object crops (detect.py), GeoCalib camera calibration (calib.py), MegaLoc place recognition (sweep.py, match.py), DINOv2/CLIP matching |
Several of these tools come from geo-sleuth; Credits lists which ones and what GeoInt added to them.
The skill works end to end without asking questions: reverse image search, web search, maps and Street View lookups run automatically as part of the flow.
GeoInt reuses code, documentation and data from geo-sleuth by
Oldcircle, released under MIT, as of geo-sleuth commit
4ff6c2f. LICENSE keeps
Oldcircle's copyright notice.
| From geo-sleuth | New in GeoInt | |
|---|---|---|
| Tools (34) | 21: 9 unchanged, 12 extended by GeoInt | 13 new |
Method (SKILL.md) |
3% | 97% |
Instructions (SKILL.md + references/) |
20% | 80% |
| Python code | 53% | 47% (about 7,100 lines) |
| Data tables | 7: 5 unchanged, 2 lightly edited | 4, incl. 2,100 regional plate codes and 250 countries and territories |
Percentages count non-blank lines that match geo-sleuth at commit 4ff6c2f.
From geo-sleuth: the base toolkit for maps and geometry, sun and terrain analysis, OCR, reverse image search, image matching, the reasoning board and evidence images, plus the China-specific data and street-level imagery.
- Unchanged:
geo.py,exif.py,intake.py,pose.py,revimg.py,gazetteer.py,sat_scan.py,baidu_pano.py,poi.py(apart from its user-agent string) and the helpers_net.pyand_browser.py; the guidesaerial.mdandworld/china.md; the data tablescalling_codes,cn_admin,cn_area_codes,cn_platesandterritories. - Lightly edited: the guides
geometry.md,corridors.md,observe.mdandverify.md; the data tablescountry_namesanddriving_side;tests/test_runtime.py. - Extended by GeoInt (its additions in brackets):
board.py(ingest,retract),clues.py(2,100 regional plate codes outside China, Street View coverage),doctor.py(--models),evidence.py(match sheets),gsv.py(area),imgprep.py(reveal),match.py(MegaLoc),ocr.py(automatic language detection),osm.py(addr),sun.py(weather),terrain.py(panoramic mode),tiles.py(Wayback history, NASA daily passes); the guidessearch.md,data-sources.mdandsky.md.
New in GeoInt:
- 13 tools: the per-photo archive and scoring (
photo_session.py,bench.py), the one-command first pass (recon.py,meta.py,textgeo.py,detect.py,calib.py,prior.py), street-level search across providers and whole towns (pano.py,sweep.py,refsheet.py), and place lists and city open data (geodata.py,opendata.py). - The method:
SKILL.md(rewritten; 97% of its lines are new) and theworkflow,country-funnel,streetlevel,datasets,modelsandbenchmarkguides. - The worldwide clue library in
references/world/: Africa and the Middle East, the Americas, Asia, Europe, Oceania, general clues and Street View coverage. - The data tables
countries,plate_codes,streetview_coverageandtext_signals, and the teststest_tools.pyandtest_photo_session.py.
uv run tests/test_tools.py && uv run tests/test_runtime.py && python3 -m unittest tests/test_photo_session.pyCode: MIT (see LICENSE, which keeps Oldcircle's copyright notice for the parts that come from geo-sleuth). Data: GeoNames (CC BY 4.0), Wikipedia-derived
tables (CC BY-SA 4.0), OpenStreetMap name-suggestion-index (downloaded at runtime); details in data/README.md
and references/data-sources.md. Model weights are downloaded from their publishers under their own licences
(StreetCLIP is non-commercial); see references/models.md.