diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..27e3242 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: Agent Skills Specification + url: https://agentskills.io/specification.md + about: Learn the skill format before creating or requesting a skill + - name: Contributing Guide + url: https://github.com/coreyhaines31/marketingskills/blob/main/CONTRIBUTING.md + about: How to contribute a new skill to this repository diff --git a/.github/ISSUE_TEMPLATE/skill-request.yml b/.github/ISSUE_TEMPLATE/skill-request.yml new file mode 100644 index 0000000..b9093fa --- /dev/null +++ b/.github/ISSUE_TEMPLATE/skill-request.yml @@ -0,0 +1,74 @@ +name: Skill Request +description: Request a new marketing skill +title: "Skill Request: [skill-name]" +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Thanks for suggesting a new skill! Please fill out the details below. + + - type: input + id: skill-name + attributes: + label: Suggested skill name + description: Lowercase, hyphens only (e.g., "landing-page-audit") + placeholder: "my-skill-name" + validations: + required: true + + - type: textarea + id: description + attributes: + label: What should this skill do? + description: Describe the skill's purpose and capabilities + placeholder: "This skill should help with..." + validations: + required: true + + - type: textarea + id: triggers + attributes: + label: When should it be used? + description: What trigger phrases or scenarios should activate this skill? + placeholder: | + - When the user says "..." + - When working on... + validations: + required: true + + - type: textarea + id: examples + attributes: + label: Example use cases + description: Provide 1-3 specific examples of how you'd use this skill + placeholder: | + 1. I want to... + 2. Help me... + validations: + required: false + + - type: dropdown + id: category + attributes: + label: Category + description: Which category does this skill fit into? + options: + - CRO (Conversion Rate Optimization) + - Copywriting + - SEO + - Paid Ads + - Growth / Strategy + - Analytics + - Other + validations: + required: true + + - type: textarea + id: related-skills + attributes: + label: Related existing skills + description: Are there existing skills this relates to or differs from? + placeholder: "Similar to page-cro but focused on..." + validations: + required: false diff --git a/.github/PULL_REQUEST_TEMPLATE/documentation.md b/.github/PULL_REQUEST_TEMPLATE/documentation.md new file mode 100644 index 0000000..9298953 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/documentation.md @@ -0,0 +1,15 @@ +## Documentation + +## Summary + + + +## Files changed + + + +## Checklist + +- [ ] Links are valid +- [ ] Formatting is consistent with existing docs +- [ ] No sensitive data or credentials diff --git a/.github/PULL_REQUEST_TEMPLATE/new-skill.md b/.github/PULL_REQUEST_TEMPLATE/new-skill.md new file mode 100644 index 0000000..b77ae6a --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/new-skill.md @@ -0,0 +1,16 @@ +## New Skill + +**Skill name:** `skills/SKILL-NAME` + +## Summary + + + +## Checklist + +- [ ] `name` matches directory name exactly +- [ ] `name` follows naming rules (lowercase, hyphens, no `--`) +- [ ] `description` is 1-1024 chars with trigger phrases +- [ ] `SKILL.md` is under 500 lines +- [ ] No sensitive data or credentials +- [ ] Tested locally with AI agent diff --git a/.github/PULL_REQUEST_TEMPLATE/skill-update.md b/.github/PULL_REQUEST_TEMPLATE/skill-update.md new file mode 100644 index 0000000..6e3e1d9 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/skill-update.md @@ -0,0 +1,21 @@ +## Skill Update + +**Skill:** `skills/SKILL-NAME` + +## Summary + + + +## Type of update + +- [ ] Bug fix +- [ ] Improved instructions +- [ ] Added references/scripts +- [ ] Other + +## Checklist + +- [ ] Changes are focused and minimal +- [ ] `SKILL.md` is still under 500 lines +- [ ] No sensitive data or credentials +- [ ] Tested locally with AI agent diff --git a/.github/scripts/sync-skills.js b/.github/scripts/sync-skills.js new file mode 100644 index 0000000..0e7e0cd --- /dev/null +++ b/.github/scripts/sync-skills.js @@ -0,0 +1,184 @@ +#!/usr/bin/env node +/** + * Sync marketplace.json and README.md with skills directory. + * + * Scans the skills/ directory for valid skills (directories containing SKILL.md) + * and updates marketplace.json and the README skills table to match. + */ + +const fs = require("fs"); +const path = require("path"); + +const SKILLS_DIR = "skills"; +const MARKETPLACE_FILE = ".claude-plugin/marketplace.json"; +const README_FILE = "README.md"; + +/** + * Parse YAML frontmatter from a SKILL.md file + */ +function parseFrontmatter(content) { + const match = content.match(/^---\n([\s\S]*?)\n---/); + if (!match) return {}; + + const frontmatter = {}; + const lines = match[1].split("\n"); + + for (const line of lines) { + const colonIndex = line.indexOf(":"); + if (colonIndex === -1) continue; + + const key = line.slice(0, colonIndex).trim(); + let value = line.slice(colonIndex + 1).trim(); + + // Remove quotes if present + if ((value.startsWith('"') && value.endsWith('"')) || + (value.startsWith("'") && value.endsWith("'"))) { + value = value.slice(1, -1); + } + + frontmatter[key] = value; + } + + return frontmatter; +} + +/** + * Get all skills with their metadata + */ +function getSkillsWithMetadata() { + if (!fs.existsSync(SKILLS_DIR)) { + return []; + } + + return fs + .readdirSync(SKILLS_DIR, { withFileTypes: true }) + .filter((entry) => { + if (!entry.isDirectory()) return false; + const skillFile = path.join(SKILLS_DIR, entry.name, "SKILL.md"); + return fs.existsSync(skillFile); + }) + .map((entry) => { + const skillFile = path.join(SKILLS_DIR, entry.name, "SKILL.md"); + const content = fs.readFileSync(skillFile, "utf8"); + const frontmatter = parseFrontmatter(content); + + return { + dir: entry.name, + path: `./${SKILLS_DIR}/${entry.name}`, + name: frontmatter.name || entry.name, + description: frontmatter.description || "", + }; + }) + .sort((a, b) => a.name.localeCompare(b.name)); +} + +/** + * Update skill count in description + */ +function updateSkillCount(description, count) { + return description.replace(/\d+ marketing skills/, `${count} marketing skills`); +} + +/** + * Truncate description to a maximum length + */ +function truncateDescription(description, maxLength = 120) { + if (description.length <= maxLength) return description; + + // Find last space before maxLength to avoid cutting words + const truncated = description.slice(0, maxLength); + const lastSpace = truncated.lastIndexOf(" "); + + return truncated.slice(0, lastSpace) + "..."; +} + +/** + * Generate the skills table for README + */ +function generateSkillsTable(skills) { + const header = "| Skill | Description |\n|-------|-------------|"; + const rows = skills.map((skill) => { + const link = `[${skill.name}](skills/${skill.dir}/)`; + const description = truncateDescription(skill.description); + return `| ${link} | ${description} |`; + }); + + return [header, ...rows].join("\n"); +} + +/** + * Update README.md with new skills table + */ +function updateReadme(skills) { + const content = fs.readFileSync(README_FILE, "utf8"); + + // Match content between skill list markers + const tableRegex = /(\n)[\s\S]*?(\n)/; + const newTable = generateSkillsTable(skills); + + if (!tableRegex.test(content)) { + console.log("WARNING: Could not find skill markers in README.md"); + return false; + } + + const newContent = content.replace(tableRegex, `$1${newTable}$2`); + + if (newContent === content) { + return false; + } + + fs.writeFileSync(README_FILE, newContent); + return true; +} + +/** + * Update marketplace.json with skills list + */ +function updateMarketplace(skills) { + const marketplace = JSON.parse(fs.readFileSync(MARKETPLACE_FILE, "utf8")); + const plugin = marketplace.plugins[0]; + const existingSkills = plugin.skills || []; + const currentSkills = skills.map((s) => s.path); + + if (JSON.stringify(currentSkills) === JSON.stringify(existingSkills)) { + return { updated: false }; + } + + plugin.skills = currentSkills; + plugin.description = updateSkillCount(plugin.description, currentSkills.length); + + fs.writeFileSync(MARKETPLACE_FILE, JSON.stringify(marketplace, null, 2) + "\n"); + + const added = currentSkills.filter((s) => !existingSkills.includes(s)); + const removed = existingSkills.filter((s) => !currentSkills.includes(s)); + + return { updated: true, added, removed }; +} + +function main() { + const skills = getSkillsWithMetadata(); + + const marketplaceResult = updateMarketplace(skills); + const readmeUpdated = updateReadme(skills); + + if (!marketplaceResult.updated && !readmeUpdated) { + console.log("Everything is already in sync"); + return; + } + + if (marketplaceResult.updated) { + if (marketplaceResult.added.length) { + console.log(`Added: ${marketplaceResult.added.join(", ")}`); + } + if (marketplaceResult.removed.length) { + console.log(`Removed: ${marketplaceResult.removed.join(", ")}`); + } + console.log(`Updated marketplace.json (${skills.length} skills)`); + } + + if (readmeUpdated) { + console.log("Updated README.md skills table"); + } +} + +main(); diff --git a/.github/workflows/sync-skills.yml b/.github/workflows/sync-skills.yml new file mode 100644 index 0000000..4e9d5b9 --- /dev/null +++ b/.github/workflows/sync-skills.yml @@ -0,0 +1,30 @@ +name: Sync Skills + +on: + push: + branches: [main] + paths: + - 'skills/**' + +jobs: + sync: + runs-on: ubuntu-slim + permissions: + contents: write + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + persist-credentials: true + + - name: Sync skills + run: node .github/scripts/sync-skills.js + + - name: Commit changes + uses: stefanzweifel/git-auto-commit-action@v7 + with: + commit_user_name: Coreybot + commit_user_email: coreybot+github-actions[bot]@users.noreply.github.com + commit_message: "chore: sync skills with marketplace.json and README" + file_pattern: ".claude-plugin/marketplace.json README.md" diff --git a/.github/workflows/validate-skill.yml b/.github/workflows/validate-skill.yml new file mode 100644 index 0000000..35e31b9 --- /dev/null +++ b/.github/workflows/validate-skill.yml @@ -0,0 +1,65 @@ +name: Validate Agent Skill + +on: + push: + branches: [main] + paths: + - "**/SKILL.md" + pull_request: + branches: [main] + paths: + - "**/SKILL.md" + +concurrency: + group: validate-skill-${{ github.ref }} + cancel-in-progress: true + +jobs: + detect-changes: + runs-on: ubuntu-slim + if: github.event.pull_request.draft != true && github.actor != 'dependabot[bot]' + outputs: + skills: ${{ steps.changed-skills.outputs.skills }} + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Get changed skills + id: changed-skills + run: | + if [ "${{ github.event_name }}" = "pull_request" ]; then + BASE=${{ github.event.pull_request.base.sha }} + HEAD=${{ github.event.pull_request.head.sha }} + else + BASE=${{ github.event.before }} + HEAD=${{ github.event.after }} + fi + + # Find changed SKILL.md files and extract skill directories + SKILLS=$(git diff --name-only $BASE $HEAD | \ + grep 'SKILL.md$' | \ + xargs -I {} dirname {} | \ + sort -u | \ + jq -R -s -c 'split("\n") | map(select(length > 0))') + + echo "skills=$SKILLS" >> $GITHUB_OUTPUT + echo "Changed skills: $SKILLS" + + validate: + needs: detect-changes + if: needs.detect-changes.outputs.skills != '[]' + runs-on: ubuntu-slim + strategy: + fail-fast: false + matrix: + skill: ${{ fromJson(needs.detect-changes.outputs.skills) }} + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Validate ${{ matrix.skill }} + uses: Flash-Brew-Digital/validate-skill@v1 + with: + path: ${{ matrix.skill }} \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..dbdf724 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,157 @@ +# AGENTS.md + +Guidelines for AI agents working in this repository. + +## Repository Overview + +This repository contains **Agent Skills** for AI agents following the [Agent Skills specification](https://agentskills.io/specification.md). It also serves as a **Claude Code plugin marketplace** via `.claude-plugin/marketplace.json`. + +- **Name**: Marketing Skills +- **GitHub**: [coreyhaines31/marketingskills](https://github.com/coreyhaines31/marketingskills) +- **Creator**: Corey Haines +- **License**: MIT + +## Repository Structure + +``` +marketingskills/ +├── .claude-plugin/ +│ └── marketplace.json # Claude Code plugin marketplace manifest +├── skills/ # Agent Skills +│ └── skill-name/ +│ └── SKILL.md # Required skill file +├── CONTRIBUTING.md +├── LICENSE +└── README.md +``` + +## Build / Lint / Test Commands + +**Not applicable** - This is a content-only repository with no executable code. + +Verify manually: +- YAML frontmatter is valid +- `name` field matches directory name exactly +- `name` is 1-64 chars, lowercase alphanumeric and hyphens only +- `description` is 1-1024 characters + +## Agent Skills Specification + +Skills follow the [Agent Skills spec](https://agentskills.io/specification.md). + +### Required Frontmatter + +```yaml +--- +name: skill-name +description: What this skill does and when to use it. Include trigger phrases. +--- +``` + +### Frontmatter Field Constraints + +| Field | Required | Constraints | +|---------------|----------|------------------------------------------------------------------| +| `name` | Yes | 1-64 chars, lowercase `a-z`, numbers, hyphens. Must match dir. | +| `description` | Yes | 1-1024 chars. Describe what it does and when to use it. | +| `license` | No | License name (default: MIT) | +| `metadata` | No | Key-value pairs (author, version, etc.) | + +### Name Field Rules + +- Lowercase letters, numbers, and hyphens only +- Cannot start or end with hyphen +- No consecutive hyphens (`--`) +- Must match parent directory name exactly + +**Valid**: `page-cro`, `email-sequence`, `ab-test-setup` +**Invalid**: `Page-CRO`, `-page`, `page--cro` + +### Optional Skill Directories + +``` +skills/skill-name/ +├── SKILL.md # Required - main instructions (<500 lines) +├── references/ # Optional - detailed docs loaded on demand +├── scripts/ # Optional - executable code +└── assets/ # Optional - templates, data files +``` + +## Writing Style Guidelines + +### Structure + +- Keep `SKILL.md` under 500 lines (move details to `references/`) +- Use H2 (`##`) for main sections, H3 (`###`) for subsections +- Use bullet points and numbered lists liberally +- Short paragraphs (2-4 sentences max) + +### Tone + +- Direct and instructional +- Second person ("You are a conversion rate optimization expert") +- Professional but approachable + +### Formatting + +- Bold (`**text**`) for key terms +- Code blocks for examples and templates +- Tables for reference data +- No excessive emojis + +### Clarity Principles + +- Clarity over cleverness +- Specific over vague +- Active voice over passive +- One idea per section + +### Description Field Best Practices + +The `description` is critical for skill discovery. Include: +1. What the skill does +2. When to use it (trigger phrases) +3. Related skills for scope boundaries + +```yaml +description: When the user wants to optimize conversions on any marketing page. Use when the user says "CRO," "conversion rate optimization," "this page isn't converting." For signup flows, see signup-flow-cro. +``` + +## Claude Code Plugin + +This repo also serves as a plugin marketplace. The manifest at `.claude-plugin/marketplace.json` lists all skills for installation via: + +```bash +/plugin marketplace add coreyhaines31/marketingskills +/plugin install marketing-skills +``` + +See [Claude Code plugins documentation](https://code.claude.com/docs/en/plugins.md) for details. + +## Git Workflow + +### Branch Naming + +- New skills: `feature/skill-name` +- Improvements: `fix/skill-name-description` +- Documentation: `docs/description` + +### Commit Messages + +Follow the [Conventional Commits](https://www.conventionalcommits.org/) specification: + +- `feat: add skill-name skill` +- `fix: improve clarity in page-cro` +- `docs: update README` + +### Pull Request Checklist + +- [ ] `name` matches directory name exactly +- [ ] `name` follows naming rules (lowercase, hyphens, no `--`) +- [ ] `description` is 1-1024 chars with trigger phrases +- [ ] `SKILL.md` is under 500 lines +- [ ] No sensitive data or credentials + +## Skill Categories + +See `README.md` for the current list of skills organized by category. When adding new skills, follow the naming patterns of existing skills in that category. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 120000 index 0000000..47dc3e3 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..d43747d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,89 @@ +# Contributing + +Thanks for your interest in contributing to Marketing Skills! This guide will help you add new skills or improve existing ones. + +## Requesting a Skill + +You can also suggest new skills by [opening a skill request](https://github.com/coreyhaines31/marketingskills/issues/new?template=skill-request.yml). + +## Adding a New Skill + +### 1. Create the skill directory + +```bash +mkdir -p skills/your-skill-name +``` + +### 2. Create the SKILL.md file + +Every skill needs a `SKILL.md` file with YAML frontmatter: + +```yaml +--- +name: your-skill-name +description: When to use this skill. Include trigger phrases and keywords that help agents identify relevant tasks. +--- + +# Your Skill Name + +Instructions for the agent go here... +``` + +Optional frontmatter fields: `license` (default: MIT), `metadata` (author, version, etc.) + +### 3. Follow the naming conventions + +- **Directory name**: lowercase, hyphens only (e.g., `email-sequence`) +- **Name field**: must match directory name exactly +- **Description**: 1-1024 characters, include trigger phrases + +### 4. Structure your skill + +``` +skills/your-skill-name/ +├── SKILL.md # Required - main instructions +├── references/ # Optional - additional documentation +│ └── guide.md +├── scripts/ # Optional - executable code +│ └── helper.py +└── assets/ # Optional - templates, images, data + └── template.json +``` + +### 5. Write effective instructions + +- Keep `SKILL.md` under 500 lines +- Move detailed reference material to `references/` +- Include step-by-step instructions +- Add examples of inputs and outputs +- Cover common edge cases + +## Improving Existing Skills + +1. Read the existing skill thoroughly +2. Test your changes locally +3. Keep changes focused and minimal +4. Update the version in metadata if making significant changes + +## Submitting Your Contribution + +1. Fork the repository +2. Create a feature branch (`git checkout -b feature/new-skill-name`) +3. Make your changes +4. Test locally with an AI agent +5. Submit a pull request using the appropriate template: + - [New Skill](?template=new-skill.md) + - [Skill Update](?template=skill-update.md) + - [Documentation](?template=documentation.md) + +## Skill Quality Checklist + +- [ ] `name` matches directory name +- [ ] `description` clearly explains when to use the skill +- [ ] Instructions are clear and actionable +- [ ] No sensitive data or credentials +- [ ] Follows existing skill patterns in the repo + +## Questions? + +Open an issue if you have questions or need help with your contribution. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7c48dd6 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Corey Haines + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index d12375f..fc1841f 100644 --- a/README.md +++ b/README.md @@ -14,31 +14,33 @@ Skills are markdown files that give AI agents specialized knowledge and workflow ## Available Skills -| Skill | Description | Triggers | -|-------|-------------|----------| -| [ab-test-setup](skills/ab-test-setup/) | Plan and implement A/B tests | "A/B test," "split test," "experiment" | -| [analytics-tracking](skills/analytics-tracking/) | Set up tracking and measurement | "tracking," "GA4," "GTM," "events" | -| [competitor-alternatives](skills/competitor-alternatives/) | Competitor comparison and alternative pages | "vs page," "alternative page," "[X] vs [Y]" | -| [copy-editing](skills/copy-editing/) | Edit and polish existing copy | "edit this copy," "review my copy," "copy sweep" | -| [copywriting](skills/copywriting/) | Write or improve marketing copy | "write copy," "rewrite," "headlines," "CTA copy" | -| [email-sequence](skills/email-sequence/) | Build email sequences and drip campaigns | "email sequence," "drip campaign," "nurture" | -| [form-cro](skills/form-cro/) | Optimize lead capture and contact forms | "form optimization," "lead form," "contact form" | -| [free-tool-strategy](skills/free-tool-strategy/) | Plan engineering-as-marketing tools | "free tool," "calculator," "lead gen tool" | -| [launch-strategy](skills/launch-strategy/) | Product launches and feature announcements | "launch," "Product Hunt," "feature release" | -| [marketing-ideas](skills/marketing-ideas/) | 140 SaaS marketing ideas and strategies | "marketing ideas," "growth ideas," "how to market" | -| [marketing-psychology](skills/marketing-psychology/) | 70+ mental models for marketing | "psychology," "mental models," "cognitive bias" | -| [onboarding-cro](skills/onboarding-cro/) | Improve user activation and onboarding | "onboarding," "activation," "first-run experience" | -| [page-cro](skills/page-cro/) | Conversion optimization for any marketing page | "optimize [page]," "CRO," "page isn't converting" | -| [paid-ads](skills/paid-ads/) | Create and optimize paid ad campaigns | "PPC," "Google Ads," "Meta ads," "paid media" | -| [paywall-upgrade-cro](skills/paywall-upgrade-cro/) | In-app paywalls and upgrade screens | "paywall," "upgrade screen," "feature gate" | -| [popup-cro](skills/popup-cro/) | Create/optimize popups and modals | "popup," "modal," "exit intent" | -| [pricing-strategy](skills/pricing-strategy/) | Design pricing, packaging, and monetization | "pricing," "tiers," "freemium," "willingness to pay" | -| [programmatic-seo](skills/programmatic-seo/) | Build SEO pages at scale | "programmatic SEO," "template pages," "pages at scale" | -| [referral-program](skills/referral-program/) | Design referral and affiliate programs | "referral," "affiliate," "word of mouth," "viral" | -| [schema-markup](skills/schema-markup/) | Add structured data and rich snippets | "schema," "JSON-LD," "structured data" | -| [seo-audit](skills/seo-audit/) | Audit technical and on-page SEO | "SEO audit," "technical SEO," "not ranking" | -| [signup-flow-cro](skills/signup-flow-cro/) | Optimize signup and registration flows | "signup optimization," "registration form" | -| [social-content](skills/social-content/) | Create and schedule social media content | "LinkedIn post," "Twitter thread," "social media" | + +| Skill | Description | +|-------|-------------| +| [ab-test-setup](skills/ab-test-setup/) | When the user wants to plan, design, or implement an A/B test or experiment. Also use when the user mentions "A/B... | +| [analytics-tracking](skills/analytics-tracking/) | When the user wants to set up, improve, or audit analytics tracking and measurement. Also use when the user mentions... | +| [competitor-alternatives](skills/competitor-alternatives/) | When the user wants to create competitor comparison or alternative pages for SEO and sales enablement. Also use when... | +| [copy-editing](skills/copy-editing/) | When the user wants to edit, review, or improve existing marketing copy. Also use when the user mentions 'edit this... | +| [copywriting](skills/copywriting/) | When the user wants to write, rewrite, or improve marketing copy for any page — including homepage, landing pages,... | +| [email-sequence](skills/email-sequence/) | When the user wants to create or optimize an email sequence, drip campaign, automated email flow, or lifecycle email... | +| [form-cro](skills/form-cro/) | When the user wants to optimize any form that is NOT signup/registration — including lead capture forms, contact forms,... | +| [free-tool-strategy](skills/free-tool-strategy/) | When the user wants to plan, evaluate, or build a free tool for marketing purposes — lead generation, SEO value, or... | +| [launch-strategy](skills/launch-strategy/) | When the user wants to plan a product launch, feature announcement, or release strategy. Also use when the user... | +| [marketing-ideas](skills/marketing-ideas/) | When the user needs marketing ideas, inspiration, or strategies for their SaaS or software product. Also use when the... | +| [marketing-psychology](skills/marketing-psychology/) | When the user wants to apply psychological principles, mental models, or behavioral science to marketing. Also use when... | +| [onboarding-cro](skills/onboarding-cro/) | When the user wants to optimize post-signup onboarding, user activation, first-run experience, or time-to-value. Also... | +| [page-cro](skills/page-cro/) | When the user wants to optimize, improve, or increase conversions on any marketing page — including homepage, landing... | +| [paid-ads](skills/paid-ads/) | When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X,... | +| [paywall-upgrade-cro](skills/paywall-upgrade-cro/) | When the user wants to create or optimize in-app paywalls, upgrade screens, upsell modals, or feature gates. Also use... | +| [popup-cro](skills/popup-cro/) | When the user wants to create or optimize popups, modals, overlays, slide-ins, or banners for conversion purposes. Also... | +| [pricing-strategy](skills/pricing-strategy/) | When the user wants help with pricing decisions, packaging, or monetization strategy. Also use when the user mentions... | +| [programmatic-seo](skills/programmatic-seo/) | When the user wants to create SEO-driven pages at scale using templates and data. Also use when the user mentions... | +| [referral-program](skills/referral-program/) | When the user wants to create, optimize, or analyze a referral program, affiliate program, or word-of-mouth strategy.... | +| [schema-markup](skills/schema-markup/) | When the user wants to add, fix, or optimize schema markup and structured data on their site. Also use when the user... | +| [seo-audit](skills/seo-audit/) | When the user wants to audit, review, or diagnose SEO issues on their site. Also use when the user mentions "SEO... | +| [signup-flow-cro](skills/signup-flow-cro/) | When the user wants to optimize signup, registration, account creation, or trial activation flows. Also use when the... | +| [social-content](skills/social-content/) | When the user wants help creating, scheduling, or optimizing social media content for LinkedIn, Twitter/X, Instagram,... | + ## Installation @@ -166,41 +168,8 @@ You can also invoke skills directly: Found a way to improve a skill? Have a new skill to suggest? PRs and issues welcome! -**Ideas for contributions:** -- Improve existing skill instructions or frameworks -- Add new experiment ideas or best practices -- Fix typos or clarify confusing sections -- Suggest new skills (open an issue first to discuss) -- Add examples or case studies - -**How to contribute:** -1. Fork the repo -2. Edit the skill file(s) -3. Submit a PR with a clear description of what you improved - -### Skill File Structure - -Each skill is a directory containing a `SKILL.md` file: - -``` -skills/ - skill-name/ - SKILL.md -``` - -The `SKILL.md` file follows this format: - -```markdown ---- -name: skill-name -description: One-line description for skill selection ---- - -# Skill Name - -[Full instructions for the AI agent] -``` +See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on adding or improving skills. ## License -MIT - Use these however you want. +[MIT](LICENSE) - Use these however you want.