Best for
- Use when /cmo detects no populated brand files and no cmo-preferences.
MoizIbnYousaf/marketing-cli/skills/mktg-setup/SKILL.md
First-run conversational setup wizard for marketing-cli. Use when /cmo detects no populated brand files and no cmo-preferences.md, when the user just installed marketing-cli for the first time, or when they say things like "set up marketing", "start marketing", "marketing wizard", "I just installed marketing-cli", "onboard me", "first time", "initial setup". Asks 3 sharp questions (identity, posture, distribution preferences), records the answers to brand/cmo-preferences.md, then hands off to /c
Decision brief
First-run conversational setup wizard for marketing-cli. md, when the user just installed marketing-cli for the first time, or when they say things like "set up marketing", "start marketing", "marketing wizard", "I just installed marketing-cli", "onboard me", "first time", "initial setup".
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/MoizIbnYousaf/marketing-cli --skill "skills/mktg-setup"Inspect the Agent Skill "mktg-setup" from https://github.com/MoizIbnYousaf/marketing-cli/blob/f12fbcbe4929584697b309b9096c9427b0cfce8e/skills/mktg-setup/SKILL.md at commit f12fbcbe4929584697b309b9096c9427b0cfce8e. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
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.
Use AskUserQuestion. Single-select.
Use AskUserQuestion. Single-select with the "Other" free-text path (so the user can paste the URL inline).
No URL here — this is the deliberate no-URL path. Ask a single short follow-up:
Use AskUserQuestion. Single-select.
Permission review
The documentation asks the agent to read local files, directories, or repositories.
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 wizThe documentation asks the agent to create, modify, or delete local files.
Recorded by /mktg-setup on {ISO 8601 date}. Edit this file to change /cmo's runtime behavior.The documentation asks the agent to create, modify, or delete local files.
To change preferences, edit this file directly OR ask Claude to "re-run mktg setup" (it will overwrite this file).Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 86/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 27 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
/cmo invokes this skill automatically when both conditions are true:
brand/cmo-preferences.md does not exist (or is template content), ANDmktg status --json reports brandSummary.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.
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.
mktg status --json --fields project,brand,brandSummary from the project root.brandSummary.populated >= 3 AND cmo-preferences.md doesn'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.cmo-preferences.md already exists and is non-template: skip the wizard entirely. Hand back to /cmo immediately. Tell the user: "Looks like you've already onboarded. Hand off to /cmo for your next move."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.
Use AskUserQuestion. Single-select.
Question text: "How should we set up your brand?"
Options:
The user's choice determines the follow-up:
Use AskUserQuestion. Single-select with the "Other" free-text path (so the user can paste the URL inline).
Question text: "Paste your URL"
Options:
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.
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.
Use AskUserQuestion. Single-select.
Question text: "What's the marketing posture you want?"
Options:
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 |
Use AskUserQuestion. multiSelect = true.
Question text: "Which distribution channels should we wire up first?"
Options:
/cmo will use --adapter file for 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.
Use AskUserQuestion. Single-select.
Question text: "Want to use the Studio dashboard? (beta)"
Options:
/cmo will run mktg studio automatically at the end of foundation flow and on subsequent activations when the user says "show me the dashboard."/cmo will not auto-launch Studio. The user can still run mktg studio manually 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.
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-separated list of selected platforms, or "none" if skipped}
- **Skipped**: {whichever options weren't selected}
- **Default adapter**: {typefully if X selected and only X | postiz if multi-platform | file if skipped}
## Studio
- **studio_enabled**: {yes | no}
- **Beta**: yes (Studio is in beta — record the user's preference; /cmo respects this on every activation)
- **Auto-open at end of setup**: {yes if studio_enabled is yes, no otherwise}
## Notes
- This file is the persistent contract. /cmo reads it on every activation.
- To change preferences, edit this file directly OR ask Claude to "re-run mktg setup" (it will overwrite this file).
Make sure the directory exists before writing:
test -d brand || mkdir -p brand
SEO backend handoff (before spawning agents): run mktg catalog info openseo --json --fields configured,missing_envs. OpenSEO is the default SEO data plane (measured KD, volume, SERP, backlinks, GSC).
configured: true → tell the user: "OpenSEO is connected. After foundation, I'll link a project (mktg seo link-project) so keyword research uses measured metrics." After the foundation chain, if .seo/openseo.json is still missing, recommend /openseo-project-setup as the first SEO move.configured: false → one line only, no blocking: "OpenSEO isn't set up — keyword metrics will be unknown until it is. Setup takes a minute: openseo.so → connect the MCP, or set OPENSEO_API_KEY." Never install anything or ask for keys inside the wizard.Tell the user clearly what's happening next. Tailor the closing line to their Studio choice:
Then invoke the foundation flow per cmo/rules/sub-agents.md:
mktg-brand-researcher with the identity context from Step 1mktg-audience-researcher with the posture context from Step 2mktg-competitive-scanner with bothWait for all 3, then chain:
/landscape-scan for ecosystem grounding/positioning-angles to lock the anglestudio_enabled is yes: run mktg studio to auto-open the dashboard with the populated state.studio_enabled is no: skip the Studio launch. Print a one-line summary of what was populated and the next recommended skill in the CLI. Tell the user: "Studio's off per your preference. If you change your mind, edit brand/cmo-preferences.md or just say 'open studio'."| Anti-pattern | Instead | Why |
|---|---|---|
| Asking more than 3 questions in the wizard | Stop at 3 — hand off to /cmo for the rest | More questions = abandonment. /cmo's research agents fill the rest in 5 minutes via real research. |
| Asking for a URL before letting the user pick a setup mode | Always ask Step 1a (setup mode) first, then branch to Step 1b (URL) or Step 1c (sentence) | URL is just one of three paths. Pre-launch / open-source / personal-brand users don't have a URL yet, and the local conversational path bypasses the scrape entirely. Forcing a URL up front blocks them. |
| Validating the URL inside the wizard (regex, http vs https, "is this real?") | Pass the raw string straight to mktg init --from <url> and let the CLI handle malformed inputs | The CLI already returns structured errors for bad URLs. Re-validating in the wizard duplicates logic, drifts from the CLI, and frustrates users who paste valid-but-unusual URLs. |
| Silently routing to brand-voice / audience-research before recording preferences | Always record cmo-preferences.md FIRST | Without it, every future /cmo activation re-runs the wizard. The preferences file is the contract that prevents that. |
| Skipping the wizard if voice-profile.md exists but cmo-preferences.md doesn't | Run the wizard regardless of other brand files (use the migration path in step 2) | cmo-preferences.md is the persistent contract — separate from brand content. A user who upgraded from pre-mktg-setup needs to record their posture explicitly. |
| Treating "Skip distribution" as missing data | Record the skip explicitly as selected: none and default_adapter: file | A deliberate skip is signal. The user told us not to wire anything yet — respect that. |
| Spawning research agents BEFORE writing cmo-preferences.md | Always write the file first | If the user kills the conversation mid-research, we lose the preferences. The file write is the savepoint. |
| Letting the user re-run the wizard accidentally | After writing the file, /cmo on the next activation will see it and skip the wizard | This is the whole point of the persistent contract. /cmo only re-routes here when the file is missing. |
The user can change their preferences three ways:
brand/cmo-preferences.md directly — it's just markdown./cmo will re-route here, overwriting the file.mktg setup --force (CLI flag, not yet implemented at v0.5.0; tracked for a future release).mktg status --json, optionally URL via mktg init --from <url>.brand/cmo-preferences.md (new). Optionally seeds brand/voice-profile.md if the user provided a sentence in Step 1./cmo foundation flow (which spawns the 3 research agents and chains /landscape-scan → /positioning-angles → mktg studio).Alternatives
MoizIbnYousaf/marketing-cli
Backlink + distribution checklist that expands a site's KD ceiling beyond what on-page work alone can earn. Use when the user mentions 'backlinks', 'off-page SEO', 'directory submissions', 'guest posts', 'outreach targets', 'link building', 'submit to directories', 'get listed in listicles', 'Product Hunt launch backlinks', or asks 'how do I get more domain authority'. Generates a prioritized, researched target list across directories, listicles, and guest-post candidates — does NOT submit anyth
github/awesome-copilot
Use this skill when the user asks to analyze, tear down, or reverse-engineer a competitor's paid ads. Trigger for prompts like "what ads is [competitor] running", "tear down their ad strategy", "competitor ad analysis", "find ad angles we haven't tried", or "reverse-engineer their paid funnel". Do not trigger for organic/SEO competitor research or website positioning analysis.
MoizIbnYousaf/marketing-cli
Build an organic-traffic operating system for any site or app: a multi-phase, resumable engine that ships programmatic landing pages (alternatives, comparisons, use-cases, playbooks) on top of real keyword research. Use when the user says 'SEO machine', 'build organic traffic', 'rank on Google', 'we need traffic', 'alternatives pages', 'comparison pages', '/for/ pages', 'programmatic SEO', or 'build an SEO engine'. Distinct from `seo-audit` (one-off diagnostic) and `seo-content` (single-article
coreyhaines31/marketingskills
When the user wants to create sales collateral, pitch decks, one-pagers, objection handling docs, or demo scripts. Also use when the user mentions 'sales deck,' 'pitch deck,' 'one-pager,' 'leave-behind,' 'objection handling,' 'deal-specific ROI analysis,' 'demo script,' 'talk track,' 'sales playbook,' 'proposal template,' 'buyer persona card,' 'help my sales team,' 'sales materials,' or 'what should I give my sales reps.' Use this for any document or asset that helps a sales team close deals. Fo