Skip to main content

Overview

Skills are self-contained directories that provide agents with domain-specific instructions, guidelines, and reference material. Each skill is defined by a SKILL.md file with YAML frontmatter and a markdown body. Agents first receive each configured skill’s name and description. When a description applies to the current request, the agent loads that skill’s full instructions for that execution. This keeps unrelated instructions out of the context while giving the agent the relevant expertise without code changes.
Skills are NOT tools. This is the most common point of confusion.
  • Skills inject instructions and context into the agent’s prompt. They tell the agent how to think about a problem.
  • Tools give the agent callable functions to take action (search, read files, call APIs).
You often need both: skills for expertise, tools for action. They are configured independently and complement each other.

Quick Start

1. Create a Skill with the CLI

The CLI is the supported way to create a skill — it scaffolds the directory layout and a valid SKILL.md for you:
Terminal
Inside a crew project (where pyproject.toml lives) this creates ./skills/code-review/; outside a project it creates ./code-review/ in the current directory (you can force that behavior with --no-project):

2. Write Your SKILL.md

3. Attach to an Agent

The agent now has both expertise (loaded from the relevant skill when needed) and capabilities (from the tools).

Skills + Tools: Working Together

Here are common patterns showing how skills and tools complement each other:

Pattern 1: Skills Only (Domain Expertise, No Actions Needed)

Use when the agent needs specific instructions but doesn’t need to call external services:

Pattern 2: Tools Only (Actions, No Special Expertise)

Use when the agent needs to take action but doesn’t need domain-specific instructions:

Pattern 3: Skills + Tools (Expertise AND Actions)

The most common real-world pattern. The skill provides how to approach the work; tools provide what the agent can do:

Pattern 4: Skills + MCPs

Skills work alongside MCP servers the same way they work with tools:

Pattern 5: Skills + Apps

Skills can guide how an agent uses platform integrations:

Creating, Publishing, and Installing Skills

Skills have a full lifecycle managed by the CLI: create them with crewai skill create, publish them with crewai skill publish — hand-rolling directories works for local experiments, but the CLI is the intended workflow and keeps your skill layout and frontmatter valid.

Create

Terminal
Scaffolds the directory (into ./skills/ inside a crew project) with a template SKILL.md, plus empty scripts/, references/, and assets/ directories. Edit SKILL.md to define the instructions.

Publish

Run from inside the skill directory (where SKILL.md is):
Terminal
Publishing reads name, description, and metadata.version from the SKILL.md frontmatter and pushes the skill to the CrewAI registry. Published skills are always scoped to your organization — like tools, only members of the publishing org can see and install them; there is no public visibility. Useful flags:

Install

Install a published skill by its @org/name reference:
Terminal
Inside a crew project the skill lands in ./skills/{name}/; outside a project it goes to the shared cache at ~/.crewai/skills/{org}/{name}/. Agents can also reference registry skills directly — they resolve from the local cache (or project skills/ directory) at runtime:

Pin a Version

An unpinned reference resolves to the newest published version, so publishing a new version changes every agent that references it. Append @<version> to pin one instead:
A pinned reference re-downloads unless the copy it finds is that exact version — a pin asks for a specific version rather than hinting at one. A cached skill is matched on the version recorded when it was installed, so it needs nothing in its frontmatter; a project-local copy under skills/ has no such record, so it is matched on metadata.version in its SKILL.md frontmatter. Pinning an unpublished version fails rather than falling back to the latest.
Agents from the Agent Repository are pinned automatically: the repository records a version alongside each skill it assigns, and the runtime applies those pins when it loads the agent.

List

Terminal
Shows installed skills from both the project ./skills/ directory and the global cache, with their versions and paths.

Crew-Level Skills

Skills can be set on a crew to apply to all agents:
Agent-level skills take priority — if the same skill is discovered at both levels, the agent’s version is used.

SKILL.md Format

Frontmatter Fields


Directory Structure

The directory name must match the name field in SKILL.md. The scripts/, references/, and assets/ directories are available on the skill’s path for agents that need to reference files directly.

Pre-loading Skills

For more control, you can discover and activate skills programmatically. Passing an activated skill makes its instructions always-on:

How Skills Are Loaded

Skills use progressive disclosure — only loading what’s needed at each stage: With skills=["./skills"], the directory is discovered at setup but the full instructions are not placed in every prompt. The agent reviews the metadata on each execution and loads only a skill that applies. The loaded instructions are scoped to that execution, so skills selected for earlier calls do not accumulate on the agent. Inline skill strings and Skill objects already activated with activate_skill() remain always-on. This provides an explicit opt-in when the instructions should apply to every request.

Skills vs Knowledge

Both skills and knowledge modify the agent’s prompt, but they serve different purposes: Rule of thumb: If the agent needs to follow a process, use a skill. If the agent needs to reference data, use knowledge.

Common Questions

It depends on your use case. Skills and tools are independent — you can use either, both, or neither.
  • Skills alone: When the agent needs expertise but no external actions (e.g., writing with style guidelines)
  • Tools alone: When the agent needs actions but no special methodology (e.g., simple web search)
  • Both: When the agent needs expertise AND actions (e.g., security audit with specific checklists AND ability to scan code)
No. The allowed-tools field in SKILL.md is experimental metadata only — it does not provision or inject any tools. You must always set tools separately via tools=[], mcps=[], or apps=[].
The agent-level skill takes priority. Skills are deduplicated by name — the agent’s skills are processed first, so if the same skill name appears at both levels, the agent’s version is used.
There’s a soft warning at 50,000 characters, but no hard limit. Keep skills focused and concise for best results — large prompt injections can dilute the agent’s attention.