# seed-closer

Adopt this skill: https://proskills.md/skills/other/jakeschincariol-seed-skill-seed-closer

Page: https://proskills.md/skills/other/jakeschincariol-seed-skill-seed-closer
This document is the public skill bundle for that page. It contains SKILL.md and every helper file the catalog carries. No login is required.

## File: seed-closer/SKILL.md
size: 12806
sha: 6b71f2252002c81499167ba1736a6bcc720337bf
upstream: https://github.com/jakeschincariol/seed-skill/blob/main/seed-closer/SKILL.md

````text
---
name: seed-closer
description: >-
  The Closer. Sends personalised outreach emails to investors, manages the
  conversations and keeps following up until an investor call is booked,
  and nothing leaves the user's inbox without their yes. Drafts one RFC 5322
  .eml per investor from seed/investors.json and a template (a real personal
  line, the sender's real name and an opt-out line, generic lines refused),
  shows the batch, records the user's yes word for word, enforces a daily cap
  of 20, then Claude sends through the user's own Gmail connector where the
  Allow once card is a second check. Schedules follow-ups on +3 and +7
  business days (3 touches at most, never after a reply), sorts replies into
  interested / question / not now / no / out of office, stops a thread for
  good on a no, an opt-out or a bounce, writes a valid .ics invite and shows
  the funnel. Reads seed/config.json and seed/investors.json, writes
  seed/pipeline.json, seed/outreach/ and seed/calls/. Use when the user says
  "email the investors", "send the outreach", "follow up with everyone who
  hasn't replied", "who do I follow up with today", "sort my replies", "book
  the call", "send her an invite", "how is the raise going", or after
  /seed-investors ranks the list.
argument-hint: "[draft | batch | due | inbox | book | status]"
---

# seed-closer

The Closer does the part of a raise that eats the founder's week: one
personal email per investor, the follow-ups nobody remembers to send, the
replies sorted, and the call on the calendar. It writes everything; it never
sends anything. Claude sends through the user's own Gmail, only after the
user said yes to that exact batch in the chat, and Claude's own "Allow once"
card asks again for every email. All the user has to do is say yes, show up
and pitch. Investors decide; nothing here promises a check.

`${CLAUDE_SKILL_DIR}` below is this skill's folder (where this SKILL.md lives).

```bash
python3 "${CLAUDE_SKILL_DIR}/closer.py" draft --top 20          # one .eml per investor, status drafted
python3 "${CLAUDE_SKILL_DIR}/closer.py" batch                   # recipients, their personal lines, the first email in full
python3 "${CLAUDE_SKILL_DIR}/closer.py" approve --batch 3f9a1c2e --reply "yes"   # the user's reply, word for word
python3 "${CLAUDE_SKILL_DIR}/closer.py" outbox --json           # exactly what to send: to, subject, body, thread
python3 "${CLAUDE_SKILL_DIR}/closer.py" log --id maya-chen --event sent --thread-id 18c2f0a1
python3 "${CLAUDE_SKILL_DIR}/closer.py" due --today 2026-10-29  # who gets a follow-up today
python3 "${CLAUDE_SKILL_DIR}/closer.py" followup --due --extra "Here's our 60-second demo: https://..."
python3 "${CLAUDE_SKILL_DIR}/closer.py" inbox --file replies.json            # sort replies, then --write
python3 "${CLAUDE_SKILL_DIR}/closer.py" reply --id maya-chen --body-file answer.txt
python3 "${CLAUDE_SKILL_DIR}/closer.py" book --id maya-chen --start "2026-11-05 10:00" --tz America/New_York --link https://meet.google.com/abc-defg-hij
python3 "${CLAUDE_SKILL_DIR}/closer.py" status                  # the funnel
```

Every command takes `--dir` (default `./seed`) and `--today YYYY-MM-DD` (pin
the date). `--json` on batch, outbox, due, inbox and status.

## What it reads and writes

| file | what |
| --- | --- |
| `seed/config.json` | `startup` (name, one_liner, optional tagline, raise, stage), `founder` (your real name, the address you send from, company_address), `outreach` (daily_cap 20, followup_days [3, 7], max_touches 3, business_days true, optional holidays) |
| `seed/investors.json` | from /seed-investors: id, name, firm, email, sources, fit, reasons, personal_line |
| `template.txt` | the intro and the two follow-ups (this folder; copy it to `seed/template.txt` to make your own) |
| `seed/outreach/<id>-<n>.eml` | each draft: a valid RFC 5322 message (CRLF, From, To, Subject, Date, Message-ID, plain text); follow-ups carry In-Reply-To |
| `seed/pipeline.json` | one row per investor: status, touches, next_due, labels, notes, the waiting draft, the Gmail thread id, the call, the history |
| `seed/calls/<id>.ics` | the invite: RFC 5545, CRLF, folded at 75 octets, UTC times, UID, SEQUENCE, ORGANIZER, ATTENDEE, the video link |

## The rules it enforces

- **A real personal line or no email.** Each intro needs `personal_line`: one
  sentence about this investor from their public record. Refused: empty,
  under 7 words, cut off with "...", a placeholder, a stock opener ("hope this
  finds you well", "big fan", "love what you're doing", "impressive
  portfolio", "came across your profile"), the same line used for two people,
  and a line that names nothing from their row (a deal, a post, a sector, a
  number). Rows without an email or a public source URL are refused too.
- **Your real name and the opt-out line.** `founder.name` must be a real name
  ("Your Name" is refused). Every intro and follow-up carries "Not a fit?
  Reply 'no' and I won't follow up." A batch whose .eml lost it is refused.
- **The yes.** `approve` takes the user's reply word for word and the batch id
  `batch` printed. It counts only a reply that starts with "yes" and has no
  condition in it: "sure", "ok", "yes but drop Marcus", "yes tomorrow",
  "yes?" and a count that does not match the batch are not a yes. If the
  drafts changed after the batch was shown, the id no longer matches and
  nothing is recorded. `log --event sent` works only on an approved email.
- **The daily cap.** 20 cold emails a day by default (intros and follow-ups,
  counting today's sends and every approved one not sent yet), 50 at most
  whatever the config says. Replies in a live conversation do not count.
- **Three touches.** The intro on day 0, follow-up 1 on +3 business days and
  follow-up 2 on +7 (weekends and `outreach.holidays` skipped), never sooner
  than the planned gap after the touch before, and never once they replied.
- **Stops.** A no, an opt-out or a bounce ends the thread for good: the
  waiting draft is void, nothing more is recorded, and `draft` refuses that
  address forever. "Not now" is a soft pass: no more follow-ups, and
  /seed-updates can keep them posted if they asked.
- **Out of office** is not a reply: the follow-up waits until the business day
  after the return date it finds ("until Monday, November 9"), and a follow-up
  already drafted is voided and drafted again then.

Statuses: drafted, approved, sent, replied, interested, booked, and the ends
passed, bounced, optout.

## Sending: the Gmail-connector loop

The user connects their own Gmail in Claude (Customize > Connectors) and sets
the tools that send or draft to **Needs approval**, never Always allow. In
Claude Code, keep them on ask in `.claude/settings.json` and never in allow.
In the Claude Gmail connector checked on 2026-10-26 the tools are
`send_message` (send), `create_draft` (leave it in Drafts), `reply` (answer
inside a thread), `search_threads` and `get_thread` (read only); another
Gmail connector may name them differently. Nothing goes out any other way: no
mail-merge tool, no SMTP, no third-party sender.

1. `closer.py batch`. Show the user what it prints, as it prints it: every
   recipient with their personal line, the first email in full, the count
   against the daily cap. Ask: "Send these N emails from your Gmail? Reply yes
   or no." One batch per question.
2. `closer.py approve --batch <id> --reply "<their reply, word for word>"`.
   "Not recorded" means it was not a clear yes: ask again, never turn a reply
   into a yes yourself. To send fewer, show a smaller batch (`--ids`, `--limit`).
3. Only after "Recorded your yes", send each email from the JSON it printed,
   one tool call per email: `send_message` with that to, subject and body (or
   `create_draft` if the user would rather press send in Gmail). A follow-up or
   a reply goes in its thread with `reply` and the `thread_id`. Each call
   raises Claude's "Allow once / Deny" card: the second check.
4. After each send: `closer.py log --id <id> --event sent --thread-id <id from
   Gmail>`. Denied on the card: `log --id <id> --event denied` (back to
   drafted, it needs a new yes). Stop the loop if anything looks wrong.
5. Never from a scheduled or background task. A schedule may run `due`,
   `followup --due` and read replies; sending always waits for the user.

## Steps

1. Check `seed/config.json`: the user's real name, the address they send from,
   a postal address (anti-spam laws such as CAN-SPAM expect one). Read
   `seed/investors.json` from /seed-investors; ask before writing to anyone
   with a personal mailbox.
2. `closer.py draft --top 20`. Read back what it refused and why. Fix a
   refused personal line from the investor's sources, never by inventing a
   fact, then draft that id again.
3. Run the Gmail loop above for the batch: batch, the yes, send, log.
4. Every business day: `closer.py due`. For the ones due, `followup --due`
   (an optional `--extra` line for follow-up 1, `--ask` for the last one),
   then the same loop.
5. Read new replies with `search_threads` / `get_thread` (read only, for
   example `from:maya@northlight.example newer_than:14d`). Put them in a
   replies.json (`[{"from", "subject", "date", "text"}]`) and run `inbox`.
   Show the user each label and the suggested next step, then `inbox --write`.
   Labelling the threads in Gmail (Interested, Asked a question, Not now) is
   optional: ask first.
6. A question: draft the answer from `seed/plan.json` and `seed/model.json`
   only (never a number that is not in them), `reply --id ... --body-file`,
   then the loop. The .eml carries no attachment: link the deck, or the user
   attaches the PDF in Gmail.
7. Interested: find two free slots with the user's calendar (read only, for
   example `suggest_time` or `list_events`) and offer them in a reply. When
   they agree on a time, `inbox --write` that reply, then `closer.py book`.
   Show the invite, ask "Send this invite to Maya? Reply yes or no", and after
   the yes create the event in the user's own calendar with the investor as a
   guest (Google Calendar `create_event` sends the invite), or attach the .ics
   to a reply in the thread.
8. `closer.py status` for the funnel. Hand off: /seed-coach `agenda` for each
   booked call, /seed-updates `--to prospects` for the soft passes, and
   /seed-terms and /seed-dataroom when an investor asks for next steps.

## Example: the reel

Leashly is fictional, and so are the investors. `draft --top 6 --today
2026-10-26` writes six intros from the founder's own address; Maya Chen's
(Northlight Ventures, fit 96) reads:

```
To: Maya Chen <maya@northlight.example>
Subject: Leashly: dog walks without the surprise fees

Hi Maya,

Saw you led two pet-care seed rounds, so you know the 20% fee problem better than anyone.

Leashly is a dog-walking app with flat prices and a backup walker on every walk.

We're raising a $1.5M seed. Open to a 20-minute call next week?

Not a fit? Reply 'no' and I won't follow up.
```

After the user's "yes", Claude sends the six through Gmail. The reel's 40
emails would go out over two days at the daily cap of 20. With no reply, `due
--today 2026-10-29` lists follow-up 1 on Thursday, Oct 29 (+3 business days),
and follow-up 2 would come on Wednesday, Nov 4 (+7 business days; with
`business_days: false` it is Monday, Nov 2). Maya replied on Oct 30: "What's
your take rate, and how do you guarantee the backup walker?" `inbox` labels it
Asked a question and the follow-ups stop. Claude answered from the plan ("15%
flat, no owner fee. Every walk is booked with a second walker on standby
within 1 mile.") and asked "Would Thursday at 10 work for 20 minutes?". Her
"Thursday 10am works. Send an invite." is Interested, and

```
closer.py book --id maya-chen --start "2026-11-05 10:00" --tz America/New_York --link https://meet.google.com/abc-defg-hij
```

writes `seed/calls/maya-chen.ics`: "Leashly × Northlight Ventures · Intro
call", DTSTART 20261105T150000Z, DTEND 20261105T153000Z (10:00 to 10:30 AM
Eastern; the clocks went back on Nov 1, so it is UTC-05:00). The reel's
funnel, 40 sent, 12 replied, 5 interested, shows in `status` as drafted 40,
sent 40, replied 12 (30% of sent), interested 5, booked 1.

## What it never does

- Never sends, and never lets Claude send, without the user's yes for that
  batch; never "yes to everything from now on"; never from a background task.
- Never writes to anyone without a public source in their row, never guesses
  an email address, never collects a personal phone number or home address.
- Never emails a thread again after a no, an opt-out or a bounce.
- Never invents a fact in a personal line or a number in a reply.
- Never promises funding. The pack does the work; investors decide.
````

## File: seed-closer/closer.py
size: 94158
sha: 6aae3a36e92d9a779bb06280002490b6798b552f
upstream: https://github.com/jakeschincariol/seed-skill/blob/main/seed-closer/closer.py

Content is not inlined in the catalog. Read the upstream file: https://github.com/jakeschincariol/seed-skill/blob/main/seed-closer/closer.py

## File: seed-closer/template.txt
size: 1307
sha: dc753bd2f23b9eb97815e8689391623b5b85f487
upstream: https://github.com/jakeschincariol/seed-skill/blob/main/seed-closer/template.txt

```text
# The Closer's email template (seed-closer). Everything above the first
# "=== ... ===" line is a note for you and is never sent. To make your own,
# copy this file to seed/template.txt: the Closer uses that copy when it exists.
#
# Placeholders the Closer fills: {first_name} {name} {firm} {personal_line}
# {startup} {one_liner} {one_liner_sentence} {tagline} {raise} {stage}
# {instrument} {sector} {geography} {sender} {sender_first} {title}
# {company_address} {signature} {optout} {intro_subject} {intro_day} {extra}
# {ask}. Write a literal brace as {{ or }}.
#
# Keep {personal_line} in the intro and {optout} and {signature} in every
# section: the Closer refuses a draft without them. Follow-ups stay under 80
# words before the opt-out line.

=== intro ===
Subject: {startup}: {tagline}

Hi {first_name},

{personal_line}

{startup} is {one_liner_sentence}.

We're raising a {raise} {stage}. Open to a 20-minute call next week?

{optout}

{signature}

=== followup 1 ===
Subject: Re: {intro_subject}

Hi {first_name},

Bumping this up: my note from {intro_day} about {startup}, {one_liner_sentence}. {extra}

Open to 20 minutes next week?

{optout}

{signature}

=== followup 2 ===
Subject: Re: {intro_subject}

Hi {first_name},

Quick one, and my last note on this: {ask}

{optout}

{signature}
```

## File: README.md
upstream: https://github.com/jakeschincariol/seed-skill/blob/main/README.md

````text
# The Seed skill

11 Claude skills that take your startup from idea to funded: competitor research, investor matching, a business plan, a pitch deck and a closer that books your investor calls.

Free, MIT, no signup, no API key. The tools are plain Python that read free
public data (the App Store's own search and review feeds, SEC EDGAR) and do
the arithmetic. Everything they write lands in a `seed/` folder in your
project, so every skill picks up where the last one stopped.

One finds the weak points of your competitors, straight from their own
one-star reviews. Another researches the best investors for your idea, from
public sources, and ranks them by fit with the reasons and the links. Then one
turns your idea into a business plan, and another turns the plan into a pitch
deck.

And the craziest one is the Closer. It writes a personalised outreach email
to every investor on your list, keeps track of every conversation, sorts the
replies, and follows up until an investor call is booked, with the calendar
invite ready to send. So all you have to do is show up.

**Nothing leaves your inbox until you say yes.** The Closer drafts. Claude
sends through your own Gmail connector only after you approve the batch, with
a daily cap, an opt-out line in every email, and a thread that stops for good
on a "no".

## Install

Paste this into Claude:

```
https://github.com/Jakeschincariol/seed-skill

install skill
```

Or as a plugin, in Claude Code:

```
/plugin marketplace add Jakeschincariol/seed-skill
/plugin install seed-skill@seed-skill
```

Claude Code namespaces plugin skills, so installed as a plugin they show up as
`/seed-skill:seed-scout` and so on. Copy the folders instead if you want plain
`/seed-scout`:

```bash
git clone https://github.com/Jakeschincariol/seed-skill.git
cp -r seed-skill/seed-* ~/.claude/skills/
```

Project-local instead of global: copy the same folders into your repo's
`.claude/skills/`. No Claude Code at all? Paste any single `SKILL.md` at the
top of a chat and it runs as a mode. You lose the Python tools, but the method
works.

The tools need Python 3.8 or newer. Nothing to pip install. The investor
finder's SEC search asks you to identify yourself, as the SEC requires: put
your name and email in `seed/config.json` (`"sec_user_agent": "Your Name
you@example.com"`) or in the `SEC_USER_AGENT` environment variable.

To send email and book calls, connect Gmail and Google Calendar in Claude
(Customize, Connectors) and set their send tools to "Needs approval".

## The eleven

| command | job | what it does |
| --- | --- | --- |
| `/seed-scout` | Competitor Scout | Finds the weak points of your competitors: reads up to 500 of each rival app's latest App Store reviews and counts what the one- and two-star ones complain about. |
| `/seed-investors` | Investor Finder | Researches the best investors for your idea from public sources and SEC Form D filings, then ranks them by fit with the reasons and the links. |
| `/seed-plan` | Business Planner | Turns your idea into a business plan: the nine sections, with the unit economics worked out and every number cross-checked. |
| `/seed-deck` | Pitch Deck Designer | Turns the plan into a 10-slide pitch deck, one self-contained file you can present or print to PDF. |
| `/seed-closer` | The Closer | Sends personalised outreach to investors (only after your yes), manages the conversations, follows up and books the call. |
| `/seed-market` | Market Sizer | Sizes your market top-down and bottom-up, TAM, SAM and SOM, with a source on every input. |
| `/seed-model` | Financial Modeler | Builds the 36-month model: revenue, burn, runway, the month you break even and where the money goes. |
| `/seed-coach` | Pitch Coach | Drills you on the hard questions this investor will ask, tailored to your numbers and your competitors. |
| `/seed-terms` | Term Sheet Reader | Reads a SAFE or a term sheet in plain English, does the dilution math and flags the clauses to ask a lawyer about. |
| `/seed-dataroom` | Data Room Builder | Builds the data room investors ask for and tells you what is missing. |
| `/seed-updates` | Investor Updates | Writes the monthly update that keeps investors, and the ones who said "not now", warm. |

## How to use it

Everything lands in a `seed/` folder in your project, and each skill reads
what the last one wrote:

```
scout -> market -> model -> plan -> deck            (the story and the numbers)
investors -> closer -> coach                         (the raise: who, the outreach, the call)
terms -> dataroom                                    (when an investor says yes)
updates                                              (every month, before and after)
```

Say what you want in plain words ("find my competitors' weak points", "who
should I pitch", "write the deck", "follow up with everyone who hasn't
replied") and Claude picks the skill.

## Example: the reel

The startup in the reel is made up: **Leashly**, "a dog-walking app with flat
prices and a backup walker on every walk", raising a $1.5M seed. The
competitors and the market numbers are real.

1. **`/seed-scout`** read the 500 most recent App Store reviews of Rover and of
   Wag! on October 25, 2026. Rover (4.9 stars, 515,771 ratings): 106 of its 341
   one- and two-star reviews mention fees. Wag! (4.8 stars, 67,447 ratings): 81
   of its 324 mention cancellations. Those are the weak points: fees, and
   walkers who cancel at the last minute.
2. **`/seed-market`** sized it from APPA's 2026 report: $158 billion of US pet
   spending in 2025, and 71 million US homes (53%) with a dog.
3. **`/seed-model`** ran 36 months at $25 a walk and a 15% take rate, with the
   $1.5M raise (the example assumptions in `seed-model/`): $467,400 of revenue
   in year 1 and $2,993,520 in year 3, $2.23 of contribution per walk, LTV:CAC
   of 4.24x, peak burn $82,801 in month 5, break-even in month 29, and cash
   that never runs out (its low point is $252,553).
4. **`/seed-plan`** and **`/seed-deck`** turned that into the nine-section plan
   and the 10-slide deck that ends on "$1.5M seed to launch in 3 cities".
5. **`/seed-investors`** ranked the investors who back pet and local-services
   marketplaces at seed (the reel's names, like Maya Chen of Northlight
   Ventures, are fictional too).
6. **`/seed-closer`** drafted one email per investor, each with its own first
   line ("Saw you led two pet-care seed rounds..."). After the yes, it
   followed up on day 3 and day 7 of the ones that went quiet, sorted the
   replies, answered Maya's take-rate question from the plan, and when she
   wrote "Thursday 10am works", wrote the invite: Leashly x Northlight
   Ventures, Thursday November 5, 10:00 AM ET.
7. **`/seed-coach`** prepared the 20-minute call, and **`/seed-terms`** and
   **`/seed-dataroom`** are there for what comes after it.

## Fine print

**No promise of funding.** This is software that drafts, researches and does
arithmetic. Investors decide whether to invest, based on your business. A
better deck and a faster follow-up help; they do not guarantee a check.

**Nothing sends without your yes.** Only `/seed-closer` can lead to an email,
and only after you approve that batch in the chat. Set your Gmail connector's
send tool to "Needs approval" (Customize, Connectors, tool permissions), never
"Always allow", so Claude's own "Allow once / Deny" card is a second check.
Every email carries your real name and an opt-out line. A "no", an opt-out or
a bounce ends that thread for good. Default cap: 20 new emails a day.

**Public sources only.** The investor finder reads public pages (a firm's own
site, public profiles found through search, SEC EDGAR, the press) and keeps
the link for every fact. It never logs in anywhere, never scrapes behind a
login and never scrapes LinkedIn. Check a fact before you lean on it in an
email.

**Not legal advice.** `/seed-terms` explains the common clauses and does the
dilution math. Have a startup lawyer read anything befor
````
