Signal Finder is a small open-source command-line tool that turns hours of someone talking into one page you can use, and finds one real thing a person said so a cold opener proves you listened. We fed it two public Andrej Karpathy recordings, about 3 hours and 34,211 words, and got a one-page playbook back from 10 model calls. The model proposed 106 quotes; the code threw out 4 because they were not in the transcript word for word. If it cannot find a real signal on a person, it writes no opener at all.
What we did
Two ideas started this. A video of someone turning 40 hours of podcasts into a one-page playbook with Claude. And an old sales tip: the best cold opener quotes something the person actually said in public. Both are the same job, which is reading a lot of talk and keeping only the parts that hold up. So we built one Python file with two modes.
playbook takes YouTube links, transcript files, notes or web
pages. It splits each into chunks of about 24,000 characters, asks Claude
(Opus 5.5 by default) for up to 12 ideas per chunk with a supporting quote,
then makes one more call to merge them into principles, steps, quotes and
contradictions. Every line has to cite the items behind it.
signal takes a name, a company and some public URLs (or an
Exa search, if you have a key). It skips any source that does not mention
the person, pulls up to 5 things they said per chunk, picks the strongest
and most recent, and fills a fixed template: "Hey [Name], thanks for
connecting. I saw [signal], which is exactly what I wanted to ask you
about."
The part we care about is in code, not the prompt. Every quote is searched for in the source text. If it is not there, it is dropped. Timestamps come from where the code found the quote, not from the model. No verified signal means no opener and exit code 3.
What it produced
The playbook run on Karpathy's YC talk (June 2025) and his Dwarkesh Patel interview (October 2025) cost about 80,000 input tokens. Three of the six quotes it kept, unedited:
> "usually they are doing the generation and we as humans are doing the verification. It is in our interest to make this loop go as fast as possible." S1 22:16 > "there's a very large demo-to-product gap where the demo is very easy, but the product is very hard." S2 1:44:54 > "When you get a demo and something works 90% of the time, that's just the first nine." S2 1:46:10
The best section was the one we did not ask a human to write: the tensions. It noticed that one source says LLMs can already click around interfaces, while the other says current agents cannot really do computer use. The full page is in the repo.
Then the signal mode, on Simon Willison and four of his public blog posts from October and November 2026:
Strongest signal > "I'm not ready to declare that the age of source code is over and our future involves incomprehensible machines editing their own model weights in incomprehensible ways." Source: Qwen 3.8 27B on my laptop can interpret model weights, too, 2026-11-03 Opener Hey Simon, thanks for connecting. I saw your Qwen 3.8 27B post where you said you're not ready to declare the age of source code over, which is exactly what I wanted to ask you about.
And the path that matters most, a name that is not in the source:
No verified public signal found. No opener generated. - S1: skipped, does not mention Ada Placeholder model calls: 0
Why it was worth doing
Summaries of long audio are easy to make and hard to trust, because a paraphrase dressed up as a quote looks exactly like a quote. Four bad quotes in 106 sounds small until one of them is the line you repeat to someone. Openers are worse: a generic "loved your recent post" is the thing people learn to ignore, and an invented one is worse than none. A check in code is boring, and it is the only part you can rely on.
What's still off
Transcripts are machine-made. The YC transcript calls him "Andre Carpathy". The first fetch of the same video came back in German, because YouTube served an auto-dubbed track, so the tool now refuses a language it did not ask for. The verbatim check proves the words are in the transcript, not that the person said them: listen to the clip before you use it. In a podcast, telling the host from the guest is the model's call. "Most recent" depends on dates you supply. It reads public sources only, and only the ones you point it at.
FAQ
Does it need an API key to try?
No. python3 signal_finder.py demo runs both modes on bundled synthetic fixtures with a heuristic stand-in for the model, and the 12 unit tests need no network. Real runs need an Anthropic API key.
How does it get YouTube transcripts?
The fetcher is pluggable: youtube-transcript-api (free, often blocked from cloud servers), Supadata (has a free tier, returns timestamps), or any command you supply. Local .vtt, .srt, text and markdown files work too.
What stops it inventing personalisation?
Code, not instructions. Every quote must appear word for word in the source it is attributed to, and if no quote survives that check the tool returns no opener and exits with code 3.
Steal the code, tests and both real outputs from the public mirror.