OPS ► GTM COMMAND CENTER skill
OPS on-demand: This skill should be used when the user asks to "go to market", "GTM plan", or…
by Lifecycle-Innovations-Limited·MIT license·★ 543 Stars on the repo·GitHub ↗
npx degit Lifecycle-Innovations-Limited/claude-ops/claude-ops/skills/ops-gtm#main ~/.claude/skills/ops-gtmChecked ·commit main
Inside this skill
SKILL.md · the author's own words# OPS ► GTM COMMAND CENTER Load `ops-rules` before acting. Public repo (no personal data). Outbound: one draft → one approval → one send. If `AskUserQuestion` / `Work… Strategy layer that sits on top of `/marketing`. `/marketing` runs campaigns; `/gtm` decides what to run, across paid, unpaid, sales, and A… ## Runtime Context Before executing, load available context: 1. **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 2. **Cached plans**: List `${CLAUDE_PLUGIN_DATA_DIR}/gtm/*.md` to surface recent plans. Never overwrite a prior plan file — always append a…
Word-for-word excerpt, not a result. Read the full SKILL.md ↓
Files of OPS ► GTM COMMAND CENTER
Show the full text307 lines
OPS ► GTM COMMAND CENTER
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).
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.jsontimezone— timestamp all output correctlygtm_default_project,gtm_default_audience,gtm_brand_voice— project-level defaults when setgtm_monthly_budget,gtm_stage(pre-launch|beta|ga|scale) — used to tune channel recommendations
Cached plans: List
${CLAUDE_PLUGIN_DATA_DIR}/gtm/*.mdto 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. Ifaction_neededis 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 orgcat README.md(orREADME.*) → product description, ICP hints- Glob
package.json,pyproject.toml,Cargo.toml,go.mod→ tech stack - Glob
.planning/**/*.mdanddocs/**/*.md→ prior briefs, positioning notes - Resolve: project name, one-line pitch, primary tech, existing channels hinted in the repo
/marketingcredential probe (read-only): Do NOT re-resolve API keys in this skill. Instead, when the user asks to launch something, delegate to/marketingvia the Skill tool —/marketingowns 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
$ARGUMENTSfor 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
See references/catalog.md.
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 cronif 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 attributionwill measure it) Execute:line pointing to the/marketingsub-command ormanual
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
/marketingsub-command tracks it (/marketing seo,/marketing email,/marketing instagram) ormanual + tool - Lifecycle email is first-class here — recommend specific Klaviyo flows and note that
/marketing emailcan 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
/marketingsub-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,[email protected],<YOUR_TOKEN>. Never save user-specific data outside$PREFS_PATHor${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
setupflow userun_in_background: true. - Rule 5 — destructive actions need explicit confirmation:
/gtmnever 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.
Additional resources
Channel catalogue: references/catalog.md. CLI detail lives in the /marketing skill,
which owns credential resolution and the channel API calls.
| 1 | |
| 2 | name ops-gtm |
| 3 | description "OPS on-demand: This skill should be used when the user asks to \"go to market\", \"GTM plan\", or…" |
| 4 | argument-hint '[plan|paid|unpaid|sales|automation|launch|brief|setup]' |
| 5 | allowed-tools |
| 6 | - Bash |
| 7 | - Read |
| 8 | - Write |
| 9 | - Grep |
| 10 | - Glob |
| 11 | - Agent |
| 12 | - TeamCreate |
| 13 | - SendMessage |
| 14 | - AskUserQuestion |
| 15 | - WebFetch |
| 16 | - WebSearch |
| 17 | - Skill |
| 18 | effort medium |
| 19 | maxTurns 40 |
| 20 | context fork |
| 21 | |
| 22 | |
| 23 | # OPS ► GTM COMMAND CENTER |
| 24 | |
| 25 | 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`). |
| 26 | |
| 27 | 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. |
| 28 | |
| 29 | ## Runtime Context |
| 30 | |
| 31 | Before executing, load available context: |
| 32 | |
| 33 | **Preferences**: Read `${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json` |
| 34 | `timezone` — timestamp all output correctly |
| 35 | `gtm_default_project`, `gtm_default_audience`, `gtm_brand_voice` — project-level defaults when set |
| 36 | `gtm_monthly_budget`, `gtm_stage` (`pre-launch|beta|ga|scale`) — used to tune channel recommendations |
| 37 | |
| 38 | **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. |
| 39 | |
| 40 | **Daemon health**: Read `${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json`. If `action_needed` is not null, surface it before running any long planning flow. |
| 41 | |
| 42 | **Repo auto-scan (background)**: For the current working directory, in parallel and with `run_in_background: true`: |
| 43 | `git remote -v` → infer project slug and org |
| 44 | `cat README.md` (or `README.*`) → product description, ICP hints |
| 45 | Glob `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod` → tech stack |
| 46 | Glob `.planning/**/*.md` and `docs/**/*.md` → prior briefs, positioning notes |
| 47 | Resolve: project name, one-line pitch, primary tech, existing channels hinted in the repo |
| 48 | |
| 49 | **`/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). |
| 50 | |
| 51 | ## Agent Teams support |
| 52 | |
| 53 | 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: |
| 54 | |
| 55 | |
| 56 | TeamCreate("gtm-research-team") |
| 57 | 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.") |
| 58 | 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.") |
| 59 | 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.") |
| 60 | 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.") |
| 61 | |
| 62 | |
| 63 | If the flag is NOT set, use standard fire-and-forget subagents with the same four prompts. |
| 64 | |
| 65 | |
| 66 | |
| 67 | ## Sub-command Routing |
| 68 | |
| 69 | Route `$ARGUMENTS` to the correct section below: |
| 70 | |
| 71 | | Input | Action | |
| 72 | | ------------- | ----------------------------------------------------------------------------------------- | |
| 73 | | (empty), plan | Full GTM plan across all four avenues | |
| 74 | | paid | Paid acquisition deep-dive (Meta, Google, LinkedIn, TikTok, affiliates, sponsorships) | |
| 75 | | unpaid | Organic deep-dive (SEO, content, community, PR, partnerships, referrals, lifecycle email) | |
| 76 | | sales | Sales motion (outbound, inbound, PLG, channel / partner) | |
| 77 | | automation | AI-automation playbook for GTM | |
| 78 | | launch | 30/60/90 launch calendar + pre-flight checklist | |
| 79 | | brief | One-page positioning brief (ICP, value prop, messaging pillars) | |
| 80 | | setup | Configure default project, audience, budget tier, brand voice | |
| 81 | |
| 82 | Arguments are free-form — treat `/gtm plan for my-project $2k/mo pre-launch` as equivalent to `plan` with intake values pre-filled. |
| 83 | |
| 84 | |
| 85 | |
| 86 | ## Project Intake |
| 87 | |
| 88 | 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. |
| 89 | |
| 90 | **Auto-scan the repo** (step 4 of Runtime Context). |
| 91 | **Read prefs** for `gtm_default_*` keys. |
| 92 | **Parse free-text in `$ARGUMENTS`** for budget, stage, and project name. |
| 93 | **AskUserQuestion for gaps** — respect Rule 1 (max 4 options per call; batch if needed). |
| 94 | |
| 95 | Use these four questions in order, skipping any already known: |
| 96 | |
| 97 | **Project type** — `[B2B SaaS, B2C product, Marketplace, Dev tool / API]` |
| 98 | **Stage** — `[Pre-launch, Beta / early access, GA (live), Scale (growth)]` |
| 99 | **Primary goal (next 90 days)** — `[Awareness, Signups / leads, Revenue, Retention / expansion]` |
| 100 | **Monthly budget tier** — `[<$1k, $1k–5k, $5k–25k, $25k+]` |
| 101 | |
| 102 | If a Rule-1 batch overflows (e.g. more than 4 project types needed), paginate with `[More options...]` as the 4th slot. |
| 103 | |
| 104 | Per Rule 3, never silently skip an intake question — if the user hits Escape, offer `[Paste manually]` / `[Use default]` / `[Skip this only]`. |
| 105 | |
| 106 | |
| 107 | |
| 108 | ## Channel / Avenue Catalog |
| 109 | |
| 110 | See `references/catalog.md`. |
| 111 | |
| 112 | ## plan — full GTM plan (default) |
| 113 | |
| 114 | **Intake** per Project Intake section. |
| 115 | **Spawn the four research agents** (Agent Teams if flag set, else fire-and-forget). |
| 116 | **Assemble the plan** in this order: |
| 117 | |
| 118 | |
| 119 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |
| 120 | GTM PLAN — [project] ([stage], [goal], $[budget]/mo) |
| 121 | [timestamp] |
| 122 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |
| 123 | POSITIONING |
| 124 | ICP: [one sentence] |
| 125 | Value prop: [one sentence] |
| 126 | Messaging: [3 pillars, comma-separated] |
| 127 | |
| 128 | PAID (next 30 days) |
| 129 | 1. [Channel] $[X]/mo Expected CAC: $[X] Execute: /marketing ads |
| 130 | 2. [Channel] $[X]/mo Expected CAC: $[X] Execute: manual |
| 131 | |
| 132 | UNPAID (next 90 days) |
| 133 | 1. [Channel] Effort: [L/M/H] Signal in: [X wks] Execute: /marketing seo |
| 134 | 2. [Channel] ... |
| 135 | |
| 136 | SALES |
| 137 | Motion: [Outbound / Inbound / PLG / Channel] |
| 138 | 30/60/90: [one line summary] |
| 139 | |
| 140 | AUTOMATION (AI-powered) |
| 141 | 1. [Recipe] Plugs into: /marketing email |
| 142 | 2. [Recipe] Plugs into: outbound |
| 143 | |
| 144 | KPIs |
| 145 | North star: [metric + target] |
| 146 | Leading: [3 leading indicators] |
| 147 | |
| 148 | BUDGET ROLLUP |
| 149 | Paid: $[X]/mo |
| 150 | Tools/SaaS: $[X]/mo |
| 151 | Total: $[X]/mo |
| 152 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |
| 153 | |
| 154 | |
| 155 | **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`. |
| 156 | **Handoff prompt** — end with an `AskUserQuestion` (≤4 options per Rule 1): |
| 157 | `[Launch via /marketing]` — hand top executable items to `/marketing` |
| 158 | `[Save only]` — keep the plan file, take no action |
| 159 | `[Refine plan]` — re-run with adjusted intake |
| 160 | `[Schedule follow-up]` — revisit in 7/30 days (delegate to `/ops cron` if available) |
| 161 | |
| 162 | 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: |
| 163 | |
| 164 | |
| 165 | Skill("ops-marketing", args="campaigns") |
| 166 | Skill("ops-marketing", args="ads") |
| 167 | Skill("ops-marketing", args="email") |
| 168 | |
| 169 | |
| 170 | Never silently skip an item (Rule 3) — for each, ask `[Launch, Skip, Edit first]`. |
| 171 | |
| 172 | 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. |
| 173 | |
| 174 | |
| 175 | |
| 176 | ## paid — paid acquisition deep-dive |
| 177 | |
| 178 | Same intake, but only spawn the `paid-research` agent. Render just the PAID block, with up to 5 channel rows and for each: |
| 179 | |
| 180 | Expected CAC range (cite source or reasoning) |
| 181 | Creative angle suggestion |
| 182 | Starting budget |
| 183 | Attribution setup note (how `/marketing attribution` will measure it) |
| 184 | `Execute:` line pointing to the `/marketing` sub-command or `manual` |
| 185 | |
| 186 | End with the same handoff prompt as `plan`, scoped to paid channels. |
| 187 | |
| 188 | |
| 189 | |
| 190 | ## unpaid — organic deep-dive |
| 191 | |
| 192 | Spawn `unpaid-research` only. For each recommended channel output: |
| 193 | |
| 194 | Why it fits (fit signals from intake) |
| 195 | First-30-days concrete actions (3 bullets) |
| 196 | Time-to-signal |
| 197 | Measurement: which `/marketing` sub-command tracks it (`/marketing seo`, `/marketing email`, `/marketing instagram`) or `manual + tool` |
| 198 | Lifecycle email is first-class here — recommend specific Klaviyo flows and note that `/marketing email` can scaffold them |
| 199 | |
| 200 | |
| 201 | |
| 202 | ## sales — sales motion |
| 203 | |
| 204 | Spawn `sales-research` only. Produce: |
| 205 | |
| 206 | **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). |
| 207 | **ICP slice** — which segment to hit first, sized from intake. |
| 208 | **30/60/90 plan** — week-by-week activities (e.g. week 1: build list of 500 accounts; week 2: 200 outbound opens; …). |
| 209 | **Tooling** — CRM, enrichment, sequencer; note when AI automation from the automation section fits. |
| 210 | **Handoff** — offer `[Automate outreach via /gtm automation, Skip, Edit motion]`. |
| 211 | |
| 212 | |
| 213 | |
| 214 | ## automation — AI automation playbook |
| 215 | |
| 216 | Spawn `automation-research` only. Render each recipe with: |
| 217 | |
| 218 | Trigger condition (what event fires it) |
| 219 | Model / tool stack (default to Claude + the ops tool listed in the catalog) |
| 220 | Integration point — specifically, which `/marketing` sub-command or external system it reads from and writes to |
| 221 | Risk flags (PII, cost, brand-voice drift) and the guardrails that mitigate them |
| 222 | Starter prompt / pseudo-code snippet so the user can copy-paste |
| 223 | |
| 224 | End with `AskUserQuestion` offering `[Scaffold recipe now, Save only, Pick different recipe]`. |
| 225 | |
| 226 | |
| 227 | |
| 228 | ## launch — 30/60/90 launch calendar |
| 229 | |
| 230 | Used at stage = pre-launch or beta. Produces a week-by-week calendar of launch activities across all four avenues. |
| 231 | |
| 232 | Required pre-flight checklist (render and check what's ready vs open): |
| 233 | |
| 234 | |
| 235 | ☐ Positioning brief → /gtm brief |
| 236 | ☐ Landing page live → manual |
| 237 | ☐ Analytics wired → /marketing setup (GA4 + GSC) |
| 238 | ☐ Email capture live → /marketing email (Klaviyo list) |
| 239 | ☐ Ad accounts ready → /marketing setup (Meta, Google) |
| 240 | ☐ Social handles claimed → manual |
| 241 | ☐ Product Hunt / HN plan → this skill, below |
| 242 | ☐ Press / creator list → manual |
| 243 | |
| 244 | |
| 245 | Launch-day playbook: render hourly timeline for T-7d through T+14d, with concrete actions and the `/marketing` command (or manual step) for each. |
| 246 | |
| 247 | |
| 248 | |
| 249 | ## brief — one-page positioning brief |
| 250 | |
| 251 | 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`. |
| 252 | |
| 253 | This is the cheapest entry point — recommend running `/gtm brief` before `/gtm plan` when the project's positioning isn't already written down. |
| 254 | |
| 255 | |
| 256 | |
| 257 | ## setup |
| 258 | |
| 259 | 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. |
| 260 | |
| 261 | **Auto-scan (background) first:** |
| 262 | |
| 263 | |
| 264 | # Existing prefs |
| 265 | 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 |
| 266 | |
| 267 | # Repo signals |
| 268 | git -C "$PWD" remote get-url origin 2>/dev/null |
| 269 | head -50 README.md 2>/dev/null |
| 270 | ls .planning/ 2>/dev/null |
| 271 | |
| 272 | |
| 273 | Then prompt for what's missing (≤4 options per Rule 1), in this order: |
| 274 | |
| 275 | **Default project name** — free-text, pre-filled from git remote slug |
| 276 | **Project type** — `[B2B SaaS, B2C product, Marketplace, Dev tool / API]` |
| 277 | **Stage** — `[Pre-launch, Beta, GA, Scale]` |
| 278 | **Monthly budget tier** — `[<$1k, $1k–5k, $5k–25k, $25k+]` |
| 279 | **Brand voice** — `[Playful, Professional, Technical, Bold]` |
| 280 | |
| 281 | 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). |
| 282 | |
| 283 | Finish with a smoke test: run `/gtm brief` in background and report `✓ setup complete — try /gtm plan` or `✗ [error]`. |
| 284 | |
| 285 | |
| 286 | |
| 287 | ## Plugin Rules compliance (required reading) |
| 288 | |
| 289 | All behavior above respects `claude-ops/CLAUDE.md`: |
| 290 | |
| 291 | **Rule 0 — public repo**: every example above uses `your-project`, `[email protected]`, `<YOUR_TOKEN>`. Never save user-specific data outside `$PREFS_PATH` or `${CLAUDE_PLUGIN_DATA_DIR}/gtm/`. |
| 292 | **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. |
| 293 | **Rule 3 — never auto-skip**: on launch handoff, every plan item gets an explicit `[Launch, Skip, Edit first]` prompt. No silent skipping. |
| 294 | **Rule 4 — background by default during setup**: all Bash calls in the `setup` flow use `run_in_background: true`. |
| 295 | **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. |
| 296 | |
| 297 | |
| 298 | |
| 299 | ## Why this skill is thin |
| 300 | |
| 301 | `/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. |
| 302 | |
| 303 | ## Additional resources |
| 304 | |
| 305 | Channel catalogue: `references/catalog.md`. CLI detail lives in the `/marketing` skill, |
| 306 | which owns credential resolution and the channel API calls. |
| 307 |
Discussion
Browse more free Claude skills.