Skip to content

Agent skills

Flare apps are written with Claude Code, so every app gives it the same footing: a CLAUDE.md with the house rules, and skills for the libraries and workflows the app uses. A skill is a folder with a SKILL.md: a name, a description that says when to use it, and the instructions. Claude Code loads it when a task matches the description.

Keep it short: the few rules an agent would otherwise get wrong. The Flare repository’s own is an example: changesets with every change, releases through the workflow, the checks to run before a push.

Put workflow skills in .claude/skills/<name>/SKILL.md and commit them:

---
name: release
description: Use when releasing this app. Covers the changesets, the version
bump, the tag and the deploy.
---
# Release
1. ...

Write one for any workflow done the same way each time: releasing (see Versions and changesets), dependency updates, adding a resource, translating. Name the commands and files; leave out what the code already says.

A library can ship a skill in its npm package. Verano does: @recranet/verano-ui has skills/verano-ui/SKILL.md with every component’s selector, inputs and a usage snippet, for Angular apps. Link it into the app, so it follows the installed version:

Terminal window
mkdir -p .claude/skills
ln -s ../../node_modules/@recranet/verano-ui/skills/verano-ui .claude/skills/verano-ui

Or pin it from GitHub in skills-lock.json:

{
"version": 1,
"skills": {
"verano-ui": {
"source": "recranet/verano",
"sourceType": "github",
"skillPath": "projects/verano-ui/skills/verano-ui/SKILL.md"
}
}
}

A symlink stays in step with package.json; the lock file works before pnpm install and for skills from repositories that aren’t dependencies.

  • The description decides when it loads: say what it’s for and the words a request would use.
  • One job per skill. Link to docs rather than copying them.
  • Change it in the same commit as the workflow it describes, like a changeset.