Skell is a friendly cross-platform tool for managing Agent Skills.
It lets you install, update, sync, and keep your SKILL.md files organized across projects. Skills can come from GitHub repositories or local folders on your computer.
| Component | Description |
|---|---|
CLI (skell) |
Cross-platform command-line tool for Windows, macOS, and Linux |
Desktop GUI (Skell.exe) |
Native desktop app built with Wails (Windows primary, macOS and Linux also supported) |
irm https://raw.githubusercontent.com/aminmesbahi/skell/main/install.ps1 | iexThis installs both skell.exe and the desktop GUI (skell-gui.exe) into your user programs directory, so you can launch the app with:
skell guiOr with winget (once the package is published):
winget install aminmesbahi.skellcurl -fsSL https://raw.githubusercontent.com/aminmesbahi/skell/main/install.sh | shOr with Homebrew:
brew tap aminmesbahi/tap
brew install skellGrab the latest binary for your platform from GitHub Releases:
| Platform | File |
|---|---|
| Windows (x64, CLI + GUI bundle) | skell_0.x.x_windows_amd64_bundle.zip |
| Windows (x64, CLI only) | skell_0.x.x_windows_amd64.zip |
| macOS (Apple Silicon) | skell_0.x.x_darwin_arm64.tar.gz |
| macOS (Intel) | skell_0.x.x_darwin_amd64.tar.gz |
| Linux (x64) | skell_0.x.x_linux_amd64.tar.gz |
| Linux (ARM64) | skell_0.x.x_linux_arm64.tar.gz |
Extract the archive and place the skell binary somewhere on your PATH. On Windows, the bundle archive also includes skell-gui.exe, which skell gui will launch when both files live in the same directory.
Download either the Windows bundle (skell_0.x.x_windows_amd64_bundle.zip) or the standalone GUI binary (Skell-windows-amd64.exe) from GitHub Releases.
If you use the standalone GUI binary, keep the skell CLI installed and on PATH.
skell selfupdateskell guiOn Windows, this looks for a GUI executable next to the skell binary.
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/aminmesbahi/skell/main/install.ps1))) -UninstallThis removes the skell.exe binary and cleans the install directory from your user PATH.
If present, it also removes skell-gui.exe.
curl -fsSL https://raw.githubusercontent.com/aminmesbahi/skell/main/install.sh | sh -s -- uninstallBy default this removes /usr/local/bin/skell. Set INSTALL_DIR to match a custom location:
INSTALL_DIR=~/.local/bin curl -fsSL https://raw.githubusercontent.com/aminmesbahi/skell/main/install.sh | sh -s -- uninstallDelete the skell (or skell.exe) binary from wherever you placed it and remove that directory from your PATH if it was added solely for skell.
There's also a native desktop app built with Wails. It wraps the CLI so you can browse skills, install them, sync projects, and manage everything visually without typing commands all the time.
Key things you can do in the GUI:
- See all your projects and what skills they have
- Browse and search the skill registry
- Install, upgrade, pin, or remove skills with a couple of clicks
- Run sync and doctor checks with nice previews
- Contribute improvements back to skill authors
Important: The GUI needs the skell CLI on your PATH to work. Install the CLI first.
cd gui
wails devcd gui
wails build
# Output: gui/build/bin/Skell.exe (Windows)Here's the typical flow:
# Create a skell.toml for your project
skell init --repo /path/to/my-repo
# Install a skill (this can also register a new source on the fly)
skell install ilspy-decompile \
--registry dotnet-skillz \
--registry-url https://github.com/davidfowl/dotnet-skillz \
--repo /path/to/my-repo
# See what you have
skell list --repo /path/to/my-repo
# Check if anything is outdated
skell status --repo /path/to/my-repo
# Upgrade everything that's not pinned
skell upgrade --repo /path/to/my-repoSkell understands all the common ways different AI tools store skills. When you run skell init, it tries to detect which layout your project already uses (or you can pick one with --target).
Supported layouts:
claude(default):.claude/skills/codex:.codex/skills/copilot:.github/skills/cursor:.cursor/skills/
The actual SKILL.md file inside each skill folder is the same no matter which layout you use.
Skell keeps two files in the target directory to stay organized:
skell.toml- your source of truth. It lists which sources and skills you want.skell.lock- records exactly what is installed right now (with content hashes so we can detect local changes).
You can see all supported targets with skell targets.
A "registry" in Skell is just a Git repo (or a local folder) that contains one or more skill directories, each with its own SKILL.md. We support both remote Git sources and local folders as first-class citizens.
Create skell.toml for a repository (scans for already-installed skills).
If the repo already has a known agent folder (.claude, .codex, .github,
.cursor), Skell uses it automatically; otherwise pass --target to choose,
or run interactively to be prompted.
skell init # auto-detect or prompt
skell init --target copilot # force VS Code / GitHub Copilot layout
skell init --target cursor --repo /path/to/repoInstall a skill from a registry.
# Registry already in skell.toml
skell install run-tests --registry dotnet-skills
# Bootstrap a new registry in one step
skell install ilspy-decompile \
--registry dotnet-skillz \
--registry-url https://github.com/davidfowl/dotnet-skillz
# Dry-run (no files written)
skell install run-tests --registry dotnet-skills --dry-run
# Target a specific repo or all repos under a directory
skell install run-tests --registry dotnet-skills --repo ./my-project
skell install run-tests --registry dotnet-skills --all-repos ~/projectsShow installed or available skills.
skell list # installed in current repo
skell list --repo /path/to/repo
skell list --all-repos ~/projects # all managed repos under a root
skell list --source registry # browse available skills from configured registries
skell list --json # JSON output (for CI)Compare local installs against the registry.
skell status
skell status --repo /path/to/repoStatus values: up-to-date · outdated · pinned · locally-modified · deprecated · missing-metadata
Upgrade all (or a single) non-pinned skill.
skell upgrade # upgrade all
skell upgrade run-tests # upgrade one
skell upgrade --dry-run # preview only
skell upgrade --force # also overwrite locally-modified skillsRemove a skill from a repository.
skell remove run-tests
skell remove run-tests --repo /path/to/repoLock a skill to its current version (skips upgrade).
skell pin ilspy-decompile --repo /path/to/repo
skell unpin ilspy-decompile --repo /path/to/repoApply skell.toml to a repository - installs missing skills, removes unlisted ones.
skell sync
skell sync --repo /path/to/repo
skell sync --dry-runSearch available skills across all configured registries.
skell search # list all
skell search maui # filter by name/description/tags
skell search --lifecycle stable
skell search --owner microsoft
skell search dotnet --lifecycle stable --owner microsoftShow full metadata for a skill.
skell info ilspy-decompile # local install info
skell info ilspy-decompile --repo /path/to/repo
skell info ilspy-decompile --source registry # registry lookup
skell info ilspy-decompile --jsonCheck a repository for manifest/lock/install problems.
skell doctor
skell doctor --repo /path/to/repo
skell doctor --all-repos ~/projects
skell doctor --jsonManage the local registry cache (~/.skell/cache).
skell cache status # show cached registries
skell cache refresh <alias> # re-fetch a registry
skell cache clear # delete the entire cacheUpgrade skell itself to the latest GitHub release.
skell selfupdate
skell selfupdate --check # check only, don't downloadAll commands that change files accept --repo (repeatable) and --all-repos:
# Install into two specific repos
skell install run-tests --registry dotnet-skills \
--repo ./api \
--repo ./worker
# Sync all repos found under ~/projects (git repos OR skell-managed folders)
skell sync --all-repos ~/projects
# Doctor check across an entire workspace
skell doctor --all-repos ~/projectsUse --global to install skills into ~/.skell/ (available everywhere):
skell install ilspy-decompile --registry dotnet-skillz \
--registry-url https://github.com/davidfowl/dotnet-skillz \
--global
skell list --global| Alias | URL | Contents |
|---|---|---|
dotnet-skillz |
https://github.com/davidfowl/dotnet-skillz |
.NET decompile, C# scripts, MCP tools |
dotnet-skills |
https://github.com/dotnet/skills |
Testing, MAUI, MSBuild, migrations, diagnostics |
Add them to your skell.toml:
[registries]
dotnet-skillz = "https://github.com/davidfowl/dotnet-skillz"
dotnet-skills = "https://github.com/dotnet/skills"Or let skell install --registry-url add them automatically on first use.
Every command supports --json for scripting and CI:
skell list --json
skell status --json
skell doctor --json
skell search maui --json<repo>/
└── .claude/
├── skell.toml ← manifest (commit this)
├── skell.lock ← lock file (commit this)
└── skills/
├── ilspy-decompile/
│ └── SKILL.md
└── run-tests/
└── SKILL.md
git clone https://github.com/aminmesbahi/skell
cd skell
go build -o skell . # Linux/macOS
go build -o skell.exe . # WindowsOr build all platforms at once:
./build-all.sh v0.1.0 # Linux/macOS
.\build-all.ps1 -Version v0.1.0 # Windows PowerShellPrerequisites: Go 1.22+, Wails v2 CLI, Bun
cd gui
wails build # production build → gui/build/bin/Skell.exe
wails dev # live-reload dev mode- System Design Document (docs/design.md) - architecture and data model
- Changelog
- Contributing guide
Thanks for using Skell. If you run into anything weird or have ideas, feel free to open an issue. We're always happy to improve it.