Claude Code Marketing
Claude Code Marketing Skills: Shared Context, the -a Install Flag, and SKILL.md Forks

Sage Holloway
23 min read
Go back to blog
SHARE

You already wrote the positioning, the ICP, the three proof points, and the words legal would never let onto a landing page. Then you opened a new chat and typed them again, and a freelancer asked for the same three facts in Slack. The copy sounded fine. It also sounded like it could have been written for anyone.
Claude Code marketing skills are reusable SKILL.md packs that encode GTM workflows so you stop pasting the same brief into chat. Install Corey Haines' library with npx skills add coreyhaines31/marketingskills -a claude-code so files land in .claude/skills/. A bare npx skills add inside an active session can write .agents/skills/, which Claude Code cannot read. Pin positioning once in .agents/product-marketing.md so /cro, /emails, and /seo-audit share one ICP and voice.
Last verified: 18 August 2026 (NotebookLM sources; no live CLI run on this pack).
Last quarter that paste lived in a Notion doc named voice_final_really. This quarter a slash command can draft against the same ICP before the standup starts. The files are still yours. The agent still has to be pointed at the folder it can actually read. The model never grew a brand memory on its own.
If you have ever watched two landing pages argue with each other because two chats got two slightly different ICPs, this is that wall, named.
This page is how you install and author marketing SKILL.md files in Claude Code. It is not the marketer CLI hub; that job lives on Claude Code for marketing. It is not SEO-ops in the terminal; /seo-audit is a category row here, and Claude Code SEO owns the audit pack. Anthropic shipped Agent Skills in beta in October 2025 (versioned skills-2025-10-02) and published the spec as an open standard on 18 December 2025, as Improvado paraphrases it. The rest of this URL is the library, the hub file, the install bug, and the brief-to-skill map.
On this page
What Claude Code marketing skills actually are
Shared product-marketing context
Three install paths and the hidden-directory bug
Fork SKILL.md and pin brand gotchas
Turn a marketing brief into a SKILL.md
Wire live marketing data with MCP
Stack skills for a growth workflow
FAQ
Claude Code marketing skills work when one hub file feeds every downstream skill.
What Claude Code marketing skills actually are
The first delivery person needs the gate code, the floor, and the name on the buzzer. You write those three facts on a pad by the door. The cleaner gets a second copy in different handwriting. The plumber gets a third, and by week three the hallway holds three versions of the same instructions, one of them already stale. The package sits in the lobby. The cleaner cannot get in.
One sheet on the fridge. One update. Everyone reads it before they start.
That is a marketing skill library with a shared hub file. A skill is a folder of Markdown (and optional scripts) the agent loads as a reusable instruction pack. A SKILL.md is the file inside that folder that tells the agent when to fire and what to do. Hang those folders next to one context sheet so /cro and /emails cannot invent two brands.
The default library on this page is coreyhaines31/marketingskills. The companion directory is marketing-skills.com. Both beat a chat paste because the instructions persist across sessions. They do not beat a missing ICP. Unforked templates still write generic copy. The r/ClaudeAI must-have-skills thread is useful as a pain map (people lose context between tasks) and useless as an install spec.
So what are you actually installing?
Folders. Named jobs. Not a marketplace of vibes.
Category map (CRO, copy, SEO, ads, email, analytics, RevOps)
Corey's repo groups skills by specialty. Treat the names below as library folders you install, not as a second article each. cro is conversion tests after v2.0 merged the old page and form packs. copywriting is AIDA, PAS, and variant generation. seo-audit is crawlability and tag health; ai-seo is GEO citability. Depth on terminal SEO-ops sits on Claude Code SEO, not here.
ads is paid media targeting and structure. Channel-level ads workflow is Claude ads if you outgrow a folder. emails is lifecycle sequences. churn-prevention is retention and dunning.
analytics is measurement setup. revops is pipeline language. campaign-launcher-oss is Improvado's open-source B2B demand-gen plugin, a different product row, not this URL's default install.
List first. Install second.
If you only need two jobs this month, do not ingest the whole cabinet:

These are library folders you install, not 29 outbound links. Terminal SEO-ops depth lives on the Claude Code SEO guide.
v2.0 renamed 17 skills and consolidated page-cro plus form-cro into a single cro skill. Roundups that still tell you to install page-cro are stale. After an upgrade, new folders sit beside old ones. They do not overwrite. If both exist, you have two sources of truth.

v2.0 merged page-cro and form-cro into cro. After upgrade, delete stale folders.
How to judge a Skills repo before you install it
Catalogs win search because they look complete. Completeness is not the job. Before you npx anything, read the README the way you would read a contractor's references.
Do the folder names match v2.0 (
cro, not leftoverpage-cro)?Does the install line include
-a claude-codefor Claude Code, or only a barenpx skills add?Are there actual
SKILL.mdfiles, or a table of other people's GitHub links?Is the repo a Markdown skill pack, an MCP gateway, or a paid MCP? Composio is a gateway. MKT1's paid server is a strategy product. Neither is "one more skill" in the Corey tree.
Skip SourceForge mirrors and paid-course dumps. Prefer the GitHub README over a Medium listicle when commands conflict.
If the README still teaches page-cro as the current name, you are looking at a snapshot from before the consolidation. Install the live repo, then run the cleanup in the install section. Do not stack a v1 name next to a v2 name and hope the agent picks the new one.
Shared product-marketing context
Here is the part catalogs skip because it does not screenshot well.
Every downstream skill is supposed to read one product-marketing file before it writes. Positioning, ICP, voice, proof, competitive notes: once. /cro, /emails, and /seo-audit should sound like the same company. That is the shared context pattern. Without it you have a filing cabinet of generic operators.
I have watched people install the whole catalog and still paste the ICP into chat. They had the folders. They had not opened the hub.
A thin skill that reads the hub file will beat a clever catalog skill that never saw your ICP. Every time.

Pin positioning once. /cro, /emails, and /seo-audit should share one ICP and voice.
.agents/product-marketing.md vs a /marketing-strategy skill
Two reputable setups disagree on the filename. Pick one as default on this URL.
Corey Haines v2.0 (default here): populate .agents/product-marketing.md. In v2.0 the context file moved from .claude/ to .agents/ and was renamed from product-marketing-context.md to product-marketing.md. If you are migrating from a pre-v2.0 tree, the README's move is:
Fill that file with strategy, not with slash-command cheatsheets. Emily Kramer's MKT1 piece is the best public set of exercises for the contents. On the MKT1 MCP path those exercises are named mkt1-company-overview, mkt1-icp-prioritization, mkt1-marketing-advantages, mkt1-perceptions, mkt1-positioning, mkt1-revenue-levers, and mkt1-big-bets. Run them to feed the hub. Do not treat the paid progress dashboard as something this page can reconstruct.
MKT1's file layout is the variant, not the default. Kramer has you initialize a /marketing-strategy skill and leave the body empty:
Then add this line to CLAUDE.md:
That root-file layout conflicts with Corey's .agents/product-marketing.md. If you are on this URL to use the marketingskills library, keep the Corey path. Use MKT1's exercises as the questionnaire that fills the hub, not as a second competing filename.
Why two files at all? Because CLAUDE.md is a short personal instruction file, and the hub is the marketing brain. Mixing them is how you blow the line cap.
CLAUDE.md stays under 200 lines
CLAUDE.md is the repo's personal instruction file: the always-on notes Claude reads for this project. Anthropic, via MKT1, recommends keeping it under 200 lines. The longer it gets, the more Claude ignores parts of it. Brand novels belong in the hub file or in a skill body, not in the personal file.
Improvado's model limits are a separate ceiling: Claude's extended context window goes up to 200K tokens, and Sonnet 4.6 supports up to 1M. Those are context windows, not a traffic claim, and not permission to paste a warehouse into CLAUDE.md.

Keep CLAUDE.md short. Long personal files get ignored. Context figures are model limits, not a traffic claim.
If your CLAUDE.md is already a strategy deck, you are paying the ignore tax. Move ICP, voice, and proof into .agents/product-marketing.md. Leave CLAUDE.md with pointers: where the hub lives, which folder is canonical, and the one governance line you refuse to violate.
Three install paths and the hidden-directory bug
Simple path lives here, not in the headline. Three ways in. One trap that makes the first way look like it worked.
Claude Code reads skills from .claude/skills/. Universal agents share .agents/skills/. Those are different closets. A command that "succeeds" can still write the closet this product never opens.

Prefer Path A with -a claude-code so files land in .claude/skills/. Bare npx inside a live session can write a directory Claude Code cannot read.
I tried the bare npx skills add coreyhaines31/marketingskills from inside an active session because that is the line every catalog copies. The installer ran non-interactively. Files went to .agents/skills/. Claude Code could not see them. I had a beautiful unused cabinet.
That is the bug.
This will not work if you run a bare npx skills add inside an active Claude Code session and then look for folders under .claude/skills/. Force the readable directory with -a claude-code.
Cursor, Codex, and OpenClaw are other products. Cursor wants skill folders in ~/.cursor/skills/ instead of ~/.claude/skills/. Codex uses mkdir -p ~/.codex/skills && cd ~/.codex/skills && git clone [skill-repo-url]. OpenClaw can use openclaw skills install git:owner/repo@ref, or mkdir -p ~/.openclaw/skills && cd ~/.openclaw/skills && git clone [skill-repo-url]. Do not copy a Cursor path into Claude Code and call it done.
Path A: npx with -a claude-code (recommended)
This is the Claude Code path the GitHub README wants you to use when the installer might guess wrong.
Run that line in a regular terminal, not as a hidden side effect of a chat that already has an agent session guessing the target.
Confirm folders exist under
.claude/skills/.If you upgraded from v1.x, delete the stale names (full list under Path C). Do not leave
page-crobesidecro.

Force the Claude Code readable directory with -a claude-code.
The -a flag is not decoration.
It is the difference between a library the CLI can load and a library you can only find with find.
Path B: /plugin marketplace inside Claude Code
If you would rather stay inside Claude Code's plugin system, the README's two slash lines are:
Marketplace add, then install. In that order. This path is for people already in the product, not for a second npx.

Path B is marketplace add, then /plugin install marketing-skills.
But is the plugin path safer? It is safer against the hidden-directory bug because you never hand the installer a chance to pick .agents/skills/ in a non-interactive npx. It is not safer against stale v1 folders. Cleanup is still on you.
Path C: git clone, copy, or submodule
Use this when you want Git history, a submodule pin, or a multi-agent copy.
GitHub's clone-and-copy variant (universal-agent destination):
Submodule pin:
Composio's clone-into-Claude-Code-home variant is the other documented copy:
Prefer the .claude/skills/ destination when the reader is Claude Code (claim C6). The .agents/skills/ copy is the shared-agent layout (claim C7). If you clone into .agents/ and then wonder why /cro is missing in Claude Code, you did Path C as a universal-agent install.
SkillKit, for several IDEs at once:
After any v1.x to v2.0 upgrade, delete leftover folders. New skills install alongside old ones. The README's cleanup is:
That list is long on purpose. Partial cleanup is how page-cro survives.
Eric Tech's video, I Built 43 AI Marketing Skills - Here's What Happened, is a creator story about living with a marketing-skills library. It is not an official Claude Code intro, and it does not replace the labeled -a and /plugin screens above. Watch it after you know which directory your files must land in.
https://www.youtube.com/watch?v=qt4xzTLY1BQ&vl=en-US
Fork SKILL.md and pin brand gotchas
Plug-and-play is a search headline. Unforked skills write unforked copy. The AI Builder Club walkthrough is blunt about this: you move a skill into the project and hardcode the rules the template cannot know.
The workflow that uses a forked skill (campaigns, growth loops, the marketer CLI) is Claude Code for marketing. This URL stops at making the file safe to run.
Copy into .claude/skills and edit SKILL.md
Copy the skill folder into the project's .claude/skills/ (Claude Code) or .agents/skills/ (universal agents). Open SKILL.md. Append gotchas at the bottom, in the brand's actual language, not as a vibe paragraph.
Quote only the constraints that walkthrough actually gives. Do not invent extra brand law.
Fork the v2 cro skill. Do not fork leftover page-cro. If both folders exist, delete the v1 name first (the rm -rf list above). Otherwise the agent has a coin flip.
Where do the banned words live? In the skill body, next to allowed tools, next to the proof you will actually cite. Not in a 400-line CLAUDE.md. Not in a Slack thread the contractor never saw.
The empty-body initializer from MKT1 is useful when you are starting a new strategy skill rather than forking cro. It is the description-only SKILL.md with no body yet. Once you have a real brief, you fill the body using the translation section below. Do not add undocumented YAML keys because a blog showed a prettier fence.
Share a private team repo
Organizational sharing is the rare path, and it is still the one that stops three teammates from maintaining three gotcha lists.
Create a private GitHub repo named team-claude-skills. Put each SKILL.md in its folder (/skills/marketing-strategy/SKILL.md is the MKT1 example shape). Add collaborators. Clone into a tree Claude Code will load from .claude/skills/. When you update, push. Teammates stay in sync with git pull.
Do not treat GitHub Settings as a screenshot assignment. The mechanism is a private repo plus git pull. If someone is still editing a skill that only exists on their laptop, you do not have a team skill. You have a souvenir.
Turn a marketing brief into a SKILL.md
This is the gap the directories do not own. They will tell you to "customize." They will not show the field-by-field move from a marketing brief into the YAML and Markdown the agent actually reads.
You already have the brief. ICP, voice, proof, banned words, allowed tools. The failure mode is pasting that brief into CLAUDE.md until the file is a novella Claude starts skipping. The fix is a skill file with a short description (the only front-matter key this pack documents) and a body that holds the rest as sections a human can grep.

Put ICP, voice, proof, banned words, and allowed tools in the skill file. Do not dump them into a long CLAUDE.md.
Map brief fields to YAML front matter and markdown sections
Start from MKT1's initializer if the skill does not exist yet: a SKILL.md whose description tells Claude when to load it, body empty. Then map the brief.
description (YAML only): when this skill should fire. Marketing work, briefs, campaigns, content review, positioning, planning, prioritization. Keep it a trigger, not a manifesto.
Markdown body, as sections, not as extra YAML keys:
ICP: who it is for, who it is not for, the job they are hiring you to do.
Voice: cadence, words you prefer, the understated-versus-hype rule.
Proof: the specific numbers and named facts you are allowed to lead with.
Banned words: the "never use revolutionary" class of constraints.
Allowed tools: which MCPs, which slash skills, which dashboards are in bounds.
If you need a /marketing-strategy skill as the MKT1 variant, the initializer prompt is the empty-body start. If you are on the Corey default, those same sections belong in .agents/product-marketing.md for facts every skill should share, and in a forked SKILL.md for rules that are unique to CRO or email. Shared facts go in the hub. Channel gotchas go in the skill.
Confused? Fair enough. Another way: the hub is the fridge sheet. The skill is the job checklist the plumber carries. Do not write the gate code on the checklist in seven places. Do not tape the checklist to the fridge until the fridge is a novel.
Encode rules as queryable metadata, not a long prompt
Improvado is the source for the governance point: Claude will not apply attribution math or UTM law consistently if that logic lives only as prose in a prompt. Encode it as JSON or as a reference table the skill can query.
Two list-item examples from that guide, not extra H2s:
W-shaped attribution touchpoint weights belong in a config, not in a paragraph that says "we kind of weight the middle."
When a platform renames
link_clickstooutbound_clicks, map both to an internalclicksfield in a translation layer. Update the map. Do not rewrite the skill.
That is why a brief-to-skill playbook beats a 32-pick roundup. The roundup never tells you where the number is allowed to live.
Wire live marketing data with MCP
A skill without data will still write. It will write from memory. MCP (Model Context Protocol) is the open way to attach tools and live services to the agent so a skill can read a warehouse or an ad platform instead of guessing.
Composio, on this URL, is an MCP gateway. It is not a markdown skill. Do not install it as if it were another folder next to cro. Improvado is the architecture piece for warehouses and schema drift. Soft-link only: whether the marketer CLI should talk to HubSpot is a Claude Code for marketing question. This page owns the wiring that skills use.
Composio add and /mcp OAuth
Add the server from a terminal:
Then, inside Claude Code, run /mcp and select Composio to start the OAuth flow.

Run /mcp and select Composio. Do not invent extra MCP servers on the picker.
Treat the OAuth grant as a live credential. Revoking it is a security job of its own, not a paragraph in a skill file. Do not paste token strings into SKILL.md. Do not invent extra server names on the picker because a screenshot looked busier.
campaign-launcher-oss stays a table row: Improvado's OSS demand-gen plugin, useful as a pointer, not as this URL's primary install.
When a dashboard beats a skill
Here is the thing catalogs will not put in the hero.
If you do not have a governed warehouse, a "live metrics" skill will hallucinate a dashboard. Improvado's limitation is the honest one: no warehouse, do not fake live ad numbers. Use the chart you already trust until MCP has something real to read.
A skill still wins at copy, positioning, and CRO comments against the hub file. A dashboard still wins at monitored series, anomaly charts, and anything you would put in a board packet. When MCP is wired to a warehouse, the skill can query. Until then, it should refuse.

A skill without a warehouse should not invent live ad numbers. Use a dashboard until MCP has governed data.
Testing, on this page, is not a full lab. Improvado's rare note is enough: before you trust a query skill, run it against known-correct historical questions. If it cannot reproduce a number you already believe, do not let it invent a new one for Slack.
Stack skills for a growth workflow
You do not need every folder. Claim C2 exists because chaining three skills you will actually run beats installing twenty you will not. Slash-run the job, then make a human read it.

Chain /cro, /emails, or /seo-audit against the hub file, then humanize. Do not invent new slash commands.
Slash-run /cro, /emails, /seo-audit, then humanize
From the GitHub usage notes, the standalone calls are /cro, /emails, and /seo-audit. Against strategy context, MKT1's line is "Review this against my /marketing-strategy" (or, on the Corey default, against .agents/product-marketing.md).
Do not invent a fourth slash because it would look symmetric. /seo-audit here is the library's SEO folder. The dedicated SEO-ops pack is still Claude Code SEO.
Composio's three-step production chain, quoted as a humanize pass rather than as new commands:
Run a content ops draft:
Run the content ops workflow for [topic/URL]Rewrite on a psychology frame:
Analyze this copy: [paste]. Apply 12 cognitive bias principles...De-slop:
Humanize this text: [paste]... kill AI words, break parallel structures...
Hub file first. Slash skill second. Humanize third. If you skip the third tray, you shipped the catalog's English.
Ready to chain them? Install only cro, copywriting, and whatever else you will run this month. Confirm the hub file is the v2 path. Then run /cro on a page you own and read the gotcha list out loud. If "revolutionary" appears, the fork did not take.
Drafting longform after the skill pass can sit on Claude blog. This page does not become a writing engine.
FAQ
How do I install a marketing Skill in Claude Code?
Use Path A: npx skills add coreyhaines31/marketingskills -a claude-code, then confirm folders under .claude/skills/. Inside Claude Code you can instead run /plugin marketplace add coreyhaines31/marketingskills and /plugin install marketing-skills. A clone-and-copy works if you land files in the directory this product actually reads.
What belongs in a marketing SKILL.md?
A description in the YAML that says when the skill should fire, plus a Markdown body for ICP, voice, proof, banned words, and allowed tools. Leave undocumented front-matter keys out. Do not dump that brief into a CLAUDE.md that has already crossed 200 lines.
Where do I find Claude Code marketing Skills (GitHub, plugins, marketplace)?
Start with coreyhaines31/marketingskills and the companion index at marketing-skills.com. Path B is the plugin marketplace inside Claude Code. Skip SourceForge mirrors, paid-course dumps, and catalogs that still list page-cro as the current name.
How do I write my own marketing Skill for Claude Code?
Initialize a SKILL.md whose description tells Claude to load it on marketing work, and leave the body empty until the brief is mapped. Then put ICP, voice, proof, banned words, and allowed tools in Markdown sections. Do not invent extra YAML keys the pack never documented.
Do marketing Skills run in Claude.ai, or only in Claude Code?
Skills are files on disk. This install path is Claude Code reading .claude/skills/. Cursor is a different product: copy folders to ~/.cursor/skills/ instead of ~/.claude/skills/. Claude.ai chat is not this npx or /plugin path.
Can I enable several marketing Skills at once?
Yes. Install the full library, or a thin subset with --skill cro copywriting. Slash-run /cro, /emails, and /seo-audit against the same hub file, then humanize. Install only the skills you will chain this month.
How do I evaluate a marketing Skills GitHub repo before installing it?
Check that folder names match v2.0 (cro, not leftover page-cro), that the README documents -a claude-code for Claude Code, and that the repo contains SKILL.md files rather than a table of other people's links. Composio is an MCP gateway. MKT1's paid server is a strategy product. Neither is "one more Corey folder."
How do I pin brand rules and allowed tools inside a marketing Skill?
Copy the skill into .claude/skills/, open SKILL.md, and append gotchas in the brand's language: banned words, number-first proof, competitor-acquired positioning. Put allowed tools in the Markdown body next to those rules. Fork cro, not leftover page-cro.
What happened to page-cro and form-cro in v2.0?
v2.0 renamed 17 skills and consolidated page-cro plus form-cro into a single cro skill. New folders install beside old ones, so delete the stale names with the README rm -rf list. If both exist, you have two sources of truth.
The -a flag will keep looking optional in roundups that were written from a happy path. The stale page-cro folders will keep ranking because old screenshots are immortal. What I would watch next is not another 29-row directory. It is whether teams treat a skill that cannot see .claude/skills/ as "Claude got worse at marketing," and whether they notice the closet was never opened.
Put the fridge sheet up this week. Path A if you are in Claude Code. Confirm the files under .claude/skills/, add one gotcha to a forked SKILL.md, and run /cro against .agents/product-marketing.md. If the output could have been written for a different company, the hub file is empty or unread.
Until then...
Sage
PS. Open your file tree and put .claude/skills/ next to .agents/skills/. If both contain a cro folder, you have two sources of truth. Keep the one Claude Code can read. Delete the leftover v1 names before you trust the slash.
Author
Practical guides, tool teardowns & AI engineering workflows.

