Overview
Skills are reusable prompt packages that live as directories — each containing aSKILL.md file with frontmatter and supporting files. There are two workflows:
- Author & publish — write skills in your repo, push them to Runlayer with
skills push(typically in CI) - Consume & install — add published skills to your project or global config with
skills add
Authoring skills
Directory structure
SKILL.md frontmatter
| Field | Required | Notes |
|---|---|---|
name | Yes | Human-readable label shown in the UI |
description | No | 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.
Publishing
Push skills from a local directory to the Runlayer API.| 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
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
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.
Installing
Add published skills from the Runlayer API to your local project or global config.| Flag | Description |
|---|---|
source | Optional when --all is used. Skill UUID or namespace (e.g. Org/Repo) |
--all | Install all accessible skills across namespaces |
--skill | Filter by skill name within a namespace |
--client, -c | Target editor client (default: claude_code) |
--global, -g | Install globally instead of project-level |
--dry-run, -n | Show what would be installed without writing files |
--secret, -s | API key. Also reads RUNLAYER_API_KEY env var |
--host, -H | Runlayer host URL. Also reads RUNLAYER_HOST env var |
Examples
--all sees the same skill name in multiple namespaces, install fails with an explicit error. Re-run with a namespace SOURCE (or UUID) to disambiguate.
Typical output:
File layout
Skills are written to two locations — a canonical directory and an editor-specific directory:| Scope | Canonical | Editor (Claude Code) | Editor (Cursor) |
|---|---|---|---|
| Project | .agents/skills/ | .claude/skills/ | .cursor/skills/ |
| Global | ~/.agents/skills/ | ~/.claude/skills/ | ~/.cursor/skills/ |
.runlayer/skill-lock.yml (or ~/.runlayer/skill-lock.yml for global) tracks installed skills and versions per client.
Symlink behavior
- Skill files are stored in the canonical directory (
.agents/skills/or~/.agents/skills/). - Editor directories (
.claude/skills/,.cursor/skills/, and global variants) contain symlinks to canonical skill directories.
runlayer skills remove --client <client>removes only that client’s symlink + lockfile entry.- Canonical files are kept while any other client still references the same skill.
- Canonical files are deleted only when the last client reference is removed.
Managing installed skills
List
| Flag | Description |
|---|---|
--client, -c | Target editor client (default: claude_code) |
--global, -g | List global skills |
list, update, and remove are scoped to the selected --client.
Update
Pull the latest versions of installed skills from the API.| Flag | Description |
|---|---|
--skill | Update a specific skill only |
--client, -c | Target editor client (default: claude_code) |
--global, -g | Update global skills |
--dry-run, -n | Show what would change without writing files |
--secret, -s | API key. Also reads RUNLAYER_API_KEY env var |
--host, -H | Runlayer host URL. Also reads RUNLAYER_HOST env var |
Remove
| Flag | Description |
|---|---|
name | Optional when --all is used. Skill name to remove |
--all | Remove all installed skills in the selected scope |
--yes | Skip confirmation prompt for --all |
--client, -c | Target editor client (default: claude_code) |
--global, -g | Remove from global skills |