Build lists of people to reach out to — sales prospects, potential hires, journalists, investors, collaborators, anyone. Use this skill whenever the user wants to find people to contact, build a prospect list, generate leads, research potential contacts, or enrich existing contacts with emails/LinkedIn/phone numbers. Also trigger when the user mentions outreach, prospecting, lead gen, contact lists, cold outreach, recruiting lists, or sourcing candidates — even if they don't explicitly say "lead generation."
Build a list of people to reach out to — a clean, complete list with the right contact details filled in. The user will steer: reviewing batches, asking for changes, filtering people out, pivoting criteria. Follow their lead.
Work happens in small batches of 5–8 contacts. Each batch is a tool call the user can approve or deny — this is how the user shapes the list without micromanaging every search.
Before each batch, write one or two sentences identifying who's being added and why they fit — specific enough to be useful, short enough to scan: "Six CTOs at European fintech Series B/C companies — one ex-Stripe, a couple of repeat conference speakers."
If they keep approving without comment, trust your judgment and keep narration tight. If denied, infer what was wrong, say in one line what you're adjusting, and keep going. Only ask a direct question if you've been denied several times and genuinely can't tell why.
When you're reading across dozens of web pages and sources, you need somewhere structured to put what you find. Without a schema agreed upfront, you end up with inconsistent fields, missing data, and reformatting work at the end. The schema describes what a fully-ready contact looks like — the work is progressively getting each contact to that state.
Before finding anyone, establish:
Propose a single master schema with every field that will ever matter. Include everything now — adding fields later means going back through every existing record. Most fields start optional and become required as contacts get enriched. Get a yes, then start.
Contacts go in JSONL files — one schema object on line 1, then one contact per line after that.
This format exists for three reasons:
leads_discovered.jsonl, leads_enriched.jsonl). If enrichment goes sideways, discovery is untouched.{"_schema":true,"stage":"discovered","fields":{"full_name":{"type":"string","required":true},"company":{"type":"string","required":false},"title":{"type":"string","required":false},"email":{"type":"email","required":false},"linkedin_url":{"type":"url","required":false},"phone":{"type":"e164","required":false},"notes":{"type":"string","required":false}}}
The enriched file has the same fields — only required flags tighten. Valid types: string, url, email, e164, integer, boolean.
cat >> leads_discovered.jsonl << 'ENDBATCH'
{"full_name":"Jane Smith","company":"Acme","title":"VP Engineering","email":null,"linkedin_url":"https://linkedin.com/in/janesmith","phone":null,"notes":""}
{"full_name":"Tom Okoro","company":"Finstack","title":"CTO","email":null,"linkedin_url":null,"phone":null,"notes":"via TechCrunch"}
ENDBATCH
Every record includes every schema field. Use null for unknowns — never omit a key. Downstream tools and exports break on missing keys, and it makes it obvious at a glance what still needs to be found.
Enrichment fills in the nulls — researching each person to find their email, LinkedIn, phone, etc. It happens in a new file so the raw discovery list is preserved. The enriched file uses the same schema with tighter required flags.
If a required field can't be found after genuine effort, write the record anyway and note what's missing. Never silently drop a contact — the user can decide what to do with incomplete records.
The output feeds into outreach tools, CRMs, and mail merge — inconsistent formats break things downstream.
https:// URLs, never bare handles or domains. If you only have a handle, construct the full URL; if unverified, note it.+14155550100). No spaces, dashes, or parentheses.null and note the suspected pattern.null. Never omit the key. Never guess.