| name | list-pruner |
| description | Clean a contact list before outreach - remove duplicate emails, flag missing fields, and score each row High / Medium / Low. Say "prune this list", "clean my contact list", "remove duplicates", or "score this list". Accepts a CSV path or a pasted table. Returns a clean markdown table; writes a file only if you ask. |
| why | A list full of duplicates and half-filled rows turns a focused outreach week into busywork. Scoring and de-duping it up front means every row you contact is worth contacting. |
| summary | Clean a contact list before outreach - de-dupe, flag gaps, score each row. |
| enhance | Run it before any outreach push, not after - the High, Medium, Low score is most useful when it decides who you contact first, not when you are already halfway down the list. |
| allowed-tools | ["Read","Write","Edit","Glob","Grep"] |
| mcp_requirements | [] |
List Pruner
Runs on: reasoning - reads your files and reasons; any capable agent can run this.
Prepare a contact list for outreach planning. The skill removes duplicate emails, flags missing fields, assigns a quality score, and returns a clean markdown table or CSV-ready output.
Pre-flight
If core/identity.md does not exist, stop with: Founder OS not set up here. Run /founder-os:setup first.
When to invoke
Invoke when you provide a CSV, a pasted table, or a path to a contact list before outreach. Also invoke during a list review when a campaign list may contain stale rows.
Protocol
- Read the input list from a CSV path or a pasted table.
- Confirm the required columns are present, or map similar columns to
name, email, company, title, persona, and signal.
- Normalize emails to lowercase.
- Remove duplicate rows by email. Keep the row with the most filled fields.
- Flag any missing email, company, title, persona, or signal.
- Score each row:
High when email, company, title, persona, and signal are all present.
Medium when email is present and exactly one non-email field is missing.
Low when email is missing, or two or more non-email fields are missing.
- Return a clean table with
score and flag columns.
- Write a clean CSV only if you ask for a file. If writing, confirm the output path first.
- Append a one-line trace to
brain/log.md (#acted tag) recording input rows, clean rows, and duplicates removed.
Output schema
list_pruner:
status: ok | blocked
input_rows: <number>
clean_rows: <number>
duplicates_removed: <number>
flagged_rows: <number>
output_table: