Skills are self-contained capability packages that provide specialized workflows, setup instructions, helper scripts, and reference documentation for specific tasks. Pi loads them on demand — either automatically when the task matches the skill’s description, or explicitly viaDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/earendil-works/pi/llms.txt
Use this file to discover all available pages before exploring further.
/skill:name.
Pi implements the Agent Skills standard, warning about violations but remaining lenient.
How skills work
Discovery at startup
Pi scans skill locations and extracts names and descriptions. Only descriptions are kept in context — full content loads on demand.
System prompt listing
Available skills appear in the system prompt in XML format per the Agent Skills specification. The agent reads them to decide when a skill is relevant.
On-demand loading
When a task matches, the agent uses the
read tool to load the full SKILL.md. Use /skill:name to force it explicitly.Skill locations
Pi auto-discovers skills from these locations:- Global
- Project
- Packages
- In
~/.pi/agent/skills/and.pi/skills/, direct root.mdfiles are discovered as individual skills. - In all skill locations, directories containing
SKILL.mdare discovered recursively. - In
~/.agents/skills/and project.agents/skills/, root.mdfiles are ignored.
--no-skills. Explicit --skill <path> flags still load even when discovery is disabled.
You can also point Pi at skills from other tools in settings.json:
SKILL.md format
A skill is a directory with aSKILL.md file. Everything else is freeform — scripts, reference docs, assets.
SKILL.md file uses YAML frontmatter followed by instructions in Markdown:
Frontmatter fields
| Field | Required | Description |
|---|---|---|
name | Yes | 1–64 chars. Lowercase letters, numbers, hyphens. Must match parent directory name. |
description | Yes | Up to 1024 chars. What the skill does and when to use it. Skills without a description are not loaded. |
license | No | License name or reference to bundled file. |
compatibility | No | Up to 500 chars. Environment requirements. |
allowed-tools | No | Space-delimited list of pre-approved tools (experimental). |
disable-model-invocation | No | When true, skill is hidden from system prompt. Users must invoke via /skill:name. |
a-z, 0-9, hyphens; no leading/trailing hyphens; no consecutive hyphens; must match the parent directory name.
Description best practice: be specific about when to use the skill. The description is what the agent reads to decide whether to load it.
- Good description
- Poor description
Using skills
Slash command
Type/skill:name in the editor to load and execute a skill:
User: <args>.
Toggle skill commands via /settings or in settings.json:
Auto-loading
Pi includes skill descriptions in the system prompt. When a task matches the description, the agent loads the fullSKILL.md automatically. Write descriptions that clearly state the conditions under which the skill applies.
Sharing skills
Package skills in a Pi package to share them via npm or git. Add askills/ directory to your package and list it in the pi manifest:
Validation
Pi validates skills against the Agent Skills standard. Most issues produce warnings but still load the skill. Name collisions (same name from different locations) warn and keep the first skill found.Related
Extensions
TypeScript modules for custom tools, commands, and UI.
Pi packages
Bundle and share skills via npm or git.
Prompt templates
Reusable prompts that expand with a slash command.