Create, structure, and publish skills through the skill-plugin-marketplace pipeline
Scanned 9/3/2026
Install to Claude Code
npx -y skills add systempromptio/systemprompt-template --skill systemprompt-admin-skill-creation --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Systemprompt Admin Skill Creation?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/systempromptio-systemprompt-admin-skill-creation)More formats (shields.io, HTML) on the badges page.
---
name: "Skill Creation"
description: "Create, structure, and publish skills through the skill-plugin-marketplace pipeline"
---
# Skill Creation
You create, structure, and publish skills for the systemprompt.io platform. Skills are the atomic units of knowledge that agents use to perform tasks. Every skill lives in `services/skills/` and flows through a pipeline to reach agents and the marketplace.
## The Skill-Plugin-Marketplace Pipeline
```
services/skills/{skill_id}/ <- 1. AUTHOR HERE (source of truth)
├── config.yaml Metadata: id, name, description, tags
└── index.md Content: frontmatter + markdown body
↓ referenced by
services/plugins/{plugin-id}/ <- 2. PLUGIN BUNDLES SKILLS
├── config.yaml Lists skill IDs in skills.include
└── .claude-plugin/plugin.json Claude Code plugin metadata
↓ exported via `systemprompt core plugins generate`
Plugin output bundle <- 3. EXPORTED AS SKILL.md
└── skills/{kebab-name}/SKILL.md Rebuilt: frontmatter (name + description) + body
↓ imported by marketplace users
Marketplace / User environment <- 4. CONSUMED BY AGENTS
├── config.yaml (recreated) Parsed from frontmatter
└── index.md (recreated) Parsed from body
```
**Key principle:** The skill itself always lives in `services/skills/{skill_id}/`. Plugins reference skill IDs -- they do not contain skill content. When a plugin is exported, skills are bundled into `SKILL.md` files. When imported, they are unpacked back into `config.yaml` + `index.md`.
## Skill Directory Structure
Every skill is a directory under `services/skills/` with exactly two files:
```
services/skills/{skill_id}/
├── config.yaml <- System metadata (id, name, enabled, tags, assigned_agents)
└── index.md <- Skill content (frontmatter + markdown instructions)
```
Optional subdirectories for complex skills:
```
services/skills/{skill_id}/
├── config.yaml
├── index.md
├── references/ <- Reference data (CSV, JSON, templates)
├── templates/ <- Output templates
└── examples/ <- Example inputs/outputs
```
## Creating a Skill
### Step 1: Create the directory and config
```bash
# CLI method (interactive)
systemprompt core skills create --name my_skill --display-name "My Skill" --description "What this skill does" --tags "tag1,tag2"
# Or create manually:
mkdir -p services/skills/my_skill
```
**`config.yaml` format:**
```yaml
id: my_skill
name: "My Skill"
description: "What this skill does in one sentence"
enabled: true
version: "1.0.0"
file: "index.md"
assigned_agents:
- agent_name
tags:
- tag1
- tag2
```
| Field | Required | Description |
|-------|----------|-------------|
| `id` | Yes | Unique identifier, `snake_case`, must match directory name |
| `name` | Yes | Human-readable display name |
| `description` | Yes | One-sentence description |
| `enabled` | Yes | Whether skill is active |
| `version` | Yes | Semantic version |
| `file` | Yes | Always `"index.md"` |
| `assigned_agents` | No | List of agent names that use this skill |
| `tags` | No | Search/categorization tags |
### Step 2: Write the index.md
The `index.md` must start with YAML frontmatter between `---` markers:
```markdown
---
name: "My Skill"
description: "What this skill does in one sentence"
---
# My Skill
Instructions for the agent go here...
```
**Frontmatter fields** (parsed by the export/import pipeline):
| Field | Required | Description |
|-------|----------|-------------|
| `name` | Yes | Skill name (used during marketplace import) |
| `description` | Yes | Skill description (used during marketplace import) |
The `name` and `description` in frontmatter must match the values in `config.yaml`. During plugin export, the system strips existing frontmatter from `index.md` and rebuilds it using values from `config.yaml`, so `config.yaml` is the source of truth for metadata. The frontmatter in `index.md` exists so that standalone `SKILL.md` files (after export) are self-describing.
**Body content** (after the closing `---`) is the full skill instruction set in markdown. Write it as if speaking directly to the agent: "You do X. Use Y command. Follow Z workflow."
### Step 3: Register the skill
Add the skill to `services/skills/config.yaml`:
```yaml
includes:
- my_skill/config.yaml
```
### Step 4: Assign to a plugin
Add the skill ID to a plugin's `config.yaml`:
```yaml
# services/plugins/{plugin-id}/config.yaml
plugin:
skills:
source: explicit
include:
- my_skill # Add here
```
### Step 5: Sync and validate
```bash
# Sync skill to database
systemprompt core skills sync --direction to-db
# Verify it loaded
systemprompt core skills show my_skill
# Validate the plugin
systemprompt core plugins validate {plugin-id}
# Generate plugin output (bundles skills into SKILL.md)
systemprompt core plugins generate --id {plugin-id}
```
## CLI Commands
| Command | Purpose |
|---------|---------|
| `systemprompt core skills list` | List all skills |
| `systemprompt core skills show <skill_id>` | Show skill details |
| `systemprompt core skills create` | Create a new skill (interactive) |
| `systemprompt core skills create --name <id> --display-name "Name" --description "desc"` | Create non-interactively |
| `systemprompt core skills edit <skill_id>` | Edit skill config |
| `systemprompt core skills edit <skill_id> --enable` | Enable a skill |
| `systemprompt core skills edit <skill_id> --disable` | Disable a skill |
| `systemprompt core skills edit <skill_id> --set key=value` | Set a specific field |
| `systemprompt core skills delete <skill_id>` | Delete a skill |
| `systemprompt core skills status` | Check DB sync status |
| `systemprompt core skills sync --direction to-db` | Push disk skills to database |
| `systemprompt core skills sync --direction to-disk` | Pull database skills to disk |
| `systemprompt core skills sync --dry-run` | Preview sync without changes |
| `systemprompt core plugins validate <plugin-id>` | Validate plugin (checks skill references) |
| `systemprompt core plugins generate --id <plugin-id>` | Generate plugin export (bundles SKILL.md) |
## How Skills Reach Agents
```
config.yaml: assigned_agents → Agent loads skill at startup
Plugin config: skills.include → Plugin bundles skill for distribution
Agent YAML: metadata.skills → Agent advertises skill in A2A card
```
An agent receives a skill when **both** of these are true:
1. The skill's `config.yaml` lists the agent in `assigned_agents`
2. The agent's YAML lists the skill ID in `metadata.skills`
## How Skills Reach the Marketplace
1. Skill exists in `services/skills/{id}/` with `config.yaml` + `index.md`
2. A plugin references the skill ID in its `skills.include` list
3. `systemprompt core plugins generate` bundles the skill as `SKILL.md` (frontmatter + body)
4. The plugin is uploaded to the marketplace
5. Users install the plugin, which imports skills back into `config.yaml` + `index.md`
## Naming Conventions
| Convention | Example |
|------------|---------|
| Skill ID | `snake_case` — `my_custom_skill` |
| Skill directory | Must match ID — `services/skills/my_custom_skill/` |
| Plugin ID | `kebab-case` — `my-plugin` |
| Agent name | `snake_case` — `my_agent` |
| Exported SKILL.md path | `skills/{kebab-case}/SKILL.md` — `skills/my-custom-skill/SKILL.md` |
Prefix skill IDs with a namespace when they belong to a specific plugin (e.g., `systemprompt_admin_*`, `sales_crm_*`).
## Common Tasks
### Create a Skill from Scratch
```bash
mkdir -p services/skills/my_skill
# Write config.yaml and index.md (see formats above)
# Add to services/skills/config.yaml includes
# Add to plugin config.yaml skills.include
systemprompt core skills sync --direction to-db
systemprompt core skills show my_skill
systemprompt core plugins validate my-plugin
```
### Move a Skill Between Plugins
Remove the skill ID from one plugin's `skills.include` and add it to another's. The skill directory does not move -- only the plugin reference changes.
```bash
# Edit both plugin configs, then validate
systemprompt core plugins validate old-plugin
systemprompt core plugins validate new-plugin
```
### Export a Plugin with Skills
```bash
systemprompt core plugins generate --id my-plugin
# Output goes to services/plugins/my-plugin/ (or --output-dir)
```
### Debug a Missing Skill
```bash
systemprompt core skills list
systemprompt core skills status
systemprompt core skills sync --dry-run
systemprompt core plugins validate my-plugin
```
## Important Notes
- Skill IDs must be unique across the entire platform
- The `id` in `config.yaml` must match the directory name exactly
- Frontmatter `name` and `description` should match `config.yaml` values
- During export, frontmatter is rebuilt from `config.yaml` -- `config.yaml` is the source of truth
- Skills are never duplicated into plugin directories -- plugins only reference IDs
- Auxiliary files in `references/`, `templates/`, `examples/` are included in plugin exports
- Always run `core skills sync` after creating or modifying skills on disk
- Always run `core plugins validate` after changing plugin skill references
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!