Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .cursor-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@
"source": "orchestrate",
"description": "Fan large tasks out across parallel Cursor cloud agents with planners, workers, verifiers, and structured handoffs."
},
{
"name": "founder-gtm",
"source": "founder-gtm",
"description": "Go-to-market toolkit for early-stage founders: sales pack, prospecting, outbound on X, LinkedIn, email, warm intros, and a weekly learning loop."
},
{
"name": "pstack",
"source": "pstack",
Expand Down
39 changes: 39 additions & 0 deletions founder-gtm/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"name": "founder-gtm",
"displayName": "Founder GTM",
"version": "0.5.1",
"description": "Go-to-market toolkit for early-stage founders: sales pack, prospecting, outbound on X, LinkedIn, email, warm intros, and a weekly learning loop.",
"author": {
"name": "Cursor Foundry",
"email": "foundry@cursor.com"
},
"homepage": "https://github.com/cursor/plugins/tree/main/founder-gtm",
"repository": "https://github.com/cursor/plugins",
"license": "MIT",
"logo": "assets/logo.svg",
"category": "productivity",
"tags": [
"gtm",
"outbound",
"founders",
"sales"
],
"keywords": [
"gtm",
"go-to-market",
"outbound",
"sales",
"founders",
"cold-email",
"linkedin",
"x",
"twitter",
"lemlist",
"gmail",
"prospecting",
"warm-intros"
],
"skills": "./skills/",
"rules": "./rules/",
"hooks": "./hooks/hooks.json"
}
12 changes: 12 additions & 0 deletions founder-gtm/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
.DS_Store
node_modules/
.env
.env.*
!.env.example

# Founder-local artifacts (each founder's own; not committed)
sales-pack.md
prospects/
outreach-log/
.gtm-state/
*.local.md
111 changes: 111 additions & 0 deletions founder-gtm/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
# Changelog

## 0.5.1 (2026-05-27)

Marketplace readiness pass before private team rollout.

- Added a lightweight `gtm-playbook` skill so the canvas is discoverable from the marketplace skill list.
- Added a plugin logo and shortened the manifest description for the Marketplace hero card.
- Updated README and distribution notes for the Anysphere team marketplace flow.
- Removed remaining hardcoded local plugin paths from runtime docs and scripts. Scripts now resolve the plugin root from `CURSOR_PLUGIN_ROOT` or their installed file location.
- Automation workflow JSON now defaults to the current project root, where `sales-pack.md` and `outreach-log/` live, instead of assuming a local plugin checkout.

## 0.5.0 (2026-05-27)

Seven upgrades shipped from a focused improvement pass.

**New skill**
- `gtm-warm-intro`, reads the founder's LinkedIn connections CSV, ranks bridges per prospect, drafts the intro-request message plus a forwardable blurb the bridge can paste verbatim. Warm intros convert at 5 to 10x cold; this is the single highest-leverage channel skill in the plugin. Sends via Gmail when available or generates copy-paste markdown.

**New first-run capability**
- `gtm-sales-pack` Section 6 (Voice) now offers three paths: (A) extract voice patterns from your sent Gmail via the existing OAuth token, (B) paste samples manually, or (C) use defaults. The new `scripts/extract-voice-from-gmail.py` pulls sentence-length distribution, opener capitalization, punctuation tics, recurring n-grams, sign-off style, and 3 redacted excerpts. Read-only and idempotent. Requires `google-api-python-client`, `google-auth`, `google-auth-oauthlib` (pinned in the new `scripts/requirements.txt`).

**Self-improving learning loop**
- `gtm-get-better` Step 8.5 now proposes edits to the skill files themselves when a pattern wins consistently (N≥20, 2x positive rate, 2+ cycles). Founder approval gates every change. Provenance markers (`<!-- compound-update: ... -->`) track which edits came from the loop. Capped at 3 proposals per run. Excludes `rules/gtm-voice-guide.mdc`.

**Three starter plays in `gtm-design-play/plays/`**
- `recent-seed-fundraisers-vp-eng.md`, person+account hybrid, cold email channel, full 4-touch cadence
- `show-hn-launches-ai-infra.md`, person signal, X DM primary + email fallback
- `linkedin-job-change-eng-leader.md`, person signal, LinkedIn channel
- Each is fully populated. Founders fork them instead of designing from scratch.

**Voice enforcement at write-time**
- New `afterFileEdit` hook (`hooks/check-voice-on-edit.sh`) scans saved files under `outreach-log/`, `prospects/`, and `drafts/` for AI tells: em/en dashes, "I hope this finds you well" variants, "Excited to announce", "Thrilled to share", and the high-risk subject words from `gtm-cold-email`. Returns `additional_context` warnings; fail-open, non-blocking.

**Lookalike targeting**
- `gtm-find-prospects` Step 3.5 now has a complete recipe: reads `existing-customers.txt`, extracts 3 attributes per customer, aggregates the dominant pattern, runs LinkedIn / Crunchbase / X bio cross-search, dedupes against existing + pipeline, and scores prospects with a +10 boost for full-triangle attribute matches.

**Voice rule expanded**
- `rules/gtm-voice-guide.mdc` gained a 10-pattern "Anti-AI tells" section sourced from `blader/humanizer`: superficial -ing tails, copula avoidance, false ranges, persuasive authority tropes, signposting, hyphenated predicate overuse, sycophantic tone, generic positive conclusions, filler phrases, excessive hedging. Each with the fix.

**Plumbing cleanups**
- All em/en dashes swept from prose across `skills/`, `rules/`, `hooks/`. Preserved only inside fenced code blocks and warning-subject examples (where the dash is the subject of the warning).
- `scripts/requirements.txt` added to both `gtm-sales-pack/scripts/` and `gtm-cold-email/scripts/` pinning the Gmail API dependencies.

**Canvas refresh**
- Hero stats updated to reflect 9 skills, 6 helper scripts, 3 starter plays. Skills table adds the `/gtm-warm-intro` row. "What's in the package" footer now mentions the starter plays and the second hook.

## 0.4.0 (2026-05-27)

Plugin-wide rename: all skills now prefixed `gtm-` (except `gtm-setup` which already had it).

**Renamed**
- `sales-pack` → `gtm-sales-pack`
- `find-prospects` → `gtm-find-prospects`
- `design-play` → `gtm-design-play`
- `x-outreach` → `gtm-x-outreach`
- `linkedin-outreach` → `gtm-linkedin-outreach`
- `cold-email` → `gtm-cold-email`
- `get-better` → `gtm-get-better`

Every cross-reference updated across SKILL.md files, the canvas, README, CHANGELOG, resources.md, automations, and `plugin.json`.

**Other v0.4.0 changes**
- Fixed `gtm-find-prospects` description rendering: `<campaign>` was being parsed as an HTML tag and stripped. Replaced with `{campaign}` here and in two other skills with the same pattern.
- `rules/gtm-voice-guide.mdc` gained the "Anti-AI tells (the humanizer pass)" section.
- `gtm-linkedin-outreach` now asks tool choice + daily-limit at Step 0 (before any prereq check). Account-type table gives suggested daily caps. Per-day counter file refuses sends past the limit.
- New `hooks/welcome-on-first-session.sh` greets new founders in any project without a sales-pack yet. Gated by `.gtm-state/welcomed` marker so it only fires once per project.

## 0.3.0 (2026-05-27)

Added based on internal GTM-repo distillation and early founder feedback.

**New skill**
- `design-play`, codify a working signal/persona/cadence/offer into a reusable play. Reads from working campaigns; writes to `plays/<name>.md`. Drawn from the internal play-design framework.

**New automations folder**
- `automations/` with five recommended Cursor Automation specs:
- `weekly-get-better` (cron, Mondays)
- `daily-followups` (cron, weekday mornings, advances cold-email sequences under the daily cap)
- `post-campaign-debrief` (cron or Slack-trigger, ingests replies the morning after a send)
- `positive-reply-ping` (cron, notifies only on positives)
- `trial-expiry-sweep` (cron, optional for PLG founders on Stripe)

**New find-prospects scripts**
- `scripts/techcrunch-funding-rss.py`, recent rounds from TechCrunch RSS
- `scripts/hn-show-scraper.py`, Show HN launches via Algolia
- `scripts/x-topic-search.py`, bio + topic search via the local xmcp MCP
- `scripts/domain-histogram.py`, work vs personal email split for any CSV
- `scripts/title-classifier.py`, keyword + exclusion bucketing (no LLM, no API key)
- `data/title-keywords.txt`, `data/title-exclusions.txt`, `data/personal-email-domains.txt`, tunable by the founder without touching Python

**Edits to existing skills**
- `cold-email`: subject-line framework with reasons (works / fails / why), sender identity section with the warm-domain trust multiplier.
- `sales-pack`: split high-signal vs low-signal CTAs, added "Features by buyer need" and "Signal strength cheat sheet" template sections.
- `get-better`: pos+obj rate added as secondary metric, signal-first retirement rule, "do not re-offer" rule, high-risk subject auto-flag.
- `find-prospects`: signal source catalog mapped to the new scripts, account-mode confidence scoring.
- `rules/gtm-voice-guide.mdc`: anti-patterns expanded (no Step-1 bullets, one CTA with breakup exception), mechanics block (numerals, sentence case, straight quotes), transferable technical-buyer principles.

**Distribution**
- Added `LICENSE` (MIT) and this `CHANGELOG.md`.
- Enriched `.cursor-plugin/plugin.json` with `displayName`, `homepage`, `repository`, `license`.

## 0.1.0 (2026-05-27)

Initial scaffold.

- 7 skills: `gtm-setup`, `sales-pack`, `find-prospects`, `x-outreach`, `linkedin-outreach`, `cold-email`, `get-better`.
- `rules/gtm-voice-guide.mdc` (always-applied anti-slop voice rules).
- `canvases/founder-gtm-playbook.canvas.tsx` (the visual playbook).
- `resources.md` (opinionated reading list).
- `skills/cold-email/scripts/gmail-auth.py` (one-time Gmail OAuth bootstrap).
21 changes: 21 additions & 0 deletions founder-gtm/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 Cursor Foundry

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
115 changes: 115 additions & 0 deletions founder-gtm/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# founder-gtm

> A scrappy go-to-market toolkit for early-stage founders. Built as a Cursor plugin.

Most early-stage founders fall into one of two traps. They blast generic AI templates that go straight to spam. Or they do nothing because the right tool stack costs $1,500 to $3,000 a month and they're not ready for it.

This plugin is a third path: spend an afternoon wiring up your own outbound machine using what you already have, send 25 real messages a day, and let the system get a little smarter every week.

## What's in the package

Three things ship together:

1. **This plugin**, ten skills you trigger from chat, three starter plays you can fork, five recommended Cursor Automations, six helper scripts, and two hooks (welcome + voice enforcement).
2. **A Cursor canvas** at `canvases/founder-gtm-playbook.canvas.tsx`, the visual playbook.
3. **`resources.md`**, a curated reading list of free or cheap GTM resources for founders.

## Install

```bash
/add-plugin founder-gtm
```

Then reload Cursor and run **`/gtm-setup`** for the 30-minute onboarding.

**Share link:** send people to the landing page or Marketplace listing. After install, tell them to run **`/gtm-setup`** in Cursor.

**Development only** (contributors hacking on this repo):

```bash
git clone https://github.com/cursor/plugins.git
cd plugins
ln -s "$PWD/founder-gtm" ~/.cursor/plugins/local/founder-gtm
```

Then reload Cursor and open the canvas at `canvases/founder-gtm-playbook.canvas.tsx`.

## The skills

| Skill | When to use | What it does |
|---|---|---|
| `/gtm-setup` | First install | Walks you through setup in the right order. Picks channels, runs prereqs. |
| `/gtm-playbook` | To open the visual guide | Opens the Founder GTM canvas and gives a short orientation before you start setup. |
| `/gtm-sales-pack` | Before any outreach | Interviews you (~25 questions, one at a time) about your company, ICP, value props, common objections, persona-specific positioning, and your writing voice. Writes a `sales-pack.md` knowledge base every other skill reads from. |
| `/gtm-find-prospects` | To build a target list | Asks what targeting tools you already have, then combines free sources (LinkedIn search, X via xmcp, GitHub, Crunchbase free, TechCrunch funding RSS, Show HN) with whatever paid tools you've connected. Outputs a ranked CSV. |
| `/gtm-design-play` | To codify what's working | Turns a signal/persona/channel/cadence combination that produced replies into a reusable play under `plays/<name>.md`. |
| `/gtm-x-outreach` | To run X DMs | Pulls each target's last 10 to 20 posts via the local xmcp MCP, finds a real hook, drafts a personalized DM in your voice, sends or saves to drafts. |
| `/gtm-linkedin-outreach` | To run LinkedIn outreach | Drafts ≤250-char connection notes grounded in the target's profile and your sales pack. Sends via Lemlist (recommended), Amplemarket, La Growth Machine, or manual copy-paste. |
| `/gtm-cold-email` | To run cold email | Connects to Gmail via the Google Workspace CLI, checks domain warming, drafts personalized sequences, saves them as drafts or sends with a hard daily cap. Reply detection cancels pending follow-ups when someone replies. |
| `/gtm-warm-intro` | When you have mutual connections (5 to 10x cold conversion) | Reads your exported LinkedIn connections CSV, matches bridges per prospect, drafts the intro-request message plus a forwardable blurb the bridge person can paste verbatim. Sends via Gmail or generates copy-paste markdown. |
| `/gtm-get-better` | Weekly | Reads logs across all channels, classifies replies on the standard rubric (positive / objection / neutral / OOO / negative), slices metrics per-play and per-touch, retires losing plays at N≥15, and proposes edits to the skill files themselves when a pattern wins consistently (founder approval required per edit). |

## Prerequisites at a glance

`/gtm-setup` walks you through these. Quick reference:

| Skill | Needs |
|---|---|
| `gtm-sales-pack` | Nothing required. Optionally: Gmail OAuth (reuses the cold-email token) so the voice section can extract patterns from your sent mail instead of asking you to paste samples. |
| `gtm-find-prospects` | Whatever tools you have. Nothing required. |
| `gtm-x-outreach` | Local xmcp MCP server running at `http://127.0.0.1:8000/mcp`. Free up to the X API free tier; pay-per-call beyond. |
| `gtm-linkedin-outreach` | Lemlist account + API key (cheapest path). Or Amplemarket / La Growth Machine if you already have them. |
| `gtm-cold-email` | Google Workspace account (not free gmail.com), gcloud CLI installed, Gmail OAuth client. Domain should be warmed (the skill recommends Instantly or Smartlead's free tier if not). |
| `gtm-warm-intro` | LinkedIn connections export CSV (Settings → Data Privacy → Get a copy of your data). Optional: Gmail OAuth for "last interaction with this bridge person" recency scoring. |
| `gtm-get-better` | One prior campaign to learn from. |

## What's in the plugin folder

```
founder-gtm/
├── README.md
├── distribution.md
├── CHANGELOG.md
├── LICENSE
├── resources.md
├── .cursor-plugin/plugin.json
├── canvases/
│ └── founder-gtm-playbook.canvas.tsx
├── rules/
│ └── gtm-voice-guide.mdc
├── hooks/
│ ├── hooks.json (sessionStart + afterFileEdit)
│ ├── welcome-on-first-session.sh (first-run greeting)
│ └── check-voice-on-edit.sh (AI-tell scan on saved drafts)
├── skills/
│ ├── gtm-setup/
│ ├── gtm-playbook/
│ ├── gtm-sales-pack/
│ │ ├── SKILL.md
│ │ └── scripts/extract-voice-from-gmail.py (reads sent mail for voice patterns)
│ ├── gtm-find-prospects/
│ │ ├── SKILL.md
│ │ ├── scripts/ (5 small scrapers + helpers)
│ │ └── data/ (title keyword lists, personal-email domains)
│ ├── gtm-design-play/
│ │ ├── SKILL.md
│ │ └── plays/ (3 starter plays to fork)
│ ├── gtm-x-outreach/
│ ├── gtm-linkedin-outreach/
│ ├── gtm-cold-email/
│ │ ├── SKILL.md
│ │ └── scripts/gmail-auth.py (one-time OAuth bootstrap)
│ ├── gtm-warm-intro/ (5 to 10x cold conversion via mutual connections)
│ └── gtm-get-better/
└── automations/
├── README.md
├── weekly-get-better.md
├── daily-followups.md
├── post-campaign-debrief.md
├── positive-reply-ping.md (optional)
└── trial-expiry-sweep.md (optional)
```

## License

MIT. Fork it, remix it, send PRs.
6 changes: 6 additions & 0 deletions founder-gtm/assets/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading