From hormozi-skills
This skill should be used when the user asks to "create a plugin", "make a GitHub plugin", "turn my repo into a plugin", "create a Claude Code plugin", "create a Codex plugin", "publish my skills as a plugin", or "set up a plugin marketplace". Scaffolds the complete file structure for a repo that works as both a Claude Code and Codex plugin with marketplace support.
How this skill is triggered — by the user, by Claude, or both
Slash command
/hormozi-skills:create-pluginThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Scaffold a GitHub repo that works as a plugin for both Claude Code and Codex simultaneously. Outputs ready-to-copy file contents and git commands for every required file.
Scaffold a GitHub repo that works as a plugin for both Claude Code and Codex simultaneously. Outputs ready-to-copy file contents and git commands for every required file.
Ask the user these questions (all at once):
my-skills)alexsmedile)skills/)agents/)hooks/hooks.json).mcp.json)MITDo not proceed until you have at least: repo name, GitHub username, description, and author name.
Show the full directory tree based on their selections, then output every file's content ready to copy.
.claude-plugin/plugin.json{
"name": "{{repo-name}}",
"version": "1.0.0",
"description": "{{description}}",
"author": {
"name": "{{author}}"
},
"homepage": "https://github.com/{{username}}/{{repo-name}}",
"repository": "https://github.com/{{username}}/{{repo-name}}",
"license": "{{license}}",
"keywords": []
}
Skills and agents in
skills/andagents/are auto-discovered — no paths needed inplugin.json.
.claude-plugin/marketplace.json{
"name": "{{repo-name}}",
"owner": {
"name": "{{author}}"
},
"metadata": {
"description": "{{description}}",
"version": "1.0.0"
},
"plugins": [
{
"name": "{{repo-name}}",
"source": "./",
"description": "{{description}}",
"version": "1.0.0",
"author": {
"name": "{{author}}"
},
"homepage": "https://github.com/{{username}}/{{repo-name}}",
"repository": "https://github.com/{{username}}/{{repo-name}}",
"license": "{{license}}",
"category": "productivity"
}
]
}
.codex-plugin/plugin.json{
"name": "{{repo-name}}",
"version": "1.0.0",
"description": "{{description}}",
"author": {
"name": "{{author}}"
},
"homepage": "https://github.com/{{username}}/{{repo-name}}",
"repository": "https://github.com/{{username}}/{{repo-name}}",
"license": "{{license}}",
"skills": "./skills/"
}
.codex-plugin/marketplace.json{
"name": "{{repo-name}}",
"interface": {
"displayName": "{{repo-name}}"
},
"plugins": [
{
"name": "{{repo-name}}",
"source": {
"source": "local",
"path": "./"
},
"category": "Productivity"
}
]
}
.gitignore.DS_Store
**/.DS_Store
output/*
!output/.gitkeep
output/.gitkeepEmpty file — keeps the output/ folder tracked by git.
skills/example-skill/SKILL.md---
name: example-skill
description: Replace this description with specific trigger phrases. Use when the user asks to "..."
---
# Skill: Example
Describe what this skill does and how to use it.
Rename
example-skill/to your actual skill name. Skill is invoked as/{{repo-name}}:example-skill.
agents/example-agent.md---
name: example-agent
description: Replace with what this agent does and when to invoke it.
tools: Read, Write, Bash
model: sonnet
---
# Agent: Example
Describe the agent's role, expertise, and behavior here.
Rename to your actual agent name.
hooks/hooks.json{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "echo 'File changed'"
}
]
}
]
}
}
.mcp.json{
"mcpServers": {
"example-server": {
"command": "${CLAUDE_PLUGIN_ROOT}/bin/server",
"args": []
}
}
}
State these clearly before the user creates any files:
| Rule | Detail |
|---|---|
skills/ and agents/ at repo root | Never inside .claude-plugin/ or .codex-plugin/ |
| Plugin name = skill namespace | Plugin foo → skills run as /foo:skill-name |
plugin.json is auto-discovery | No need to list skills or agents paths unless using custom locations |
Do NOT add skills/agents to marketplace.json | Causes schema validation error with default strict: true |
source: "./" in marketplace.json | Points at repo root — correct for single-plugin repos |
Output these exactly, substituting the user's values:
# Create repo (if not exists)
gh repo create {{username}}/{{repo-name}} --public
# Init and push
git init
git add .
git commit -m "feat: initial plugin scaffold"
git remote add origin https://github.com/{{username}}/{{repo-name}}.git
git push -u origin main
Install in Claude Code:
/plugin marketplace add {{username}}/{{repo-name}}
/plugin install {{repo-name}}@{{repo-name}}
Reload after changes:
/reload-plugins
Test locally without installing:
claude --plugin-dir ./
Skills are namespaced: /{{repo-name}}:skill-name
Agents appear in /agents
To update: push to GitHub, then /plugin marketplace update {{repo-name}}
Bump version in plugin.json and marketplace.json with each release — Claude Code uses version to detect updates.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub alexsmedile/hormozi-skills --plugin hormozi-skills