Skip to main content

Python SDK for the Musher bundle distribution platform

Project description

Musher Python SDK

CI PyPI

Python SDK for the Musher bundle distribution platform. Pull versioned AI agent asset bundles — prompts, tool definitions, agent specs, and skills — into your Python applications.

Installation

Requires Python 3.13+.

pip install musher-sdk

Authentication

Set your API key as an environment variable:

export MUSHER_API_KEY="msk_..."

The SDK resolves credentials automatically in this order:

  1. MUSHER_API_KEY environment variable
  2. OS keyring (musher/{hostname})
  3. Credential file (<data_dir>/credentials/<host_id>/api-key, must be 0600)

You can also pass a token directly:

musher.configure(token="msk_...")

Quick Start

import musher

bundle = musher.pull("myorg/my-bundle:1.0.0")

for f in bundle.files():
    print(f"{f.logical_path}: {len(f.text())} chars")

Async

import musher

async with musher.AsyncClient() as client:
    bundle = await client.pull("myorg/my-bundle:1.0.0")

Sync Client

import musher

with musher.Client() as client:
    bundle = client.pull("myorg/my-bundle:1.0.0")

    result = client.resolve("myorg/my-bundle:1.0.0")

    asset = client.fetch_asset(
        "prompts/system.md",
        namespace="myorg",
        slug="my-bundle",
        version="1.0.0",
    )

Working with Bundles

Bundles provide typed accessors for each resource type:

bundle = musher.pull("myorg/my-bundle:1.0.0")

# Prompts
prompt = bundle.prompt("system")
print(prompt.text())

# Skills
for skill in bundle.skills():
    print(skill.name, skill.description)

# Toolsets and agent specs
toolset = bundle.toolset("search-tools")
data = toolset.parse_json()

spec = bundle.agent_spec("reviewer")
config = spec.parse_json()

Filter to a subset of resources with select():

selection = bundle.select(skills=["code-review"], prompts=["system"])

Framework Integrations

The SDK integrates with popular AI agent frameworks:

  • Claude — export bundles as Claude plugins or install skills to .claude/skills/ (examples)
  • OpenAI Agents — export skills as local directories or inline zips for the OpenAI shell tool (examples)
  • PydanticAI — use bundle prompts as agent instructions with structured output (examples)

Configuration

Registry URL

export MUSHER_API_URL="https://custom-registry.example.com"

Default: https://api.musher.dev

Programmatic Configuration

from pathlib import Path
import musher

musher.configure(
    token="msk_...",
    registry_url="https://custom-registry.example.com",
    cache_dir=Path("/tmp/musher-cache"),
    verify_checksums=True,
    timeout=30.0,
    max_retries=2,
)

All parameters are optional — omitted values are auto-discovered.

See Configuration for the full reference (directory layout, credential chain, cache structure, TTL defaults).

Cache

The SDK uses a content-addressable disk cache:

  • Blobs stored by SHA-256 hash, shared across registries
  • Manifests and refs partitioned by registry hostname
  • Manifests TTL: 24h; refs TTL: 5min
  • cache_clean() removes expired entries and garbage-collects unreferenced blobs

Cache management functions are available at the module level and on the Client:

import musher

info = musher.cache_info()  # cache statistics
musher.cache_remove("myorg/my-bundle:1.0.0")  # remove a specific bundle
musher.cache_clean()  # remove expired entries
musher.cache_clear()  # remove all cached data
path = musher.cache_path()  # cache directory path

Features

  • pull() / pull_async() — resolve + fetch all assets + verify checksums
  • resolve() / resolve_async() — resolve bundle references to manifests
  • fetch_asset() — fetch individual assets by logical path
  • Sync (Client) and async (AsyncClient) clients
  • Typed handles: SkillHandle, PromptHandle, ToolsetHandle, AgentSpecHandle
  • bundle.select() — filter resources by type
  • Content-addressable cache with TTL and garbage collection
  • Cache management: cache_info(), cache_remove(), cache_clear(), cache_clean(), cache_path()
  • export_claude_plugin() / install_claude_skills() — Claude integration
  • export_openai_local_skill() / export_openai_inline_skill() — OpenAI Agents integration

Examples

See the examples/ directory for runnable code samples covering basic usage, Claude, OpenAI Agents, and PydanticAI integrations.

License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

musher_sdk-0.3.2.tar.gz (201.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

musher_sdk-0.3.2-py3-none-any.whl (29.7 kB view details)

Uploaded Python 3

File details

Details for the file musher_sdk-0.3.2.tar.gz.

File metadata

  • Download URL: musher_sdk-0.3.2.tar.gz
  • Upload date:
  • Size: 201.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for musher_sdk-0.3.2.tar.gz
Algorithm Hash digest
SHA256 b981335e582845e377407d1783250b602e141abffa6b2c418bb44f641bdb0ae3
MD5 23635d60aeb631562529990e0a9f7a13
BLAKE2b-256 ca5cfebabef19ec7b157ba0e8b68d509e60b42337664530db3565faf17d61b48

See more details on using hashes here.

Provenance

The following attestation bundles were made for musher_sdk-0.3.2.tar.gz:

Publisher: release.yml on musher-dev/python-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file musher_sdk-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: musher_sdk-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 29.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for musher_sdk-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 684b5b2c3c5d06fbb6c9216580c6eea88ef337ee1d5556591c591820cedadcea
MD5 b93483c3135e4b7feb8731f09987ae92
BLAKE2b-256 187d791cc145cbcc5d01c58858f141feeed2f5d6e6c76dfc1c45dcec0fe646d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for musher_sdk-0.3.2-py3-none-any.whl:

Publisher: release.yml on musher-dev/python-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page