Docs · Frontmatter reference 7 of 9

Frontmatter reference

The YAML block at the top of README.md is the bundle's metadata. GitHub renders it as a table, and the site validates it on every load, so a typo shows up as a warning rather than as a missing bundle.

---
name: Nuxt
description: Nuxt 4 + Nuxt UI v4 doc fetchers and the rules that make Claude use them.
tags: [nuxt, nuxt-ui, vue, docs]
author: Patrity
authorUrl: https://github.com/Patrity
icon: i-simple-icons-nuxt
requires: [python3]
dependsOn: [doc-fetcher]
suggests: [nuxt-ui]
gitignore:
  - .claude/skills/nuxt-docs/cache/
---
KeyTypeRequiredNotes
namestringyesDisplay name. The slug (directory name) stays the identifier.
descriptionstringyesOne or two sentences. Used on cards and in <meta> tags.
tagsstringyesLowercase. At least one. Drives the filter chips on the index.
authorstringyesA person or org name.
authorUrlURLnoWhere the author name links to.
iconstringnoAn Iconify name from the lucide or simple-icons sets, e.g. i-lucide-database. It stands in front of the bundle name on the site. A bundle without one keeps the brand mark, so nothing looks unfinished.
requiresstringnoExternal tooling the bundle needs on your machine, e.g. python3, curl, playwright-cli.
dependsOnstringnoBundle slugs this one cannot work without. add and the wizard install them automatically.
suggestsstringnoBundle slugs that pair well with this one. Pre-selected in the wizard, easy to untick.
gitignorestringnoPaths this bundle wants ignored, usually a cache directory it writes into. They go in the project's managed .gitignore block.
envobjectnoThe variables this bundle's skills read from .claude/.env. Each one becomes a line in .claude/.env.example.

dependsOn and suggests take registry slugs and are validated against the registry: a slug that names no bundle fails the build. They are the bundle graph; requires is about your machine, not the registry.

gitignore: paths the project should ignore

Each entry is a project-relative path: no leading /, no .. segment, no drive letter, no backslashes. End a directory with /. That is the convention, not something the schema enforces. Write the path as the project will see it, from the repo root:

gitignore:
  - .claude/skills/nuxt-ui-docs/cache/
  - .claude/skills/nuxt-ui-templates/cache/

The CLI and the web builder collect these across every installed bundle, sort them, and regenerate one managed block in the project's root .gitignore. Removing the bundle takes its lines back out. See Hooks and settings for the block itself.

env: declare the variables

A bundle declares the variables its skills read and lets the tool write the example:

env:
  - name: DATABASE_URL_RO
    description: Read-only Postgres connection string for the db:q runner. Point it at a replica or a dedicated read-only role.
    required: true
    example: postgres://<app>_claude_ro:<password>@<host>/<database>
FieldRequiredNotes
nameyesMust match ^[A-Z][A-Z0-9_]*$, and be unique within the bundle.
descriptionyesOne line. It becomes the comment above the variable in the example file.
requirednotrue appends (required) to that comment.
examplenoA sample value, right of the =. Omit it and the line ends at the =.

Keep example obviously fake. It ends up in a file people commit, and the secrets scanner reads every bundle file including the README, so a real-looking credential fails validation.

Shipping a .env.example file in the bundle instead is an error: .env.example: declare variables with the env frontmatter key instead of shipping a file. The example belongs to the project, assembled from every installed bundle at once, so no single bundle can own the file.

Declaring env at all does two things beyond the example file: it adds .claude/.env to the managed .gitignore block, and it tells a reader of the bundle page what the skill needs before it will work.

What a bad bundle looks like

A bundle with a missing README, a missing required key, or a bad slug is:

  • shown with a warning when the site reads from disk (local development), so you can see exactly what is wrong;
  • hidden in production;
  • rejected by CI, where pnpm validate:skills fails the pull request with the same messages the site shows.

Messages look like frontmatter.tags: required or slug "Bad_Slug" must match /^[a-z0-9][a-z0-9-]*$/.

The keys the site computes

The site computes these from the files:

  • badges: which of skills/, rules/, hooks/, settings.json/settings.local.json, CLAUDE.md exist
  • file count and total size
  • freshness: the commit that the whole snapshot was read from
Written by

Tony Costanzo TechHive Labs

I run Claude Code on billion-dollar construction data by day and a rack of GPUs at night, and I write down what breaks. This setup is the part I kept using.