Creating Bundles
Package skills, prompts, and configs into a versioned bundle that anyone can install with a single command.
Prerequisites
- musher CLI installed
- A Musher account and API key (see Getting Started)
- At least one text file to package (a skill, prompt, config, or rule)
Authenticate
Log in
Run musher login and enter your API key when prompted:
musher loginVerify your identity
Confirm your credentials and see which namespaces you can publish to:
musher whoamiUser: [email protected]
Namespaces: acme (owner), acme-labs (member)Initialize Your Bundle
Create a project directory
mkdir code-review-kit && cd code-review-kitScaffold the bundle definition
Run musher init to generate a musher.yaml with default fields:
musher initReview the generated file
Open musher.yaml and fill in your bundle details:
kind: bundle
namespace: acme
slug: code-review-kit
version: 1.0.0
name: Code Review Kit
description: Skills, prompts, and rules for consistent code reviews.
keywords:
- code-review
- skills
assets: []Understanding musher.yaml
The musher.yaml file defines your bundle's identity and its assets. Here's what each field
does:
Top-Level Fields
| Field | Required | Description |
|---|---|---|
kind | Yes | Always bundle |
namespace | Yes | Your organization's namespace (must match a writable namespace from musher whoami) |
slug | Yes | URL-safe identifier for the bundle (lowercase, hyphens) |
version | Yes | Version string for this release |
name | Yes | Human-readable display name |
description | No | Short description of what the bundle provides |
keywords | No | List of tags for discovery |
assets | Yes | Array of asset definitions (see below) |
Asset Fields
| Field | Required | Description |
|---|---|---|
id | Yes | Unique identifier for the asset within this bundle |
src | Yes | Path to the source file, relative to musher.yaml |
kind | Yes | Asset type (e.g., skill, prompt, rule, config) |
installs | No | Array of install mappings that control where runners place the file |
Install Mapping Fields
| Field | Required | Description |
|---|---|---|
harness | Yes | Target runner (e.g., claude-code) |
path | Yes | Destination path within the runner's workspace |
Add Your Assets
Build out your bundle by creating asset files and referencing them in musher.yaml.
This example creates a code review kit with three assets.
Create a code review skill
---
name: Code Review
description: Perform thorough, constructive code reviews.
---
Review the provided code changes. For each file:
1. Check for bugs, security issues, and performance problems.
2. Verify error handling covers edge cases.
3. Suggest improvements to readability and maintainability.
4. Note what's done well — call out good patterns.
Be constructive. Explain *why* something should change, not just *what*.Create a PR summary prompt
Summarize this pull request in 2-3 sentences.
Focus on what changed and why, not implementation details.
Include the risk level: low, medium, or high.Create review rules
# Code Review Standards
- All public functions must have error handling.
- No hardcoded secrets or credentials.
- Test coverage required for new business logic.
- Breaking API changes require a migration guide.Update musher.yaml with all assets
kind: bundle
namespace: acme
slug: code-review-kit
version: 1.0.0
name: Code Review Kit
description: Skills, prompts, and rules for consistent code reviews.
keywords:
- code-review
- skills
assets:
- id: code-review-skill
src: skills/code-review/SKILL.md
kind: skill
installs:
- harness: claude-code
path: .claude/skills/code-review/SKILL.md
- id: pr-summary-prompt
src: prompts/pr-summary.md
kind: prompt
installs:
- harness: claude-code
path: .claude/rules/pr-summary.md
- id: review-standards
src: rules/review-standards.md
kind: rule
installs:
- harness: claude-code
path: .claude/rules/review-standards.mdThe installs mappings tell the consumer's runner where to place each file. In this
example, the skill goes into .claude/skills/ while the prompt and rule go into .claude/rules/ — matching Claude Code's expected file structure.
Validate
Run validation
Check that your bundle definition and asset files are valid:
musher validate✓ musher.yaml is valid
✓ 3 assets found
✓ All source files exist
✓ Bundle is ready to publishFix any errors
If validation fails, check for these common issues:
| Error | Fix |
|---|---|
| Source file not found | Check that the src path matches your file location |
| Invalid asset kind | Use a recognized kind like skill, prompt, rule, or config |
| Missing required field | Ensure kind, namespace, slug, version, and name are set |
| Duplicate asset ID | Each asset id must be unique within the bundle |
Project Structure
Your completed bundle should look like this:
code-review-kit/
├── musher.yaml
├── skills/
│ └── code-review/
│ └── SKILL.md
├── prompts/
│ └── pr-summary.md
└── rules/
└── review-standards.mdCommon Patterns
A minimal bundle with just one skill:
kind: bundle
namespace: acme
slug: sql-reviewer
version: 1.0.0
name: SQL Reviewer
description: Review SQL queries for performance and safety.
assets:
- id: sql-review-skill
src: SKILL.md
kind: skill
installs:
- harness: claude-code
path: .claude/skills/sql-review/SKILL.md