<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/packaging-skills-into-a-plugin-lchn0zcng" -->

---
title: Packaging skills into a plugin | daily.dev
description: A practical walkthrough on packaging Claude Code skills into shareable plugins instead of copy-pasting SKILL.md files or relying on git submodules. Covers the...
canonical: https://daily.dev/posts/packaging-skills-into-a-plugin-lchn0zcng
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Packaging skills into a plugin | daily.dev
og:description: A practical walkthrough on packaging Claude Code skills into shareable plugins instead of copy-pasting SKILL.md files or relying on git submodules. Covers the...
og:url: https://daily.dev/posts/packaging-skills-into-a-plugin-lchn0zcng
og:image: https://api.daily.dev/og/posts/LcHN0ZCNg.png
og:image:alt: Packaging skills into a plugin
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Packaging skills into a plugin

**[The Art of Simplicity](https://daily.dev/sources/bartwullems)** · 6 min read · 1 upvotes · 0 comments

## Summary

A practical walkthrough on packaging Claude Code skills into shareable plugins instead of copy-pasting SKILL.md files or relying on git submodules. Covers the required folder layout (.claude-plugin/plugin.json plus skills/, commands/, agents/, hooks/), referencing internal files with the ${CLAUDE_PLUGIN_ROOT} environment variable, bundling multiple skills per plugin, and the different ways to load a plugin (--plugin-dir for local testing, marketplace install for teams). Also explains how to set up a plugin marketplace via marketplace.json, validate it with claude plugin validate, publish it via GitHub or GitLab, and keep it updated with /plugin marketplace update, including the difference between version-pinned updates and commit-tracked auto-updates.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://bartwullems.blogspot.com/2026/08/packaging-skills-into-plugin.html>

## Questions this post answers

### How do I package a Claude Code skill into a plugin so my team can install it without copy-pasting folders?

Create a plugin directory with a `.claude-plugin/plugin.json` manifest at the root and move the skill folder under `skills/skill-name/SKILL.md`. Claude Code auto-discovers any subdirectory under `skills/` containing a SKILL.md. Component folders like `commands/`, `agents/`, and `hooks/` must sit at the plugin root, not nested inside `.claude-plugin/`, or auto-discovery silently fails.

_Teams standardizing agentic workflows can find plugin packaging patterns like this on daily.dev._

### How do I reference other files inside a Claude Code plugin without hardcoding paths?

Use the environment variable CLAUDE_PLUGIN_ROOT instead of a hardcoded path, since plugins install in different locations depending on whether they came from a marketplace, a local folder, or npm. For example, a bash hook script should source "${CLAUDE_PLUGIN_ROOT}/lib/common.sh", and the same variable works inside hooks.json or .mcp.json command strings.

_Developers wiring up hooks and MCP servers in plugins can compare approaches on daily.dev._

### How do I publish and share a Claude Code plugin through a marketplace?

Create a git repository containing a `.claude-plugin/marketplace.json` file that lists plugin names, descriptions, and sources (either a relative path or a github repo reference), then push it to GitHub or another git host. Others add it with `/plugin marketplace add <repo-url>` and install a specific plugin with `/plugin install api-testing-plugin@my-plugins`; run `claude plugin validate .` from the marketplace root first to catch manifest or SKILL.md errors before sharing.

_Anyone distributing internal AI tooling can track marketplace setup steps like this on daily.dev._

## Similar posts on daily.dev

- [Packaging skills in a plugin, this time for GitHub Copilot CLI](https://daily.dev/posts/packaging-skills-in-a-plugin-this-time-for-github-copilot-cli-hjfsfk4hg) · The Art of Simplicity · 0 upvotes · 0 comments
- [Claude Code Plugin Marketplace & Skills Guide \(2026\)](https://daily.dev/posts/claude-code-plugin-marketplace-skills-guide-2026--n1mlq6ku6) · Alex CloudStar · 0 upvotes · 1 comments
- [How to Create Agent Skills: Tools, Testing, and Installation](https://daily.dev/posts/how-to-create-agent-skills-tools-testing-and-installation-cb8whscvm) · Foojay.io · 0 upvotes · 0 comments

---

Tags: [#devtools](https://daily.dev/tags/devtools), [#ai-coding](https://daily.dev/tags/ai-coding), [#claude-code](https://daily.dev/tags/claude-code)

[View this post on daily.dev](https://daily.dev/posts/packaging-skills-into-a-plugin-lchn0zcng)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Packaging skills into a plugin","url":"https://daily.dev/posts/packaging-skills-into-a-plugin-lchn0zcng","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/packaging-skills-into-a-plugin-lchn0zcng"},"datePublished":"2026-08-19T05:40:02.299Z","dateModified":"2026-09-13T19:45:08.250Z","description":"A practical walkthrough on packaging Claude Code skills into shareable plugins instead of copy-pasting SKILL.md files or relying on git submodules. Covers the...","image":"https://media.daily.dev/image/upload/s--HRgLpUt6--/f_auto/v1722860399/public/Placeholder%2003","thumbnailUrl":"https://media.daily.dev/image/upload/s--HRgLpUt6--/f_auto/v1722860399/public/Placeholder%2003","isAccessibleForFree":true,"articleSection":"The Art of Simplicity","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"The Art of Simplicity","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/52b68c70636d44f0901ae7cd107c9438","url":"https://daily.dev/sources/bartwullems"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/packaging-skills-into-a-plugin-lchn0zcng","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"devtools,ai-coding,claude-code","timeRequired":"PT6M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"The Art of Simplicity","item":"https://daily.dev/sources/bartwullems"},{"@type":"ListItem","position":3,"name":"Packaging skills into a plugin"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/packaging-skills-into-a-plugin-lchn0zcng#faq","mainEntity":[{"@type":"Question","name":"How do I package a Claude Code skill into a plugin so my team can install it without copy-pasting folders?","acceptedAnswer":{"@type":"Answer","text":"Create a plugin directory with a `.claude-plugin/plugin.json` manifest at the root and move the skill folder under `skills/skill-name/SKILL.md`. Claude Code auto-discovers any subdirectory under `skills/` containing a SKILL.md. Component folders like `commands/`, `agents/`, and `hooks/` must sit at the plugin root, not nested inside `.claude-plugin/`, or auto-discovery silently fails. Teams standardizing agentic workflows can find plugin packaging patterns like this on daily.dev."}},{"@type":"Question","name":"How do I reference other files inside a Claude Code plugin without hardcoding paths?","acceptedAnswer":{"@type":"Answer","text":"Use the environment variable CLAUDE_PLUGIN_ROOT instead of a hardcoded path, since plugins install in different locations depending on whether they came from a marketplace, a local folder, or npm. For example, a bash hook script should source \"${CLAUDE_PLUGIN_ROOT}/lib/common.sh\", and the same variable works inside hooks.json or .mcp.json command strings. Developers wiring up hooks and MCP servers in plugins can compare approaches on daily.dev."}},{"@type":"Question","name":"How do I publish and share a Claude Code plugin through a marketplace?","acceptedAnswer":{"@type":"Answer","text":"Create a git repository containing a `.claude-plugin/marketplace.json` file that lists plugin names, descriptions, and sources (either a relative path or a github repo reference), then push it to GitHub or another git host. Others add it with `/plugin marketplace add <repo-url>` and install a specific plugin with `/plugin install api-testing-plugin@my-plugins`; run `claude plugin validate .` from the marketplace root first to catch manifest or SKILL.md errors before sharing. Anyone distributing internal AI tooling can track marketplace setup steps like this on daily.dev."}}]}
```

