Overview
Skills are prompt packages that live as directories in your repo. Each skill has aSKILL.md file with frontmatter defining its name and description. The CLI discovers these directories and pushes them to the Runlayer API, keeping remote state in sync with your repo.
This is designed to run in CI. Commit a skill, merge to main, and it’s live.
Skill directory structure
SKILL.md frontmatter
name(required) — human-readable label shown in the UIdescription(optional) — short summary, max 1024 characters
skills/ticket-triage) is the stable sync key. Renaming the directory creates a new skill; changing name in frontmatter updates the display name.
Supported file types: .md, .txt, .sh, .py, .js, .ts.
CLI usage
| Flag | Description |
|---|---|
--namespace, -N | Required. Groups skills by repo (e.g. myorg/my-repo) |
--host, -H | Runlayer host URL. Also reads RUNLAYER_HOST env var |
--secret, -s | API key. Also reads RUNLAYER_API_KEY env var |
--dry-run, -n | Show what would change without making API calls |
--prune | Delete remote skills whose directories no longer exist locally |
PATH | Root directory to scan. Defaults to . |
Examples
GitHub Actions
RUNLAYER_HOST and RUNLAYER_API_KEY as repository secrets.
The paths filter ensures the workflow only runs when files under skills/ change. The --prune flag removes skills from Runlayer when their directory is deleted from the repo.
How push works
- CLI walks the directory tree looking for
SKILL.mdfiles - Each
SKILL.mdmust havenamein its YAML frontmatter (directories without it are skipped) - The directory path relative to root becomes the skill’s
path— this is the stable key used to match local and remote skills - For each discovered skill:
- New path — creates the skill and uploads all files
- Existing path — compares name, description, and file contents; updates only what changed
- Remote-only path (with
--prune) — deletes the skill from Runlayer