---
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

1. 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:

```bash
overcast doctor --json
overcast case init --json
overcast listen ./call.wav --json                 # speech transcript + time-anchored segments
overcast listen ./call.wav --describe --json       # background audio scene (tinycloud describe)
overcast view ./call.wav --spectrogram --json      # visual inspection artifact (tones, hums, edits)
```

2. Isolate voices from noise and re-transcribe the cleaned track — a second pass
   often recovers words the first missed:

```bash
overcast enhance ./call.wav --ops voice-isolate,denoise --json   # bundled-ffmpeg filter (fast, lossy)
overcast enhance ./call.wav --ops separate --json                # true source separation → a track per speaker
                                                                 # (local pyannote: scripts/visual-db-uv.sh --voice + HF_TOKEN, or fal)
overcast listen <enhanced-record-id> --json
```

3. 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:

```bash
overcast provider setup apply --verb listen --choice elevenlabs --yes --json
overcast listen ./call.wav --diarize --json        # -> <diarize-record-id> (speaker-labeled)
```

4. 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:

```bash
overcast index create voices --type voice-print --local --json
overcast voice add ./call.wav --index voices --json               # enroll each recording
overcast voice match ./voicemail.m4a --index voices --json        # which recordings share this voice?
overcast voice match ./call.wav ./known-sample.wav --diarize --json  # WHICH diarized speaker matches (HF_TOKEN)
```

   `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:

```bash
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   # same recording? time-offset aligned
```

   Full drills: `overcast-voiceprint` (WHO is speaking) and `overcast-audio-match`
   (same recording surfaced again).

5. 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):

```bash
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
```

6. Turn confirmed clues into findings and export; always leave a `tldr` note:

```bash
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
# Wait for the note result before exporting, so the TL;DR is included.
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.
