Sandbox
@MoizIbnYousaf/marketing-cli

Marketing CLI for Claude Code, Codex, and Gemini CLI

`marketing-cli` installs marketing playbooks, agents, and brand memory so an agent can keep working from the same project context across sessions. The CLI handles routing, health checks, and state, while `mktg studio` opens a local dashboard for the human side of the workflow.

31 stars5 forksTypeScriptUpdated 1mo ago
Who it's for

Builders who want their coding agent to remember brand context, reuse marketing skills, and route work through the same CLI.

What it delivers

You can keep marketing work consistent across sessions instead of re-explaining your audience, voice, and priorities every time.

What it does

76 bundled skills

Ships a large skill set for brand voice, research, SEO, copy, social, launch, and conversion work.

Six research and review agents

Adds parallel sub-agents for brand research, audience research, competitor scanning, content review, and SEO review.

Persistent brand memory

Writes project state into `brand/` files so later sessions start from the same voice, positioning, audience, and keyword plan.

`/cmo` orchestration

Routes a request to the right skill or setup flow and writes results back into project memory.

Local Studio dashboard

Launches a Next.js and Bun dashboard with pulse, signals, brand views, and publish history through `mktg studio`.

Agent-native CLI surface

Provides JSON output, dry-run support, schema introspection, health checks, and command discovery for shell-capable agents.

How to get it

  1. 1Run
    npm i -g marketing-cli
  2. 2Then open Claude Code in your project and run
    > /cmo

README

marketing-cli: agent-native marketing playbook

MIT License 76 Skills 6 Agents npm 2,624 tests TypeScript Strict

One package. One install. CLI for the agent, Studio for the human. 76 skills, 6 research/review agents, brand memory that compounds.


marketing-cli ships the playbook, the agents, the runtime schemas, and the /cmo routing rules so Claude, Codex, OpenCode, and any shell-capable agent run the same marketing system. Install once. Your project picks up where the last session left off.

What's in this repo

One npm package, two surfaces. The CLI is the agent surface, the Studio dashboard is the human surface, and mktg studio launches the dashboard from inside the same install.

SurfaceWhat it isPath
mktg CLI76 skills, 6 agents, brand memory, /cmo orchestration(root)
Studio dashboardLocal Next.js + Bun API: pulse, signals, brand visualizer, publish queuestudio/

npm i -g marketing-cli installs both. The repo uses a bun workspace because Studio is a Next.js app with its own build, but at install time it is one package, one tarball.

The Problem

You ask your agent for marketing help. It writes generic copy and forgets your audience by tomorrow. The skills it would use aren't installed; the brand files don't exist; the agent learns this halfway through, when something fails mid-execution. Every session is the first session.

marketing-cli fixes that. Install once and your agent inherits 76 skills, 6 research/review agents, and a brand memory that compounds. Session 10 starts where session 9 ended. Every conversation builds on the last.


How It Works

How marketing-cli works

/cmo reads your project state, picks the right skill, and writes the result back to brand/. The next session starts where the last one ended.


The Ecosystem: What You Actually Install

npm install -g marketing-cli drops the CLI plus the skills and agents into Claude Code. mktg init sets up the project workspace.

Core (always installed)

mktg CLI24 commands, 21/21 Agent DX score, JSON-by-default
76 marketing skillsThe playbook, copied to ~/.claude/skills/
6 research + review agentsParallel sub-agents in ~/.claude/agents/
10 brand memory filesPersistent marketing memory in your project's brand/ (10 templates plus SCHEMA.md), created by mktg init
/cmo orchestratorThe brain that routes every request to the right skill
Studio dashboardLocal Next.js + Bun API dashboard at studio/, launched via mktg studio

Chained-in CLIs (external tools mktg knows how to call)

Not bundled. These are external binaries the skills know how to drive. mktg doctor tells you what's missing and how to install it. Skills fall back when a tool isn't there.

CLIRoleInstall
firecrawl-cliWeb scrape, search, and crawl; clean markdown outnpm i -g firecrawl-cli plus FIRECRAWL_API_KEY
ffmpegVideo assembly, encoding, frame extractionbrew install ffmpeg
remotionProgrammatic React video renderingnpm i -g @remotion/cli
playwright-cliBrowser automation: demos, scrapes, CRO auditsnpm i -g @playwright/cli
ghGitHub CLI for launches, PRs, issue intelbrew install gh
whisper-cliSpeech-to-text via whisper.cppbrew install whisper-cpp
yt-dlpMedia download from YouTube/TikTok/podcastsbrew install yt-dlp
summarizeText compression: TL;DR, digest, key pointsnpm i -g @steipete/summarize
Exa MCP + skillsSemantic search, company research, lead gen (exa-search, company-research, …).mcp.json + EXA_API_KEY

Best-practices skills (how to use a tool, written down)

When a chained-in CLI needs discipline (security, rate limits, efficiency patterns), mktg ships a best-practices skill alongside it. 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), and mktg-x (Twitter/X auth-walled fetch with scripts/fetch-x.sh).

The orchestration philosophy

mktg orchestrates; it doesn't reimplement. When a good tool already exists, we chain it in and ship a best-practices skill next to it. mktg ships marketing playbooks, not video encoders.


Quick Start

npm i -g marketing-cli

That's it. The global npm install copies the 76 skills into ~/.claude/skills/ and the 6 agents into ~/.claude/agents/. No second install command, no mktg init to remember.

Then open Claude Code in your project and run:

> /cmo

On first run, /cmo automatically routes to the conversational setup wizard (/mktg-setup) — 4 quick questions:

  1. What are we marketing? URL, sentence, or open-source repo
  2. What posture? aggressive launch / steady authority / founder-led / product-led growth
  3. Which distribution channels? Typefully / Postiz / Resend / skip
  4. Studio dashboard? (beta) auto-open or stay CLI-only

Your answers land in brand/cmo-preferences.md (the persistent contract /cmo reads on every future activation), then /cmo spawns 3 research agents in parallel to fill your foundation — voice, audience, competitors. ~5 minutes.

After foundation, /cmo reads your project's marketing state, knows what's done and what's missing, and routes to the right skill:

> /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?

Requirements

  • Node.js 18+ or Bun
  • Claude Code (or any agent that reads ~/.claude/skills/)

Ambient context in 20 seconds

mktg init scaffolds the project, bare mktg shows the live home view, and mktg setup installs a SessionStart hook so every agent session opens already knowing your marketing state:

mktg setup demo

Agent Install Surfaces

The npm package ships the same knowledge across multiple agent runtimes:

Agent / runtimePath
Claude CodeGlobal install copies skills to ~/.claude/skills/ and agents to ~/.claude/agents/; plugin metadata lives in .claude-plugin/
CodexPlugin metadata in .codex-plugin/plugin.json; use the packaged skills/ directory and CONTEXT.md as the runtime index
Gemini CLIExtension metadata in gemini-extension.json
OpenCode / shell agentsRun mktg schema --json, mktg list --routing --json, and read skills/cmo/rules/*.md

Agent contract:

  • Use mktg schema --json to discover commands. Don't hardcode.
  • Use --json for all CLI calls.
  • Use --fields to keep context small.
  • Use --dry-run before mutations.
  • Use /cmo for marketing judgment and direct mktg commands for infrastructure.

Studio: eyes for your agent

Run mktg studio and a local Next.js dashboard boots at http://localhost:3000. The Bun API runs alongside on :3001. Watch what your agent is doing in real time: pulse activity, the signal queue, brand state, publish history. Everything is on disk, local-first, no cloud round-trip.

The studio lives in studio/ and ships inside the same marketing-cli tarball, so mktg studio works on any machine that has the CLI installed. The launcher resolves the in-repo studio/ subfolder first, with fallbacks to a sibling checkout and a mktg-studio binary on PATH for local dev edge cases.

mktg studio                    # boot API + dashboard, open the browser
mktg studio --no-open          # boot but skip the browser
mktg studio --dry-run --json   # preview the launch envelope, no side effects
mktg studio --intent cmo       # boot into the CMO startup flow

/cmo uses mktg studio --dry-run --json to discover the dashboard URL without spawning a long-running process, then opens the real launch when the user asks for it. The CLI keeps the CLI surface; the studio keeps the visual one. Same project state, two windows on it.


How It's Different

Other marketing skill repos give you a folder of markdown files. mktg is infrastructure.

mktgOther skill repos
Installnpm i -g marketing-cli && mktg initgit clone then manually copy files
CLI24 commands, JSON output, exit codes, --dry-runNone
Memory10 brand files that compound across sessionsStateless. Starts from scratch every time.
Health checksmktg doctor with pass/warn/fail diagnosticsNone
Skill lifecycleDependency DAG, freshness tracking, versioningFlat directory of markdown
Integration checksProactive env var verification before routingFails mid-execution
Schema introspectionmktg schema --json for agent self-discoveryNone
Orchestrator/cmo with routing table, disambiguation, guardrailsCommand menus

What the CLI adds on top of skills

Marketing skills tell an agent how to do specific work: write a landing page, run a competitive scan, atomize a thread for social. They work on their own.

The CLI adds the surrounding infrastructure. mktg init bootstraps a project in one command: detects what you're building, scaffolds brand/, installs the bundled skills directly (sub-second, always version-correct; set MKTG_USE_AI_AGENT_SKILLS=1 to delegate to the registry installer instead), then runs doctor to verify. mktg status --json returns a structured snapshot of your marketing state, and that's what /cmo reads on every activation to know what exists, what's stale, and what to suggest next. mktg doctor --json runs the health checks: skills installed, brand files populated, API keys set. The agent finds out before it tries, instead of failing mid-execution. mktg update versions the skills so improvements ship without touching your brand memory. mktg schema --json exposes every command, flag, and output shape at runtime, so agents introspect rather than hardcode.

Skills know what to do. The CLI knows what's been done, what's stale, and what to do next. Together they make 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 already 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. They write back to brand/ at the same time, so a 10-minute setup buys you research that survives every future session.


Skills (76)

Organized by marketing layer. Foundation builds up to distribution.

Foundation (9 skills): Brand identity, audience research, competitive intelligence
SkillWhat it does
cmoOrchestrates all 76 skills. Routing table, disambiguation, guardrails.
axiAXI catalog router — gh-axi, chrome-devtools-axi, principles, AXI vs MCP.
brand-voiceDefine or extract brand voice from existing content
audience-researchBuild buyer personas with parallel web research
competitive-intelAnalyze competitors with real-time web intelligence
positioning-anglesFind the angle that makes your product sell
brainstormStructured exploration when direction is unclear
document-reviewAudit brand files for completeness and consistency
create-skillExtend the playbook with custom marketing skills
marketing-psychologyApply behavioral psychology to any marketing asset
Strategy (4 skills): Keywords, pricing, launch timing, plan strengthening
SkillWhat it does
keyword-researchSix Circles framework for SEO keyword strategy
launch-strategyProduct Hunt, beta, and go-to-market playbooks
pricing-strategyVan Westendorp, value-based, freemium analysis
deepen-planStrengthen any plan with parallel research agents
Execution (23 skills): Copy, content, SEO, creative, conversion optimization
SkillWhat it does
direct-response-copyLanding pages, cold emails, headlines, copy editing
seo-contentSEO articles, programmatic SEO at scale
lead-magnetEbooks, checklists, templates, opt-in resources
creativeVisual asset briefs, ad copy variants
visual-styleBuild visual brand identity for image generation
image-genGenerate images via Gemini API with brand context
marketing-demoProduct demo recordings and walkthroughs
paper-marketingDesign carousels and social graphics in Paper
slideshow-scriptGenerate 5 narrative scripts for visual content
video-contentAssemble videos from slides (ffmpeg + Remotion)
tiktok-slideshowEnd-to-end: script, design, video
text-to-speechElevenLabs voiceover / narration from a script, tuned by brand/voice-profile.md
manim-composerPlan 3b1b-style explainer / math animation videos (scene planning)
manimce-best-practicesManim Community (from manim import) coding rules
manimgl-best-practicesManimGL / 3b1b (from manimlib import) coding rules
app-store-screenshotsApp Store screenshot pages (Next.js export)
frontend-slidesAnimated HTML presentations and pitch decks
seo-auditTechnical SEO, site architecture, schema markup
ai-seoOptimize for AI search (ChatGPT, Perplexity)
competitor-alternatives"X vs Y" and "X alternatives" comparison pages
page-croLanding page conversion rate optimization
conversion-flow-croSignup, onboarding, paywall flow optimization
resend-inboundInbound email handling via Resend
Distribution (9 skills): Email, social, newsletters, third-party integrations
SkillWhat it does
content-atomizerRepurpose long-form into multi-platform social posts
email-sequencesWelcome, nurture, launch, drip campaigns
newsletterEditorial newsletter design, writing, growth
churn-preventionCancel flows, dunning emails, win-back campaigns
referral-programViral referral loops and incentive design
free-tool-strategyEngineering-as-marketing free tool planning
typefullySchedule and publish social posts via Typefully API
send-emailTransactional emails via Resend API
agent-email-inboxAI agent email inbox with Resend
Adapters & best-practices (14 skills): Tool wrappers, ecosystem connectors, advanced workflows
SkillWhat it does
postizSchedule social posts to 30+ providers via Postiz API
social-campaignEnd-to-end social content campaign pipeline
landscape-scanEcosystem snapshot and competitive landscape research
startup-launcherLaunch across 56 platforms with copy and tracking
voice-extractionReverse-engineer writing voice from podcasts/essays/tweets
brand-kit-playgroundInteractive HTML preview of your live brand identity
firecrawlBest-practices wrapper for the Firecrawl CLI
summarizeBest-practices wrapper for @steipete/summarize
mktg-xAuthenticated Twitter/X reader for tweets, threads, bookmarks
exa-searchExa semantic web search (MCP or POST /search)
exa-contentsExa known-URL extraction (MCP or POST /contents)
company-researchExa Agent company deep dives and company lists
lead-generationExa Agent ICP prospect lists with CSV output
build-with-exaExa API/SDK cookbook (exa-js / exa-py, Agent, websets)

Agents (6)

Parallel sub-agents for research and review. /cmo spawns them during foundation building:

AgentRole
brand-researcherDeep brand voice extraction using Exa web search
audience-researcherBuyer persona and watering hole discovery
competitive-scannerCompetitor teardown and positioning gap analysis
content-reviewerQuality review for any marketing output
seo-analystSEO audit for content and pages

The 3 research agents run in parallel. Results write back to brand/ so every future session starts ahead.


Commands

CommandPurpose
mktg initScaffold brand/ plus install skills plus install agents
mktg statusProject marketing state snapshot
mktg setupInstall a Claude Code SessionStart hook that injects mktg status into every session
mktg doctorHealth checks: brand files, skills, agents, CLI tools, integrations
mktg listShow all 76 skills with install status and metadata
mktg updateRe-install skills from latest package version
mktg schemaIntrospect all commands, flags, and output shapes
mktg skillInspect, validate, register, analyze, and chain external skills
mktg skill addChain an external skill into the mktg ecosystem
mktg brandExport, import, diff, and review brand memory
mktg runLoad a skill for agent consumption and log execution
mktg contextBrand context compiler: token-budgeted JSON artifact
mktg planExecution loop: prioritized task queue from project state
mktg publishDistribution pipeline: push content to platforms
mktg competeCompetitor change monitor: detect changes, route to skills
mktg dashboardJSON-only project snapshot (deprecated for humans — use mktg studio)
mktg routeDeterministic manifest-trigger routing: which skill for a request, no model needed
mktg seoOpenSEO readiness: status, link-project, sync-keywords, open
mktg catalogUpstream catalog registry: list, inspect, sync, status
mktg transcribeAudio/video to transcript via whisper.cpp (YouTube, TikTok, podcasts, local files)
mktg studioLaunch the bundled Studio dashboard (Next.js + Bun API) from the in-repo studio/ subfolder
mktg verifyOrchestrated test-suite runner across the mktgmono ecosystem
mktg ship-checkAggregated go/no-go verdict across ecosystem surfaces
mktg cmoHeadless /cmo entry point with structured output for agents
mktg releaseVersion bump + changelog + git tag (+ optional npm/GitHub publish)

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.

IndexPurpose
skills/cmo/rules/cli-runtime-index.mdFull current CLI command surface and startup discovery sequence
skills/cmo/rules/publish-index.mdNative/Postiz/Typefully/Resend/file publish routing
skills/cmo/rules/studio-api-index.mdStudio 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 before routing, not 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/           # 24 top-level commands (init, doctor, status, setup, list, update, schema, skill, brand, run, transcribe, context, plan, publish, compete, dashboard, catalog, studio, verify, ship-check, cmo, route, seo, release)
└── core/               # Shared modules (output, errors, brand, skills, agents, integrations)

skills/                 # 76 SKILL.md files installed directly from the bundle
├── cmo/                # Orchestrator with rules/ and references/
├── brand-voice/
├── direct-response-copy/
└── ...

agents/                 # 6 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 metadata

Design Principles

Every skill works at zero context. Brand memory enhances; it never gates. The CLI is agent-native by default: JSON output, structured errors, exit codes 0 through 6, --dry-run, and schema introspection. Errors carry a code, a hint, and a message that names the next step.

The system bootstraps itself. mktg init installs everything on any machine from the bundled skill set (registry delegation available via MKTG_USE_AI_AGENT_SKILLS=1). Skills are drop-in: add a SKILL.md and a manifest entry, no CLI changes needed.

Skills don't call other skills. They read and write files. /cmo orchestrates. There are no implicit chains. Foundation building spawns the 3 research agents simultaneously, not sequentially. Missing dependencies produce warnings, not blockers, so an agent always has a path forward.


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         # Build

Project Structure

  • src/: CLI source (TypeScript, ~15,500 lines)
  • skills/: 76 SKILL.md files (manifest-backed)
  • agents/: 6 agent definitions
  • tests/: 2,599 tests across 96 files (real file I/O, no mocks)
  • docs/: Reference docs (EXIT_CODES.md, skill-contract.md)

Contributing

Contributions welcome. The fastest ways to help:

  1. Add a skill: Drop a SKILL.md in skills/<name>/ and add an entry to skills-manifest.json
  2. Improve existing skills: Better prompts, more examples, edge case handling
  3. Add tests: Real file I/O in isolated temp dirs, no mocks
  4. 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 76 skills
  • Postiz by @gitroomhq: the upstream catalog for 30+ social provider integrations (LinkedIn, Reddit, Bluesky, Mastodon, Threads, Instagram, TikTok, YouTube, Pinterest, Discord, Slack, etc.). mktg connects via REST API; license stays firewalled.
  • last30days-skill by @mvanhorn: live research across Reddit, X, YouTube, Hacker News, GitHub, and the web. /cmo chains it before any market claim, so the playbook stays grounded in what's actually happening this month, not training-data folklore.
  • @steipete/summarize by @steipete: the text-compression CLI that mktg's summarize skill wraps with rules and budgets.

Files in the repo

Repository payload40 top-level entries
  • .claude-plugin
  • .codex-plugin
  • .github
  • agents
  • brand
  • docs
  • explainer
  • hooks
  • scripts
  • skills
  • src
  • studio
  • tests
  • .editorconfig
  • .env.example
  • .gitattributes
  • .gitignore
  • .mcp.json
  • .npmignore
  • agents-manifest.json
  • AGENTS.md
  • banner.svg
  • bun.lock
  • bunfig.toml
  • catalogs-manifest.json
  • CHANGELOG.md
  • CLAUDE.md
  • CODE_OF_CONDUCT.md
  • CONTEXT.md
  • CONTRIBUTING.md
  • demo.gif
  • explainer.gif
  • gemini-extension.json
  • LICENSE
  • package.json
  • README.md
  • SECURITY.md
  • setup-demo.gif
  • skills-manifest.json
  • tsconfig.json

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More tools

MemPalace/
mempalace

The best-benchmarked open-source AI memory system. And it's free.

59k

Never stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors

64k
headroomlabs-ai/
headroom

Compress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.

71k
virgiliojr94/
book-to-skill

Turn any technical book PDF into a Claude Code skill — ready to study, reference, and use while you work.

30k
sickn33/
agentic-awesome-skills

AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,115+ agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.

46k
iOfficeAI/
OfficeCLI

OfficeCLI is the first and best Office suite purpose-built for AI agents to read, edit, and automate Word, Excel, and PowerPoint files. Free, open-source, single binary, no Office installation required.

30k