metaskill-packaging

Plugin Building and Packaging

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "metaskill-packaging" with this command: npx skills add gigaverse-app/skillet/gigaverse-app-skillet-metaskill-packaging

Plugin Building and Packaging

Package your skills, agents, commands, and hooks as distributable plugins.

Plugin Structure

CRITICAL RULE: Only plugin.json goes inside .claude-plugin/ . All components go at the plugin ROOT:

my-plugin/ <- Plugin name = neutral noun ├── .claude-plugin/ │ └── plugin.json # ONLY this file here! ├── commands/ # Slash commands (.md) - imperative verbs ├── agents/ # Agent definitions (.md) - role nouns ├── skills/ # Skills (*/SKILL.md) - ending in -ing ├── hooks/ # Event handlers (hooks.json) ├── .mcp.json # MCP servers (optional) ├── .lsp.json # LSP servers (optional) └── README.md

❌ WRONG - components inside .claude-plugin/

.claude-plugin/ ├── plugin.json ├── commands/ ← NO! └── skills/ ← NO!

✅ CORRECT - components at plugin root

.claude-plugin/ └── plugin.json commands/ ← YES! skills/ ← YES!

plugin.json Manifest

Required fields:

{ "name": "my-plugin", "version": "1.0.0", "description": "What this plugin does" }

With recommended metadata:

{ "name": "my-plugin", "version": "1.0.0", "description": "What this plugin does", "author": { "name": "Your Name", "email": "you@example.com" }, "license": "MIT", "keywords": ["keyword1", "keyword2"], "repository": "https://github.com/user/repo", "homepage": "https://github.com/user/repo#readme" }

See references/plugin-json-schema.md for the complete field reference.

Naming Conventions

See /metaskill-naming for the full naming convention.

Quick reference:

Component Form Example

Plugin name Neutral noun metaskill, codeforge, datakit

Skills -ing (gerund) metaskill-authoring, metaskill-triggering

Agents Role noun metaskill-trigger-tester, metaskill-analyzer

Commands Imperative verb /metaskill-create, /quick-start

Plugin name = Common prefix of all atoms

✅ GOOD - neutral noun prefix, correct suffixes

metaskill/ ├── skills/ │ ├── metaskill-authoring/ # -ing │ └── metaskill-triggering/ # -ing ├── agents/ │ └── metaskill-trigger-tester.md # role noun └── commands/ └── quick-start.md # imperative

❌ BAD - verb-form prefix

skill-authoring/ ├── skills/ │ └── skill-authoring-trigger/ # prefix already -ing!

No type postfixes:

❌ BAD - redundant type postfix

skills/code-review-skill/ agents/tester-agent.md commands/lint-command.md

✅ GOOD - no type postfix

skills/code-reviewing/ agents/tester.md commands/lint.md

Dogfooding Approaches

Quick Iteration (Active Development)

claude --plugin-dir ./my-plugin

  • Loads plugin immediately

  • Restart Claude Code to pick up changes

  • Best for rapid iteration

Marketplace Testing (Pre-Release)

Add your repo as a local marketplace (once)

/plugin marketplace add /path/to/your/repo

Install the plugin

/plugin install your-repo@my-plugin

After changes, reinstall to test

/plugin uninstall your-repo@my-plugin /plugin install your-repo@my-plugin

  • Tests the full installation flow

  • Verifies the user experience

  • Use before releasing

Plugin Placement in Repos

Single Plugin at Repo Root

For a repo that IS the plugin:

my-plugin-repo/ ├── .claude-plugin/ │ └── plugin.json ├── skills/ │ └── my-plugin-authoring/ ├── agents/ └── README.md

Plugin Inside a Project (Dogfooding)

For internal tooling within a larger project:

my-project/ ├── src/ ├── tests/ ├── .claude/ # Project's Claude config │ └── settings.json └── plugins/ └── my-internal-plugin/ ├── .claude-plugin/ │ └── plugin.json └── skills/

Load with: claude --plugin-dir ./plugins/my-internal-plugin

Multiple Plugins in One Repo

Use marketplace.json to reference multiple plugins:

my-repo/ ├── .claude-plugin/ │ └── marketplace.json # References plugins below ├── plugins/ │ ├── plugin-a/ │ │ ├── .claude-plugin/ │ │ │ └── plugin.json │ │ └── skills/ │ └── plugin-b/ │ ├── .claude-plugin/ │ │ └── plugin.json │ └── agents/ └── README.md

marketplace.json (required fields):

{ "name": "my-marketplace", "owner": { "name": "Your Name" }, "plugins": [ { "name": "plugin-a", "source": "./plugins/plugin-a" }, { "name": "plugin-b", "source": "./plugins/plugin-b" } ] }

With full metadata:

{ "name": "my-marketplace", "owner": { "name": "Your Name", "email": "you@example.com" }, "metadata": { "description": "Description of your marketplace", "version": "1.0.0" }, "plugins": [ { "name": "plugin-a", "source": "./plugins/plugin-a", "description": "What plugin-a does", "version": "1.0.0", "author": { "name": "Your Name", "email": "you@example.com" }, "license": "MIT", "keywords": ["keyword1", "keyword2"], "category": "development" } ] }

See references/marketplace-json-schema.md for the complete field reference.

Users can then:

/plugin marketplace add /path/to/my-repo /plugin install my-marketplace@plugin-a

Internal vs External Plugins

Internal (Dogfooding within Repo)

Place in a plugins/ or tools/ directory:

my-project/ ├── plugins/ │ └── internal-tooling/ # For this project only │ ├── .claude-plugin/ │ │ └── plugin.json │ └── skills/

  • Not meant for distribution

  • Project-specific utilities

  • Load with --plugin-dir

External (Open Source / Distribution)

Option A: Dedicated plugin repo

my-plugin/ # Repo IS the plugin ├── .claude-plugin/ │ └── plugin.json └── skills/

Option B: Plugin marketplace repo

my-plugins/ # Repo contains multiple plugins ├── .claude-plugin/ │ └── marketplace.json └── plugins/ ├── plugin-a/ └── plugin-b/

Plugin Components Reference

Directory Contents Naming Pattern

.claude-plugin/

plugin.json only N/A

skills/

*/SKILL.md

prefix-action-ing

agents/

*.md

prefix-role-noun

commands/

*.md

imperative-verb

hooks/

hooks.json

N/A

.mcp.json

MCP servers N/A

.lsp.json

LSP servers N/A

Common Mistakes

Components in Wrong Location

❌ WRONG

.claude-plugin/ ├── plugin.json └── skills/ # NO! Skills outside .claude-plugin/

✅ CORRECT

.claude-plugin/ └── plugin.json skills/ # YES! At plugin root

Missing plugin.json

❌ WRONG - no manifest

my-plugin/ └── skills/

✅ CORRECT - has manifest

my-plugin/ ├── .claude-plugin/ │ └── plugin.json └── skills/

Verb-Form Prefix

❌ WRONG - prefix is already -ing

skill-authoring/ ├── skills/ │ └── skill-authoring-triggering/ # Double verb!

✅ CORRECT - neutral noun prefix

metaskill/ ├── skills/ │ └── metaskill-triggering/ # Noun + -ing

Related Skills

  • For naming conventions, see /metaskill-naming

  • For skill structure and writing, see /metaskill-authoring

  • For skill group patterns, see /metaskill-grouping

  • For trigger optimization, see /metaskill-triggering

  • To test if triggers work, use the metaskill-trigger-tester agent

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

metaskill-authoring

No summary provided by upstream source.

Repository SourceNeeds Review
General

metaskill-triggering

No summary provided by upstream source.

Repository SourceNeeds Review
General

metaskill-grouping

No summary provided by upstream source.

Repository SourceNeeds Review
General

metaskill-naming

No summary provided by upstream source.

Repository SourceNeeds Review