Two independent signals
This is the single most useful thing to understand about the page: a row can appear from either of two sources, and they have completely different requirements.
They are matched by skill name. A skill can therefore show up with a definition and zero invocations, or with invocations and no definition at all.
Invocation counts need a plugin, not org-level telemetry. If you send
Claude Code OTLP metrics through your own collector, you’ll get cost, lines of
code, and adoption — but no skill or tool-call signal, so every skill shows 0
invocations until the plugin is installed. See Claude Code
plugin.
Where Weave looks for definitions
Weave scans the default branch of every connected repository. Two locations are built in and always scanned:
Only
SKILL.md is read from .claude/skills/ — a README.md or reference.md next to it is treated as supporting material for that skill, not as a skill of its own.
Skills that live outside those folders
If your skills live somewhere else in a repository, add the folder under Settings → Organization → Skill detection, one path per line:- They are folders inside your repositories, relative to the repository root. They are not paths on a developer’s machine —
~/.claude/skillsrefers to a laptop Weave cannot see, and is rejected. - Literal prefixes only. Globs (
*,?,[), absolute paths, and..segments are rejected. - Lines starting with
#are comments. - Up to 50 entries, each up to 200 characters.
<name>/SKILL.md and a bare <name>.md, so flat command-style folders work too. Two kinds of markdown are skipped so they don’t show up as skills:
- Files sitting next to a
SKILL.md— areference.mdinside a skill’s own directory is that skill’s supporting material. - Unambiguous repository documentation:
README,CONTRIBUTING,LICENSE,CHANGELOGand similar. Names that could plausibly be a real skill (reference.md,index.md) are kept when they stand alone.
Skills installed only on a developer’s machine — under
~/.claude/skills, or
symlinked in from a global location — are not detected. Weave reads
committed file content, and git stores a symlink as a pointer rather than the
file it points at. To get definitions for a globally distributed skill
library, connect the repository you publish it from.Limits
- 50 skill files per repository. Built-in
.claude/locations are scanned first, so custom folders never crowd them out. - 100 KB per file. Larger definitions are skipped.
- Files are read from the default branch only.
Skills with usage but no definition
A skill that has been invoked but has no matching definition file appears with the source Usage only. The name and counts are accurate; there’s no prompt content, quality rating, or version history because Weave never found a file for it. This is expected when a skill is installed globally on developer machines rather than committed to a connected repository.Invocation counts are attributed to the repository the Claude Code session ran
in. When the same skill name is defined in more than one repository, each row
shows invocations for that repository only. Invocations from a globally
installed skill run outside a tracked checkout may appear as Usage only
with no matching definition file.
Prompt quality
Each detected definition is scored for prompt quality with a confidence level, using the same classifier as conversation prompt quality. Re-scoring happens when the file’s contents change; the skill detail panel keeps the version history, so you can see how a prompt evolved.Related
- AI skills report — how effectively engineers work with AI, a separate report from this one
- Claude Code plugin — required for invocation counts
- Cursor plugin — the Cursor equivalent
