marketingskills
Othercoreyhaines31/marketingskills
AI agent skills for marketing tasks like CRO, SEO, and copywriting.
Overview
A collection of markdown skill files that enable AI coding agents to perform marketing tasks such as conversion optimization, copywriting, SEO, analytics, and growth engineering. Works with Claude Code, OpenAI Codex, and other agents supporting the Agent Skills spec.
README Preview
# Marketing Skills for AI Agents\n\nA collection of AI agent skills focused on marketing tasks. Built for technical marketers and founders who want AI coding agents to help with conversion optimization, copywriting, SEO, analytics, and growth engineering. Works with Claude Code, OpenAI Codex, Cursor, Windsurf, and any agent that supports the [Agent Skills spec](https://agentskills.io).\n\nBuilt by [Corey Haines](https://corey.co?ref=marketingskills). Need hands-on help? Check out [Conversion Factory](https://conversionfactory.co?ref=marketingskills) — Corey's agency for conversion optimization, landing pages, and growth strategy. Want to learn more about marketing? Subscribe to [Swipe Files](https://swipefiles.com?ref=marketingskills). Want to get dangerously good at using AI for marketing? Check out [AI Marketing Training](https://conversionfactory.co/offers/ai-marketing-training?ref=marketingskills). Want an autonomous AI agent that uses these skills to be your CMO? Try [Magister](https://magistermarketing.com?ref=marketingskills).\n\nNew to the terminal and coding agents? Check out the companion guide [Coding for Marketers](https://codingformarketers.com?ref=marketingskills).\n\n**Contributions welcome!** Found a way to improve a skill or have a new one to add? [Open a PR](#contributing).\n\nRun into a problem or have a question? [Open an issue](https://github.com/coreyhaines31/marketingskills/issues) — we're happy to help.\n\n## What are Skills?\n\nSkills are markdown files that give AI agents specialized knowledge and workflows for specific tasks. When you add these to your project, your agent can recognize when you're working on a marketing task and apply the right frameworks and best practices.\n\n## How Skills Work Together\n\nSkills reference each other and build on shared context. The `product-marketing` skill is the foundation — every other skill checks it first to understand your product, audience, and positioning before doing anything.\n\n```\n
FAQ (3)
TroubleshootingHow do I fix the missing `render` export when importing from the `hyperframes` npm package?
The hyperframes package (v0.8.78) is CLI-only and does not export a render() function or accept a frames: [...] array. Use the CLI instead:
npx hyperframes init my-video
cd my-video
npx hyperframes preview
npx hyperframes render -o output.mp4
To render an existing composition:
npx hyperframes render -c ./my-composition.html -o output.mp4
For programmatic rendering, install the separate @hyperframes/producer package:
npm install @hyperframes/producer
Then use createRenderJob() and executeRenderJob():
import { createRenderJob, executeRenderJob } from "@hyperframes/producer";
const job = createRenderJob({
inputPath: "./my-composition.html",
outputPath: "./output.mp4",
width: 1080,
height: 1920,
fps: 30,
});
await executeRenderJob(job, (progress) => console.log(progress.percent));
The model is one HTML composition file per render, not an array of frame objects. Requirements are Node.js 22+ and FFmpeg. Run npx hyperframes docs for the current composition format because the 0.x CLI changes frequently.
TroubleshootingHow do I fix creative-review-template.html shape-error crashes, incomplete tab ARIA, and hardcoded likes?
Upgrade or re-pin the ad-creative skill to version 2.11.17, which includes the PR closing issue #592. If patching skills/ad-creative/assets/creative-review-template.html manually, apply these fixes:
1. Validate the JSON shape immediately after JSON.parse, before renderAll() runs:
function fail(msg) {
document.querySelector(".wrap").innerHTML =
'<div class="err"><b>Invalid review data.</b><br/>' + esc(msg) + '</div>';
throw new Error(msg);
}
if (!Array.isArray(DATA.concepts) || !DATA.concepts.length) {
fail("DATA.concepts must be a non-empty array");
}
DATA.concepts.forEach((c, i) => {
if (!Array.isArray(c.frames) || !c.frames.length) {
fail(`concepts[${i}].frames must be a non-empty array`);
}
});nThis prevents renderConcepts() from reading c.frames.length on invalid data and leaving only the header visible.
2. Fix the concept switcher ARIA. Either implement the full tab pattern with aria-controls, associated role="tabpanel" elements, and arrow-key navigation, or remove role="tablist", role="tab", and aria-selected and use plain toggle buttons:
<button type="button" aria-pressed="false">Concept</button>Set
aria-pressed="true" on the active concept.
3. Remove the invented Instagram engagement count and make it data-driven:
<div class="likes">${c.likes ? esc(c.likes) + " likes" : ""}</div>The likes line is omitted entirely when
c.likes is absent, avoiding fabricated stats.installationHow do I install a Claude skill on claude.ai without using npx or Claude Code?
Download the per-skill ZIP asset from the project's GitHub Releases page—do not use the source-code ZIP. In claude.ai web or desktop, go to Settings → Capabilities → Skills, upload the downloaded ZIP, then enable the skill. The release workflow attaches one ZIP per skill, built from a frozen commit and including the skill's references, scripts, assets, and license.