OPS ► GTM COMMAND CENTER
Strategy layer that sits on top of /marketing. /marketing runs campaigns; /gtm decides what to run, across paid, unpaid, sales, and AI-automation channels, and then hands the executable pieces to /marketing via the Skill tool.
Runtime Context
Before executing, load available context:
Preferences: Read ${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json
timezone — timestamp all output correctly
gtm_default_project, gtm_default_audience, gtm_brand_voice — project-level defaults when set
gtm_monthly_budget, gtm_stage (pre-launch|beta|ga|scale) — used to tune channel recommendations
Cached plans: List ${CLAUDE_PLUGIN_DATA_DIR}/gtm/*.md to surface recent plans. Never overwrite a prior plan file — always append a new dated file.
Daemon health: Read ${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json. If action_needed is not null, surface it before running any long planning flow.
Repo auto-scan (background): For the current working directory, in parallel and with run_in_background: true:
git remote -v → infer project slug and org
cat README.md (or README.*) → product description, ICP hints
- Glob
package.json, pyproject.toml, Cargo.toml, go.mod → tech stack
- Glob
.planning/**/*.md and docs/**/*.md → prior briefs, positioning notes
- Resolve: project name, one-line pitch, primary tech, existing channels hinted in the repo
/marketing credential probe (read-only): Do NOT re-resolve API keys in this skill. Instead, when the user asks to launch something, delegate to /marketing via the Skill tool — /marketing owns the credential resolution chain (userConfig → env vars → Doppler → Dashlane → Keychain → gcloud ADC).
Agent Teams support
If CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is set, use Agent Teams for the plan sub-command so the four research agents share context and report progress in real-time:
TeamCreate("gtm-research-team")
Agent(team_name="gtm-research-team", name="paid-research", prompt="Research paid acquisition channels that fit ${PROJECT_TYPE} at ${STAGE} with $${MONTHLY_BUDGET}/mo. Return a ranked list with fit signals, expected CAC, and which /marketing sub-command (if any) executes each channel.")
Agent(team_name="gtm-research-team", name="unpaid-research", prompt="Research organic channels (SEO, content, community, PR, partnerships, referrals, lifecycle email) for ${PROJECT_TYPE} at ${STAGE}. Return ranked list with effort estimate, time-to-signal, and /marketing sub-command mapping.")
Agent(team_name="gtm-research-team", name="sales-research", prompt="Design a sales motion for ${PROJECT_TYPE}: outbound vs inbound vs PLG vs channel. Propose a 30/60/90 plan with concrete activities and target metrics.")
Agent(team_name="gtm-research-team", name="automation-research", prompt="Propose AI-automation recipes: lead enrichment, personalized outreach, content ops, lifecycle copy, support deflection, lead scoring. For each, list trigger, model/tool stack, and where it plugs into /marketing.")
If the flag is NOT set, use standard fire-and-forget subagents with the same four prompts.
Sub-command Routing
Route $ARGUMENTS to the correct section below:
| Input |
Action |
| (empty), plan |
Full GTM plan across all four avenues |
| paid |
Paid acquisition deep-dive (Meta, Google, LinkedIn, TikTok, affiliates, sponsorships) |
| unpaid |
Organic deep-dive (SEO, content, community, PR, partnerships, referrals, lifecycle email) |
| sales |
Sales motion (outbound, inbound, PLG, channel / partner) |
| automation |
AI-automation playbook for GTM |
| launch |
30/60/90 launch calendar + pre-flight checklist |
| brief |
One-page positioning brief (ICP, value prop, messaging pillars) |
| setup |
Configure default project, audience, budget tier, brand voice |
Arguments are free-form — treat /gtm plan for my-project $2k/mo pre-launch as equivalent to plan with intake values pre-filled.
Project Intake
Before producing any plan section, make sure the following are known. Source them in this order — only ask the user for what's still missing.
- Auto-scan the repo (step 4 of Runtime Context).
- Read prefs for
gtm_default_* keys.
- Parse free-text in
$ARGUMENTS for budget, stage, and project name.
- AskUserQuestion for gaps — respect Rule 1 (max 4 options per call; batch if needed).
Use these four questions in order, skipping any already known:
- Project type —
[B2B SaaS, B2C product, Marketplace, Dev tool / API]
- Stage —
[Pre-launch, Beta / early access, GA (live), Scale (growth)]
- Primary goal (next 90 days) —
[Awareness, Signups / leads, Revenue, Retention / expansion]
- Monthly budget tier —
[<$1k, $1k–5k, $5k–25k, $25k+]
If a Rule-1 batch overflows (e.g. more than 4 project types needed), paginate with [More options...] as the 4th slot.
Per Rule 3, never silently skip an intake question — if the user hits Escape, offer [Paste manually] / [Use default] / [Skip this only].
Channel / Avenue Catalog
This is the source-of-truth list the planner draws from. Each row: avenue → fit signals → cost profile → execution path. The execution path is what makes /gtm seamless with /marketing: if a /marketing sub-command exists for a channel, the plan recommends it by name; otherwise the channel is marked manual and the plan includes templated next-actions instead.
Paid
| Channel |
Fits |
Cost profile |
Execution |
| Meta Ads (Facebook + Instagram) |
B2C, marketplace, broad consumer |
$5–50 CPA typical |
/marketing ads · /marketing meta create-campaign |
| Google Ads — Search |
High-intent buyers, existing demand |
$1–30 CPC |
/marketing google-ads |
| Google Ads — Performance Max |
E-comm with catalog |
Blended CPA |
/marketing google-ads |
| YouTube Ads |
Awareness at scale |
$0.01–0.30 CPV |
/marketing google-ads (video campaigns) |
| LinkedIn Ads |
B2B, ACV > $10k |
$8–15 CPC, $50+ CPL |
manual — LinkedIn Campaign Manager |
| TikTok Ads |
B2C, < 35 audience, creative-led |
$1–10 CPC |
manual — TikTok Ads Manager |
| Reddit / X / Pinterest |
Niche communities |
Varies |
manual |
| Podcast sponsorships |
Trust-driven, narrow ICP |
$20–50 CPM |
manual — direct sponsor deals |
| Affiliate / partner program |
Marketplace, SaaS with referral loop |
Rev-share |
manual — Rewardful / PartnerStack |
Unpaid (Organic)
| Channel |
Fits |
Effort |
Execution |
| Programmatic SEO |
Dev tools, marketplaces, comparison queries |
High upfront, compounding |
/marketing seo (tracking) + manual content ops |
| Topic-cluster SEO |
Content-led SaaS, info-intent |
Medium, 3–6mo to signal |
/marketing seo |
| Lifecycle email (welcome, nurture, winback) |
Any with email capture |
Medium, high leverage |
/marketing email (Klaviyo flows) |
| Instagram organic |
Visual product, lifestyle |
Medium, daily |
/marketing instagram |
| X / LinkedIn founder-led |
B2B, dev tools, thought leadership |
Daily, high-leverage |
manual |
| Community building (Discord / Slack / forum) |
Dev tools, B2C with passion |
High, ongoing |
manual |
| PR / launch pads (Product Hunt, HN, press) |
Any at launch |
Spiky |
/gtm launch checklist + manual |
| Partnerships / integrations |
SaaS, marketplaces |
Medium, compounding |
manual |
| Referral program |
Any with product-led signup |
Low eng cost, high leverage |
manual — plug into lifecycle email |
Sales
| Motion |
Fits |
Execution |
| Outbound (cold email + LinkedIn) |
B2B, ACV > $5k |
/gtm automation (AI-personalized) + manual sending tool |
| Inbound (demo form → AE) |
B2B SaaS with pricing page |
manual CRM + routing |
| Product-Led Growth (self-serve) |
Dev tools, horizontal SaaS |
manual — instrument onboarding; /marketing email for lifecycle |
| Channel / partner |
Enterprise, vertical SaaS |
manual — co-selling motion |
AI Automation
| Recipe |
What it does |
Stack |
Plugs into |
| AI cold-email personalization |
LLM generates opener from enrichment data |
Clay / Apollo + Claude |
outbound sales |
| Generative SEO clusters |
LLM drafts topic-cluster outlines from seed keywords |
Claude + GSC data |
/marketing seo |
| Lifecycle copy generator |
Auto-draft Klaviyo flow emails per segment |
Claude + Klaviyo data |
/marketing email |
| Ad creative variants |
Bulk-generate Meta/Google ad copy A/B sets |
Claude + /marketing ads insights |
/marketing meta create-campaign · /marketing google-ads |
| Support deflection |
LLM answers tier-1 tickets from docs |
Claude + help-center KB |
manual — help desk |
| Lead scoring |
LLM scores inbound leads on ICP fit |
Claude + CRM data |
manual — CRM |
| Content repurposing |
Long-form → tweets, LinkedIn posts, newsletter |
Claude |
/marketing instagram · manual social |
plan — full GTM plan (default)
Intake per Project Intake section.
Spawn the four research agents (Agent Teams if flag set, else fire-and-forget).
Assemble the plan in this order:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GTM PLAN — [project] ([stage], [goal], $[budget]/mo)
[timestamp]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
POSITIONING
ICP: [one sentence]
Value prop: [one sentence]
Messaging: [3 pillars, comma-separated]
PAID (next 30 days)
1. [Channel] $[X]/mo Expected CAC: $[X] Execute: /marketing ads
2. [Channel] $[X]/mo Expected CAC: $[X] Execute: manual
UNPAID (next 90 days)
1. [Channel] Effort: [L/M/H] Signal in: [X wks] Execute: /marketing seo
2. [Channel] ...
SALES
Motion: [Outbound / Inbound / PLG / Channel]
30/60/90: [one line summary]
AUTOMATION (AI-powered)
1. [Recipe] Plugs into: /marketing email
2. [Recipe] Plugs into: outbound
KPIs
North star: [metric + target]
Leading: [3 leading indicators]
BUDGET ROLLUP
Paid: $[X]/mo
Tools/SaaS: $[X]/mo
Total: $[X]/mo
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Persist the plan to ${CLAUDE_PLUGIN_DATA_DIR}/gtm/<project-slug>-$(date +%Y-%m-%d).md (create the directory if missing). Never overwrite — if the file exists, append -v2, -v3.
Handoff prompt — end with an AskUserQuestion (≤4 options per Rule 1):
[Launch via /marketing] — hand top executable items to /marketing
[Save only] — keep the plan file, take no action
[Refine plan] — re-run with adjusted intake
[Schedule follow-up] — revisit in 7/30 days (delegate to /ops cron if available)
On [Launch via /marketing], iterate through plan items whose execution path starts with /marketing and invoke them one at a time via the Skill tool:
Skill("ops-marketing", args="campaigns")
Skill("ops-marketing", args="ads")
Skill("ops-marketing", args="email")
Never silently skip an item (Rule 3) — for each, ask [Launch, Skip, Edit first].
Per Rule 5, do NOT auto-launch anything that spends money or sends to real recipients without explicit per-item confirmation. The plan recommends; /marketing executes; the user approves each paid or outbound action.
paid — paid acquisition deep-dive
Same intake, but only spawn the paid-research agent. Render just the PAID block, with up to 5 channel rows and for each:
- Expected CAC range (cite source or reasoning)
- Creative angle suggestion
- Starting budget
- Attribution setup note (how
/marketing attribution will measure it)
Execute: line pointing to the /marketing sub-command or manual
End with the same handoff prompt as plan, scoped to paid channels.
unpaid — organic deep-dive
Spawn unpaid-research only. For each recommended channel output:
- Why it fits (fit signals from intake)
- First-30-days concrete actions (3 bullets)
- Time-to-signal
- Measurement: which
/marketing sub-command tracks it (/marketing seo, /marketing email, /marketing instagram) or manual + tool
- Lifecycle email is first-class here — recommend specific Klaviyo flows and note that
/marketing email can scaffold them
sales — sales motion
Spawn sales-research only. Produce:
- Motion pick with one-paragraph rationale (Outbound / Inbound / PLG / Channel — Rule 1: these are the exact 4 options if you need the user to choose).
- ICP slice — which segment to hit first, sized from intake.
- 30/60/90 plan — week-by-week activities (e.g. week 1: build list of 500 accounts; week 2: 200 outbound opens; …).
- Tooling — CRM, enrichment, sequencer; note when AI automation from the automation section fits.
- Handoff — offer
[Automate outreach via /gtm automation, Skip, Edit motion].
automation — AI automation playbook
Spawn automation-research only. Render each recipe with:
- Trigger condition (what event fires it)
- Model / tool stack (default to Claude + the ops tool listed in the catalog)
- Integration point — specifically, which
/marketing sub-command or external system it reads from and writes to
- Risk flags (PII, cost, brand-voice drift) and the guardrails that mitigate them
- Starter prompt / pseudo-code snippet so the user can copy-paste
End with AskUserQuestion offering [Scaffold recipe now, Save only, Pick different recipe].
launch — 30/60/90 launch calendar
Used at stage = pre-launch or beta. Produces a week-by-week calendar of launch activities across all four avenues.
Required pre-flight checklist (render and check what's ready vs open):
☐ Positioning brief → /gtm brief
☐ Landing page live → manual
☐ Analytics wired → /marketing setup (GA4 + GSC)
☐ Email capture live → /marketing email (Klaviyo list)
☐ Ad accounts ready → /marketing setup (Meta, Google)
☐ Social handles claimed → manual
☐ Product Hunt / HN plan → this skill, below
☐ Press / creator list → manual
Launch-day playbook: render hourly timeline for T-7d through T+14d, with concrete actions and the /marketing command (or manual step) for each.
brief — one-page positioning brief
Fast path — does NOT spawn the four research agents. Just intake + a single call to write the brief. Fields: ICP, Pain, Value prop, 3 messaging pillars, Proof points, Anti-positioning (who it's NOT for). Save to ${CLAUDE_PLUGIN_DATA_DIR}/gtm/<project-slug>-brief-$(date +%Y-%m-%d).md.
This is the cheapest entry point — recommend running /gtm brief before /gtm plan when the project's positioning isn't already written down.
setup
Configure GTM defaults so subsequent runs skip the intake questions. Per Rule 4, run every Bash call with run_in_background: true unless the result is needed for the very next decision.
Auto-scan (background) first:
# Existing prefs
jq -r '{project: .gtm_default_project, audience: .gtm_default_audience, voice: .gtm_brand_voice, budget: .gtm_monthly_budget, stage: .gtm_stage}' "$PREFS_PATH" 2>/dev/null
# Repo signals
git -C "$PWD" remote get-url origin 2>/dev/null
head -50 README.md 2>/dev/null
ls .planning/ 2>/dev/null
Then prompt for what's missing (≤4 options per Rule 1), in this order:
- Default project name — free-text, pre-filled from git remote slug
- Project type —
[B2B SaaS, B2C product, Marketplace, Dev tool / API]
- Stage —
[Pre-launch, Beta, GA, Scale]
- Monthly budget tier —
[<$1k, $1k–5k, $5k–25k, $25k+]
- Brand voice —
[Playful, Professional, Technical, Bold]
Save to $PREFS_PATH as gtm_default_project, gtm_project_type, gtm_stage, gtm_monthly_budget, gtm_brand_voice. Never write API keys here — GTM does not own any credentials (/marketing does).
Finish with a smoke test: run /gtm brief in background and report ✓ setup complete — try /gtm plan or ✗ [error].
Plugin Rules compliance (required reading)
All behavior above respects claude-ops/CLAUDE.md:
- Rule 0 — public repo: every example above uses
your-project, you@example.com, <YOUR_TOKEN>. Never save user-specific data outside $PREFS_PATH or ${CLAUDE_PLUGIN_DATA_DIR}/gtm/.
- Rule 1 — ≤4 options per AskUserQuestion: every prompt in this file lists exactly ≤4. Paginate with
[More options...] if a dynamic list grows past 4.
- Rule 3 — never auto-skip: on launch handoff, every plan item gets an explicit
[Launch, Skip, Edit first] prompt. No silent skipping.
- Rule 4 — background by default during setup: all Bash calls in the
setup flow use run_in_background: true.
- Rule 5 — destructive actions need explicit confirmation:
/gtm never spends money or sends messages directly — it delegates to /marketing, which owns per-action confirmation. Recommendations are just that.
Why this skill is thin
/gtm deliberately does NOT re-implement channel APIs. Credential resolution, curl calls, daemon data, and dashboards all live in /marketing. This skill is a strategy-and-handoff layer. If a capability belongs to a channel API, add it to /marketing; if it belongs to planning, it goes here.
Source: davepoon/buildwithclaude → plugins/claude-ops/skills/ops-gtm/SKILL.md
1---2name: ops-gtm3description: Go-to-market strategy planner. Generates a complete GTM plan across paid, unpaid, marketing, sales, and AI-automation channels for any project — and hands executable campaigns off to /marketing.4---5
6
7# OPS ► GTM COMMAND CENTER
8
9Strategy layer that sits on top of `/marketing`. `/marketing` runs campaigns; `/gtm` decides what to run, across paid, unpaid, sales, and AI-automation channels, and then hands the executable pieces to `/marketing` via the Skill tool.
10
11## Runtime Context
12
13Before executing, load available context:
14
151. **Preferences**: Read `${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json`
16 - `timezone` — timestamp all output correctly
17 - `gtm_default_project`, `gtm_default_audience`, `gtm_brand_voice` — project-level defaults when set
18 - `gtm_monthly_budget`, `gtm_stage` (`pre-launch|beta|ga|scale`) — used to tune channel recommendations
19
202. **Cached plans**: List `${CLAUDE_PLUGIN_DATA_DIR}/gtm/*.md` to surface recent plans. Never overwrite a prior plan file — always append a new dated file.
21
223. **Daemon health**: Read `${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json`. If `action_needed` is not null, surface it before running any long planning flow.
23
244. **Repo auto-scan (background)**: For the current working directory, in parallel and with `run_in_background: true`:
25 - `git remote -v` → infer project slug and org
26 - `cat README.md` (or `README.*`) → product description, ICP hints
27 - Glob `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod` → tech stack
28 - Glob `.planning/**/*.md` and `docs/**/*.md` → prior briefs, positioning notes
29 - Resolve: project name, one-line pitch, primary tech, existing channels hinted in the repo
30
315. **`/marketing` credential probe (read-only)**: Do NOT re-resolve API keys in this skill. Instead, when the user asks to launch something, delegate to `/marketing` via the Skill tool — `/marketing` owns the credential resolution chain (userConfig → env vars → Doppler → Dashlane → Keychain → gcloud ADC).
32
33## Agent Teams support
34
35If `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` is set, use **Agent Teams** for the `plan` sub-command so the four research agents share context and report progress in real-time:
36
37```
38TeamCreate("gtm-research-team")
39Agent(team_name="gtm-research-team", name="paid-research", prompt="Research paid acquisition channels that fit ${PROJECT_TYPE} at ${STAGE} with $${MONTHLY_BUDGET}/mo. Return a ranked list with fit signals, expected CAC, and which /marketing sub-command (if any) executes each channel.")
40Agent(team_name="gtm-research-team", name="unpaid-research", prompt="Research organic channels (SEO, content, community, PR, partnerships, referrals, lifecycle email) for ${PROJECT_TYPE} at ${STAGE}. Return ranked list with effort estimate, time-to-signal, and /marketing sub-command mapping.")
41Agent(team_name="gtm-research-team", name="sales-research", prompt="Design a sales motion for ${PROJECT_TYPE}: outbound vs inbound vs PLG vs channel. Propose a 30/60/90 plan with concrete activities and target metrics.")
42Agent(team_name="gtm-research-team", name="automation-research", prompt="Propose AI-automation recipes: lead enrichment, personalized outreach, content ops, lifecycle copy, support deflection, lead scoring. For each, list trigger, model/tool stack, and where it plugs into /marketing.")
43```
44
45If the flag is NOT set, use standard fire-and-forget subagents with the same four prompts.
46
47---
48
49## Sub-command Routing
50
51Route `$ARGUMENTS` to the correct section below:
52
53| Input | Action |
54|---|---|
55| (empty), plan | Full GTM plan across all four avenues |
56| paid | Paid acquisition deep-dive (Meta, Google, LinkedIn, TikTok, affiliates, sponsorships) |
57| unpaid | Organic deep-dive (SEO, content, community, PR, partnerships, referrals, lifecycle email) |
58| sales | Sales motion (outbound, inbound, PLG, channel / partner) |
59| automation | AI-automation playbook for GTM |
60| launch | 30/60/90 launch calendar + pre-flight checklist |
61| brief | One-page positioning brief (ICP, value prop, messaging pillars) |
62| setup | Configure default project, audience, budget tier, brand voice |
63
64Arguments are free-form — treat `/gtm plan for my-project $2k/mo pre-launch` as equivalent to `plan` with intake values pre-filled.
65
66---
67
68## Project Intake
69
70Before producing any plan section, make sure the following are known. Source them in this order — only ask the user for what's still missing.
71
721. **Auto-scan the repo** (step 4 of Runtime Context).
732. **Read prefs** for `gtm_default_*` keys.
743. **Parse free-text in `$ARGUMENTS`** for budget, stage, and project name.
754. **AskUserQuestion for gaps** — respect Rule 1 (max 4 options per call; batch if needed).
76
77Use these four questions in order, skipping any already known:
78
79- **Project type** — `[B2B SaaS, B2C product, Marketplace, Dev tool / API]`
80- **Stage** — `[Pre-launch, Beta / early access, GA (live), Scale (growth)]`
81- **Primary goal (next 90 days)** — `[Awareness, Signups / leads, Revenue, Retention / expansion]`
82- **Monthly budget tier** — `[<$1k, $1k–5k, $5k–25k, $25k+]`
83
84If a Rule-1 batch overflows (e.g. more than 4 project types needed), paginate with `[More options...]` as the 4th slot.
85
86Per Rule 3, never silently skip an intake question — if the user hits Escape, offer `[Paste manually]` / `[Use default]` / `[Skip this only]`.
87
88---
89
90## Channel / Avenue Catalog
91
92This is the source-of-truth list the planner draws from. Each row: avenue → fit signals → cost profile → **execution path**. The execution path is what makes `/gtm` seamless with `/marketing`: if a `/marketing` sub-command exists for a channel, the plan recommends it by name; otherwise the channel is marked `manual` and the plan includes templated next-actions instead.
93
94### Paid
95
96| Channel | Fits | Cost profile | Execution |
97|---|---|---|---|
98| Meta Ads (Facebook + Instagram) | B2C, marketplace, broad consumer | $5–50 CPA typical | `/marketing ads` · `/marketing meta create-campaign` |
99| Google Ads — Search | High-intent buyers, existing demand | $1–30 CPC | `/marketing google-ads` |
100| Google Ads — Performance Max | E-comm with catalog | Blended CPA | `/marketing google-ads` |
101| YouTube Ads | Awareness at scale | $0.01–0.30 CPV | `/marketing google-ads` (video campaigns) |
102| LinkedIn Ads | B2B, ACV > $10k | $8–15 CPC, $50+ CPL | manual — LinkedIn Campaign Manager |
103| TikTok Ads | B2C, < 35 audience, creative-led | $1–10 CPC | manual — TikTok Ads Manager |
104| Reddit / X / Pinterest | Niche communities | Varies | manual |
105| Podcast sponsorships | Trust-driven, narrow ICP | $20–50 CPM | manual — direct sponsor deals |
106| Affiliate / partner program | Marketplace, SaaS with referral loop | Rev-share | manual — Rewardful / PartnerStack |
107
108### Unpaid (Organic)
109
110| Channel | Fits | Effort | Execution |
111|---|---|---|---|
112| Programmatic SEO | Dev tools, marketplaces, comparison queries | High upfront, compounding | `/marketing seo` (tracking) + manual content ops |
113| Topic-cluster SEO | Content-led SaaS, info-intent | Medium, 3–6mo to signal | `/marketing seo` |
114| Lifecycle email (welcome, nurture, winback) | Any with email capture | Medium, high leverage | `/marketing email` (Klaviyo flows) |
115| Instagram organic | Visual product, lifestyle | Medium, daily | `/marketing instagram` |
116| X / LinkedIn founder-led | B2B, dev tools, thought leadership | Daily, high-leverage | manual |
117| Community building (Discord / Slack / forum) | Dev tools, B2C with passion | High, ongoing | manual |
118| PR / launch pads (Product Hunt, HN, press) | Any at launch | Spiky | `/gtm launch` checklist + manual |
119| Partnerships / integrations | SaaS, marketplaces | Medium, compounding | manual |
120| Referral program | Any with product-led signup | Low eng cost, high leverage | manual — plug into lifecycle email |
121
122### Sales
123
124| Motion | Fits | Execution |
125|---|---|---|
126| Outbound (cold email + LinkedIn) | B2B, ACV > $5k | `/gtm automation` (AI-personalized) + manual sending tool |
127| Inbound (demo form → AE) | B2B SaaS with pricing page | manual CRM + routing |
128| Product-Led Growth (self-serve) | Dev tools, horizontal SaaS | manual — instrument onboarding; `/marketing email` for lifecycle |
129| Channel / partner | Enterprise, vertical SaaS | manual — co-selling motion |
130
131### AI Automation
132
133| Recipe | What it does | Stack | Plugs into |
134|---|---|---|---|
135| AI cold-email personalization | LLM generates opener from enrichment data | Clay / Apollo + Claude | outbound sales |
136| Generative SEO clusters | LLM drafts topic-cluster outlines from seed keywords | Claude + GSC data | `/marketing seo` |
137| Lifecycle copy generator | Auto-draft Klaviyo flow emails per segment | Claude + Klaviyo data | `/marketing email` |
138| Ad creative variants | Bulk-generate Meta/Google ad copy A/B sets | Claude + `/marketing ads` insights | `/marketing meta create-campaign` · `/marketing google-ads` |
139| Support deflection | LLM answers tier-1 tickets from docs | Claude + help-center KB | manual — help desk |
140| Lead scoring | LLM scores inbound leads on ICP fit | Claude + CRM data | manual — CRM |
141| Content repurposing | Long-form → tweets, LinkedIn posts, newsletter | Claude | `/marketing instagram` · manual social |
142
143---
144
145## plan — full GTM plan (default)
146
1471. **Intake** per Project Intake section.
1482. **Spawn the four research agents** (Agent Teams if flag set, else fire-and-forget).
1493. **Assemble the plan** in this order:
150
151 ```
152 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
153 GTM PLAN — [project] ([stage], [goal], $[budget]/mo)
154 [timestamp]
155 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
156 POSITIONING
157 ICP: [one sentence]
158 Value prop: [one sentence]
159 Messaging: [3 pillars, comma-separated]
160
161 PAID (next 30 days)
162 1. [Channel] $[X]/mo Expected CAC: $[X] Execute: /marketing ads
163 2. [Channel] $[X]/mo Expected CAC: $[X] Execute: manual
164
165 UNPAID (next 90 days)
166 1. [Channel] Effort: [L/M/H] Signal in: [X wks] Execute: /marketing seo
167 2. [Channel] ...
168
169 SALES
170 Motion: [Outbound / Inbound / PLG / Channel]
171 30/60/90: [one line summary]
172
173 AUTOMATION (AI-powered)
174 1. [Recipe] Plugs into: /marketing email
175 2. [Recipe] Plugs into: outbound
176
177 KPIs
178 North star: [metric + target]
179 Leading: [3 leading indicators]
180
181 BUDGET ROLLUP
182 Paid: $[X]/mo
183 Tools/SaaS: $[X]/mo
184 Total: $[X]/mo
185 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
186 ```
187
1884. **Persist the plan** to `${CLAUDE_PLUGIN_DATA_DIR}/gtm/<project-slug>-$(date +%Y-%m-%d).md` (create the directory if missing). Never overwrite — if the file exists, append `-v2`, `-v3`.
1895. **Handoff prompt** — end with an `AskUserQuestion` (≤4 options per Rule 1):
190 - `[Launch via /marketing]` — hand top executable items to `/marketing`
191 - `[Save only]` — keep the plan file, take no action
192 - `[Refine plan]` — re-run with adjusted intake
193 - `[Schedule follow-up]` — revisit in 7/30 days (delegate to `/ops cron` if available)
194
195On `[Launch via /marketing]`, iterate through plan items whose execution path starts with `/marketing` and invoke them one at a time via the Skill tool:
196
197```
198Skill("ops-marketing", args="campaigns")
199Skill("ops-marketing", args="ads")
200Skill("ops-marketing", args="email")
201```
202
203Never silently skip an item (Rule 3) — for each, ask `[Launch, Skip, Edit first]`.
204
205Per Rule 5, do NOT auto-launch anything that spends money or sends to real recipients without explicit per-item confirmation. The plan recommends; `/marketing` executes; the user approves each paid or outbound action.
206
207---
208
209## paid — paid acquisition deep-dive
210
211Same intake, but only spawn the `paid-research` agent. Render just the PAID block, with up to 5 channel rows and for each:
212
213- Expected CAC range (cite source or reasoning)
214- Creative angle suggestion
215- Starting budget
216- Attribution setup note (how `/marketing attribution` will measure it)
217- `Execute:` line pointing to the `/marketing` sub-command or `manual`
218
219End with the same handoff prompt as `plan`, scoped to paid channels.
220
221---
222
223## unpaid — organic deep-dive
224
225Spawn `unpaid-research` only. For each recommended channel output:
226
227- Why it fits (fit signals from intake)
228- First-30-days concrete actions (3 bullets)
229- Time-to-signal
230- Measurement: which `/marketing` sub-command tracks it (`/marketing seo`, `/marketing email`, `/marketing instagram`) or `manual + tool`
231- Lifecycle email is first-class here — recommend specific Klaviyo flows and note that `/marketing email` can scaffold them
232
233---
234
235## sales — sales motion
236
237Spawn `sales-research` only. Produce:
238
2391. **Motion pick** with one-paragraph rationale (Outbound / Inbound / PLG / Channel — Rule 1: these are the exact 4 options if you need the user to choose).
2402. **ICP slice** — which segment to hit first, sized from intake.
2413. **30/60/90 plan** — week-by-week activities (e.g. week 1: build list of 500 accounts; week 2: 200 outbound opens; …).
2424. **Tooling** — CRM, enrichment, sequencer; note when AI automation from the automation section fits.
2435. **Handoff** — offer `[Automate outreach via /gtm automation, Skip, Edit motion]`.
244
245---
246
247## automation — AI automation playbook
248
249Spawn `automation-research` only. Render each recipe with:
250
251- Trigger condition (what event fires it)
252- Model / tool stack (default to Claude + the ops tool listed in the catalog)
253- Integration point — specifically, which `/marketing` sub-command or external system it reads from and writes to
254- Risk flags (PII, cost, brand-voice drift) and the guardrails that mitigate them
255- Starter prompt / pseudo-code snippet so the user can copy-paste
256
257End with `AskUserQuestion` offering `[Scaffold recipe now, Save only, Pick different recipe]`.
258
259---
260
261## launch — 30/60/90 launch calendar
262
263Used at stage = pre-launch or beta. Produces a week-by-week calendar of launch activities across all four avenues.
264
265Required pre-flight checklist (render and check what's ready vs open):
266
267```
268☐ Positioning brief → /gtm brief
269☐ Landing page live → manual
270☐ Analytics wired → /marketing setup (GA4 + GSC)
271☐ Email capture live → /marketing email (Klaviyo list)
272☐ Ad accounts ready → /marketing setup (Meta, Google)
273☐ Social handles claimed → manual
274☐ Product Hunt / HN plan → this skill, below
275☐ Press / creator list → manual
276```
277
278Launch-day playbook: render hourly timeline for T-7d through T+14d, with concrete actions and the `/marketing` command (or manual step) for each.
279
280---
281
282## brief — one-page positioning brief
283
284Fast path — does NOT spawn the four research agents. Just intake + a single call to write the brief. Fields: **ICP**, **Pain**, **Value prop**, **3 messaging pillars**, **Proof points**, **Anti-positioning (who it's NOT for)**. Save to `${CLAUDE_PLUGIN_DATA_DIR}/gtm/<project-slug>-brief-$(date +%Y-%m-%d).md`.
285
286This is the cheapest entry point — recommend running `/gtm brief` before `/gtm plan` when the project's positioning isn't already written down.
287
288---
289
290## setup
291
292Configure GTM defaults so subsequent runs skip the intake questions. Per Rule 4, run every Bash call with `run_in_background: true` unless the result is needed for the very next decision.
293
294**Auto-scan (background) first:**
295
296```bash
297# Existing prefs
298jq -r '{project: .gtm_default_project, audience: .gtm_default_audience, voice: .gtm_brand_voice, budget: .gtm_monthly_budget, stage: .gtm_stage}' "$PREFS_PATH" 2>/dev/null
299
300# Repo signals
301git -C "$PWD" remote get-url origin 2>/dev/null
302head -50 README.md 2>/dev/null
303ls .planning/ 2>/dev/null
304```
305
306Then prompt for what's missing (≤4 options per Rule 1), in this order:
307
3081. **Default project name** — free-text, pre-filled from git remote slug
3092. **Project type** — `[B2B SaaS, B2C product, Marketplace, Dev tool / API]`
3103. **Stage** — `[Pre-launch, Beta, GA, Scale]`
3114. **Monthly budget tier** — `[<$1k, $1k–5k, $5k–25k, $25k+]`
3125. **Brand voice** — `[Playful, Professional, Technical, Bold]`
313
314Save to `$PREFS_PATH` as `gtm_default_project`, `gtm_project_type`, `gtm_stage`, `gtm_monthly_budget`, `gtm_brand_voice`. Never write API keys here — GTM does not own any credentials (`/marketing` does).
315
316Finish with a smoke test: run `/gtm brief` in background and report `✓ setup complete — try /gtm plan` or `✗ [error]`.
317
318---
319
320## Plugin Rules compliance (required reading)
321
322All behavior above respects `claude-ops/CLAUDE.md`:
323
324- **Rule 0 — public repo**: every example above uses `your-project`, `you@example.com`, `<YOUR_TOKEN>`. Never save user-specific data outside `$PREFS_PATH` or `${CLAUDE_PLUGIN_DATA_DIR}/gtm/`.
325- **Rule 1 — ≤4 options per AskUserQuestion**: every prompt in this file lists exactly ≤4. Paginate with `[More options...]` if a dynamic list grows past 4.
326- **Rule 3 — never auto-skip**: on launch handoff, every plan item gets an explicit `[Launch, Skip, Edit first]` prompt. No silent skipping.
327- **Rule 4 — background by default during setup**: all Bash calls in the `setup` flow use `run_in_background: true`.
328- **Rule 5 — destructive actions need explicit confirmation**: `/gtm` never spends money or sends messages directly — it delegates to `/marketing`, which owns per-action confirmation. Recommendations are just that.
329
330---
331
332## Why this skill is thin
333
334`/gtm` deliberately does NOT re-implement channel APIs. Credential resolution, curl calls, daemon data, and dashboards all live in `/marketing`. This skill is a strategy-and-handoff layer. If a capability belongs to a channel API, add it to `/marketing`; if it belongs to planning, it goes here.
335
336---
337
338**Source:** [`davepoon/buildwithclaude`](https://github.com/davepoon/buildwithclaude) → `plugins/claude-ops/skills/ops-gtm/SKILL.md`