marketing-cli
v0.3.2
Published
Agent-native marketing playbook CLI — turns your AI agent into a CMO with 50 skills, 5 research/review agents, brand memory, and parallel research.
Maintainers
Readme
Your agent should not have to learn marketing from scratch. marketing-cli
installs the playbook, agents, runtime schemas, and /cmo routing rules so
Claude, Codex, OpenCode, and any shell-capable agent can operate the
same marketing system.
The Problem
You have a product. You need marketing. You ask your AI agent to help.
It writes generic copy. It doesn't know your voice. It forgets your audience by next session. It can't research competitors, plan keywords, or coordinate a launch. Every conversation starts from zero.
One install turns your agent into a marketing department that remembers everything, researches in parallel, and gets sharper with every session.
How It Works
The Ecosystem: What You Actually Install
npm install -g marketing-cli installs the CLI plus the Claude Code skills and agents. mktg init bootstraps a project workspace.
Core (always installed)
| | |
|---|---|
| mktg CLI | 20 commands, 21/21 Agent DX score, JSON-by-default |
| 50 marketing skills | The playbook, copied to ~/.claude/skills/ |
| 5 research + review agents | Parallel sub-agents in ~/.claude/agents/ |
| 10 brand memory files | Persistent marketing memory in your project's brand/ (10 templates + SCHEMA.md), created by mktg init |
| /cmo orchestrator | The brain that routes every request to the right skill |
Chained-in CLIs (external tools mktg orchestrates)
Not bundled. These are external binaries that mktg's skills know how to call. mktg doctor detects what's missing and tells you how to install it. Skills fall back when a tool isn't present.
| CLI | Role | Install |
|---|---|---|
| firecrawl | Web scrape, search, and crawl; outputs clean markdown for LLMs | npm i -g firecrawl + FIRECRAWL_API_KEY |
| ffmpeg | Video assembly, encoding, frame extraction | brew install ffmpeg |
| remotion | Programmatic React video rendering | npm i -g @remotion/cli |
| playwright-cli | Browser automation for demo capture, scraping, CRO audits | npm i -g @playwright/cli |
| gh | GitHub CLI for launches, PR workflows, issue intelligence | brew install gh |
| whisper-cli | Speech-to-text via whisper.cpp | brew install whisper-cpp |
| yt-dlp | Media download from YouTube/TikTok/podcasts | brew install yt-dlp |
| summarize | Text compression: TL;DR, digest, key points | npm i -g @steipete/summarize |
| Exa MCP | Parallel deep research (default for agent web queries) | MCP config in .mcp.json |
Best-practices skills (how-to-use-a-tool knowledge)
When a chained-in CLI needs usage discipline (security, rate limiting, efficiency patterns), mktg ships a best-practices skill alongside it. These are reference SKILL.md files with a rules/ subdirectory for depth.
Currently shipping: firecrawl (wraps the firecrawl CLI with rules/install.md and rules/security.md), summarize (wraps @steipete/summarize with rules/install.md), mktg-x (Twitter/X auth-walled fetch with scripts/fetch-x.sh).
The orchestration philosophy
mktg orchestrates; it does not reimplement. When a good tool exists, we chain it in and ship a best-practices skill alongside it. mktg ships marketing playbooks, not video encoders.
Quick Start
npm i -g marketing-cli && mktg initThat's it. The global npm install copies the bundled 50 marketing skills into ~/.claude/skills/ and 5 marketing agents into ~/.claude/agents/. mktg init then detects your project, scaffolds brand/, refreshes skills and agents if needed, and runs doctor to verify everything works.
Then use /cmo in Claude Code:
> /cmo help me market this app
Looking at your brand profile...
Your positioning is strong but you have zero distribution.
Here's what I'd do: write 3 SEO articles targeting your best
keywords, then atomize them into social posts. That gives you
a content engine.
Want to start there?/cmo reads your project's marketing state, knows what's done and what's missing, and routes to the right skill.
Requirements
- Node.js 18+ or Bun
- Claude Code (or any agent that reads
~/.claude/skills/)
Agent Install Surfaces
The npm package ships the same knowledge in multiple agent-native surfaces:
| Agent/runtime | Path |
|---|---|
| Claude Code | Global install copies skills to ~/.claude/skills/ and agents to ~/.claude/agents/; plugin metadata lives in .claude-plugin/ |
| Codex | Plugin metadata lives in .codex-plugin/plugin.json; use the packaged skills/ directory and CONTEXT.md as the runtime index |
| Gemini CLI | Extension metadata lives in gemini-extension.json |
| OpenCode / shell agents | Run mktg schema --json, mktg list --routing --json, and read skills/cmo/rules/*.md |
Agent contract:
- Use
mktg schema --jsonto discover commands instead of hardcoding. - Use
--jsonfor all CLI calls. - Use
--fieldsto keep context small. - Use
--dry-runbefore mutations. - Use
/cmofor marketing judgment and directmktgcommands for infrastructure.
How It's Different
Other marketing skill repos give you a folder of markdown files. mktg is infrastructure.
| | mktg | Other skill repos |
|---|---|---|
| Install | npm i -g marketing-cli && mktg init | git clone + manually copy files |
| CLI | 20 top-level commands, JSON output, exit codes, --dry-run | None |
| Memory | 10 brand memory files that compound across sessions (+ SCHEMA.md) | Stateless; starts from scratch every time |
| Health checks | mktg doctor with pass/warn/fail diagnostics | None |
| Skill lifecycle | Dependency DAG, freshness tracking, versioning | Flat directory of markdown |
| Integration checks | Proactive env var verification before routing | Fails mid-execution |
| Schema introspection | mktg schema --json for agent self-discovery | None |
| Orchestrator | /cmo with routing table, disambiguation, guardrails | Command menus |
Why a CLI?
Marketing skills are just markdown files. Without infrastructure, an agent can't tell which skills are installed, whether brand files exist, or if API keys are set. It reads a skill, does one thing, and forgets.
The CLI gives agents what skills can't:
mktg init: One command bootstraps everything. Detects your project, scaffoldsbrand/, prefersai-agent-skillsfor skill installation when available, installs agents directly, and runs doctor. Works on any machine, every time.mktg status --json: A structured snapshot of your marketing state./cmoreads this on every activation to know what exists, what's stale, and what to suggest next.mktg doctor --json: Health checks with pass/warn/fail. Are skills installed? Are brand files populated? Are API keys set? The agent knows before it tries, rather than failing mid-execution.mktg update: Skill versioning. When skills improve, one command updates them all without touching your brand memory.mktg schema --json: Self-discovery. The agent can introspect every command, flag, and output shape at runtime.
Skills are knowledge; the CLI is infrastructure. Together they create a feedback loop that gets sharper every session.
Brand Memory
The brand/ directory holds ten files that compound across sessions:
brand/
├── voice-profile.md # How you sound
├── positioning.md # Why you're different
├── audience.md # Who you're talking to
├── competitors.md # Who you're up against
├── landscape.md # Competitive landscape snapshot
├── keyword-plan.md # What people search for
├── creative-kit.md # Visual identity rules
├── stack.md # Marketing tools in use
├── assets.md # Created assets log (append-only)
└── learnings.md # What worked, what didn't (append-only)Session 1: Research from scratch. Session 10: Your agent knows your voice, audience, competitors, keyword gaps, and what's worked before.
Foundation research launches 3 agents in parallel: brand voice extraction, audience persona building, and competitor teardown, all writing back to brand/ simultaneously.
Skills (50)
Organized by marketing layer; foundation builds up to distribution.
| Skill | What it does | |-------|-------------| | cmo | Orchestrates all 50 skills. Routing table, disambiguation, guardrails. | | brand-voice | Define or extract brand voice from existing content | | audience-research | Build buyer personas with parallel web research | | competitive-intel | Analyze competitors with real-time web intelligence | | positioning-angles | Find the angle that makes your product sell | | brainstorm | Structured exploration when direction is unclear | | document-review | Audit brand files for completeness and consistency | | create-skill | Extend the playbook with custom marketing skills | | marketing-psychology | Apply behavioral psychology to any marketing asset |
| Skill | What it does | |-------|-------------| | keyword-research | Six Circles framework for SEO keyword strategy | | launch-strategy | Product Hunt, beta, and go-to-market playbooks | | pricing-strategy | Van Westendorp, value-based, freemium analysis | | deepen-plan | Strengthen any plan with parallel research agents |
| Skill | What it does | |-------|-------------| | direct-response-copy | Landing pages, cold emails, headlines, copy editing | | seo-content | SEO articles, programmatic SEO at scale | | lead-magnet | Ebooks, checklists, templates, opt-in resources | | creative | Visual asset briefs, ad copy variants | | visual-style | Build visual brand identity for image generation | | image-gen | Generate images via Gemini API with brand context | | marketing-demo | Product demo recordings and walkthroughs | | paper-marketing | Design carousels and social graphics in Paper | | slideshow-script | Generate 5 narrative scripts for visual content | | video-content | Assemble videos from slides (ffmpeg + Remotion) | | tiktok-slideshow | End-to-end: script → design → video | | app-store-screenshots | App Store screenshot pages (Next.js export) | | frontend-slides | Animated HTML presentations and pitch decks | | seo-audit | Technical SEO, site architecture, schema markup | | ai-seo | Optimize for AI search (ChatGPT, Perplexity) | | competitor-alternatives | "X vs Y" and "X alternatives" comparison pages | | page-cro | Landing page conversion rate optimization | | conversion-flow-cro | Signup, onboarding, paywall flow optimization | | resend-inbound | Inbound email handling via Resend |
| Skill | What it does | |-------|-------------| | content-atomizer | Repurpose long-form into multi-platform social posts | | email-sequences | Welcome, nurture, launch, and drip campaigns | | newsletter | Editorial newsletter design, writing, and growth | | churn-prevention | Cancel flows, dunning emails, win-back campaigns | | referral-program | Viral referral loops and incentive design | | free-tool-strategy | Engineering-as-marketing free tool planning | | typefully | Schedule and publish social posts via Typefully API | | send-email | Transactional emails via Resend API | | agent-email-inbox | AI agent email inbox with Resend |
Agents (5)
Parallel sub-agents for research and review. Spawned by /cmo during foundation building:
| Agent | Role | |-------|------| | brand-researcher | Deep brand voice extraction using Exa web search | | audience-researcher | Buyer persona and watering hole discovery | | competitive-scanner | Competitor teardown and positioning gap analysis | | content-reviewer | Quality review for any marketing output | | seo-analyst | SEO audit for content and pages |
Foundation research runs all 3 research agents in parallel. Results write back to brand/ so every future session starts ahead.
Commands
| Command | Purpose |
|---------|---------|
| mktg init | Scaffold brand/ + install skills + install agents |
| mktg status | Project marketing state snapshot |
| mktg doctor | Health checks: brand files, skills, agents, CLI tools, integrations |
| mktg list | Show all 50 skills with install status and metadata |
| mktg update | Re-install skills from latest package version |
| mktg schema | Introspect all commands, flags, and output shapes |
| mktg skill | Inspect, validate, register, analyze, and chain external skills |
| mktg skill add | Chain an external skill into the mktg ecosystem |
| mktg brand | Export, import, diff, and review brand memory |
| mktg run | Load a skill for agent consumption and log execution |
| mktg context | Brand context compiler: token-budgeted JSON artifact |
| mktg plan | Execution loop: prioritized task queue from project state |
| mktg publish | Distribution pipeline: push content to platforms |
| mktg compete | Competitor change monitor: detect changes, route to skills |
| mktg dashboard | Local dashboard: project health, next moves, skill catalog |
| mktg catalog | Upstream catalog registry: list, inspect, sync, and status |
| mktg transcribe | Audio/video → transcript via whisper.cpp (YouTube, TikTok, podcasts, local files) |
| mktg studio | Launch the mktg-studio dashboard, preferring the local sibling checkout and falling back to a PATH binary |
| mktg verify | Orchestrated test-suite runner across the mktgmono ecosystem |
| mktg ship-check | Aggregated go/no-go verdict across ecosystem surfaces |
| mktg cmo | Headless /cmo entry point with structured output for agents |
Every command ships --json, --dry-run, and --fields. The live
contract is mktg schema --json; /cmo keeps operator indexes in:
For the CMO startup flow, /cmo can run mktg studio --open --intent cmo
--session <id>. Preview stays side-effect free with mktg studio --dry-run
--json --intent cmo --session <id>, returning the exact dashboard URL it would
open.
| Index | Purpose |
|---|---|
| skills/cmo/rules/cli-runtime-index.md | Full current CLI command surface and startup discovery sequence |
| skills/cmo/rules/publish-index.md | Native/Postiz/Typefully/Resend/file publish routing |
| skills/cmo/rules/studio-api-index.md | Studio HTTP API and current tab contract |
Integration Checks
Third-party adapters (Postiz, Typefully, Resend) need API keys. The native publish backend is local-first and needs no external key. mktg checks integrations proactively, before routing rather than mid-execution:
$ mktg doctor --json | jq '.checks[] | select(.name | startswith("integration"))'
{
"name": "integration-TYPEFULLY_API_KEY",
"status": "warn",
"detail": "TYPEFULLY_API_KEY not set — needed by typefully"
}/cmo reads this and guides setup before routing to a skill that needs the key. Missing integrations produce warnings, not errors. Every skill works at zero config.
Architecture
src/
├── cli.ts # Entry point, command router
├── types.ts # All shared TypeScript types
├── commands/ # 20 top-level commands (init, doctor, status, list, update, schema, skill, brand, run, transcribe, context, plan, publish, compete, dashboard, catalog, studio, verify, ship-check, cmo)
└── core/ # Shared modules (output, errors, brand, skills, agents, integrations)
skills/ # 50 SKILL.md files → manifest-backed subset installed via ai-agent-skills or directly
├── cmo/ # Orchestrator with rules/, references/
├── brand-voice/
├── direct-response-copy/
└── ...
agents/ # 5 agent .md files → installed to ~/.claude/agents/
├── research/ # brand-researcher, audience-researcher, competitive-scanner
└── review/ # content-reviewer, seo-analyst
skills-manifest.json # Source of truth for skill metadata (includes external_skills section)
agents-manifest.json # Source of truth for agent metadataDesign Principles
- Progressive Enhancement: Every skill works at zero context. Brand memory enhances, never gates.
- Agent-Native: JSON output, structured errors, exit codes 0–6,
--dry-run, schema introspection. - Self-Bootstrapping:
mktg initinstalls everything on any machine. It prefersai-agent-skillsas the installer/catalog layer when available and falls back to direct install when it is not. - Drop-In Skills: Add a skill by dropping
SKILL.md+ updatingskills-manifest.json. - Skills Never Call Skills: Skills read/write files.
/cmoorchestrates. No implicit chains. - Parallel by Default: Foundation building spawns 3 research agents simultaneously.
- Warn, Never Gate: Missing dependencies produce warnings, not blockers.
Development
git clone https://github.com/MoizIbnYousaf/marketing-cli.git
cd marketing-cli
bun install
bun run dev doctor # Run locally
bun test # 2,599 tests, real file I/O, no mocks
bun x tsc --noEmit # Type check
bun run build # BuildProject Structure
src/: CLI source (TypeScript, ~10,700 lines)skills/: 50 SKILL.md files (manifest-backed)agents/: 5 agent definitionstests/: 2,599 tests (real file I/O, no mocks)docs/: Reference docs (EXIT_CODES.md,skill-contract.md)
Contributing
Contributions welcome. The easiest ways to help:
- Add a skill: Drop a
SKILL.mdinskills/<name>/and add an entry toskills-manifest.json - Improve existing skills: Better prompts, more examples, edge case handling
- Add tests: Real file I/O in isolated temp dirs, no mocks
- Report issues: github.com/MoizIbnYousaf/marketing-cli/issues
License
MIT. Use freely. Build on it.
Acknowledgments
- Corey Haines' Marketing Skills: the breadth skill collection that inspired many of mktg's 50 skills
