Agent Skills

Intent

Agent Skills is an open standard for extending AI agent capabilities with specialized knowledge and workflows.

Progressive disclosure. A skill reveals itself in layers: only its name and description sit in the context window by default; the instructions load once the task matches, and bundled files are read only when a step calls for them — so an idle skill costs almost nothing.

Problem

Imagine your AGENTS.md file is overloaded with instructions for working on your project. There, you documented how to work with networking, what design pattern to use, how to compile your project, how to test, deploy, and so on. As a result, the context window is loaded with thousands of unnecessary tokens at the beginning of each session.

Solution

Agent Skills allow you to organize capabilities and knowledge that are loaded progressively as the task requires them.

  • Do you need to deploy to production? Don't overload the context with instructions; create a Skill for that.
  • Do you need instructions on how your architecture works? Create a Skill for it.
  • Do you have a code template for specific patterns? A Skill could store them.

Real World Analogy

Imagine you hire an inexperienced construction worker who claims to be a fast learner and is open to any task, and you need him to lay the bricks in the bathroom. Would you ask him to read books about architecture, interior design, and the blueprints for the whole house? Of course not. Instead, you'd just instruct the new hire on how to lay the bricks in that specific spot. That's what an Agent Skill is: focused instructions.

Instead of handing the new worker architecture books and whole-house blueprints, a supervisor gives one focused instruction — how to lay the bricks here — and the worker gets straight to the task.

Anatomy of an Agent Skill

You can save the Agent Skills at user level —available for all your sessions— or at your project level —available for everyone using the same project.

User level Skills

~/.agents/skills/<skill-name>/

Project level Skills

.agents/skills/<skill-name>/

Directory Structure

<skill-name>/
├── SKILL.md          # Required: metadata + instructions
├── scripts/          # Optional: executable code
├── references/       # Optional: documentation
├── assets/           # Optional: templates, resources
└── ...               # Any additional files or directories
The standard structure works with every agent

SKILL.md Structure

---
name: skill-name
description: A description of what this skill does and when to use it.
---

# Title

Instructions

Use the directory name; dash-case is recommended.

Tips

  • Although the Skill is loaded only when needed, the metadata is always loaded at the beginning of every session, which is why short descriptions are recommended
  • Coding agents often create a script when performing a task; if the script can be reused, it is worth saving it in the proper Skill directory.

Example

In this example, we will see how to implement a Skill that follows the MVVM design pattern.

Directory

.agents/
└── skills/
    └── mvvm-pattern/
        ├── SKILL.md
        └── references/
            └── example.md

SKILL.md

.agents/skills/mvvm-pattern/SKILL.md
---
name: mvvm-pattern
description: Implements features following the MVVM architecture pattern used in this project. Use when creating a new screen, adding a view model, or refactoring a view that mixes UI and business logic.
---

# MVVM Pattern

This project uses MVVM to keep views free of business logic. Follow these conventions when building or modifying a screen.

## Layers

- **Model**: Plain data types and domain logic. No UIKit/SwiftUI imports.
- **ViewModel**: Owns state and exposes it to the view. Handles formatting, validation, and calls to services. No view references.
- **View**: Renders state and forwards user intent to the ViewModel. No business logic.

## Rules

1. A ViewModel never imports `UIKit` or `SwiftUI`.
2. Expose state through `@Observable`.
3. Inject dependencies (services, repositories) through the initializer, never instantiate them inside the ViewModel.
4. Views observe the ViewModel; they do not own or mutate model state directly.
5. Side effects (network, persistence) live in services the ViewModel calls, not in the View.

## Steps to add a new screen

1. Create the folder `Features/<FeatureName>/`.
2. Add `<FeatureName>Model.swift`, `<FeatureName>ViewModel.swift`, and `<FeatureName>View.swift`.
3. Use the template in `assets/ViewModel.template.swift` as a starting point.
4. Register dependencies in the initializer.

See `references/example.md` for a complete worked example.
The tool-agnostic version.

Pros and Cons

👍 Pros

  • +You can bundle instructions, scripts, templates, and references together as a single reusable unit.
  • +You can scale a project's knowledge by adding focused Skills rather than growing a single giant file.
  • +You get automatic activation, so the agent pulls in a Skill when the task calls for it.

👎 Cons

  • A poorly written `description` means the agent loads the wrong Skill, or none at all.
  • Native support across agents is still uneven, so the same Skill may behave differently in each one.

Relation with Other Context Providers

  • Agents' docs follow a classical documentation structure that humans use, while Skills use a structure optimized for sharing the same skills between multiple AI tools.