Bundle structure
Every bundle is a directory under skills/ in the repository. The directory name is the slug: lowercase letters, digits and hyphens (^[a-z0-9][a-z0-9-]*$). It becomes the URL (/skill/<slug>) and the zip's root folder.
skills/
└── <slug>/
├── README.md required — frontmatter + docs
├── skills/<name>/SKILL.md optional — one folder per skill
├── rules/*.md optional — path-scoped rules
├── hooks/* optional — scripts referenced by settings
├── settings.local.json optional — hooks/permissions config
└── CLAUDE.md optional — pointer snippet
Only README.md is required. Everything else is copied into a project's .claude/ verbatim, so structure it exactly as Claude Code expects.
README.md
The README is two things at once: metadata (YAML frontmatter, see Frontmatter reference) and documentation (the markdown body). The body is what renders on the bundle's page. Write it for someone deciding whether to install: what it does, what it needs, how to wire the CLAUDE.md snippet.
skills/
Standard Claude Code skills: skills/<name>/SKILL.md with name and description frontmatter, plus any scripts or assets the skill uses. Keep generated caches out of the repo; any cache/ directory is ignored by the site and never zipped.
rules/
Markdown files with a paths: frontmatter glob. Rules state when and what constraints; they should point at a skill for the how.
hooks/ and settings.local.json
See Hooks and settings.
CLAUDE.md
A short block the user pastes into their own CLAUDE.md. Keep it to pointers: which skills to invoke, which rules exist, one or two hard constraints.
What the site ignores
- any
cache/directory - dotfiles and dot-directories (
.gitignore,.DS_Store,.hidden/) - files over 1 MB (listed in the tree as "too large", never served or zipped)
Binary files are listed but shown as a placeholder with a link to GitHub.