Orphus can create skills. Ask it to build one for your use case.
Skills
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.
Orphus implements the Agent Skills standard, warning about violations but remaining lenient.
Table of Contents
- Locations
- How Skills Work
- Skill Commands
- Bundled skills
- Skill Structure
- Frontmatter
- Validation
- Example
- Skill Repositories
Locations
Security: Skills can instruct the model to perform any action and may include executable code the model invokes. Review skill content before use.
Orphus loads skills from:
- Global:
~/.orphus/agent/skills/(legacy~/.atomic/agent/skills/and~/.pi/agent/skills/)~/.agents/skills/
- Project (only after the project is trusted):
.orphus/skills/(legacy.atomic/skills/and.pi/skills/).agents/skills/incwdand ancestor directories (up to git repo root, or filesystem root when not in a repo)
- Packages:
skills/directories,orphus.skills, or legacypi.skillsentries inpackage.json - Settings:
skillsarray with files or directories - CLI:
--skill <path>(repeatable, additive even with--no-skills)
Discovery rules:
- In
~/.orphus/agent/skills/and.orphus/skills/(plus the legacy.atomicand.piskill directories), 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
Disable discovery with --no-skills (explicit --skill paths still load).
Using Skills from Other Harnesses
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 .orphus/settings.json (legacy .atomic/settings.json and .pi/settings.json is also supported):
{
"skills": ["../.claude/skills"]
}
How Skills Work
- At startup, Orphus scans skill locations and extracts names and descriptions
- The system prompt includes available skills in XML format per the specification
- When a task matches, the agent uses
readto load the full SKILL.md (models don’t always do this; use prompting or/skill:nameto force it) - The agent follows the instructions, using relative paths to reference scripts and assets
This is progressive disclosure: only descriptions are always in context, full instructions load on-demand.
Built-in prompt engineering guidance
The bundled /skill:prompt-engineer creates, optimizes, evaluates, and troubleshoots prompts for GPT-5.6, Claude Opus 5, and Claude Fable 5. It teaches a delete-first workflow: preserve outcomes, safety, permissions, evidence, output, and stopping contracts while removing repetition, generic self-checks, and obsolete process scaffolding. For autonomous prompts it recommends a compact Role · Goal · Success criteria · Constraints · Tools · Output · Stop rules shape, context-dependent tool routing, explicit effort and response-length controls, restrained delegation, grounded progress claims, and documents-first/query-last ordering for long inputs.
The skill no longer recommends response prefilling, which returns an error on Claude 4.6 and later, or visible chain-of-thought as a primary technique. Use explicit output instructions, schemas, tools, or post-processing instead of prefilling. Request conclusions, citations, commands, and observed results rather than reconstructed private reasoning; such requests can trigger Claude Fable 5’s reasoning_extraction safeguard and force a model fallback.
Skill Commands
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
}
Bundled skills
Every session ships these. Only their one-line descriptions sit in context; a skill’s
body loads when a task matches it, or when you invoke it with /skill:<name>.
| Skill | Package | What it does |
|---|---|---|
subagent |
subagents | Delegate to builtin or custom subagents — single, chain, parallel, async — hand a cheaper child a bounded handoff, and route it cheapest-first. See Subagents. |
context-budget |
subagents | Measure what fills the context window with orphus inspect runtime, then rank what to cut. |
strategic-compact |
subagents | Compact at a phase boundary after writing state down — and reach for rooms, handoff, and file-only returns first. See Compaction. |
ponytail |
subagents | The laziest solution that works: YAGNI, reuse, stdlib, one line before fifty. /ponytail lite|full|ultra switches intensity. |
tdd |
subagents | Red-green-refactor, with tests that exercise public interfaces rather than internals. |
minting-clis |
subagents | When a task needs an API no tool serves: find or mint an agent-native CLI before hand-rolling curl or adding an MCP server. See below. |
liteparse |
subagents | Local, model-free extraction from PDF, DOCX, PPTX, XLSX, and image files via the lit CLI. |
playwright-cli |
subagents | Drive a real browser for end-to-end checks, screenshots, and proof videos. See Browser. |
tmux |
subagents | Drive tmux sessions, windows, and panes for interactive CLIs. See tmux. |
roundtable |
roundtable | Discussion etiquette for rooms: post conclusions not transcripts, digest before deciding, one room per concern. |
memory |
roundtable | Recall is evidence, not certainty: query before writing, verify against the repository, hand recall to a child as an asserted handoff. |
fleet-orchestration |
fleet | The protocol a /fleet run follows: route by difficulty down the price curve, converge deliberations, verify dispatch, a capped retry ladder, when to gate on the human. See Fleets. |
kie-ai-media |
fleet | Images, video, and audio through the Kie.ai API, for media-team members. |
intercom |
intercom | Session-to-session messaging and delegation between agents on one machine. See Intercom. |
research-codebase |
workflows | Scoped research that writes a grounded artifact for one subsystem or question. |
create-spec |
workflows | Turn research into an implementation-ready plan built around the program’s entrypoints. |
prompt-engineer |
workflows | Create, optimize, evaluate, or troubleshoot prompts for current frontier models. See above. |
impeccable |
workflows | Critique and refine frontend and product UI. |
skill-creator |
workflows | Create, improve, and benchmark skills. |
context-budget, strategic-compact, and memory are rewrites of skills from
ECC (MIT) against what Orphus enforces in code — the
runtime-bounded channels, handoff, verbatim compaction, the Dossier-backed memory
tool — rather than what ECC asks a model to remember. A skill from a community pack
shadows a bundled one of the same name (see Community skill packs).
Skill Structure
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
SKILL.md Format
---
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 && bun install
```
## Usage
```bash
./scripts/process.sh <input>
```
Use relative file paths from the skill directory (these are bundled skill files, not docs routes):
See the API reference at `references/api-reference.md` for details.
Keep authored instructions outcome-first and concise. State observable completion and stop conditions, give a short reason for material constraints, and use decision rules for judgment calls instead of ALWAYS/NEVER language. Put detailed or model-specific material in references/ so it loads only when needed. Do not ask models to reproduce private reasoning or repeatedly verify their own work; require evidence or validation results where correctness matters.
Frontmatter
Per the Agent Skills specification:
| Field | Required | Description |
|---|---|---|
name |
Yes | Max 64 chars. Lowercase a-z, 0-9, hyphens. Must match parent directory. |
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. |
Name Rules
- 1-64 characters
- Lowercase letters, numbers, hyphens only
- No leading/trailing hyphens
- No consecutive hyphens
- Must match parent directory name
Valid: pdf-processing, data-analysis, code-review
Invalid: PDF-Processing, -pdf, pdf--processing
Description Best Practices
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.
Validation
Orphus validates skills against the Agent Skills standard. Most issues produce warnings but still load the skill:
- Name doesn’t match parent directory
- Name exceeds 64 characters or contains invalid characters
- Name starts/ends with hyphen or has consecutive hyphens
- Description exceeds 1024 characters
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.
Example
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 && bun install
```
## Search
```bash
./search.js "query" # Basic search
./search.js "query" --content # Include page content
```
## Extract Page Content
```bash
./content.js https://example.com
```
Skill Repositories
- Anthropic Skills - Document processing (docx, pdf, pptx, xlsx), web development
- Pi Skills - Upstream skill examples for web search, browser automation, Google APIs, and transcription
Community skill packs
Any git repository containing SKILL.md files installs as a pack — nested
layouts are discovered, and skills load lazily like everything else:
orphus install https://github.com/mattpocock/skills # engineering workflow suite
orphus install https://github.com/mvanhorn/cli-printing-press # agent-native CLI factory
Precedence is user > builtin, and the startup banner reports name collisions
(installing mattpocock/skills shadows the builtin tdd, for example — filter
the pack’s skills list in settings if you want the builtin back). Skills
whose frontmatter sets disable-model-invocation: true stay out of the
model’s view by their author’s design and run only via /skill:<name>.
Packs that read repo configuration use the committed-markdown convention
under docs/agents/ (issue tracker, triage labels, domain docs) — the same
files /fleetsetup writes and fleet runs reference. One configuration serves
fleets and skills alike.
Creating skills — the standard
New skills follow the writing-for-agents method (Matt Pocock’s, shipped in the pack above and model-invocable: it surfaces whenever an agent creates or edits a skill). Its levers, briefly:
- Context pointers: a skill’s description is a pointer — its wording decides when the agent reaches the body. Front-load the leading word; one trigger per branch; cut identity the body already carries.
- The two loads: always-loaded material costs context every turn; documents nobody can find cost the human. Spend each deliberately.
- The information hierarchy: in-file steps → in-file reference → disclosed reference behind a pointer. Inline what every branch needs; push behind a pointer what only some branches reach.
Author with /skill:writing-for-agents loaded, and prefer deletion to
explanation.
Minting agent-native CLIs
Every session ships the minting-clis skill — it fires when a task needs an
API no installed tool serves, and carries the order of moves (community
library first, mint second, MCP only when a CLI cannot exist). The machinery
it points at: the
Printing Press pack mints
one: from an OpenAPI spec, a HAR capture, or a URL, it generates a
token-efficient Go CLI, an MCP server, and skills that teach its use. With
the pack installed and the generator built (go install github.com/mvanhorn/cli-printing-press/v4/cmd/cli-printing-press@latest),
run /skill:printing-press <app-name> and follow its flow; 45+ community
CLIs are pre-built in the
library.