Skip to content
Musher Docs

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:

bash
musher login

Verify your identity

Confirm your credentials and see which namespaces you can publish to:

bash
musher whoami
Output
User:       [email protected]
Namespaces: acme (owner), acme-labs (member)

Initialize Your Bundle

Create a project directory

bash
mkdir code-review-kit && cd code-review-kit

Scaffold the bundle definition

Run musher init to generate a musher.yaml with default fields:

bash
musher init

Review the generated file

Open musher.yaml and fill in your bundle details:

musher.yaml
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

FieldRequiredDescription
kindYesAlways bundle
namespaceYesYour organization's namespace (must match a writable namespace from musher whoami)
slugYesURL-safe identifier for the bundle (lowercase, hyphens)
versionYesVersion string for this release
nameYesHuman-readable display name
descriptionNoShort description of what the bundle provides
keywordsNoList of tags for discovery
assetsYesArray of asset definitions (see below)

Asset Fields

FieldRequiredDescription
idYesUnique identifier for the asset within this bundle
srcYesPath to the source file, relative to musher.yaml
kindYesAsset type (e.g., skill, prompt, rule, config)
installsNoArray of install mappings that control where runners place the file

Install Mapping Fields

FieldRequiredDescription
harnessYesTarget runner (e.g., claude-code)
pathYesDestination 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

skills/code-review/SKILL.md
---
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

prompts/pr-summary.md
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

rules/review-standards.md
# 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

musher.yaml
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.md

The 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:

bash
musher validate
Output
✓ musher.yaml is valid
✓ 3 assets found
✓ All source files exist
✓ Bundle is ready to publish

Fix any errors

If validation fails, check for these common issues:

ErrorFix
Source file not foundCheck that the src path matches your file location
Invalid asset kindUse a recognized kind like skill, prompt, rule, or config
Missing required fieldEnsure kind, namespace, slug, version, and name are set
Duplicate asset IDEach asset id must be unique within the bundle

Project Structure

Your completed bundle should look like this:

Directory layout
code-review-kit/
├── musher.yaml
├── skills/
│   └── code-review/
│       └── SKILL.md
├── prompts/
│   └── pr-summary.md
└── rules/
    └── review-standards.md

Common Patterns

A minimal bundle with just one skill:

musher.yaml
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

Next Steps