skilo
A CLI tool for Agent Skills development.
Installation
Quick install (recommended)
|
From crates.io
From source
# Clone the repository
# Install using make
# Or directly with cargo
Using the Skilo Skill
Skilo includes a skill that teaches AI coding assistants how to use the CLI. Add it to your project to enable your assistant to create and validate skills:
# Install using skilo add
Or manually with curl:
Once installed, your AI assistant will be able to:
- Install skills from repositories using
skilo add - Create new skills using
skilo new - List installed skills with
skilo list - Detect installed agents with
skilo agents - Manage git cache with
skilo cache - Validate skills with
skilo lint - Format SKILL.md files with
skilo fmt - Extract skill metadata with
skilo read-properties - Generate agent prompts with
skilo to-prompt - Set up CI workflows for skill validation
Requirements
- Rust 1.92.0 (pinned in
rust-toolchain.toml)
Usage
Install skills from repositories
# Install all skills from a GitHub repository
# Install a specific skill by name
# Install multiple specific skills
# List available skills without installing
# Install from a specific branch
# Install from a specific tag
# Non-interactive installation (for CI)
# Install from a full URL
# Install from a direct skill path
# Install from SSH URL
# Install from local path
# Install to global skills directory
# Install to multiple agents
# Install to all detected agents
Skills are installed to .claude/skills/<skill-name>/ by default (project-level).
Use --global to install to ~/.claude/skills/ (user-level).
Create a new skill
# Create a skill with the default template (hello-world)
# Use a specific template
# Specify the script language
# Add a description and license
# Create a global skill
# Create a skill for a specific agent
Available templates:
hello-world(default) - A minimal working skill with a greeting scriptminimal- Bare-bones skill with only SKILL.mdfull- Complete skill with all optional directoriesscript-based- Skill focused on script execution
Supported languages: python, bash, javascript, typescript
Validate skills
# Lint a skill directory
# Lint all skills in current directory
# Strict mode (treat warnings as errors)
# Auto-fix simple issues
Format skills
# Format SKILL.md files (includes table alignment)
# Check formatting without modifying
# Show diff of changes
Formatting includes:
- YAML frontmatter normalization
- Markdown table column alignment
Run all checks
# Run lint + format check (ideal for CI)
List installed skills
# List project skills
# List skills from a specific project
# List global skills only
# List both project and global skills
# List skills for a specific agent
List detected agents
# Show detected agents with skill counts
# Show feature support matrix
Example output:
Project agents:
Claude Code .claude/skills/ (3 skills)
Cursor .cursor/skills/ (1 skill)
Global agents:
Claude Code ~/.claude/skills/ (2 skills)
Manage git cache
Skilo caches git repositories for faster repeated installs and offline usage:
# Show cache status and disk usage
# Show cache directory path
# Clean checkouts older than 30 days (keeps bare repos for fast re-checkout)
# Clean checkouts older than 7 days
# Remove entire cache (bare repos + checkouts)
Example output:
Cache directory: /home/user/.skilo/git
db/: 2 repositories, 1.2 MB
anthropics-skills
manuelmauro-moonbeam-skills
checkouts/: 3 checkouts, 4.5 MB
anthropics-skills-a1b2c3d (2 days ago)
manuelmauro-moonbeam-skills-0c331b1 (just now)
Total: 5.7 MB
Read skill properties
Extract skill metadata as JSON for programmatic use:
# Read properties from a single skill (outputs JSON object)
# Read properties from multiple skills (outputs JSON array)
# Read from multiple paths
Output includes: name, description, license, compatibility, metadata, allowed_tools, and path.
Generate agent prompts
Generate XML for use in agent system prompts:
# Generate XML for a single skill
# Generate XML for all skills in a directory
Example output:
my-skill
A brief description of what the skill does.
path/to/my-skill/SKILL.md
Output formats
All commands support multiple output formats:
Skill Structure
A valid skill follows this structure:
my-skill/
├── SKILL.md # Required: manifest with YAML frontmatter
├── scripts/ # Optional: executable scripts
├── references/ # Optional: additional documentation
└── assets/ # Optional: static resources
SKILL.md Format
name: my-skill
description: A brief description of what the skill does.
license: MIT
Detailed documentation goes here.
Configuration
Create a .skilorc.toml file for project-specific settings:
[]
= true
[]
= true # E001: Name format validation
= 64 # E002: Name max length (false to disable)
= true # E003: Name matches directory
= true # E004: Description not empty
= 1024 # E005: Description max length (false to disable)
= 500 # E006: Compatibility max length (false to disable)
= true # E009: Referenced files exist
= 500 # W001: Max body lines (false to disable)
= true # W002: Scripts are executable
= true # W003: Scripts have shebang
[]
= true
= 2
= true
[]
= "MIT"
= "hello-world"
= "python"
[]
= "claude" # See supported agents below
= true # Prompt before installing (false for CI)
= true # Validate skills before installing
Configuring Rules
Rules with thresholds accept true (default), false (disabled), or a number:
[]
= false # Disable for monorepos
= false # Disable for Windows
= 128 # Custom max name length
= false # Disable description length check
= 1000 # Custom max body lines
Supported Agents
The default_agent option supports the following AI coding assistants:
| Agent | Config Value | Project Path | Global Path |
|---|---|---|---|
| Claude Code | claude |
.claude/skills/ |
~/.claude/skills/ |
| OpenCode | open-code |
.opencode/skill/ |
~/.config/opencode/skill/ |
| Codex | codex |
.codex/skills/ |
~/.codex/skills/ |
| Cursor | cursor |
.cursor/skills/ |
~/.cursor/skills/ |
| Amp | amp |
.agents/skills/ |
~/.config/agents/skills/ |
| Kilo Code | kilo-code |
.kilocode/skills/ |
~/.kilocode/skills/ |
| Roo Code | roo-code |
.roo/skills/ |
~/.roo/skills/ |
| Goose | goose |
.goose/skills/ |
~/.config/goose/skills/ |
| Gemini CLI | gemini |
.gemini/skills/ |
~/.gemini/skills/ |
| Antigravity | antigravity |
.agent/skills/ |
~/.gemini/antigravity/skills/ |
| GitHub Copilot | copilot |
.github/skills/ |
~/.copilot/skills/ |
| Clawdbot | clawdbot |
skills/ |
~/.clawdbot/skills/ |
| Droid | droid |
.factory/skills/ |
~/.factory/skills/ |
| Windsurf | windsurf |
.windsurf/skills/ |
~/.codeium/windsurf/skills/ |
Environment Variables
| Variable | Description |
|---|---|
SKILO_CONFIG |
Path to configuration file |
SKILO_HOME |
Override skilo home directory (default: ~/.skilo/) |
SKILO_CACHE |
Override git cache directory (default: ~/.skilo/git/) |
SKILO_OFFLINE |
Set to 1 to use cached repositories only (no network) |
CI Integration
Add skilo validation to your GitHub Actions workflow:
# .github/workflows/skills.yml
name: Validate Skills
on:
push:
branches:
pull_request:
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install skilo
run: cargo install skilo@0.7.2
- name: Lint skills
run: skilo lint . --strict
- name: Check formatting
run: skilo fmt . --check
To upload results to GitHub's Security tab, use SARIF output:
- name: Run skilo check
run: skilo lint . --format sarif > results.sarif
continue-on-error: true
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Validation errors found |
| 2 | Invalid arguments or configuration |
| 3 | I/O error |
License
MIT OR Apache-2.0