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 cached metadata for a bundle version
musher.cache_clean()  # reclaim expired entries and unreferenced blobs
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.5.tar.gz (203.2 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.5-py3-none-any.whl (30.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: musher_sdk-0.3.5.tar.gz
  • Upload date:
  • Size: 203.2 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.5.tar.gz
Algorithm Hash digest
SHA256 d1491a77ae6dd86a341330abcf2afb5e3bbd71ba3dd74f36639e7695136a2592
MD5 01d6dd4ba97b065cce32a5f0bb8217d9
BLAKE2b-256 7a4822e91e168b98881292d35e71d0651cf978545649a29400a49b6a163a724b

See more details on using hashes here.

Provenance

The following attestation bundles were made for musher_sdk-0.3.5.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.5-py3-none-any.whl.

File metadata

  • Download URL: musher_sdk-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 30.4 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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 d79179dec874dea0b94be54a14411720b1c766105f202244d6ba72e1fd5a75d2
MD5 af6e6e574b384d90ccfb112618db67af
BLAKE2b-256 f3b59defe78877185d935691785f65c37138cdb77c24a4f975ee910329678ba2

See more details on using hashes here.

Provenance

The following attestation bundles were made for musher_sdk-0.3.5-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