Write an agent skill in five minutes

Anyone with even a cursory interest in AI has no doubt seen references to agents and agent skills. Addy Osmani, for example, has written extensively about skills and created a project providing production-grade engineering skills for coding agents.1 At the time of writing, it has 95,000 stars on GitHub. Cloudflare and MongoDB, to name just two companies, have published their own catalogs of skills. MongoDB describes the goal of the agent skills that it published to help “AI coding agents perform common MongoDB tasks efficiently.”2

From all this, one can surmise that agent skills are worth knowing about. What follows is an introduction. If you want to follow along, you’ll need Visual Studio Code and a coding agent. I used Mistral’s Vibe. The file format of an agent skill is portable; the directory each coding agent looks in is not. So if you use a different coding agent, check its documentation to find out where it loads skills from and adjust the paths below.

What is an agent skill?

For a human, a skill is the ability to do something, such as playing the guitar. It is often the result of practice and learning. For an agent, a skill is, at a minimum, a reusable set of instructions in a Markdown file. The file tells the agent how you want it to do a specific task or respond to a prompt, so that you do not have to repeat your instructions each time. In other words, the agent acquires a skill.

Here, I’ll describe how to configure Vibe to respond when you prompt it with good morning. This is a frivolous example, but like the “Hello World” examples in many programming guides, it shows how to put the foundations of a skill in place. You create a Markdown file named SKILL.md with a layout conforming to the specification published in the Agent Skills standard at agentskills.io.

An agent without a skill

Typing good morning into agents like Claude Code and Vibe leads to roughly the same response from each. Claude Code responded with:

Good morning!

Vibe went one better and offered to help, in addition to reciprocating the greeting:

Good morning! How can I help you today?

But what if I want the agent to remind me about coffee and tell me a joke every time I prompt it with good morning? Let’s do that in the next few steps.

Create the skill

  1. In a terminal window in Visual Studio Code, create a project folder named agent-skill-qs and navigate to it. Then run the following commands, which create the directory structure and open a new skill file (SKILL.md) for editing:

    mkdir -p try-out-vibe/.vibe/skills/good-morning
    code try-out-vibe/.vibe/skills/good-morning/SKILL.md
    

    The path includes the .vibe directory, the skills directory, and another directory named after the skill itself (good-morning). This naming convention is what allows Vibe to find the skill and load it when you prompt it with good morning.

    Note: If you use a different coding agent, replace vibe with the name of your agent. For Claude Code, for example:

    mkdir -p try-out-claude/.claude/skills/good-morning
    code try-out-claude/.claude/skills/good-morning/SKILL.md
    
  2. Add the following content to the SKILL.md file and save it:

    ---
    name: good-morning
    description: A skill that responds to good morning, asks 
      if the user has had coffee, and tells the user a joke.
    ---
    
    # Good Morning Skill
    
    When the user says good morning:
    
    - Greet them with "Good morning!"
    - Ask whether they have had coffee yet.
    - Tell them a joke.
    

Why the description field matters

The description field is the most important line in the file. The agent reads it, compares it against your prompt, and decides on that basis whether to load the skill. A vague description makes the skill fire unpredictably; no description at all means the agent has nothing to match on and will most likely ignore the skill entirely. Write it as a plain statement of what the skill does and when it applies.

Run the skill

Now that the skill exists, it remains to use it.

Navigate to the agent-skill-qs/try-out-vibe folder where you created the skill, and start a session:

vibe

At the Vibe prompt, enter good morning.

If all goes well, you should see output similar to the following:

Mistral Vibe v2.25.4 · Mistral Medium 3.5[high] · Free
3 models · 0/16 connectors · 0 MCP servers · 3 skills
Type /help for more information

> good morning
────────────────────────────────────
⏷ Loaded skills
⎣ ⏵ Loaded skill: good-morning

Good morning! Have you had coffee yet?

Why do programmers prefer dark mode? Because light attracts bugs.
────────────────────────────────────
>

The line that matters is Loaded skill: good-morning. That is the agent telling you it matched your prompt against the description field and pulled your instructions into context before answering.

What’s next

I have barely scratched the surface, but the intent was to build a “Hello World” example, and this one works. Notice the 0 MCP servers in the banner above: a skill on its own can only act on what it already knows. The next post looks at what happens when you connect one to live data.


  1. Addy Osmani, “agent-skills - production-grade engineering skills for AI coding agents,” accessed September 16, 2026, https://github.com/addyosmani/agent-skills. ↩︎

  2. MongoDB, “Agent Skills,” MongoDB Documentation, accessed September 16, 2026, https://www.mongodb.com/docs/agent-skills/. ↩︎