packages/coding-agent/docs/skills.md
pi can create skills. Ask it to build one for your use case.
Skills are self-contained capability packages that the agent loads on-demand. A skill provides specialized workflows, setup instructions, helper scripts, and reference documentation for specific tasks.
Pi implements the Agent Skills standard, warning about most violations but remaining lenient. Pi allows skill names to differ from their parent directory even though the standard disallows it; that rule is suboptimal for shared skill directories used across multiple agent harnesses.
Security: Skills can instruct the model to perform any action and may include executable code the model invokes. Review skill content before use.
Pi loads skills from:
~/.pi/agent/skills/~/.agents/skills/.pi/skills/.agents/skills/ in cwd and ancestor directories (up to git repo root, or filesystem root when not in a repo)skills/ directories or pi.skills entries in package.jsonskills array with files or directories--skill <path> (repeatable, additive even with --no-skills)Discovery rules:
~/.pi/agent/skills/ and .pi/skills/, direct root .md files are discovered as individual skillsSKILL.md are discovered recursively~/.agents/skills/ and project .agents/skills/, root .md files are ignoredDisable discovery with --no-skills (explicit --skill paths still load).
To use skills from Claude Code or OpenAI Codex, add their directories to settings:
{
"skills": [
"~/.claude/skills",
"~/.codex/skills"
]
}
For project-level Claude Code skills, add to .pi/settings.json:
{
"skills": ["../.claude/skills"]
}
read to load the full SKILL.md (models don't always do this; use prompting or /skill:name to force it)This is progressive disclosure: only descriptions are always in context, full instructions load on-demand.
Skills register as /skill:name commands:
/skill:brave-search # Load and execute the skill
/skill:pdf-tools extract # Load skill with arguments
Arguments after the command are appended to the skill content as User: <args>.
Toggle skill commands via /settings in interactive mode or in settings.json:
{
"enableSkillCommands": true
}
A skill is a directory with a SKILL.md file. Everything else is freeform.
my-skill/
├── SKILL.md # Required: frontmatter + instructions
├── scripts/ # Helper scripts
│ └── process.sh
├── references/ # Detailed docs loaded on-demand
│ └── api-reference.md
└── assets/
└── template.json
---
name: my-skill
description: What this skill does and when to use it. Be specific.
---
# My Skill
## Setup
Run once before first use:
```bash
cd /path/to/skill && npm install
```
## Usage
```bash
./scripts/process.sh <input>
```
Use relative paths from the skill directory:
See [the reference guide](references/REFERENCE.md) for details.
Per the Agent Skills specification:
| Field | Required | Description |
|---|---|---|
name | Yes | Max 64 chars. Lowercase a-z, 0-9, hyphens. Unlike the standard, Pi does not require this to match the parent directory because that standard requirement is suboptimal for shared skill directories. |
description | Yes | Max 1024 chars. What the skill does and when to use it. |
license | No | License name or reference to bundled file. |
compatibility | No | Max 500 chars. Environment requirements. |
metadata | No | Arbitrary key-value mapping. |
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 use /skill:name. |
Valid: pdf-processing, data-analysis, code-review
Invalid: PDF-Processing, -pdf, pdf--processing
The description determines when the agent loads the skill. Be specific.
Good:
description: Extracts text and tables from PDF files, fills PDF forms, and merges multiple PDFs. Use when working with PDF documents.
Poor:
description: Helps with PDFs.
Pi validates skills against the Agent Skills standard. Most issues produce warnings but still load the skill:
Unknown frontmatter fields are ignored.
Exception: Skills with missing description are not loaded.
Name collisions (same name from different locations) warn and keep the first skill found.
brave-search/
├── SKILL.md
├── search.js
└── content.js
SKILL.md:
---
name: brave-search
description: Web search and content extraction via Brave Search API. Use for searching documentation, facts, or any web content.
---
# Brave Search
## Setup
```bash
cd /path/to/brave-search && npm install
```
## Search
```bash
./search.js "query" # Basic search
./search.js "query" --content # Include page content
```
## Extract Page Content
```bash
./content.js https://example.com
```