docs/cli/tutorials/skills-getting-started.md
Agent Skills extend Gemini CLI with specialized expertise. In this tutorial, you'll learn how to create your first skill, bundle custom logic, and activate it during a session.
A skill is defined by a directory containing a SKILL.md file and
subdirectories containing reference materials or scripts used by the skill.
Let's create an API Auditor skill that runs a script to help you verify if
local or remote endpoints are responding correctly.
The first step is to create the necessary folders for your skill and its scripts.
macOS/Linux
mkdir -p .gemini/skills/api-auditor/scripts
Windows (PowerShell)
New-Item -ItemType Directory -Force -Path ".gemini\skills\api-auditor\scripts"
SKILL.md)The SKILL.md file defines the skill's purpose and instructions for the agent.
Create a file at .gemini/skills/api-auditor/SKILL.md. This tells the agent
when to use the skill and how to behave.
---
name: api-auditor
description:
Expertise in auditing and testing API endpoints. Use when the user asks to
"check", "test", or "audit" a URL or API.
---
# API Auditor Instructions
You act as a QA engineer specialized in API reliability. When this skill is
active, you MUST:
1. **Audit**: Use the bundled `scripts/audit.js` utility to check the status of
the provided URL.
2. **Report**: Analyze the output (status codes, latency) and explain any
failures in plain English.
3. **Secure**: Remind the user if they are testing a sensitive endpoint without
an `https://` protocol.
Skills can bundle resources like scripts to perform deterministic tasks. Create
a file at .gemini/skills/api-auditor/scripts/audit.js. This is the code the
agent will run.
// .gemini/skills/api-auditor/scripts/audit.js
const url = process.argv[2];
if (!url) {
console.error('Usage: node audit.js <url>');
process.exit(1);
}
console.log(`Auditing ${url}...`);
fetch(url, { method: 'HEAD' })
.then((r) => console.log(`Result: Success (Status ${r.status})`))
.catch((e) => console.error(`Result: Failed (${e.message})`));
Gemini CLI automatically discovers skills in the .gemini/skills directory (as
well as the .agents/skills alias).
To check if Gemini CLI found your new skill, use the /skills list command
within an interactive session:
/skills list
You should see api-auditor in the list of available skills. If you just added
the files, you can run /skills reload to refresh the list without restarting
the session.
If /skills list doesn't show your skill, check the following:
<workspace>/.gemini/skills/ are only loaded when the workspace folder is
marked as trusted. Run /trust and restart the session if needed. Skills
under ~/.gemini/skills/ (user scope) are not affected by trust.SKILL.md is discovered either at the root of
the skills directory (.gemini/skills/SKILL.md) or one directory deep
(.gemini/skills/<skill-name>/SKILL.md). The recommended layout uses a
subdirectory per skill so you can bundle scripts and other resources
alongside it. Files nested more than one directory deep are not discovered.SKILL.md. Capitalization matters on
case-sensitive filesystems (Linux, and macOS when configured as such):
skill.md or Skill.md will be ignored.name: and description:, and must be the
first thing in the file. A SKILL.md is silently skipped if either field
is missing, if the delimiters (--- on their own lines) are absent, or if
any text (an H1 title, a comment, even a blank line) appears before the
opening ---.name: field, not the directory name. If
your frontmatter says name: foo, the skill appears as foo in
/skills list regardless of what its parent directory is called. The
characters : \ / < > * ? " | in the name are replaced with -.Now that the skill is discovered, you can trigger its activation by asking a relevant question.
api-auditor
description and calls the activate_skill tool.run_shell_command tool to
execute your bundled script:
node .gemini/skills/api-auditor/scripts/audit.js https://google.comIf you don't want to create the files manually, you can use the built-in
skill-creator skill. Simply ask Gemini:
"Create a new skill called 'api-auditor' that tests if URLs are responding."
The skill-creator will handle the directory structure and boilerplate for you.
You can also manage skills using the gemini skills command from your terminal:
gemini skills install <url-or-path>gemini skills link <path> (useful for local development)gemini skills uninstall <name>