
The Claude Code skills worth having on a website build
A skill is a folder with a SKILL.md in it. Here are the five worth building for web work, the frontmatter fields that actually change behaviour, and the four documented limits that produce no error message.
A skill is a folder with a SKILL.md in it. That is the whole idea. The file carries YAML frontmatter and some Markdown instructions, and from then on Claude either loads it when the description matches what you asked for, or you invoke it directly by typing a slash and its name. On a website build this is the difference between giving the same pre-launch instructions on every project and running one command. The skills documentation is the reference; this is what matters when the work is websites.
The file layout
SKILL.md is required and acts as the overview. Everything else loads only when needed, which is the point: a reference file of two thousand lines costs nothing until the skill actually reaches for it. The documentation advises keeping SKILL.md under 500 lines and moving detail into separate files, and a scripts/ directory holds code that gets executed rather than read into context.
Where a skill can live
| Scope | Path | Reaches |
|---|---|---|
| Personal | ~/.claude/skills/<name>/SKILL.md | Every project on that machine |
| Project | .claude/skills/<name>/SKILL.md | That repository. Commit it and the team gets it. |
| Nested | <subdir>/.claude/skills/<name>/SKILL.md | Sessions in or below that directory, loaded on demand |
| Plugin | <plugin>/skills/<name>/SKILL.md | Wherever the plugin is enabled, as a namespaced command |
| Account | Synced to ~/.claude/skills/synced/ | Cloud and terminal sessions signed in to that account |
The frontmatter fields that change behaviour
Every field is optional, which is why so many skills do nothing useful. Four of them matter more than the rest on a website project.
descriptionis how Claude decides to load it. It is read, not skimmed, so write the trigger case first and the explanation second.disable-model-invocation: truestops Claude loading it on its own, so it only runs when you type the command. Use it on anything that deploys, publishes or costs money.pathstakes glob patterns and limits when the skill loads automatically, which keeps a CSS skill out of the way while you are editing data files.context: forkruns the skill in a forked subagent. Useful for long audits, but the subagent gets only the skill content as its prompt, so the instructions have to be self-contained.
The limits that bite
Four documented behaviours cause most of the confusion, and none of them produce an error message.
- The combined
descriptionandwhen_to_usetext is cut at 1,536 characters in the listing. Anything past that is invisible to the decision about whether to load the skill. - If the YAML between the markers does not parse, the skill still loads with no fields set. It does not fail, it just quietly becomes an ordinary instruction file.
- A failed injected shell command aborts the whole invocation, and Claude never sees the skill content at all.
allowed-toolsgrants permission for the invoking turn only. It clears on your next message, and it does not restrict anything.
The skills worth building for website work
These are the ones that have earned their place for us, in the order we would build them. Each is a workflow we were otherwise repeating by hand on every project.
| Skill | What it does |
|---|---|
| Pre-launch audit | Walks the built output, not the source: every sitemap URL returns 200 and carries no noindex, every indexable page is in the sitemap, every page has its own title and canonical. |
| Redirect map | Diffs the old URL list against the new one before a migration and writes the redirect config. The single highest-value thing to automate, because this is the most common cause of a post-launch traffic drop. |
| Similarity check | Strips proper nouns from generated pages and compares every pair, so near-duplicate location or service pages are caught before they are published rather than after. |
| Visual check | Renders pages in a real browser at several widths and returns the images, because measurement alone passes layouts that are visibly broken. |
| Copy guard | Greps the diff for invented specifics: statistics, client names, testimonials, anything shaped like a claim that nobody supplied. |
Skills, hooks or an agent
They solve different problems and people reach for the wrong one constantly. A skill is a workflow you or Claude choose to run. A hook is a shell command that fires before or after an action whether anybody chose it or not, which is what you want for formatting and linting. A subagent is for work you want done in a separate context so it does not fill the main one, which suits long audits. If a thing must happen every time, it is a hook. If it must happen when asked, it is a skill.
To share a set of these across a team or publish them, they bundle as a plugin, which is also how they end up namespaced when invoked. The full documentation index is at code.claude.com/docs/llms.txt if you would rather read the pages directly than search for them.
The build workflow these sit inside is in building a website with Claude Code, and the checks the pre-launch skill should actually run are enumerated in the SEO checklist for a site an agent built.
Two directions from here. If none of the above fits the job you keep redoing by hand, the answer is to write your own, and the field that decides whether it ever loads is not the one people spend time on: writing a skill that actually fires covers the frontmatter and the test that catches a skill which never triggers. And if what you are missing is not instructions but access to another system, a skill is the wrong tool entirely; the three MCP servers worth connecting covers that side, including the scope decision that controls whether your team gets the connection or only you do.

