Musher Configuration
Environment variables, credential storage, and file locations for the musher CLI.
Environment Variables
| Variable | Description | Default |
|---|---|---|
MUSHER_API_KEY | API key for authentication (overrides stored credentials) | None |
MUSHER_API_URL | Base URL for the Musher API | https://api.musher.dev |
export MUSHER_API_KEY="mush_sk_abc123..."
musher publishCredential Storage
When you run musher login, your API key is stored securely. The CLI checks for
credentials in this order:
- Environment variable —
MUSHER_API_KEY(highest priority) - OS keyring — the system's native credential store
- Fallback file —
~/.config/musher/api-key
OS Keyring
The CLI uses your operating system's native credential manager:
| Platform | Keyring Backend |
|---|---|
| macOS | Keychain |
| Linux | secret-service (GNOME Keyring, KWallet) |
| Windows | Credential Manager |
The keyring service name is dev.musher.musher. If no keyring is available (e.g., in a
headless server), credentials fall back to the config file.
File Locations
| Purpose | Path |
|---|---|
| Configuration | ~/.config/musher/ |
| Logs | ~/.local/state/musher/logs/musher.log |
| Pack cache | ~/.cache/musher/pack/ |
| OCI store | ~/.local/share/musher/oci/ |
These follow the XDG Base Directory convention on Linux and macOS. On macOS, ~/.config is used rather than ~/Library.
musher.yaml Reference
The musher.yaml file defines a bundle and lives in your project directory — it is not a
global configuration file.
Top-Level Fields
| Field | Type | Required | Description |
|---|---|---|---|
kind | string | Yes | Always "bundle" |
namespace | string | Yes | Organization namespace to publish under |
slug | string | Yes | URL-safe bundle identifier (lowercase, hyphens) |
version | string | Yes | Version string for this release |
name | string | Yes | Human-readable display name |
description | string | No | Short description of the bundle |
keywords | string[] | No | Tags for discovery and search |
assets | object[] | Yes | Array of asset definitions |
Asset Fields
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Unique identifier within the bundle |
src | string | Yes | Source file path relative to musher.yaml |
kind | string | Yes | Asset type (e.g., skill, prompt, rule, config) |
installs | object[] | No | Install mappings for target runners |
Install Mapping Fields
| Field | Type | Required | Description |
|---|---|---|---|
harness | string | Yes | Target runner identifier |
path | string | Yes | Destination path in the runner's workspace |
Full Example
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.mdSupported Harnesses
| Harness | Description | Typical Install Paths |
|---|---|---|
claude-code | Claude Code (Anthropic's CLI) | .claude/skills/*/SKILL.md, .claude/rules/*.md, CLAUDE.md |
The harness value determines which runner knows how to install the asset. Each runner expects
files in specific locations — the path field in your install mapping should match the runner's
conventions.