Skill Export Shape Gates
eva intermediate 4 min read
ELI5
Anthropic’s skills format treats certain words and shapes as reserved — like trademarked labels you can’t put on your own product. _check_skill_export_shape is the trademark office: any “claude” or “anthropic” in the id, any angle bracket in the description, or a body that grew past 5000 words gets the export blocked at the door.
Technical Deep Dive
Constants (bin/eva:280-284)
| Constant | Value | Purpose |
|---|---|---|
SKILL_RESERVED_NAME_TOKENS | ("claude", "anthropic") | substrings forbidden in meta.id |
SKILL_DESCRIPTION_MAX | 1024 | hard char cap on meta.description |
SKILL_BODY_WARN_WORDS | 3500 | yellow on prompt.xml body |
SKILL_BODY_HARD_WORDS | 5000 | red on prompt.xml body |
PROMPT_BODY_LOC_WARN | 200 | yellow on non-blank line count |
Decision Tree (bin/eva:287-326)
flowchart TD id["meta.id"] --> rt{contains 'claude' or 'anthropic'?} rt -- yes --> p1["problem: id reserved token"] rt -- no --> ok1 desc["meta.description"] --> dtype{is string?} dtype -- no --> p2["problem: must be string"] dtype -- yes --> dlen{len ≤ 1024?} dlen -- no --> p3["problem: > 1024 chars"] dlen -- yes --> dchar{contains < or >?} dchar -- yes --> p4["problem: forbidden char"] dchar -- no --> dwhen{contains 'use when'?} dwhen -- no --> w1["warning: no trigger clause"] dwhen -- yes --> ok2 trig["meta.triggers / not_for"] --> tshape{list of non-empty strings?} tshape -- no --> p5["problem: shape"] tshape -- yes --> ok3 body["prompt.xml word count w"] --> bw{w ≥ 5000?} bw -- yes --> p6["problem: body too large"] bw -- no --> bw2{w ≥ 3500?} bw2 -- yes --> w2["warning: consider splitting"] body --> loc{non-blank lines ≥ 200?} loc -- yes --> w3["warning: split into references/"]Where the gate runs
eva doctorruns it on every prompt (bin/eva:429-431); problems fail doctor’s exit code, warnings annotate.eva export-skillruns it again before writingSKILL.mdand refuses (exit 1) on any problem unless--forceis set (bin/eva:1036-1043).
Why these limits
Reserved tokens come from Anthropic’s skill-frontmatter schema; angle brackets break YAML/HTML parsing in skill loaders; the 5000-word body cap is the “split into references/” threshold suggested by the official skills guide.
Key Terms
- reserved skill token — substring in
meta.idthat violates the Anthropic skill name policy; onlyclaudeandanthropictoday. - shape problem — a hard failure of the export-shape gate.
- shape warning — a soft annotation; never blocks export on its own.
Q&A
Q: Which two substrings forbid a prompt id from being exported as a skill?
A: claude and anthropic — case-folded, anywhere in the id (SKILL_RESERVED_NAME_TOKENS, bin/eva:280, 293-295).
Q: Which characters are forbidden inside meta.description?
A: < and >. Any occurrence triggers the problem meta.description contains '<' or '>'; forbidden in skill frontmatter (bin/eva:304-305).
Q: At what word count does prompt.xml turn from a warning into an export-blocking problem?
A: 3500 words is a warning, 5000 is a problem (SKILL_BODY_WARN_WORDS / SKILL_BODY_HARD_WORDS, bin/eva:282-283, 317-321).
Examples
A description that fails the gate twice:
description: "Use this <new> claude tool for refactors."# problems: contains '<'/'>'; (id 'claude-refactor' would also be blocked)neighbors on the map
- meta.yml Schema & Required Fields authoring a new meta.yml
- Skill Export Pipeline exporting a ready prompt as an Anthropic skill
- NFT-Style Capability Token System designing authorization for cross-system sprite access
- Airlock Cross-Apex JWT Handoff debugging users who land on stratt.dev unauthenticated despite an airlock session