>_devkit
devkit-skill-authoring
skills/devkit-skill-authoring/

references/troubleshooting.md

When it is rejected

Errors are prefixed with the slug, as my-skill: <message>.

The folder

MessageCauseFix
no SKILL.md in <path> - is this a skill folder?Pointed at the wrong directory, or the file is named skill.mdThe file is SKILL.md, at the folder root, case-sensitive
no SKILL.md at the folder rootIt exists, but nested - docs/SKILL.mdMove it to the root
no filesEmpty folder
too many files (max 64)A skill is documentation, not a packageCut, or split into two skills
<path> is N bytes (max 524288)One file over 512 KBUsually an image or a dump that should not ship
skill is N bytes (max 2097152)Whole folder over 2 MBSame
duplicate file: <path>Two entries resolve to one path

Paths

The install writes into ~/.claude/skills/<slug>/, so these are a security boundary and are not negotiable.

MessageCause
absolute file path: /xLeading /
backslash in file path: a\bWindows separator; use /
path traversal or empty segment: ../x.., ., or an empty segment
NUL in file path
path too long to package (>100 bytes): <path><slug>/<path> exceeds ustar's 100-byte name field. Shorten the path, or the slug
bad file path "…"Leading or trailing whitespace, or empty

The slug

MessageCause
slug must be lowercase-hyphenated, 3-64 charactersUppercase, underscore, a leading or trailing hyphen, or too short or long. The folder name is the slug
"cli" is reserved by the registry - the install URL is already takenall and cli are served by the registry itself

Frontmatter

MessageFix
missing frontmatter: file must start with a --- lineNothing before the opening ---, not even a blank line
unterminated frontmatter: no closing --- lineAdd the second ---
line N: indentation is not supportedA nested map or a - item list. Use an inline list: tags: [a, b]
line N: "key" needs an inline value (multi-line scalars are not supported)An empty value, or | / >. Everything goes on one line
line N: duplicate key "x"Delete one
line N: empty entry at position K of the listTrailing or doubled comma
line N: quoted entries are not supported in a listRemove the quotes; a quoted comma would be split in half
line N: unterminated list - expected a closing ]
missing required frontmatter key "x"name, description, version, author, license, status, tags are all required
"x" must be a stringA list or boolean where a scalar belongs

Field values

MessageFix
frontmatter "name" is "a" but the folder is "b" - they must matchRename one. The folder is the slug
"description" must be 10-200 characters (got N)And on one line
"version" must be SemVer (got "x")1.0.0, not 1.0 or v1.0.0
"author" may use letters, digits, _ . - and be at most 40 charactersNo spaces, no @, no email
license "x" is not a recognised SPDX identifierMIT, Apache-2.0, BSD-3-Clause, … Not a URL, not free text
"status" must be one of stable, beta, deprecated
"tags" must be a non-empty list, e.g. [ai, claude]Inline list, not a block sequence
"tags" may have at most 8 entries
tag "X" must be lowercase alphanumeric, . or -Lowercase it; no spaces or underscores
"created" must be YYYY-MM-DD (got "x")
SKILL.md has no body below the frontmatterThe body is the skill

Publishing

SymptomCauseFix
409That version already exists. Versions are immutableBump version: and publish again
401 / 403, exit 77Missing, wrong, or unscoped tokendevkit whoami. Publishing needs the publish scope
Published to the wrong registryThe default was not what you assumeddevkit whoami first; pin the repo with .devkitrc.json
this is not the latest versionYou published an older lineExpected; latest is unchanged
no registry configuredNever logged in, or the name does not existdevkit login <url> --as <name>

Installing

SymptomCause
sent no X-Devkit-Digest header … refusing to install unverified contentNot talking to a devkit registry - a proxy or an error page in front of it
digest mismatch for <skill>The archive does not hash to what the server claimed. Something rewrote it in transit; do not install
Ambiguous bare nameTwo accounts own that slugUse @owner/slug
A skill missing from devkit updateIts .devkit.json marker is unreadableThe CLI lists these separately rather than dropping them; reinstall it

It validates but Claude never loads it

Not a validation problem. The description is the only thing matched against, so this is nearly always a description that says what the skill is rather than when to use it. See writing-well.md.