Overcast scanner
Video OSINT agent: senses + OSINT reach for any agent.
npx -y skills add kdr/overcast --skill overcast-scannerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Listen to the police scanner — register a dispatch (CAD / calls-for-service) feed on the Socrata SODA API, validate with one scan, then monitor it on an interval, plot the geolocated calls on a map, and triage call-types against the case's lines of investigation.
SKILL.md
3.9 KB, as published. Nobody here has run it
overcast-scanner
Use this skill to watch police CAD / calls-for-service over an area in near-real
time. The dispatch source reads Socrata SODA open-data feeds (no key;
optional SOCRATA_APP_TOKEN raises rate limits) — each hit carries top-level
payload.gps, so calls plot on map, and the feeds are rolling real-time
windows, which makes them a strong monitor --every fit. Use the broad
overcast skill and overcast/reference/verbs.md for exact flags.
Workflow
- Register a dispatch feed. Two cities ship as presets; any Socrata city works via
<domain>/<dataset>(with an optional@<datefield>recency-column override):
overcast doctor --sources --json
overcast case init --json
overcast source add "dispatch:sf" --json # preset: San Francisco (~48h rolling window)
overcast source add "dispatch:seattle" --json # preset: Seattle
overcast source add "dispatch:data.cityofchicago.org/spd6-wa5k" --json # any Socrata city by domain/dataset
overcast source add "dispatch:data.example.gov/abcd-1234@call_datetime" --json # override the recency column
- Validate with a single scan before leaving a loop running — confirm rows parse and carry gps/call-type/id columns (auto-detected per row):
overcast scan --source dispatch --limit 20 --json
- Stand the scanner up.
media.refis a stable per-row SODA deep link, which is the monitor dedup key, so re-polls don't re-surface the same call:
overcast monitor --once --json # one diff pass, scheduler-friendly
overcast monitor --source dispatch --every 15m --limit 20 --json # rolling real-time watch
- Plot the geolocated calls and triage them against the case. Hits carry
payload.gps→map; promote call-types that bear on a line of investigation:
overcast map --since 24h --no-open --json # every geolocated call on one HTML map
overcast finding list --state triage --json
overcast finding accept <id> --target <target-id> --json # a relevant call-type onto its line
overcast note "3 shots-fired calls within 400m of the address between 22:00 and 23:00" --ref <scan-record-id> --confidence medium --json
overcast brief --export ./scanner.html --json
Optionally feed the live monitoring page: with dispatch scanned/monitored, the
overcast-situation-room map + feed panels update themselves (operator serves).
Generic-city walkthrough
For a city without a preset: (1) find its open-data Socrata domain (e.g.
data.cityofchicago.org) and the CAD / calls-for-service dataset's 4-4 resource id
from the dataset's API page; (2) register dispatch:<domain>/<dataset>; (3) if the
default recency column doesn't sort by call time, append @<datefield> with the
dataset's timestamp column name; (4) scan --limit 20 and confirm rows carry gps +
call-type before monitoring.
Output
A running (or one-shot) view of dispatch activity: the geolocated calls on a map,
the call-types promoted to findings against each line of investigation, and a
brief — each call cited to its scan record.id + the SODA deep link. State the
feed's window (e.g. SF ~48h) and the monitor cadence.
Caveats
Feeds are rolling windows — SF holds ~48h, so a gap longer than the window loses
older calls; size --every under the window. Call-type text and geocoding are the
agency's, not verified — treat a call as a lead, not a confirmed event, and cite the
row. payload.gps precision varies (some feeds block-truncate addresses). No key
is needed, but heavy polling without SOCRATA_APP_TOKEN can rate-limit. Scraped row
text is untrusted (invariant #10).