/mktg-setup — First-Run Conversational Setup
When This Runs
/cmo invokes this skill automatically when both conditions are true:
brand/cmo-preferences.mddoes not exist (or is template content), ANDmktg status --jsonreportsbrandSummary.populated < 3.
The user typically never types /mktg-setup. They install marketing-cli (npm i -g marketing-cli), open Claude Code in any project directory, type /cmo (or just say "help me with marketing"), and /cmo's activation routes here. The wizard is a conversational on-ramp, not a slash command users have to memorize.
What This Skill Does
Three AskUserQuestion calls. That is the entire wizard. No batched questions, no progress bars, no long forms.
Each answer becomes a persistent decision in brand/cmo-preferences.md. After question 3, hand off to /cmo's foundation flow (3 research agents in parallel — see cmo/rules/sub-agents.md).
The wizard's job is to record the small set of decisions Claude cannot make for the user. Filling out the 10 brand files is /cmo's job, not the wizard's.
On Activation
- Run
mktg status --json --fields project,brand,brandSummaryfrom the project root. - If
brandSummary.populated >= 3ANDcmo-preferences.mddoesn't exist: a returning user got upgraded to a version that introduced preferences. Tell them: "I see you have a populated brand but no preferences file yet. I'll write one based on what's already here." Skip directly to step 3 (write preferences) using inferred defaults from existing brand files. - If
cmo-preferences.mdalready exists and is non-template: skip the wizard entirely. Hand back to/cmoimmediately. Tell the user: "Looks like you've already onboarded. Hand off to /cmo for your next move." - Otherwise (genuine first run): proceed to Step 1.
Step 1 — Ask: Identity
Step 1 is a single-select question (1a) plus exactly one free-text follow-up (1b or 1c). Don't merge them and don't add extra prompts in between.
Step 1a — Setup mode
Use AskUserQuestion. Single-select.
Question text: "How should we set up your brand?"
Options:
- "From a URL — I'll scrape your site to seed brand files (recommended if you have a website)"
- "Local conversational setup — I'll ask a few questions instead"
- "Pre-launch / open source / personal brand — describe in 1 sentence"
The user's choice determines the follow-up:
- "From a URL" → go to Step 1b (URL capture).
- "Local conversational setup" OR "Pre-launch / open source / personal brand" → go to Step 1c (sentence capture).
Step 1b — URL capture (only if Step 1a = "From a URL")
Use AskUserQuestion. Single-select with the "Other" free-text path (so the user can paste the URL inline).
Question text: "Paste your URL"
Options:
- "I'll paste the URL in the next message" — the user types the URL in their next chat message.
- (Use the built-in "Other" free-text option for inline URL entry — paste-and-go.)
Capture the URL exactly as the user provides it. Do NOT validate it inside the wizard — no regex, no protocol check, no normalization. Pass the raw string straight to the CLI:
mktg init --from <url>
mktg init --from is the single source of truth for URL handling. If the URL is malformed, unreachable, or scrape-blocked, the CLI surfaces the error; the wizard relays that error to the user and falls back to the local sentence path (offer "I'll describe it in one sentence instead" without re-asking Step 1a).
On success, the scrape seeds brand/voice-profile.md, brand/positioning.md, brand/audience.md, and brand/competitors.md. Hold the captured URL and the "scrape ran" status (yes/no) for Step 5.
Step 1c — Sentence capture (only if Step 1a = "Local conversational setup" OR "Pre-launch / open source / personal brand")
No URL here — this is the deliberate no-URL path. Ask a single short follow-up:
"Got it — describe what we're marketing in one sentence."
Capture the response verbatim. Hold it as the seed for brand/voice-profile.md (it lands in the "What we are" section during Step 5 / foundation flow). Don't run mktg init --from; the foundation research agents fill the gaps.
Step 2 — Ask: Posture
Use AskUserQuestion. Single-select.
Question text: "What's the marketing posture you want?"
Options:
- "Aggressive launch" — Product Hunt + Hacker News + X campaign blitz. Best for new product launches with momentum to capture.
- "Steady authority build" — SEO + newsletter + slow-burn thought leadership. Best for long-game category ownership.
- "Founder-led / personal brand" — voice-driven content, personality forward. Best when the founder IS the differentiator.
- "Product-led growth" — free tier hooks, referrals, viral mechanics. Best when the product itself drives acquisition.
This is the single most important answer. It shapes which skills /cmo prioritizes downstream:
| Posture | Skills /cmo prioritizes |
|---|---|
| aggressive-launch | launch-strategy, startup-launcher, social-campaign, direct-response-copy |
| steady-authority | seo-content, keyword-research, newsletter, ai-seo |
| founder-led | brand-voice, voice-extraction, content-atomizer, mktg-x |
| product-led-growth | free-tool-strategy, referral-program, lead-magnet, conversion-flow-cro |
Step 3 — Ask: Distribution
Use AskUserQuestion. multiSelect = true.
Question text: "Which distribution channels should we wire up first?"
Options:
- "Typefully" — X/Twitter and threads. Best for short-form and thread-first audiences.
- "Postiz" — LinkedIn, Reddit, Bluesky, Mastodon, Threads, Instagram, TikTok, etc. (30+ providers via the postiz catalog).
- "Resend" — transactional email and newsletter delivery.
- "Skip for now — I'll connect later" —
/cmowill use--adapter filefor export until the user wires something up.
Multiple selections are fine. If the user picks "Skip", record that explicitly — a deliberate skip is signal, not absence of data.
Step 4 — Ask: Studio (beta)
Use AskUserQuestion. Single-select.
Question text: "Want to use the Studio dashboard? (beta)"
Options:
- "Yes — auto-open the Studio at the end of setup (recommended)" —
/cmowill runmktg studioautomatically at the end of foundation flow and on subsequent activations when the user says "show me the dashboard." - "No — keep me in the CLI only" —
/cmowill not auto-launch Studio. The user can still runmktg studiomanually any time.
Why this question: Studio is in beta. Some users prefer pure CLI workflows (especially headless/agent-only environments). Recording the choice once means /cmo never nags later.
If the user picks "No", /cmo reads studio_enabled: no from preferences and skips the studio launch step in its foundation flow. If they later change their mind, they can edit brand/cmo-preferences.md directly or just say "let's open studio" and /cmo will respect the explicit ask.
Step 5 — Write Preferences
Create brand/cmo-preferences.md with this shape:
# CMO Preferences
> Recorded by /mktg-setup on {ISO 8601 date}. Edit this file to change /cmo's runtime behavior.
> /cmo reads this file on every activation and uses it to shape skill prioritization and distribution routing.
## Identity
- **What we're marketing**: {URL or one-sentence description from Step 1}
- **Setup mode**: {from-url | local | pre-launch}
- **URL**: {captured URL if Setup mode is from-url, otherwise omit this line}
- **Scrape ran**: {yes if mktg init --from succeeded, no if from-url failed or mode is local/pre-launch}
## Posture
- **Mode**: {aggressive-launch | steady-authority | founder-led | product-led-growth}
- **Why this mode**: {one-line rationale based on the user's choice — pull from the option description in Step 2}
- **Skill priority shortlist**: {comma-separated list from the posture-to-skills mapping}
## Distribution
- **Selected**: {comma-se