From a8d099bd6aa33fe1dc5d0ab47d85fb9124f06e5f Mon Sep 17 00:00:00 2001 From: mtblck <105079242+mtblck@users.noreply.github.com> Date: Fri, 6 Nov 2026 15:41:13 +0000 Subject: [PATCH] Keep angle brackets out of the skill description Claude's skill upload rejects a SKILL.md whose frontmatter description contains XML-like tags, and ours said . Write it as plain iso-gram, and test that name and description have no < or >. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018HstUjjkdRupunFEqa4jbF --- SKILL.md | 2 +- test/skill.test.mjs | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/SKILL.md b/SKILL.md index af35b6c..85a37bc 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,6 +1,6 @@ --- name: isogram -description: Build animated isometric "how it works" diagrams for web pages: a small physical machine whose motion explains a product feature (calls routed, jobs queued, data synced), with step captions and a live readout. One scene renders in several looks (glow hairline, clean vector, 2:1 pixel art, blueprint; light and dark) and exports as a drop-in web component (HTML+CSS+JS), a self-contained embed snippet, GIF, PNG, SVG, WebM and a step sheet. Use for feature explainers, landing-page or docs illustrations, onboarding visuals, isometric animated diagrams, pixel-art or vector isometric illustrations, and "iso-glow"/"anatomy"-style figures meant to be embedded. +description: Build animated isometric "how it works" diagrams for web pages: a small physical machine whose motion explains a product feature (calls routed, jobs queued, data synced), with step captions and a live readout. One scene renders in several looks (glow hairline, clean vector, 2:1 pixel art, blueprint; light and dark) and exports as a drop-in iso-gram web component (HTML+CSS+JS), a self-contained embed snippet, GIF, PNG, SVG, WebM and a step sheet. Use for feature explainers, landing-page or docs illustrations, onboarding visuals, isometric animated diagrams, pixel-art or vector isometric illustrations, and "iso-glow"/"anatomy"-style figures meant to be embedded. --- # isogram diff --git a/test/skill.test.mjs b/test/skill.test.mjs index 3af3b0f..2a60788 100644 --- a/test/skill.test.mjs +++ b/test/skill.test.mjs @@ -15,6 +15,10 @@ test('SKILL.md has the frontmatter Claude needs', () => { const name = m[1].match(/^name: (.+)$/m)?.[1], desc = m[1].match(/^description: (.+)$/m)?.[1] assert.equal(name, 'isogram') assert.ok(desc && desc.length <= 1024, `description present and ≤ 1024 chars (is ${desc?.length})`) + // Claude's skill upload rejects angle brackets in the frontmatter ("description cannot contain XML"), + // so write the element as plain iso-gram here; the body of SKILL.md can still say . + for (const [k, v] of Object.entries({ name, description: desc })) + assert.doesNotMatch(v, /[<>]/, `${k} must not contain < or > (the skill validator reads them as XML tags)`) }) test('every file SKILL.md points to exists', () => {