Skip to content
Back to skills

Docs

ASecurity

Write a minimal SKILL.md, install it from its path, and see an agent load it.

  • 14 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 25, 2026
ai-agentsgit

Works with

  • cli

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned September 25, 2026

npx -y skills add grimoire-rs/grimoire --skill docs --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Docs?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Docs
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/grimoire-rs-docs-grimoire/badge)](https://www.skillsdirectory.com/skills/grimoire-rs-docs-grimoire)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
title: Write your first skill
description: Write a minimal SKILL.md, install it from its path, and see an agent load it.
---
<!-- doc_type: how-to -->
<!-- doc_tier: first-steps -->

Write one skill by hand, install it from the path it sits at, and watch an
agent pick it up. Nothing here is published or fetched over the network. The
whole loop stays inside one repository.

## See it run

<div data-cast="/casts/first-skill.cast" data-cast-poster="npt:0:03"></div>
<noscript><a href="/casts/first-skill.cast">Download the recording</a></noscript>

## Write the file

A skill is a directory with a `SKILL.md` inside it. The frontmatter carries
two keys. `name` is the identity the agent calls it by. `description` is what
the agent reads to decide whether to load the skill, so write it as a trigger
rather than as a summary.

```text
skills/
└── hello-world/
    └── SKILL.md
```

That one file is the whole artifact:

```markdown
---
name: hello-world
description: Use when someone asks for a hello-world smoke test of the skill pipeline.
---

# Hello world

Reply with `hello from hello-world` and nothing else.
```

## Check it builds

`grim build` reads the directory and validates it in place:

```sh
grim build skills/hello-world
```

A skill that passes prints one table row ending in `built`. That row is your
first visible result, and it means the frontmatter parsed.

## Install it from its path

`grim add` accepts a local path as readily as a remote reference. Point it at
the directory you just built:

```sh
grim add ./skills/hello-world
```

That declares a path source and pins it by content hash. `grim status` shows
it as `path: ./skills/hello-world`.

In a project that already has a `.claude` directory, the skill lands at
`.claude/skills/hello-world/SKILL.md`. A project with no client marker
directory lands somewhere else, which the
[quick start](./quickstart.md) covers.

## See the agent load it

Three things prove it worked, in order.

1. The file is on disk at its client path.

   ```sh
   cat .claude/skills/hello-world/SKILL.md
   ```

2. `grim status` lists the binding with its path source.

   ```sh
   grim status
   ```

3. Start a fresh agent session and ask it to use `hello-world` by name. It
   should reply with the one line the file tells it to.

Nothing signals a running agent that a file appeared, so a session that was
already open will not see the skill. Start a new one, or restart the one you
have.

## When the frontmatter is wrong

`grim build` exits `65` when the frontmatter does not parse, and it names both
the file and the problem:

```text
skills/hello-world/SKILL.md: invalid YAML frontmatter: missing field `description`
```

Two more mistakes land on the same exit code. A name like `bad skill` is
rejected, because a skill name may hold only lowercase letters, digits,
hyphens, and periods. A file with no closing `---` reports
`missing YAML frontmatter` instead.

The exit code is how a script detects the failure. A wrapper checks for `65`
rather than matching on the message text, which is free to change.

## Next steps

Once the skill is worth more than one repository,
[publishing](./publishing.md) covers packaging it and shipping it to a team.
To install it for every project on the machine instead of this one, read
[scopes and clients](./guides/scopes-and-clients.md).

Files in this skill

  • agents.md13.9 KB
  • artifacts.md25.5 KB
  • authentication.md8.6 KB
  • browse.md7.3 KB
  • ci.md11.1 KB
  • clients.md51.6 KB
  • concepts.md13.1 KB
  • configuration.md59.6 KB
  • first-skill.md3.3 KB
  • guides/catalog-best-practices.md3.5 KB
  • guides/inspect.md5.6 KB
  • guides/lifecycle.md5.4 KB
  • guides/mcp-everywhere.md4.6 KB
  • guides/registries.md8 KB
  • guides/scopes-and-clients.md6.6 KB
  • guides/shared-skills.md7.2 KB
  • guides/team-ci.md6.3 KB
  • guides/versioning.md3.6 KB
  • hosting-an-index.md21.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.