agentleFS
corebits-iocorebits-io/deal-origination-system/skills/target-discovery/SKILL.md

target-discovery

Skill1 starsChanged 3 months agoMITView on GitHub

Find private companies that match an acquisition thesis. Works public sources — association directories, trade show exhibitor lists, registries and licensing boards, franchise directories, review platforms, job boards, PE portfolio pages — records a source for every row, and never fabricates a field. Triggers on: find targets, find acquisition targets, build target list, target discovery, source deals, deal sourcing, sourcing run, find companies to buy, find businesses to acquire, who should I acquire, build a deal list.

The file

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 5 are distinctive, and 6 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 6

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Read thesis-profile.md from the user's workspace.

    line 21
  2. Very specific:

    If it does not exist: stop. Copy templates/thesis-profile.md into the workspace and walk the user through sections 2, 3, 4, and 7 at …

    line 23
  3. Distinctive:

    Check section 10 (Compliance notes):

    line 30
  4. Very specific:

    TBD or blank: stop and ask.

    line 38
  5. Distinctive:

    Ask for a target list size.

    line 55
  6. Very specific:

    Wait for confirmation before searching.

    line 59
  7. Very specific:

    Not found is correct and expected: Use it constantly. Never fill a gap with a plausible guess.

    line 101
  8. Distinctive:

    Quote, do not summarize, the signal: If you cannot quote it, you do not have it.

    line 107
  9. Distinctive:

    Every row carries its source URL: No exceptions.

    line 109
  10. Distinctive:

    Respect robots and terms: Read pages. Do not bulk harvest sites that prohibit it.

    line 114
  11. Very specific:

    Leave fit_score and fit_reason blank.

    line 146

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Target Discovery

Builds the target list everything else runs on. The quality of this step sets the ceiling on the entire origination effort, so it is slow and it is careful.

Read first:

  • references/target-taxonomy.md — who can actually sell, and to whom you talk
  • references/sourcing-directories.md — where private companies are findable
  • references/scoring-rules.md — the anti-fabrication rules
  • references/compliance-and-ethics.md — the lines you do not cross

Step 0 — Load the thesis profile

Read thesis-profile.md from the user's workspace.

If it does not exist: stop. Copy templates/thesis-profile.md into the workspace and walk the user through sections 2, 3, 4, and 7 at minimum. Do not research without it. A list built without a thesis is a list of companies for somebody else's fund.

🚧 HARD GATE — intermediary check

Check section 10 (Compliance notes):

  • Principal buyer (buying for your own fund, search, or holdco): proceed.
  • Fee-based intermediary (paid to introduce deals to other buyers): STOP. In the US this can trigger broker-dealer registration risk. Tell the user plainly and proceed only after they confirm counsel has cleared their model. Per references/compliance-and-ethics.md, this is not legal advice — but it is the question counsel will ask first.
  • TBD or blank: stop and ask.

Step 1 — Confirm the search brief

Restate back to the user, from the profile:

  • Sectors and business models wanted
  • The size box: revenue range, EBITDA range, check/EV range
  • Geography, or No constraint
  • Ownership types that are actionable, per target-taxonomy.md
  • Explicit exclusions and existing-portfolio conflicts
  • Who counts as a competitor (ask directly if the profile is vague — a competing sponsor's platform and a conflict with your own portfolio are different things, and both matter)

Ask for a target list size. Recommend 100 to 300 for a first run. If the user asks for thousands, say plainly why that is worse, then do what they decide.

Wait for confirmation before searching. If the sector is unfamiliar or the brief feels thin, offer to run market-mapping first.


Step 2 — Plan the search, then show the plan

Build a source plan from references/sourcing-directories.md. Weight it toward Tier 1, because that is where private companies actually appear and everyone else skips it.

A good plan for ~200 targets looks roughly like:

AngleMethodRough yield
Association directoriesMember lists of 2 to 4 sector associations40 to 80
Trade show exhibitorsExhibitor lists from 2 to 3 sector events30 to 60
Registries and licensingState registries, Companies House, license boards20 to 50
Review platforms and mapsGoogle Maps density scan for local services20 to 50
Local press listsBusiness journal fastest-growing and family lists10 to 30
Job boardsActive hiring as an operating signal10 to 30
PE portfolio pagesWho is consolidating; the independents around them10 to 20

Run several angles. Each one is blind to what the others surface. Good private companies are often visible in exactly one place.

Show the plan. Get a nod. Then go.


Step 3 — Research

Work one angle at a time. For each candidate, capture only what you can see:

  • Company name, domain, HQ location
  • Sector and subsector
  • Ownership type per target-taxonomy.md, or Not found
  • Year founded and employee count, if published
  • An operating signal, quoted, with its source URL and date

Rules while researching

  1. Not found is correct and expected. Use it constantly. Never fill a gap with a plausible guess.
  2. Never infer revenue or EBITDA from headcount and present it as fact. If you estimate, label it an estimate and state the basis in the same field.
  3. A thin website is normal for a good private company. It is not a negative signal. Do not skip a company for looking small online.
  4. Quote, do not summarize, the signal. If you cannot quote it, you do not have it.
  5. Every row carries its source URL. No exceptions.
  6. Check the domain before merging near-identical names. Similar names are usually different companies.
  7. Dead or parked site: record that as the finding. Do not describe the company from memory.
  8. Respect robots and terms. Read pages. Do not bulk harvest sites that prohibit it.

Deduplicate as you go

Match on domain, not on name. Keep the row with the better source. Record where the duplicate came from, since appearing in three independent sources is itself a mild positive signal.


Step 4 — Write targets.csv

Append to the workspace targets.csv, creating it from templates/targets.csv if absent. Schema:

company,domain,hq_location,sector,subsector,ownership_type,year_founded,
employee_count,est_revenue,est_ebitda,fit_score,fit_reason,signal,
signal_source,evidence_date,owner_name,owner_title,owner_linkedin,owner_email,
email_status,succession_signal,warm_path,warm_path_via,source,date_added,
status,notes

At this stage you fill: company, domain, hq_location, sector, subsector, ownership_type, year_founded, employee_count, signal, signal_source, evidence_date, source, date_added. Set status to identified.

Fill est_revenue and est_ebitda only if published, or as a labeled estimate with the basis stated. Otherwise Not found.

Leave fit_score and fit_reason blank. That is thesis-fit-scoring's job, and doing it here skips the rubric. Leave every owner and contact field blank. That is founder-research and contact-verification's job.

Everything unknown is the literal string Not found. Never blank, never a guess.

🚧 HARD GATE — before writing

Show the user:

  • How many rows you are about to add
  • How many are new vs. duplicates of existing rows
  • The breakdown by subsector and ownership type
  • Five sample rows in full, so they can inspect actual quality
  • Any angle that produced little or nothing, and why

Get approval. Then write.


Step 5 — Report honestly

Discovery run complete

Added:            164 new targets
Duplicates:       19 (already in list)
Total list size:  164

By ownership type:
  founder-owned           88
  family-owned            34
  partner-owned           11
  PE-backed (platform)     9
  Not found               22

Evidence quality:
  Quoted signal + source   102
  Company confirmed only    62
  Revenue published          7
  Revenue Not found        141   (16 labeled estimates)

Angles run:      7 of 7
Weakest angle:   Import/export records (4 rows — sector is mostly services)
Not yet done:    Fit scoring, owner research, contact verification

Next: run thesis-fit-scoring to qualify these.

Report what did not work. A silent shortfall reads as coverage. If an angle returned little, say so and say why. If you capped anything, say where.


Notes

  • Stop and check in every 50 rows or so on a large run. Show a sample. It is much cheaper to correct the brief at row 50 than at row 300.
  • Volume is not the goal. 150 well-sourced rows beat 1,500 scraped ones on every metric that matters, including owner conversations booked.
  • If yield is low, the brief is probably too narrow. Come back to the user with what you are seeing rather than padding the list to hit a number.
  • Never score a row here. The rubric exists for a reason.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.