A declarative package manager for Claude Code skills, inspired by vim-plug and Vundle.
Note: This tool is specifically designed for Claude Code's skill system. It manages skills installed to
~/.claude/skills/(global) and.claude/skills/(project).
This is an alpha version of a personal project.
- Experimental software - expect bugs and breaking changes
- While this tool is designed to be non-destructive (it only creates symlinks and copies files), use at your own risk
- No warranty is provided - always review changes before committing
- Declarative Configuration - Define skills in
skillset.yaml - Lock File Management - Reproducible installs with
skillset.lock - Multi-Scope Support - Global (
~/.claude/skills/) and project (.claude/skills/) scopes - Multiple Sources - Install from local filesystem or GitHub
- Validation - Verify SKILL.md structure and metadata
- Symlink Support - Local skills are symlinked for easy development
# Using pipx (recommended)
pipx install git+https://github.com/hawkymisc/asma.git
# Or using pip
pip install git+https://github.com/hawkymisc/asma.git# 1. Initialize skillset.yaml
asma init
# 2. Edit skillset.yaml to add your skills
# 3. Install skills
asma install
# 4. Verify installation
asma list
asma checkCreate a skillset.yaml in your project root:
# Global skills (installed to ~/.claude/skills/)
global:
- name: my-skill
source: local:~/my-skills/my-skill
- name: github-skill
source: github:owner/repo
version: v1.0.0
# Project skills (installed to .claude/skills/)
project:
- name: team-skill
source: local:./skills/team-skillLocal filesystem:
- name: my-skill
source: local:~/skills/my-skill # Absolute path
source: local:./skills/my-skill # Relative pathGitHub:
- name: skill-name
source: github:owner/repo # Repository root
source: github:owner/repo/subdir # Subdirectory
version: v1.0.0 # Tag or "latest"
ref: main # Branch or commit SHASet GITHUB_TOKEN environment variable for private repositories.
| Command | Description |
|---|---|
asma init |
Create skillset.yaml template |
asma add |
Add a skill from source to skillset.yaml |
asma install |
Install skills from skillset.yaml |
asma list |
List installed skills |
asma check |
Verify installed skills exist |
asma context |
Show skill metadata (SKILL.md frontmatter) |
asma version |
Show asma version |
asma add github:owner/repo/path # Add skill from GitHub
asma add local:~/my-skills/skill # Add skill from local path
asma add github:owner/repo --global # Add to global scope
asma add github:owner/repo --name custom # Use custom name
asma add github:owner/repo --force # Overwrite existingasma install # Install all skills
asma install --scope global # Install only global skills
asma install --force # Force reinstall
asma install --file custom.yaml # Use alternative config fileasma list # List project-local skills in .claude/skills and .codex/skills
asma list --scope project # Show project scope only (phase 1 default behavior)
asma list --scope global # Kept for compatibility (currently no global scan)asma check # Check all skills
asma check --checksum # Also verify checksums
asma check --quiet # Only show errorsasma context # Show all skill metadata
asma context my-skill # Show specific skill
asma context --format yaml # Output as YAML
asma context --format json # Output as JSONA valid skill must contain SKILL.md with frontmatter:
---
name: my-skill
description: A helpful skill for doing X
---
# My Skill
Instructions for Claude Code...Requirements:
name: lowercase letters, numbers, and hyphens onlydescription: non-empty string
skillset.lock is auto-generated when you run asma install. It records exact versions and checksums for reproducible installations.
Best Practices:
- Commit
skillset.lockto version control - Run
asma installafter pulling changes - Don't edit manually
# Clone and install in development mode
git clone https://github.com/hawkymisc/asma.git
cd asma
pip install -e ".[dev]"
# Run tests
pytestSee CONTRIBUTING.md for development guidelines.
MIT