| name | overcast-wiretap |
| description | Work a recorded call or audio clip already in the case — separate the speakers, read the background scene for location clues, isolate and re-transcribe voices, and correlate content across recordings. |
overcast-wiretap
Use this skill to analyze audio recordings you already hold (a call, a voicemail, a
field recording): how many people speak, what the background reveals about where it
was recorded, and whether two clips share a voice or a phrase. Use the broad
overcast skill and overcast/reference/verbs.md for exact flags.
Workflow
- Transcribe the recording and read its background scene on the default
backend.
--describe surfaces the whole audio scene (traffic, trains, a PA
announcement, church bells) — the "enhance the background noise" move that
places a recording — and is a tinycloud/Cloudglue multimodal feature, so do all
the transcript/describe work FIRST, before binding any speech-only provider:
overcast doctor --json
overcast case init --json
overcast listen ./call.wav --json
overcast listen ./call.wav --describe --json
overcast view ./call.wav --spectrogram --json
- Isolate voices from noise and re-transcribe the cleaned track — a second pass
often recovers words the first missed:
overcast enhance ./call.wav --ops voice-isolate,denoise --json
overcast enhance ./call.wav --ops separate --json
overcast listen <enhanced-record-id> --json
- Separate the speakers.
--diarize needs a diarize-capable listen provider
(the default tinycloud/Cloudglue listen is speech-transcript only and rejects
--diarize). Bind ElevenLabs for this — but do it LAST, after the describe /
multimodal steps above, because ElevenLabs Scribe is speech-only and drops the
audio-scene describe:
overcast provider setup apply --verb listen --choice elevenlabs --yes --json
overcast listen ./call.wav --diarize --json
- Verify a speaker's identity across recordings with the local voice-print DB
(speaker embeddings, not phrase matching —
scripts/visual-db-uv.sh --voice,
no token needed). Scores are rank scores, not liveness: a cloned/synthetic
voice can score high, so corroborate before naming anyone:
overcast index create voices --type voice-print --local --json
overcast voice add ./call.wav --index voices --json
overcast voice match ./voicemail.m4a --index voices --json
overcast voice match ./call.wav ./known-sample.wav --diarize --json
voice answers WHO is speaking (enroll a reference, then rank where/which). To
ask whether two clips are the SAME RECORDING (a re-upload/leak of an identical
file — a different question), fingerprint them with the local audio-fp DB,
which matches exact audio through transcode/noise but NOT pitch/speed:
overcast index create clips --type audio-fp --local --json
overcast audio add ./call.wav --index clips --json
overcast audio match ./leaked.mp3 --index clips --min-margin 2 --json
Full drills: overcast-voiceprint (WHO is speaking) and overcast-audio-match
(same recording surfaced again).
- Record per-speaker and per-clue observations, then correlate across recordings.
Cite the speaker-labeled
<diarize-record-id> for who-said-what claims (not the
step-1 transcript record):
overcast note "Speaker 2: PA announces 'platform 4' at 00:38 → rail station" --ref <diarize-record-id> --at 38 --confidence medium --json
overcast ask "which recordings share a speaker, phrase, or background cue? cite record.id + time" --verb listen --json
- Turn confirmed clues into findings and export; always leave a
tldr note:
overcast finding create "call.wav and voicemail.m4a share Speaker 2's phrasing + station PA — likely same caller/location" --ref <diarize-record-id> --confidence medium --json
overcast note "3 recordings; 2 speakers on call.wav; background = rail station; cross-clip voice overlap on 2 of 3" --tag tldr --json
overcast brief --export ./wiretap.html --json
Output
A per-recording speaker breakdown with timestamps, the background-scene clues that
locate or date it, any cross-clip voice/phrase overlaps, and the spectrogram
artifacts — each cited by record.id + media.at.
Caveats
--diarize needs a diarize-capable listen provider: the default tinycloud/Cloudglue
listen transcribes speech only and errors on --diarize — bind ElevenLabs
(provider setup apply --verb listen --choice elevenlabs --yes) for speaker
separation. Bind it LAST: ElevenLabs Scribe is speech-only and drops the audio-scene
--describe, so run all transcript/describe/multimodal work on the default backend
first, then rebind for the diarize pass. Diarization LABELS speakers ("Speaker
1/2"), it does not IDENTIFY them —
a name is a corroborated inference, never a diarizer output. voice match scores
speaker similarity, not liveness — a cloned/synthetic voice can score high and the
same speaker scores lower across languages or heavy compression, so treat a voice
match as a lead to corroborate, never an identification. voice-isolate on the
bundled ffmpeg is a filter, not source separation — for a real per-speaker split use
enhance --ops separate (local pyannote via scripts/visual-db-uv.sh --voice +
HF_TOKEN and the accepted pyannote license, or fal), or bind ElevenLabs
(--verb enhance --choice elevenlabs) for stronger isolation; either way re-listen
to confirm the cleaned transcript rather than trusting it blind. Background-cue
geolocation is suggestive, not definitive.