This skill should be used when the user wants to run the Outbound Pipeline Engine skill, or asks to "build my prospecting pipeline", "run my outbound research", "keep a prospect table current", or wants recurring ICP-filtered company and people discovery with scored rows and outreach drafts. Runs on the superagnt MCP: first-party people/company data + LinkedIn + workspace database. Drafts only — sending is always the human's.
Installs into .claude/skills of the current project.
Are you the author of Gtm Prospecting Desk?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/superagnt-gtm-prospecting-desk)
---
name: gtm-prospecting-desk
description: This skill should be used when the user wants to run the Outbound Pipeline Engine skill, or asks to "build my prospecting pipeline", "run my outbound research", "keep a prospect table current", or wants recurring ICP-filtered company and people discovery with scored rows and outreach drafts. Runs on the superagnt MCP: first-party people/company data + LinkedIn + workspace database. Drafts only — sending is always the human's.
version: 0.2.0
---
# Outbound Pipeline Engine
Outbound research end to end, compounding in one pipeline table. This skill
builds on the base `lead-generation` skill's workflow — read that one for the
per-step tool detail; this one adds the standing-desk structure.
## Step 0 — tools
`agnt_tools_list_enabled`; if missing:
`agnt_tools_enable({ "families": ["data:linkedin", "database"] })` (the
first-party `data_agnt_*` people/company tools are always on).
`requires_upgrade` → `confirm_url` to the user → wait → re-run. (The
gtm-prospecting-desk skill endpoint pre-enables these.)
## Tool names on grouped servers
This skill writes flat (per-operation) tool names. New superagnt servers list
grouped tools instead: one tool per resource with an `action` argument. Flat
names still resolve there but are not listed, so call the grouped form:
- `data_agnt_companies_search` / `data_agnt_companies_discover` → `data_agnt_companies`, action `search` / `discover`
- `data_agnt_people_search` / `data_agnt_people_enrich` → `data_agnt_people`, action `search` / `enrich`
- `data_agnt_people_email_finder` / `data_agnt_people_email_verifier` → `data_agnt_contacts`, action `find_email` / `verify_email`
- `data_linkedin_*` profile reads → `data_linkedin_profiles` (e.g. action `profile_by_url`)
- `agnt_db_insert` / `agnt_db_upsert` → `agnt_db_write`, action `insert` / `upsert`
- `agnt_db_select` → `agnt_db_read`, action `select`
- `agnt_agents_create` → `agnt_agents_write`, action `create`
- `agnt_schedules_create` → `agnt_schedules_write`, action `create`
- `agnt_tools_enable` → `agnt_tools_write`, action `enable`
On a grouped server every data source is already on, so skip the `data:*`
part of Step 0 (enable any other family with `agnt_tools_write`, action
`enable`). Grouped data calls return a compact markdown view: pass
`response_format: "json"` for every view field, or `"raw"` for the full
payload, when a step needs a field the table leaves out.
## Step 1 — pin the ICP (first run only)
Company filters (size, industry, geography, signals) + buyer titles + any
disqualifiers, into `icp_profile` (`agnt_db_insert`). Create
`prospects(id, company, company_domain, person, title, linkedin_url, email,
email_verified boolean, fit_score int, fit_reason text, status text,
draft text, updated_at timestamptz)` — upsert key (person, company_domain).
## Step 2 — the desk run
1. `data_agnt_companies_search` against the ICP filters (or
`data_agnt_companies_discover` for similar-to expansion); skip companies
already in the table unless refreshing.
2. `data_agnt_people_search` per company for the buyer titles;
`data_agnt_people_enrich` on the chosen person; `data_linkedin_*` for
profile detail when the LinkedIn family is enabled.
3. `data_agnt_people_email_finder` then ALWAYS
`data_agnt_people_email_verifier`. Unverified rows keep
`email_verified=false` — they stay workable via LinkedIn.
4. `agnt_db_upsert` every row with `status` transitions
(new → enriched → scored → drafted) so a failed run resumes instead of
restarting.
5. Score each row (fit_score + one-line fit_reason from the ICP), then write
outreach drafts into `draft` for the top rows — the user's voice (ask for
two past emails once, store the voice notes in `icp_profile`).
## Step 3 — report
From the table: counts by status, the top 10 by fit with reasons, and where
the drafts are. Numbers come from `agnt_db_select`, never memory.
## Step 4 — offer the standing desk (a task agent)
After one successful run: offer a scheduled refresh (weekly beats daily for
prospecting) by building a task agent — recipe in the base `task-agents`
skill. `agnt_agents_create` with a system prompt carrying step 2 verbatim
(ICP table, pipeline table, status transitions), only the tools it uses,
deploy, then `agnt_schedules_create`; cadence confirmed with the user,
billed runs stated plainly, and a plan limit's `requires_upgrade` handed to
the user as its `confirm_url`. 500+ row enrichment belongs in a data job
(see data-pipelines) rather than a longer session.
## Hard rules
- **Drafts only. This skill never sends email, LinkedIn messages, or
anything else.** Wiring a sending tool is the user's own deliberate act.
- Respect disqualifiers in `icp_profile` absolutely — a disqualified company
never re-enters the pipeline.
<!-- skill_id: gtm-prospecting-desk · source: https://github.com/superagnt/plugins -->