Ops leadgen skill

OPS on-demand: This skill should be used when the user asks to "leadgen drafts", "cold email approve"…

by Lifecycle-Innovations-Limited·MIT license·★ 543 Stars on the repo·GitHub ↗

Use now

Inside this skill

SKILL.md · the author's own words
# ops-leadgen

Load `ops-rules` before acting. Public repo (no personal data). Outbound: one draft → one approval → one send. If `AskUserQuestion` / `Work…

Wraps `my-project-leadgen` CLI for the daily leadgen review-and-send loop.

**Repo:** `~/Projects/my-project-b2b-leadgen`
**DB:** `~/Projects/my-project-b2b-leadgen/leads.db` (gitignored)
**Run with Doppler:** `doppler run --project my-project-b2b-leadgen --config dev -- my-project-leadgen <cmd>`

## Argument routing

| Argument             | Action                                           |
| -------------------- | ------------------------------------------------ |
| `review` (default)   | Show pending drafts one-by-one, approve or skip  |
| `send --draft-id N`  | Hand one draft to the host's approved outbound gate (Rule 6) |

Word-for-word excerpt, not a result. Read the full SKILL.md ↓

Files of Ops leadgen

Lifecycle-Innovations-Limited/main1 file shown
SKILL.md
Show the full text104 lines

ops-leadgen

Load ops-rules before acting. Public repo (no personal data). Outbound: one draft → one approval → one send. If AskUserQuestion / Workflow are missing, follow Rule 10 in ops-rules (Hermes: numbered options / two-turn Telegram card; delegate_task).

Wraps my-project-leadgen CLI for the daily leadgen review-and-send loop.

Repo: ~/Projects/my-project-b2b-leadgen DB: ~/Projects/my-project-b2b-leadgen/leads.db (gitignored) Run with Doppler: doppler run --project my-project-b2b-leadgen --config dev -- my-project-leadgen <cmd>

Argument routing

Argument Action
review (default) Show pending drafts one-by-one, approve or skip
send --draft-id N Hand one draft to the host's approved outbound gate (Rule 6)
usage Print today's Apollo reveals + Apify runs
scrape [--limit N] Discover new NL HR contacts via Apollo
enrich Run Apify enrichment on unenriched leads
draft Generate Claude NL/EN drafts for undrafted leads

Review + send flow (Rule 6)

NEVER send multiple drafts in one turn. Each send is a separate staged-draft → approval → send cycle.

  1. Run my-project-leadgen review (or fetch pending drafts from DB directly)
  2. For each pending draft, show the user:
    • Lead: name, title, company, email
    • Language, subject, full body
  3. Ask: [Send] / [Skip] / [Stop review]
  4. On [Send]: one draft, one approval, one send, only through the host's approved outbound gate. a. Pass the exact recipient, subject and full latest body to that gate; it shows the complete text and binds the owner's native yes to those bytes. b. Approval is that native yes on the shown draft only. A typed word, file, token or counter is never consent, and one approval never covers another draft. c. After the gate reports delivery, confirm it on a fresh read of the sent mail, then record the send in the leadgen database. d. If the gate refuses or cannot send this channel, keep the draft pending with the exact diagnostic. Never run a direct sender as a substitute for the gate.
  5. Move to the next draft only after the current one is fully resolved.

Scrape → enrich → draft (pipeline)

# Step 1: discover contacts (costs Apollo reveals — check usage first)
doppler run --project my-project-b2b-leadgen --config dev -- \
  my-project-leadgen usage

doppler run --project my-project-b2b-leadgen --config dev -- \
  my-project-leadgen scrape --limit 50

# Step 2: enrich with Apify website crawler
doppler run --project my-project-b2b-leadgen --config dev -- \
  my-project-leadgen enrich

# Step 3: generate Claude drafts
doppler run --project my-project-b2b-leadgen --config dev -- \
  my-project-leadgen draft

# Step 4: review + send (Rule-6 gated, one at a time)
doppler run --project my-project-b2b-leadgen --config dev -- \
  my-project-leadgen review

Daily usage cap

  • Apollo reveals: 200/day max (tracked in leads.db daily_usage)
  • Apify runs: ~$0.02/run (3 pages per domain)
  • Always run usage first to check remaining reveals before scraping

DB queries (read-only diagnostics)

# Pending drafts count
sqlite3 ~/Projects/my-project-b2b-leadgen/leads.db \
  "SELECT count(*) FROM drafts WHERE status='pending';"

# Today's sends
sqlite3 ~/Projects/my-project-b2b-leadgen/leads.db \
  "SELECT d.subject, l.email, s.sent_at FROM sends s
   JOIN drafts d ON d.id=s.draft_id
   JOIN leads l ON l.id=d.lead_id
   WHERE date(s.sent_at)=date('now');"

Rule 6 — no exceptions

Per ops-rules Rule 6: every outbound send is one draft, one approval, one send, only through the host's approved outbound gate. A local file, shell token or counter is defense in depth at most, never the owner's consent. Each draft needs its own native approval on the latest shown text.

1---
2name: ops-leadgen
3description: "OPS on-demand: This skill should be used when the user asks to \"leadgen drafts\", \"cold email approve\"…"
4argument-hint: '[review | send --draft-id N | usage | scrape | draft]'
5allowed-tools:
6 - Bash
7 - Read
8effort: low
9maxTurns: 20
10---
11 
12# ops-leadgen
13 
14Load `ops-rules` before acting. Public repo (no personal data). Outbound: one draft → one approval → one send. If `AskUserQuestion` / `Workflow` are missing, follow Rule 10 in `ops-rules` (Hermes: numbered options / two-turn Telegram card; `delegate_task`).
15 
16Wraps `my-project-leadgen` CLI for the daily leadgen review-and-send loop.
17 
18**Repo:** `~/Projects/my-project-b2b-leadgen`
19**DB:** `~/Projects/my-project-b2b-leadgen/leads.db` (gitignored)
20**Run with Doppler:** `doppler run --project my-project-b2b-leadgen --config dev -- my-project-leadgen <cmd>`
21 
22## Argument routing
23 
24| Argument | Action |
25| -------------------- | ------------------------------------------------ |
26| `review` (default) | Show pending drafts one-by-one, approve or skip |
27| `send --draft-id N` | Hand one draft to the host's approved outbound gate (Rule 6) |
28| `usage` | Print today's Apollo reveals + Apify runs |
29| `scrape [--limit N]` | Discover new NL HR contacts via Apollo |
30| `enrich` | Run Apify enrichment on unenriched leads |
31| `draft` | Generate Claude NL/EN drafts for undrafted leads |
32 
33## Review + send flow (Rule 6)
34 
35**NEVER send multiple drafts in one turn. Each send is a separate staged-draft → approval → send cycle.**
36 
371. Run `my-project-leadgen review` (or fetch pending drafts from DB directly)
382. For each pending draft, show the user:
39 - Lead: name, title, company, email
40 - Language, subject, full body
413. Ask: `[Send]` / `[Skip]` / `[Stop review]`
424. On `[Send]`: one draft, one approval, one send, only through the host's
43 approved outbound gate.
44 a. Pass the exact recipient, subject and full latest body to that gate; it shows
45 the complete text and binds the owner's native yes to those bytes.
46 b. Approval is that native yes on the shown draft only. A typed word, file, token
47 or counter is never consent, and one approval never covers another draft.
48 c. After the gate reports delivery, confirm it on a fresh read of the sent mail,
49 then record the send in the leadgen database.
50 d. If the gate refuses or cannot send this channel, keep the draft pending with the
51 exact diagnostic. Never run a direct sender as a substitute for the gate.
525. Move to the next draft only after the current one is fully resolved.
53 
54## Scrape → enrich → draft (pipeline)
55 
56```bash
57# Step 1: discover contacts (costs Apollo reveals — check usage first)
58doppler run --project my-project-b2b-leadgen --config dev -- \
59 my-project-leadgen usage
60 
61doppler run --project my-project-b2b-leadgen --config dev -- \
62 my-project-leadgen scrape --limit 50
63 
64# Step 2: enrich with Apify website crawler
65doppler run --project my-project-b2b-leadgen --config dev -- \
66 my-project-leadgen enrich
67 
68# Step 3: generate Claude drafts
69doppler run --project my-project-b2b-leadgen --config dev -- \
70 my-project-leadgen draft
71 
72# Step 4: review + send (Rule-6 gated, one at a time)
73doppler run --project my-project-b2b-leadgen --config dev -- \
74 my-project-leadgen review
75```
76 
77## Daily usage cap
78 
79- Apollo reveals: **200/day** max (tracked in `leads.db daily_usage`)
80- Apify runs: ~$0.02/run (3 pages per domain)
81- Always run `usage` first to check remaining reveals before scraping
82 
83## DB queries (read-only diagnostics)
84 
85```bash
86# Pending drafts count
87sqlite3 ~/Projects/my-project-b2b-leadgen/leads.db \
88 "SELECT count(*) FROM drafts WHERE status='pending';"
89 
90# Today's sends
91sqlite3 ~/Projects/my-project-b2b-leadgen/leads.db \
92 "SELECT d.subject, l.email, s.sent_at FROM sends s
93 JOIN drafts d ON d.id=s.draft_id
94 JOIN leads l ON l.id=d.lead_id
95 WHERE date(s.sent_at)=date('now');"
96```
97 
98## Rule 6 — no exceptions
99 
100Per `ops-rules` Rule 6: every outbound send is one draft, one approval, one send,
101only through the host's approved outbound gate. A local file, shell token or
102counter is defense in depth at most, never the owner's consent. Each draft needs its
103own native approval on the latest shown text.
104 

Discussion