Merge pull request #25 from coreyhaines31/fix/repo-essentials-conventions

Fix branch naming and simplify frontmatter example
This commit is contained in:
Corey Haines
2026-01-26 17:32:32 -08:00
committed by GitHub
13 changed files with 710 additions and 60 deletions

8
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,15 @@
## Documentation
## Summary
<!-- What documentation changes are you making? -->
## Files changed
<!-- List the files you're updating -->
## Checklist
- [ ] Links are valid
- [ ] Formatting is consistent with existing docs
- [ ] No sensitive data or credentials

View File

@@ -0,0 +1,16 @@
## New Skill
**Skill name:** `skills/SKILL-NAME`
## Summary
<!-- What does this skill do and when should it be used? -->
## 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

View File

@@ -0,0 +1,21 @@
## Skill Update
**Skill:** `skills/SKILL-NAME`
## Summary
<!-- What changes are you making and why? -->
## 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

184
.github/scripts/sync-skills.js vendored Normal file
View File

@@ -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 = /(<!-- SKILLS:START -->\n)[\s\S]*?(\n<!-- SKILLS:END -->)/;
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();

30
.github/workflows/sync-skills.yml vendored Normal file
View File

@@ -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"

65
.github/workflows/validate-skill.yml vendored Normal file
View File

@@ -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 }}

157
AGENTS.md Normal file
View File

@@ -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.

1
CLAUDE.md Symbolic link
View File

@@ -0,0 +1 @@
AGENTS.md

89
CONTRIBUTING.md Normal file
View File

@@ -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.

21
LICENSE Normal file
View File

@@ -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.

View File

@@ -14,31 +14,33 @@ Skills are markdown files that give AI agents specialized knowledge and workflow
## Available Skills ## Available Skills
| Skill | Description | Triggers | <!-- SKILLS:START -->
|-------|-------------|----------| | Skill | Description |
| [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" | | [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... |
| [competitor-alternatives](skills/competitor-alternatives/) | Competitor comparison and alternative pages | "vs page," "alternative page," "[X] vs [Y]" | | [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... |
| [copy-editing](skills/copy-editing/) | Edit and polish existing copy | "edit this copy," "review my copy," "copy sweep" | | [competitor-alternatives](skills/competitor-alternatives/) | When the user wants to create competitor comparison or alternative pages for SEO and sales enablement. Also use when... |
| [copywriting](skills/copywriting/) | Write or improve marketing copy | "write copy," "rewrite," "headlines," "CTA copy" | | [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... |
| [email-sequence](skills/email-sequence/) | Build email sequences and drip campaigns | "email sequence," "drip campaign," "nurture" | | [copywriting](skills/copywriting/) | When the user wants to write, rewrite, or improve marketing copy for any page — including homepage, landing pages,... |
| [form-cro](skills/form-cro/) | Optimize lead capture and contact forms | "form optimization," "lead form," "contact form" | | [email-sequence](skills/email-sequence/) | When the user wants to create or optimize an email sequence, drip campaign, automated email flow, or lifecycle email... |
| [free-tool-strategy](skills/free-tool-strategy/) | Plan engineering-as-marketing tools | "free tool," "calculator," "lead gen tool" | | [form-cro](skills/form-cro/) | When the user wants to optimize any form that is NOT signup/registration — including lead capture forms, contact forms,... |
| [launch-strategy](skills/launch-strategy/) | Product launches and feature announcements | "launch," "Product Hunt," "feature release" | | [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... |
| [marketing-ideas](skills/marketing-ideas/) | 140 SaaS marketing ideas and strategies | "marketing ideas," "growth ideas," "how to market" | | [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-psychology](skills/marketing-psychology/) | 70+ mental models for marketing | "psychology," "mental models," "cognitive bias" | | [marketing-ideas](skills/marketing-ideas/) | When the user needs marketing ideas, inspiration, or strategies for their SaaS or software product. Also use when the... |
| [onboarding-cro](skills/onboarding-cro/) | Improve user activation and onboarding | "onboarding," "activation," "first-run experience" | | [marketing-psychology](skills/marketing-psychology/) | When the user wants to apply psychological principles, mental models, or behavioral science to marketing. Also use when... |
| [page-cro](skills/page-cro/) | Conversion optimization for any marketing page | "optimize [page]," "CRO," "page isn't converting" | | [onboarding-cro](skills/onboarding-cro/) | When the user wants to optimize post-signup onboarding, user activation, first-run experience, or time-to-value. Also... |
| [paid-ads](skills/paid-ads/) | Create and optimize paid ad campaigns | "PPC," "Google Ads," "Meta ads," "paid media" | | [page-cro](skills/page-cro/) | When the user wants to optimize, improve, or increase conversions on any marketing page — including homepage, landing... |
| [paywall-upgrade-cro](skills/paywall-upgrade-cro/) | In-app paywalls and upgrade screens | "paywall," "upgrade screen," "feature gate" | | [paid-ads](skills/paid-ads/) | When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X,... |
| [popup-cro](skills/popup-cro/) | Create/optimize popups and modals | "popup," "modal," "exit intent" | | [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... |
| [pricing-strategy](skills/pricing-strategy/) | Design pricing, packaging, and monetization | "pricing," "tiers," "freemium," "willingness to pay" | | [popup-cro](skills/popup-cro/) | When the user wants to create or optimize popups, modals, overlays, slide-ins, or banners for conversion purposes. Also... |
| [programmatic-seo](skills/programmatic-seo/) | Build SEO pages at scale | "programmatic SEO," "template pages," "pages at scale" | | [pricing-strategy](skills/pricing-strategy/) | When the user wants help with pricing decisions, packaging, or monetization strategy. Also use when the user mentions... |
| [referral-program](skills/referral-program/) | Design referral and affiliate programs | "referral," "affiliate," "word of mouth," "viral" | | [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... |
| [schema-markup](skills/schema-markup/) | Add structured data and rich snippets | "schema," "JSON-LD," "structured data" | | [referral-program](skills/referral-program/) | When the user wants to create, optimize, or analyze a referral program, affiliate program, or word-of-mouth strategy.... |
| [seo-audit](skills/seo-audit/) | Audit technical and on-page SEO | "SEO audit," "technical SEO," "not ranking" | | [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... |
| [signup-flow-cro](skills/signup-flow-cro/) | Optimize signup and registration flows | "signup optimization," "registration form" | | [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... |
| [social-content](skills/social-content/) | Create and schedule social media content | "LinkedIn post," "Twitter thread," "social media" | | [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,... |
<!-- SKILLS:END -->
## Installation ## 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! Found a way to improve a skill? Have a new skill to suggest? PRs and issues welcome!
**Ideas for contributions:** See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on adding or improving skills.
- 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]
```
## License ## License
MIT - Use these however you want. [MIT](LICENSE) - Use these however you want.