Skip to content

Skills

A skill (opens in a new tab) is a folder of instructions that Claude loads when the task matches it. Each skill has a SKILL.md, and some have extra files in references/ that Claude reads only when it needs them. Until a task needs it, only a skill’s short description sits in Claude’s context, so GAIA can ship detailed guidance for many tasks without filling every session (how skills load (opens in a new tab)). GAIA ships skills in two places: the React app’s skills in frontend/.claude/skills/, which load in sessions working on the app, and project skills in .claude/skills/ at the project root, which apply anywhere in the repository.

SkillWhat it covers
react-codeReact components, hooks, forms, data loading, React 19 idioms
typescriptTypeScript (opens in a new tab) and Zod (opens in a new tab) patterns
tailwindTheme color tokens, the cn class helper, variants
skeleton-loadersLoading states
tdd-reactThe frontend testing reference: stories, hook tests, MSW (opens in a new tab), Playwright (opens in a new tab)
playwright-cliBrowser automation
eslint-fixesLint failures and autofix conflicts
a11y-fixesAccessibility errors reported by axe-core (opens in a new tab)
gaia-react-perfFinding why a component re-renders, also /gaia-react-perf
new-component, new-hook, new-route, new-serviceGenerate new files from templates
SkillWhat it covers
tddThe red-green-refactor loop
naming-conventionsDescriptive names in any language
file-tech-debtFiles an out-of-scope finding as a tech-debt issue
gaia-wikiWiki maintenance, also /gaia-wiki
update-depsDependency and security updates, also /update-deps
update-gaiaGAIA release updates, also /update-gaia

React Doctor (opens in a new tab) is installed on each machine separately, at frontend/.claude/skills/react-doctor, and is gitignored.

GAIA’s workflow commands (/gaia-spec, /gaia-plan, and the rest) are slash commands, not skills. There is no /gaia skill to call.

Each SKILL.md has a description: field listing the phrasings and situations that load it. Claude sees the description of every skill it can start, and loads one when its description fits the task at hand, not on every prompt. The task does not have to come from you: a skill also loads when the work Claude or a sub-agent is doing matches it, or when another skill or rule points to it. Saying “scaffold a card called price-card” loads new-component; saying “this useEffect fires twice” loads react-code.

/gaia-wiki, /update-deps, and /update-gaia are skills, so asking in plain language triggers them too. They also appear in the statusline (🧠, 📦, 🚀) when they have work to do.

Some commands are user-only: /gaia-init, /setup-gaia, /gaia-fitness, /gaia-forensics, /gaia-codify, and /gaia-residue. Each one is marked so that Claude never starts it, on its own or because you asked in plain language, and it does not appear in Claude’s list of skills. Type them yourself as slash commands.

When a GAIA skill or command needs you to choose, it shows a menu (AskUserQuestion) with the recommended option first. The shipped user-questions rule holds the skills you write to the same standard. A separate rule, fenced-copy-paste-blocks, puts any prompt or command meant for you to paste in its own fenced code block, so Claude Code shows it with a copy button.

Ask Claude to write the skill for you:

Create a skill that <what it should help with>. It applies to <the whole repository | only the frontend app>. Write a description that names the phrasings that should trigger it.

A skill for the whole repository goes in .claude/skills/<name>/, and one only the app needs goes in frontend/.claude/skills/<name>/. To always run the skill on a particular model, say which one in the same request. Claude picks up the new skill in the next session, and /gaia-fitness checks it.