Overcast bolo
Video OSINT agent: senses + OSINT reach for any agent.
npx -y skills add kdr/overcast --skill overcast-boloAssembled 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
Be on the lookout — stand up a standing face/image watchlist: register a reference face, point a monitor at incoming feeds, auto-match every new item against the reference, and surface hits as a triage queue + alert so a match announces itself.
SKILL.md
7.3 KB, as published. Nobody here has run it
overcast-bolo
Use this skill for a be-on-the-lookout / all-points-bulletin: "here is a face,
alert me on any match across incoming media." It is a standing watch keyed on a
VISUAL reference (a face or image), not a one-shot lineup search. Use the broad
overcast skill and overcast/reference/verbs.md for exact flags. Only leave a
continuous loop running when the user asks for ongoing monitoring.
This packages existing machinery: a target --image is the reference line hits
attach to, monitor --pull --pipe captures + senses new media, and the persist
hook auto-runs the score triggers on every evidence record — a face --match
≥75 (or similar match ≥85) auto-emits a suggested finding linked to that
line. The BOLO flow names and sequences those pieces. It is the close cousin of
overcast-stakeout (a general standing watch, often keyed on a text target) and
overcast-lineup (a one-shot identify against a local face DB); reach for those
when the watch is text-keyed or the job is a single database lookup.
Prerequisites
Pick the matcher up front — it decides the backend the watch needs:
- tinycloud face (default
faceprovider):CLOUDGLUE_API_KEYset, tinycloud CLI on PATH. No local Python.face <clip> --match <ref>runs against the clip. - deepface-local (offline, no cloud): the uv-managed visual-DB Python
(
scripts/visual-db-uv.sh --face, thenOC_VISUAL_DB_PY). Reference faces live in a localdeepface-localindex;similar matchuses a localbasic-clipindex instead. Nothing leaves the case.
overcast doctor --json # confirm the face/visual-db backend is ready
overcast case init --json
Workflow
- Register the watchlist reference. The reference face becomes an image target — the line of investigation every hit attaches to. Add one target per person/object you are looking out for:
overcast target add ./suspect.jpg --image --question "Does the watchlisted person appear in incoming media?" --json
overcast target list --json # confirm the image line (kind: image)
For LOCAL matching, also stand up a face/image index and register the reference(s) in it, so you can match case-wide without re-passing the file:
overcast index create bolo-faces --type deepface-local --local --json # local face DB
overcast index add ./suspect.jpg --to <index-id> --json # enroll the reference face
# semantic image alternative: overcast index create bolo-seen --type basic-clip --local --json
- Point the watch at incoming feeds and stand it up. Reuse any configured source
(
x/youtube/tiktok/instagram/telegram/browser/ …). Recording the reference as a case--face-refwith--findings suggest+--auto-sense watchmakes new captures auto-sense and auto-suggest without a manual pass:
overcast source add "x:<query>" --json
overcast case setup --name bolo --face-ref ./suspect.jpg --findings suggest --auto-sense watch --yes --json
overcast monitor --once --pull --pipe watch --json # one diff pass: confirm sources resolve
overcast monitor --every 30m --pull --pipe watch --json # the standing loop (run under tmux)
- Auto-match incoming media against the reference — the BOLO core. Because
face --match/similar matchfire the suggested-finding trigger on run, run the reference match over each newly captured item. A hit at/above the threshold (face ≥75, similar ≥85) auto-emits asuggestedfinding linked to the image target line:
overcast face <new-clip> --match ./suspect.jpg --json # tinycloud/deepface: find the face IN the clip
overcast face <new-clip> --match ./suspect.jpg --index <index-id> --json # deepface-local matcher over the clip
overcast similar match ./suspect.jpg --index <index-id> --json # basic-clip semantic image match
- The alert / triage queue — the BOLO board. New hits queue as
suggestedleads (quarantined from ask/brief until reviewed). Confirm a real hit withaccept(stamping it onto the reference line); reject a false positive withdismiss(never re-fires for that match):
overcast finding list --state triage --json # the BOLO board (leads awaiting review)
overcast finding accept <finding-id> --target <target-id> --json # confirm the hit onto the reference line
overcast finding dismiss <finding-id> --note "wrong person" --json # reject a false positive
- The wall / live surface (optional). Keep a control-room view of the standing watch — every case video muted and looping at its best evidence moment, freshest first:
overcast wall --refresh 60 --theme csi --json # static HTML monitor wall
overcast brief --export ./bolo.html --json # periodic cited report
For a LIVE self-updating page, an operator serves the situation room
(overcast situation in its own pane, or /situation on in the TUI) — never
the agent. Full drill: overcast-situation-room.
Output
A standing case that alerts on visual matches over time. For each confirmed hit
return: the reference (image target) it matched, the source clip's record.id +
media.at, the match score (face similarity 0–100 / similar 0–100), the
suggested→accepted finding id, and the reference target line it lands on.
State the cadence, which sources are live, and which matcher (tinycloud vs
deepface-local) the watch runs on.
Caveats
- A face/image target is EXCLUDED from text auto-findings — the visual match is
the trigger, so you must run
face --match/similar matchon new media (or wire it viacase setup), not rely on a text phrase. - Auto-suggested visual hits are LEADS, not identifications — face embeddings
degrade on poor lighting, small faces, and heavy angles. Corroborate a single
borderline match (a second clip,
overcast-lineup) before naming anyone. - Apify-backed sources (
x,tiktok,instagram,lens) bill per result; keep--limitlow on a frequent loop. The wall decodes real video (~25 tiles is a practical ceiling — use--source/--sinceto scope it). - Hard processing failures are marked seen (no infinite retry); credential/pending
gaps stay retryable — run
overcast doctor --sourceswhen a feed goes quiet.
Deferred follow-up (not in v1)
- Alert on a text description ("a person in a red hoodie carrying a
backpack"). This needs a standing open-vocab detector (
see --detect) on every incoming frame — noisier and costlier than a reference match, so it is out of scope for v1. Today, key a BOLO on a face/image reference. For a text-KEYWORD watch (a name/phrase in sensed transcripts), useovercast-stakeoutwith a non-image text target instead. - A first-class
bolostate verb wrapping steps 1–4 (register → watch → auto-match → triage) is a possible future convenience. v1 is skill-only over the existing verbs; no new verb was added.