---
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 -->
