icp-prompt-builder
Skill759 starsChanged 28 days agoMITView on GitHub
Interactive loop that builds and tunes an AI prompt for evaluating whether a company fits a client's ICP. Run after any list-building skill (disco-like, blitz-list-builder, google-maps-list-builder, prospeo-full-export) to qualify companies before scaling. Iterates batches of 10 companies with user feedback, stops when 2 consecutive rounds have zero corrections, saves the final prompt for reuse. Always uses Claude Code Task sub-agents — never an external API key.
We split this skill into the rules it gives an agent
9 rules. 0 are common, 9 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 8
Before you pay to pull 5,000 companies, tune a qualification prompt on 10-50 of them.
- Distinctive: line 103
If the user has zero corrections, log this round as "approved."
- Distinctive: line 107
If the user gave corrections:
- Distinctive: line 108
Add/remove qualification criteria
- Distinctive: line 110
Add specific examples of edge cases ("companies like X are NOT a fit because Y")
- Distinctive: line 145
Show the prompt each round: After each refinement, display the current full prompt back to the user so they can see what changed.
- Distinctive: line 185
Building the prompt too tight on round 1: Start broad, narrow with feedback.
- Distinctive: line 187
Using only "qualified: true/false" without confidence: Always ask for confidence — 0.5-0.7 borderline cases are where you learn the most.
- Distinctive: line 199
Or wait: if the prompt didn't converge within 5 rounds (you kept making corrections), your source data may be too thin.
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
ICP Prompt Builder
Before you pay to pull 5,000 companies, tune a qualification prompt on 10-50 of them. This skill walks you through the iterative loop.
Why this exists
List-builder skills (DiscoLike, Blitz, Prospeo, Google Maps) return COMPANIES, but they don't know whether those companies match your ICP. If your list-builder returns 5,000 companies and 80% are wrong fits, you'll waste money enriching them for emails that go nowhere.
The fix: build an AI qualification prompt BEFORE scaling. Pull 10 companies, have the prompt score them, compare to your judgment, refine, repeat. Once the prompt agrees with you 2 rounds in a row with zero corrections, lock it in and apply it at scale.
Always uses Task sub-agents (no API key)
This skill runs entirely inside Claude Code via the Task tool. No Anthropic SDK calls, no OpenAI calls — Claude Code does the scoring itself. This is intentional:
- No extra API spend. Uses your Claude Code plan.
- No key management. Works out of the box.
- Scaleable within reason. For 20-100 evaluations, parallel Task sub-agents batch 10-20 companies per agent.
At very large scale (5,000+ companies per batch), you may want to export the tuned prompt and run it through the OpenAI / Anthropic API with parallelism for speed. But TUNING happens inside Claude Code.
The loop (8 steps)
Step 1 — Gather ICP context
Claude asks the user (or reads client-profile.yaml from /icp-onboarding):
- Website of the client selling (to scrape for context)
- Who IS a good customer? What makes them a good fit?
- Who is NOT a good customer? What disqualifies them?
- Any specific signals? (B2B only, revenue range, tech stack, hiring status, recent fundraise, etc.)
- Any HARD disqualifiers? (competitor domains, existing customer domains, certain industries/geographies)
Step 2 — Select 10 test companies
Pull 10 companies from the list-builder output:
- Mix likely-good and likely-bad fits
- Variety in industry, size, location
- Each company needs at minimum:
domain, company_name, industry, headcount, description - Richer fields (Clay-derived: Business Type, Scale Scope, Revenue) make scoring better
Step 3 — Build the initial qualification prompt
Template:
You are an ICP evaluator for {CLIENT_NAME}.
## Target ICP
{ICP description from user or client-profile.yaml}
## Qualification criteria (MUST be true)
- {criterion 1}
- {criterion 2}
- ...
## Disqualification criteria (ANY match = disqualify)
- {disqualifier 1}
- {disqualifier 2}
- ...
## Input
You will receive a company with these fields:
- domain, name, industry, headcount, description
- (optional) Business Type, Revenue, Scale Scope
## Output
For each company, return JSON:
{
"qualified": true | false,
"confidence": 0.0-1.0,
"reason": "one-sentence explanation"
}Step 4 — Run the prompt on the 10 companies
Via the Task tool. Launch one Task sub-agent that reads the prompt + 10 companies, returns 10 JSON scores.
Step 5 — Present results to the user
Format as a table:
Company | Qualified | Conf | Reason
--------------------------+-----------+------+----------------------------------------
acme-corp.com | YES | 0.92 | B2B SaaS, 200 employees, target industry
random-nonprofit.org | NO | 0.95 | Nonprofit, not a business customer
edge-case-company.com | YES | 0.55 | Could fit but revenue model unclearStep 6 — Collect user feedback
Ask specifically:
- Which evaluations are wrong? (e.g., "acme-corp should be NO because they're a competitor")
- Which are right but for the wrong reason?
- Any patterns the prompt missed?
- Any new disqualifiers to add?
If the user has zero corrections, log this round as "approved."
Step 7 — Refine the prompt (or move on)
If the user gave corrections:
- Add/remove qualification criteria
- Tighten/loosen disqualifiers
- Add specific examples of edge cases ("companies like X are NOT a fit because Y")
- Adjust confidence thresholds if everything is coming back 0.5
Then go back to Step 4 with a NEW batch of 10 companies.
Step 8 — Stop condition + save
The loop ends when 2 consecutive rounds have zero corrections from the user. When that happens:
- Save the final tuned prompt to
~/cold-email-ai-skills/profiles/<business-slug>/icp-prompt.txt - Append metadata to
client-profile.yaml:
icp_qualification_prompt:
path: profiles/<slug>/icp-prompt.txt
tuned_at: YYYY-MM-DD
rounds_to_convergence: 3
final_batch_size: 10- Print a one-liner for the next skill:
Prompt locked. To score your 5000 companies:
npx tsx ~/cold-email-ai-skills/skills/list-expander/scripts/score-batch.ts \
--prompt-file=profiles/<slug>/icp-prompt.txt \
--companies=path/to/companies.csv \
--out=scored.csvApproval-loop rules (important)
- Never auto-approve. Even if the prompt looks right, require the user to explicitly say "approved" or give zero corrections for 2 consecutive rounds.
- Reset counter on any correction. One correction resets the streak to 0.
- Don't skip the batches. Running 30 companies all at once feels faster but masks errors. 10 at a time is the right batch size — small enough to eyeball.
- Show the prompt each round. After each refinement, display the current full prompt back to the user so they can see what changed.
- Always use Task tool sub-agents for the scoring inside each round. Never call external APIs.
Using the tuned prompt at scale
Once saved, the prompt is applied to the full list via list-expander/scripts/score-batch.ts. Options:
Option A (free, slow) — run through Claude Code Task sub-agents in batches of 20 companies per agent. Good for <500 total.
Option B (paid, fast) — export prompt + companies to OpenAI / Anthropic API with parallelism. Good for 500-50,000.
The script supports both. Default is Option A to keep everything inside Claude Code.
Recommended flow
/icp-onboarding→ produceclient-profile.yaml/disco-likeOR/blitz-list-builderOR/prospeo-full-export→ pull a sample of 50-100 companies/icp-prompt-builder→ tune qualification prompt on that sample (3-5 rounds typical)- Scale the list-builder to 5,000+ companies
- Apply the tuned prompt to the full list → only keep
qualified: truewithconfidence >= 0.6 /blitz-list-builderor/list-builder(Phase 5, emails) on the qualified subset- Upload to Smartlead
Data points the prompt can use
From most list-builder outputs:
- domain, company_name, industry, headcount, description, LinkedIn URL
Additional fields (if enrichment skills have been run):
- Business Type (B2B / B2C / B2B2C)
- Annual Revenue range
- Scale Scope (Enterprise / Mid-Market / SMB)
- SubIndustry (more specific than primary industry)
- Tech stack (Clearbit, BuiltWith data)
- Recent signals (funding, hiring, news)
Tell the AI about the fields you have access to in the prompt preamble.
Common mistakes
- Building the prompt too tight on round 1. Start broad, narrow with feedback.
- Not including negative examples. "Companies like Netflix are NOT a fit because they're B2C" is more powerful than generic "must be B2B".
- Using only "qualified: true/false" without confidence. Always ask for confidence — 0.5-0.7 borderline cases are where you learn the most.
- Scoring 50 at once "to save time." Defeats the point of the loop.
- Not saving the prompt. The point of tuning is reuse. If you don't save, you'll re-tune next time.
Scripts
scripts/score-batch.ts— apply tuned prompt to a CSV of companies
What to do next
Apply the tuned prompt to your full list (the list-building skill you came from — Prospeo, Blitz, DiscoLike, Google Maps, or Competitor Engagers — will walk through this). Then /list-quality-scorecard to grade the filtered output.
Or wait: if the prompt didn't converge within 5 rounds (you kept making corrections), your source data may be too thin. Enrich with more fields (company description, headcount, tech stack) before retrying.
Related skills
/icp-onboarding— run FIRST to produce client-profile.yaml/disco-like,/blitz-list-builder,/google-maps-list-builder,/prospeo-full-export— pull the companies this skill qualifies/personalization-subagent-pattern— same approval-loop pattern, applied to copy personalization
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 1
- automatewithuday/GTM-Skills★ 187% same
Wrote their own version · 2
- Moussaoui-Ghiles/claude-skills★ 4same name
- automatewithuday/linkedin-competitor-icp-scorer★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository51 other files it gives its agents.
- auto-research-publicSkill
- blitz-list-builderSkill
- campaign-copywritingSkill
- campaign-strategySkill
- cold-email-kickoffSkill
- cold-email-starter-kitSkill
- cold-email-weekly-rhythmSkill
- competitor-engagersSkill
- deliverability-incident-responseSkill
- deliverability-test-publicSkill
- disco-likeSkill
- email-deliverability-auditSkill
- experiment-designSkill
- google-maps-list-builderSkill
- icp-onboardingSkill
- inbox-lifecycle-managerSkill
- lead-magnet-brainstormSkill
- list-builderSkill
- list-expanderSkill
- list-quality-scorecardSkill
- perfect-company-listSkill
- personalization-subagent-patternSkill
- clay-playbooksSkill
- playbook-ad-librarySkill
- playbook-ai-specificitySkill
- playbook-case-study-pageSkill
- playbook-company-name-cleaningSkill
- playbook-creative-ideasSkill
- playbook-first-name-cleaningSkill
- playbook-fundraisingSkill
- playbook-google-site-searchSkill
- playbook-hiring-surgeSkill
- playbook-job-posting-languageSkill
- playbook-linkedin-engagementSkill
- playbook-lookalikesSkill
- playbook-name-to-other-prospectsSkill
- playbook-new-in-roleSkill
- playbook-pricing-pageSkill
- playbook-social-link-findingSkill
- playbook-social-postsSkill
- playbook-tech-on-websiteSkill
- playbook-warm-introsSkill
- positive-reply-scoringSkill
- prospeo-full-exportSkill
- prospeo-search-apiSkill
- smartlead-apiSkill
- smartlead-campaign-upload-publicSkill
- smartlead-inbox-managerSkill
- smartlead-spintaxSkill
- spam-word-checkerSkill
- zapmail-domain-setup-publicSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

