Skill
Reusable capability packages: SKILL.md, frontmatter, and opt-in subscription.
A Skill is a reusable capability package that teaches an agent how to do one thing well. It bundles prompt instructions (a SKILL.md file) with optional scripts, reference documents, and assets.
Directory Layout
~/.nebflow/skills/<name>/
├── SKILL.md # Required — frontmatter + instructions
├── scripts/ # Optional — executable code (Python, Bash, ...)
├── references/ # Optional — docs the agent reads on demand
└── assets/ # Optional — templates, fonts, output files
The directory name must match the name field in frontmatter.
SKILL.md Frontmatter
Only name and description are required. The description is the only text an agent sees in its skill catalog — it must explain both what the skill does and when to use it.
| Field | Required | Default | Description |
|-------|----------|---------|-------------|
| name | Yes | dir name | Skill identifier, must match directory name |
| description | Yes | — | One-line summary shown in the agent's skill catalog |
| when_to_use | No | — | Additional trigger context appended to the catalog entry |
| language | No | — | Preferred response language (zh, en) |
| audience | No | — | Team this skill belongs to — a real team name (e.g. nebflow-project), not a namespace |
| user-invocable | No | true | Whether users can invoke it via a /<name> slash command |
| disable-model-invocation | No | false | When true, hidden from agent catalogs (slash-command only) |
| version | No | — | Semantic version string |
| status | No | active | Lifecycle state: draft / active / deprecated |
| replaced_by | No | — | Successor skill, shown when this one is deprecated |
| allowed-tools | No | all | Comma-separated tool allowlist |
| arguments | No | — | Argument names (YAML block list or comma-separated) |
Body Structure
The Markdown body is the instruction set the agent follows. A proven structure:
---
name: example
description: An example skill — copy this folder to create your own
language: en
---
# Example Skill
## Purpose
Describe what this skill does in one sentence.
## Steps
1. Step one
2. Step two
## Rules
- Rule one
- Rule two
## Output
Describe the expected output format.
Opt-in Subscription
Skills are not injected automatically. An agent only sees a skill catalog when it declares skills in its agent.json:
{
"name": "Frontend",
"skills": ["visual-report", "deploy-website"]
}
- Empty (or missing)
skillsarray → no catalog at all, no global fallback - The wildcard
"*"subscribes to every skill in the library - Skills marked
disable-model-invocation: truestay out of catalogs even when declared - The meta-skill
skill-creatoris always appended when a catalog is produced, so every subscribed agent can discover how to create new skills
Each catalog entry carries name, description, and when_to_use — enough for the agent to decide relevance without loading the full content.
How an Agent Uses a Skill
- Catalog match — a task matches an entry in the agent's skill catalog
- Read on demand — the agent reads that skill's
SKILL.mdin full - Bundled resources — the
${SKILL_DIR}variable in instructions is replaced with the skill's absolute directory path, so scripts and references can be invoked directly:
python ${SKILL_DIR}/scripts/analyze.py --input data.csv
cat ${SKILL_DIR}/references/spec.md
This is progressive disclosure: cheap catalog entries are always present; the full instruction set is loaded only when relevant.
Compatibility
Skill files also load from project-level .nebflow/skills/ and .claude/skills/ directories, and legacy single-file commands (.nebflow/commands/, .claude/commands/) are treated as skills — user-level skills take priority on name conflicts. This keeps Nebflow compatible with the Claude Code skills ecosystem.
Examples
The built-in library at ~/.nebflow/skills/ ships with real examples to copy from: _example (starter template) and skill-creator (the meta-skill for authoring skills).