I gave my coding agent a test offer: writing comparison pages for B2B software companies. Then I asked it to find five businesses I could approach.
For each company, I wanted a reason the offer fit, a person responsible for that work, a public way to find them, and a first email. I also wanted the sources, because I needed to be able to check the recommendation before using it.
The workflow lives in AI Client Hunter, a small open-source skill for Claude Code and Codex.
The interesting part of the test was what happened when the research got messy.
The run found four named founders or operators whose roles were supported by official company pages. It established two LinkedIn profiles through company links and one additional professional profile that was still under construction.
It found zero personal email addresses.
Two companies needed more contact research. One had a named founder without a supported personal route. Another had conflicting information about the current marketing owner. The messages stayed as drafts.
That distinction matters when you are looking at a spreadsheet. A row with a name, title and link can look finished long before you have enough information to contact that person.
One old author biography still listed a cofounder as CTO. A newer company help page said he had left. The current team page supported a different person, who was selected instead.
On another account, a company announcement named a marketing leader, but the person's publicly indexed profile pointed to a different employer. That account stayed unresolved.
Those checks gave me something concrete to review. They also stopped missing information from disappearing inside a confident-looking recommendation. This was one small run; it says nothing about reply rates or sales.
The skill itself is Markdown. It tells the agent how to qualify companies, check roles, keep source evidence and draft outreach.
Your existing agent does the browsing and reasoning. There is no separate prospecting server to run, and the skill requires no enrichment subscription. Your normal model and tool usage still applies.
I want to be able to return to a campaign and see why a company made the list. The instructions ask the agent to preserve earlier research, investigate missing facts and continue unfinished work. That makes the next session easier to brief.
Qualification also happens before drafting. If the company doesn't fit the offer, it gets excluded or left for review. If a person's role is uncertain, that uncertainty stays in the output.
The same applies to the message. The agent needs an observed finding that connects to the offer. Knowing a company exists is a weak reason to pitch it.
Install it for Claude Code and Codex:
npx skills add perceptcore/ai-client-hunter --skill ai-client-hunter --agent codex claude-code
The installer needs Node.js/npm. The agent needs web access for live research.
Here is an example brief for a developer who sells API documentation services:
Use $ai-client-hunter to research five UK B2B API companies.
My offer is writing API integration guides for developer onboarding.
Find founders or developer-marketing leads.
For each company, save:
- Why it fits my offer
- One relevant public finding
- The responsible person and their current role
- A published work email or professional profile
- Sources, observation dates and unresolved gaps
Draft a short first email and two follow-ups.
Save prospects.csv and outreach.md under campaigns/api-guides.
Keep missing contacts and conflicting roles marked for review.
If you sell your own product, describe the use case and the kind of business it serves. The agent needs something specific enough to rule companies out.
To show the output without publishing real prospect data, here is a fictional example.
Suppose Northstar API has launched webhooks. Its reference lists event fields, but there is no end-to-end subscriber example. Maya Chen is listed as founder on the team page.
The supporting pages would be recorded alongside the finding: northstar-api.test/updates/webhooks and northstar-api.test/team/maya. The company, person and reserved .test addresses are made up.
A draft for that account could read:
Subject: A working example for Northstar's webhooks
Hi Maya,
Your webhook launch gives developers a new way to react to completed jobs. I can write a runnable integration guide that connects the event reference to a working subscriber, including signature checks and duplicate-event handling.
Would you like an outline?
That is a bounded offer the recipient can evaluate. It leaves room for the team to say they already have the guide covered.
If the research found only Maya's professional profile, the email would remain a review draft. A generic support address would be labelled separately.
Run a batch of five before asking for fifty. Open the sources, check the person's role and decide whether the proposed email gives them a sensible reason to respond.
If the agent returns generic descriptions, tighten the offer or qualification criteria and run the missing research again. Save the useful findings so you can continue from them.
AI Client Hunter is on GitHub. Try it on an offer you can explain in one sentence. If it makes a bad selection, open an issue with a redacted example and the instruction you would change.