Skip to content

Feature: Native Claude Code marketplace support #3

Description

@back1ply

Summary

The skills in this repo follow a solid structure (SKILL.md + optional reference files), but there's no native way to install them into Claude Code's skill system. Adding a proper marketplace manifest would allow discovery and installation directly through Claude Code's built-in plugin commands — no manual file copying or git cloning required.


How Claude Code's skill/plugin system works

Claude Code loads skills from plugin directories under ~/.claude/plugins/<marketplace-name>/. Each skill gets invoked via the Skill tool — the agent sees all skill description: fields in its context and calls Skill with the skill name when relevant.

Installation works in two steps:

/plugin install marketplace https://github.com/mattpocock/skills
/plugin install tdd
/plugin install write-a-skill

First you register the marketplace (points Claude Code at this repo), then you install individual skills from it by name. No manual file management needed.


How the repo needs to be structured

A marketplace directory layout:

~/.claude/plugins/
└── mattpocock-skills/
    ├── .claude-plugin/
    │   └── marketplace.json   ← index of all skills
    ├── tdd/
    │   └── SKILL.md
    ├── write-a-skill/
    │   └── SKILL.md
    └── ...

.claude-plugin/marketplace.json

{
  "name": "mattpocock-skills",
  "description": "Production-grade Claude Code skills by Matt Pocock",
  "version": "1.0.0",
  "skills": [
    {
      "name": "tdd",
      "description": "Test-driven development workflow for Claude Code. Use when implementing features or fixing bugs.",
      "path": "tdd/SKILL.md"
    },
    {
      "name": "write-a-skill",
      "description": "Create new agent skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, or build a new skill.",
      "path": "write-a-skill/SKILL.md"
    }
    // ... rest of skills
  ]
}

The description field can be pulled directly from each SKILL.md frontmatter — a small build script keeps them in sync automatically:

// scripts/gen-marketplace.js
import { readdirSync, readFileSync, writeFileSync } from 'fs'
import { join } from 'path'

const skills = readdirSync('.', { withFileTypes: true })
  .filter(d => d.isDirectory() && !d.name.startsWith('.'))
  .map(d => {
    const content = readFileSync(join(d.name, 'SKILL.md'), 'utf8')
    const name = content.match(/^name:\s*(.+)$/m)?.[1]?.trim()
    const description = content.match(/^description:\s*(.+)$/m)?.[1]?.trim()
    return { name, description, path: `${d.name}/SKILL.md` }
  })

writeFileSync('.claude-plugin/marketplace.json', JSON.stringify({
  name: 'mattpocock-skills',
  skills
}, null, 2))

Run it as part of CI so marketplace.json never drifts from the SKILL.md frontmatter.


User experience after this change

# Register the marketplace once
/plugin install marketplace https://github.com/mattpocock/skills

# Browse available skills
/plugin list mattpocock-skills

# Install what you want
/plugin install tdd
/plugin install write-a-prd

Restart Claude Code and the skills are live — no terminal, no git, no file copying.


Why this matters

  • Zero friction: install skills without leaving the Claude Code interface
  • Selective install: users pick only the skills they want, keeping context lean
  • Auto-discovery: Claude Code reads the manifest and surfaces skill descriptions automatically
  • Community sharing: clear format for contributors to follow when adding new skills
  • Version pinning: users can pin to a tag for stable skill sets

Happy to submit a PR with the manifest + build script if you're open to it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions