Skills¶
Every AI agent starts with general knowledge. Skills make it specific. When you load a skill, you inject domain expertise — best practices, decision frameworks, workflows — directly into the agent's context. The agent doesn't just know about Docker or Playwright; it knows how your team uses them.
What is a Skill?¶
A skill is a loadable knowledge package — a markdown file with YAML frontmatter that follows the Agent Skills specification. Think of it as a reference manual the agent consults on demand, not a tool it executes.
Unlike tools (which do things) and agents (which delegate things), skills teach things. They shape how the agent approaches problems.
---
name: react-testing
description: >
Use when writing or reviewing React component tests,
especially with async state changes or user interactions
---
# React Testing Patterns
## When to Use
- Writing tests for React components with state
- Testing async operations (API calls, timers)
- Debugging flaky test suites
## Core Pattern: Async State Changes
Always use `waitFor` instead of manual timeouts...
That's a complete skill. A markdown file. No code, no build step, no registration.
How It Works¶
Three-Level Progressive Disclosure¶
Skills use a token-efficient loading strategy. The agent peels back layers only as needed:
| Level | What Loads | Token Cost | When |
|---|---|---|---|
| 1 — Metadata | Name + description | ~100 tokens | Always visible via list/search |
| 2 — Content | Full markdown body | ~1–5k tokens | Loaded on demand via load_skill |
| 3 — References | Companion files | 0 until accessed | Read via skill_directory path |
A simple task ("take a screenshot") might need only Level 1–2. A complex task ("set up Playwright with auth state and parallel contexts") pulls Level 3 too.
The Visibility Hook¶
Before each request, Amplifier shows the agent a list of available skills — Level 1 metadata. The agent sees what expertise is available without consuming context. When a skill looks relevant, the agent loads it. That "Available skills" list in your session? That's the visibility hook at work.
Using Skills¶
The load_skill tool has four operations that mirror the progressive levels:
List all available skills.
[Tool: load_skill] list=True
→ 23 skills found: brainstorming, systematic-debugging, react-testing...
Search for skills related to testing.
[Tool: load_skill] search="testing"
→ react-testing, integration-testing-discipline, test-driven-development
What does react-testing cover?
[Tool: load_skill] info="react-testing"
→ name: react-testing, version: 1.0.0
description: Use when writing or reviewing React component tests...
The info operation gives you metadata without loading content — check
relevance before committing context tokens.
Load the react-testing skill and help me write tests for this form.
[Tool: load_skill] skill_name="react-testing"
→ Skill loaded (2,340 tokens). skill_directory: /path/to/react-testing/
Now the agent has the full skill in context. Its next response follows your
team's patterns instead of generic advice. And if the skill includes companion
files (examples, templates), the agent reads them via the returned
skill_directory — Level 3, zero tokens until accessed.
Where Skills Come From¶
Skills are discovered from multiple directories, in priority order:
| Location | Scope | Typical Use |
|---|---|---|
.amplifier/skills/ |
Workspace | Project-specific patterns |
~/.amplifier/skills/ |
User | Personal workflows across projects |
| Bundle skill sources | Distribution | Skills shipped with bundles |
First-match-wins: workspace copies override user copies, letting you customize shared skills per-project.
Creating Your Own¶
A skill is a directory with at least a SKILL.md file:
docker-multi-stage/
├── SKILL.md # Required: main content
├── examples/ # Optional: companion files
│ └── basic.dockerfile
└── templates/ # Optional: reusable templates
Writing the SKILL.md¶
---
name: docker-multi-stage
description: >
Use when building Dockerfiles, optimizing image sizes,
or debugging container build failures
---
# Docker Multi-Stage Builds
## Overview
Separate build dependencies from runtime for minimal production images.
## Core Pattern
```dockerfile
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci && npm run build
FROM node:20-slim
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]
```
## Common Mistakes
- Installing dev dependencies in production stage
- Using `latest` tag (breaks reproducibility)
- Running as root in production containers
Place it in .amplifier/skills/docker-multi-stage/SKILL.md for workspace scope
or ~/.amplifier/skills/docker-multi-stage/SKILL.md for personal use.
Descriptions Are Triggers¶
The description field determines whether the agent loads your skill. Write it as a trigger condition, not a summary:
# Good: tells the agent WHEN to load
description: Use when building Dockerfiles or debugging build failures
# Bad: summarizes WHAT the skill does
description: Teaches multi-stage Docker builds with layer caching
Start with "Use when..." and focus on symptoms and situations. If the description summarizes the workflow, the agent may follow the summary instead of reading the full skill.
Enhanced Features¶
Fork Execution¶
Skills with context: fork run as isolated subagents rather than loading into
your context:
---
name: skills-assist
description: Authoritative consultant for skills-related questions
context: fork
---
Fork skills are useful for heavyweight expertise that would consume too much of your main context, or skills that need conversational back-and-forth.
User-Invocable Skills (Power Skills)¶
Skills with disable-model-invocation: true are triggered by you via slash
commands, not loaded by the agent automatically:
---
name: code-review
description: Review changed code for quality and efficiency
disable-model-invocation: true
---
Invoke these with /code-review, /mass-change, /session-debug. They're
power skills for workflows you initiate deliberately.
Skill Sources in Bundles¶
Bundles can register skill directories so their skills appear in discovery:
bundle:
name: my-team-bundle
version: 1.0.0
skill_sources:
- path: ./skills
Skills vs Agents¶
This is the decision that trips people up:
| Skill | Agent | |
|---|---|---|
| Provides | Knowledge for the current agent | Independent worker with own context |
| Execution | Loads into your session | Spawns as separate sub-session |
| Context | Shares your context window | Has its own context window |
| Interaction | Shapes ongoing conversation | One-shot task → report |
| Best for | Patterns, standards, frameworks | Delegation, parallel work, isolation |
Use a skill when the agent needs to know how to approach something — testing patterns, coding standards, debugging frameworks. The knowledge stays in context and influences every subsequent response.
Use an agent when you need to delegate work — run an analysis, generate a report, perform a task in isolation.
Fork skills bridge the gap — discovered through the skill system but running as isolated subagents, they combine skill discovery with agent isolation.
Best Practices¶
Load on demand, not preemptively. Each loaded skill consumes context tokens.
Use info to check relevance first, and load only what the current task needs.
Keep skills focused. One domain per skill. "React Testing" is good; "Frontend Development" is too broad. Focused skills are easier to discover and provide more actionable guidance.
Write for triggers, not summaries. Your description answers "when should I load this?" not "what does this contain?" Start with "Use when..."
Use companion files for heavy reference. Keep SKILL.md concise (under 5k tokens). Move lengthy API references, examples, and templates into companion files that load only when needed.
Workspace overrides user. Keep personal defaults in ~/.amplifier/skills/
and project-specific overrides in .amplifier/skills/.
Key Takeaways¶
-
Skills are loadable expertise — markdown files that inject domain knowledge into agents on demand, following the Agent Skills specification.
-
Three levels of disclosure — metadata (~100 tokens) is always visible, content (~1–5k tokens) loads on demand, companions load only when accessed.
-
Discovery before loading — use
list,search, andinfoto find the right skill without spending context tokens. -
Location determines scope — workspace skills override user skills, enabling project-specific customization with personal defaults as fallback.
-
Skills teach, agents do — use skills for knowledge and patterns, agents for delegation and parallel work. Fork skills bridge the gap.
-
Descriptions are triggers — write "Use when..." conditions, not workflow summaries. The description determines whether the agent loads the skill.
Related Concepts¶
- Agents — Independent workers for task delegation
- Bundles — Packaging skills with tools, agents, and configuration
- Architecture — How skills fit into the Amplifier system