packages/kilo-docs/pages/customize/skills.md
Kilo Code implements Agent Skills, a lightweight, open format for extending AI agent capabilities with specialized knowledge and workflows.
Agent Skills package domain expertise, new capabilities, and repeatable workflows that agents can use. At its core, a skill is a folder containing a SKILL.md file with metadata and instructions that tell an agent how to perform a specific task.
This approach keeps agents fast while giving them access to more context on demand. When a task matches a skill's description, the agent reads the full instructions into context and follows them—optionally loading referenced files or executing bundled code as needed.
SKILL.md file and understand what it does, making skills easy to audit and improveSkills can be:
code, architect)The workflow is:
SKILL.md file into context and follows the instructions.The agent (LLM) decides whether to use a skill based on the skill's description field. There's no keyword matching or semantic search—the agent evaluates your request against all available skill descriptions and determines if one "clearly and unambiguously applies."
This means:
Skills are loaded from multiple locations, allowing both personal skills and project-specific instructions.
{% tabs %} {% tab label="VSCode" %}
Global skills are located in the .kilo directory within your Home directory:
~/.kilo/skills/\Users\<yourUser>\.kilo\skills\~/.kilo/
└── skills/ # Generic skills (all modes)
├── my-skill/
│ └── SKILL.md
└── another-skill/
└── SKILL.md
Located in .kilo/skills/ within your project:
your-project/
└── .kilo/
└── skills/ # Generic skills for this project
└── project-conventions/
└── SKILL.md
For interoperability with other tools, Kilo Code also loads skills from:
.agents/skills/ — Open agent standard, loaded by default.claude/skills/ — Claude Code compatibility, loaded when Claude Code Compatibility is enabledYou can configure extra skill locations and remote skill URLs in your kilo.jsonc config (project or global):
{
"skills": {
"paths": ["/path/to/shared/skills", "~/my-skills", "relative/skills"],
"urls": ["https://example.com/.well-known/skills/"],
},
}
The skills.paths key accepts absolute paths, ~/ home-relative paths, or paths relative to the project root. The skills.urls key accepts URLs to remote skill directories that serve an index.json manifest.
The remote server must serve an index.json file at the URL path with the following structure:
{
"skills": [
{ "name": "skill-name", "files": ["SKILL.md", "references/file.md"] }
]
}
Each skill object contains:
name: The skill name (must match the directory name)files: Array of files to fetch for this skill (must include SKILL.md)Files are downloaded from {url}/{skill-name}/{file} paths.
{% /tab %} {% tab label="CLI" %}
Global skills are located in the .kilo directory within your Home directory:
~/.kilo/skills/\Users\<yourUser>\.kilo\skills\~/.kilo/
└── skills/ # Generic skills (all modes)
├── my-skill/
│ └── SKILL.md
└── another-skill/
└── SKILL.md
Located in .kilo/skills/ within your project:
your-project/
└── .kilo/
└── skills/ # Generic skills for this project
└── project-conventions/
└── SKILL.md
For interoperability with other tools, the CLI also loads skills from:
.claude/skills/ — Claude Code compatibility.agents/skills/ — Open agent standardYou can configure extra skill locations and remote skill URLs in your kilo.jsonc config (project or global):
{
"skills": {
"paths": ["/path/to/shared/skills", "~/my-skills", "relative/skills"],
"urls": ["https://example.com/.well-known/skills/"],
},
}
The skills.paths key accepts absolute paths, ~/ home-relative paths, or paths relative to the project root. The skills.urls key accepts URLs to remote skill directories that serve an index.json manifest.
The remote server must serve an index.json file at the URL path with the following structure:
{
"skills": [
{ "name": "skill-name", "files": ["SKILL.md", "references/file.md"] }
]
}
Each skill object contains:
name: The skill name (must match the directory name)files: Array of files to fetch for this skill (must include SKILL.md)Files are downloaded from {url}/{skill-name}/{file} paths.
{% /tab %} {% tab label="VSCode (Legacy)" %}
Global skills are located in the .kilocode directory within your Home directory.
~/.kilocode/skills/\Users\<yourUser>\.kilocode\~/.kilocode/
├── skills/ # Generic skills (all modes)
│ ├── my-skill/
│ │ └── SKILL.md
│ └── another-skill/
│ └── SKILL.md
├── skills-code/ # Code mode only
│ └── refactoring/
│ └── SKILL.md
└── skills-architect/ # Architect mode only
└── system-design/
└── SKILL.md
Located in .kilocode/skills/ within your project:
your-project/
└── .kilocode/
├── skills/ # Generic skills for this project
│ └── project-conventions/
│ └── SKILL.md
└── skills-code/ # Code mode skills for this project
└── linting-rules/
└── SKILL.md
{% /tab %} {% /tabs %}
{% tabs %} {% tab label="VSCode" %}
The new platform does not use mode-specific skill directories. All skills are loaded into a shared pool and the agent decides which skill to invoke based on the skill's description field and the current task context.
If you need a skill to only apply in certain situations, write a clear and specific description in the SKILL.md frontmatter so the agent knows when to use it.
{% /tab %} {% tab label="CLI" %}
The new platform does not use mode-specific skill directories. All skills are loaded into a shared pool and the agent decides which skill to invoke based on the skill's description field and the current task context.
If you need a skill to only apply in certain situations, write a clear and specific description in the SKILL.md frontmatter so the agent knows when to use it.
{% /tab %} {% tab label="VSCode (Legacy)" %}
To create a skill that only appears in a specific mode, place it in a skills-{mode-slug} directory:
# For Code mode only
mkdir -p ~/.kilocode/skills-code/typescript-patterns
# For Architect mode only
mkdir -p ~/.kilocode/skills-architect/microservices
The directory naming pattern is skills-{mode-slug} where {mode-slug} matches the mode's identifier (e.g., code, architect, ask, debug).
{% /tab %} {% /tabs %}
{% tabs %} {% tab label="VSCode" %}
When multiple skills share the same name, project-level skills (.kilo/skills/) take precedence over global skills (~/.kilo/skills/). Skills from compatibility directories (.claude/skills/, .agents/skills/) and additional configured paths are loaded alongside project and global skills.
{% /tab %} {% tab label="CLI" %}
When multiple skills share the same name, project-level skills (.kilo/skills/) take precedence over global skills (~/.kilo/skills/). Skills from compatibility directories (.claude/skills/, .agents/skills/) and additional configured paths are loaded alongside project and global skills.
{% /tab %} {% tab label="VSCode (Legacy)" %}
When multiple skills share the same name, Kilo Code uses these priority rules:
skills-code/ overrides the same skill in skills/ when in Code modeThis allows you to:
{% /tab %} {% /tabs %}
{% tabs %} {% tab label="VSCode" %}
Skills are discovered when a session starts. The CLI scans all configured skill directories and reads metadata (name, description, file path) for each skill.
kilo runSkills are re-scanned at the start of each new session. To pick up newly added or modified skills, start a new session.
{% /tab %} {% tab label="CLI" %}
Skills are discovered when a session starts. The CLI scans all configured skill directories and reads metadata (name, description, file path) for each skill.
kilo runSkills are re-scanned at the start of each new session. To pick up newly added or modified skills, start a new session.
{% /tab %} {% tab label="VSCode (Legacy)" %}
Skills are discovered when Kilo Code initializes:
Cmd+Shift+P → "Developer: Reload Window")Skills directories are monitored for changes to SKILL.md files. However, the most reliable way to pick up new skills is to reload VS or the Kilo Code extension.
Adding or modifying skills requires reloading VSCode for changes to take effect.
You can symlink skills directories to share skills across machines or from a central repository. When using symlinks, the skill's name field must match the symlink name, not the target directory name.
{% /tab %} {% /tabs %}
The SKILL.md file uses YAML frontmatter followed by Markdown content containing the instructions:
---
name: my-skill-name
description: A brief description of what this skill does and when to use it
---
# Instructions
Your detailed instructions for the AI agent go here.
The agent will read this content when it decides to use the skill based on
your request matching the description above.
## Example Usage
You can include examples, guidelines, code snippets, etc.
Per the Agent Skills specification:
| Field | Required | Description |
|---|---|---|
name | Yes | Max 64 characters. Lowercase letters, numbers, and hyphens only. Must not start or end with a hyphen. |
description | Yes | Max 1024 characters. Describes what the skill does and when to use it. |
license | No | License name or reference to a bundled license file |
compatibility | No | Environment requirements (intended product, system packages, network access, etc.) |
metadata | No | Arbitrary key-value mapping for additional metadata |
---
name: pdf-processing
description: Extract text and tables from PDF files, fill forms, merge documents.
license: Apache-2.0
metadata:
author: example-org
version: 1.0.0
---
## How to extract text
1. Use pdfplumber for text extraction...
## How to fill forms
...
In Kilo Code, the name field must match the parent directory name:
✅ Correct:
skills/
└── frontend-design/
└── SKILL.md # name: frontend-design
❌ Incorrect:
skills/
└── frontend-design/
└── SKILL.md # name: my-frontend-skill (doesn't match!)
While SKILL.md is the only required file, you can optionally include additional directories to support your skill:
my-skill/
├── SKILL.md # Required: instructions + metadata
├── scripts/ # Optional: executable code
├── references/ # Optional: documentation
└── assets/ # Optional: templates, resources
These additional files can be referenced from your skill's instructions, allowing the agent to read documentation, execute scripts, or use templates as needed.
{% tabs %} {% tab label="VSCode" %}
Create the skill directory:
mkdir -p ~/.kilo/skills/api-design
Create SKILL.md (see content below)
Start a new session to pick up the skill
{% /tab %} {% tab label="CLI" %}
Create the skill directory:
mkdir -p ~/.kilo/skills/api-design
Create SKILL.md (see content below)
Start a new session to pick up the skill
{% /tab %} {% tab label="VSCode (Legacy)" %}
Create the skill directory:
mkdir -p ~/.kilocode/skills/api-design
Create SKILL.md (see content below)
Reload VSCode to load the skill
The skill will now be available in all modes
{% /tab %} {% /tabs %}
Example SKILL.md:
---
name: api-design
description: REST API design best practices and conventions
---
# API Design Guidelines
When designing REST APIs, follow these conventions:
## URL Structure
- Use plural nouns for resources: `/users`, `/orders`
- Use kebab-case for multi-word resources: `/order-items`
- Nest related resources: `/users/{id}/orders`
## HTTP Methods
- GET: Retrieve resources
- POST: Create new resources
- PUT: Replace entire resource
- PATCH: Partial update
- DELETE: Remove resource
## Response Codes
- 200: Success
- 201: Created
- 400: Bad Request
- 404: Not Found
- 500: Server Error
{% tabs %} {% tab label="VSCode" %}
The new platform does not have a marketplace UI yet. You can find and share skills through:
skills.urls config key to load skills directly from URLs without manually downloading them{% /tab %} {% tab label="CLI" %}
The new platform does not have a marketplace UI yet. You can find and share skills through:
skills.urls config key to load skills directly from URLs without manually downloading them{% /tab %} {% tab label="VSCode (Legacy)" %}
You can discover and install community-created skills through:
{% /tab %} {% /tabs %}
{% tabs %} {% tab label="VSCode" %}
Verify frontmatter: Ensure name and description are present in the YAML frontmatter. The name does not need to match the directory name but should be unique across all loaded skills.
Start a new session: Skills are scanned at session start. Begin a new session to pick up changes.
Check file location: Ensure SKILL.md is directly inside the skill directory (e.g., .kilo/skills/my-skill/SKILL.md), not nested further.
Check config paths: If using skills.paths or skills.urls, verify the paths and URLs are correct in your kilo.jsonc.
{% /tab %} {% tab label="CLI" %}
Verify frontmatter: Ensure name and description are present in the YAML frontmatter. The name does not need to match the directory name but should be unique across all loaded skills.
Start a new session: Skills are scanned at session start. Begin a new session to pick up changes.
Check file location: Ensure SKILL.md is directly inside the skill directory (e.g., .kilo/skills/my-skill/SKILL.md), not nested further.
Check config paths: If using skills.paths or skills.urls, verify the paths and URLs are correct in your kilo.jsonc.
{% /tab %} {% tab label="VSCode (Legacy)" %}
Check the Output panel: Open View → Output → Select "Kilo Code" from dropdown. Look for skill-related errors.
Verify frontmatter: Ensure name exactly matches the directory name and description is present.
Reload VSCode: Skills are loaded at startup. Use Cmd+Shift+P → "Developer: Reload Window".
Check file location: Ensure SKILL.md is directly inside the skill directory, not nested further.
{% /tab %} {% /tabs %}
To confirm a skill is properly loaded and available to the agent, you can ask the agent directly. Simply send a message like:
The agent will respond with information about whether the skill is loaded and accessible. This is the most reliable way to verify that a skill is available after adding it or reloading VSCode.
If the agent confirms the skill is available, you're ready to use it. If not, check the troubleshooting steps above to identify and resolve the issue.
{% tabs %} {% tab label="VSCode" %}
When the agent uses a skill, it invokes the skill tool with the skill's name. Look for a skill tool call in the conversation to confirm a skill was loaded. The tool output includes the full skill content injected into context.
{% /tab %} {% tab label="CLI" %}
When the agent uses a skill, it invokes the skill tool with the skill's name. Look for a skill tool call in the conversation to confirm a skill was loaded. The tool output includes the full skill content injected into context.
{% /tab %} {% tab label="VSCode (Legacy)" %}
To see if a skill was actually used during a conversation, look for a read_file tool call in the chat that targets a SKILL.md file. When the agent decides to use a skill, it reads the full skill file into context—this appears as a file read operation in the conversation.
There's currently no dedicated UI indicator showing "Skill X was activated." The read_file call is the most reliable way to confirm a skill was used.
{% /tab %} {% /tabs %}
| Error | Cause | Solution |
|---|---|---|
| "missing required 'name' field" | No name in frontmatter | Add name: your-skill-name |
| "name doesn't match directory" | Mismatch between frontmatter and folder name | Make name match exactly |
| Skill not appearing | Wrong directory structure | Verify path follows skills/skill-name/SKILL.md |
Have you created a skill that others might find useful? Share it with the community by contributing to the Kilo Marketplace!
{% tabs %} {% tab label="VSCode" %}
While the new platform does not yet have a built-in marketplace UI, skills from the Kilo Marketplace repository can be manually downloaded into your .kilo/skills/ directory or loaded via skills.urls in config.
{% /tab %} {% tab label="CLI" %}
While the new platform does not yet have a built-in marketplace UI, skills from the Kilo Marketplace repository can be manually downloaded into your .kilo/skills/ directory or loaded via skills.urls in config.
{% /tab %} {% tab label="VSCode (Legacy)" %}
Skills submitted to the marketplace are browsable and installable directly from the Marketplace tab in the VSCode version.
{% /tab %} {% /tabs %}
SKILL.md file with proper frontmatterSKILL.md filename and description in the frontmatterFor more details on contributing to Kilo Code, see the Contributing Guide.