You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
14 shipped SKILL.md frontmatters are not valid YAML (unquoted : in description) #2467
14 of the 97 skills under install/skills/ have an unquoted description: value that contains : , for example Three-layer bias analysis of any URL, file, or text: fetches the content…. In YAML that sequence is not allowed inside a plain scalar, so any standard YAML parser rejects the whole frontmatter block. Claude Code still loads these skills, but other tools that read SKILL.md frontmatter with a YAML parser (skill indexes, cross-harness projections, linters) fail on them or skip them. LifeOS's own SkillHygieneGate does not catch this, because it parses one key's lines at a time.
install/skills/<Skill>/SKILL.md, the description: line of each skill listed above (for example install/skills/BiasCheck/SKILL.md:7, install/skills/X/SKILL.md:15, install/skills/Workflows/SKILL.md:11).
install/LIFEOS/TOOLS/SkillHygieneGate.ts:399 parses per key (Bun.YAML.parse(block…)), not the whole frontmatter, so the gate stays green.
Repro on a clean tree
From the LifeOS/install/skills directory of a v8.761.0 checkout:
bun -e 'import {readdirSync,readFileSync,existsSync} from "node:fs"; const bad=[];for (const d of readdirSync(".")) { const f=`${d}/SKILL.md`; if (!existsSync(f)) continue; const fm=readFileSync(f,"utf8").match(/^---\r?\n([\s\S]*?)\r?\n---/)?.[1]; if (!fm) continue; try { Bun.YAML.parse(fm) } catch { bad.push(d) } }console.log(bad.length, bad.sort().join(" "))'
Output:
14 BiasCheck Brand ComputerUse DataRefresh DetectAI Development Explain Hermes Spotify StudioLights ThreatModel Trim Workflows X
The yaml npm package, already a LifeOS dependency, rejects the same 14 of 97.
Negative control
The other 83 skills parse cleanly with both parsers. All 14 failing files share one pattern, grep '^description: [^"'"'"'>|].*: ', and quoting the description value makes such a block parse.
Suggested fix
Quote the 14 description values (or use a >- block scalar). Add a whole-frontmatter YAML.parse check to SkillHygieneGate so a new unquoted : goes red. Untested.
Clarification on provenance: the check above was first run on the installed skill files, which cmp showed identical to the tag, not on a checkout. I have now re-run it from LifeOS/install/skills in a fresh clone of v8.761.0 (fb9aef4, git status clean). Same result: 97 frontmatters parsed, the same 14 fail.
Activity
mj-deving commentedon Oct 30, 2026
Clarification on provenance: the check above was first run on the installed skill files, which
cmpshowed identical to the tag, not on a checkout. I have now re-run it fromLifeOS/install/skillsin a fresh clone ofv8.761.0(fb9aef4,git statusclean). Same result: 97 frontmatters parsed, the same 14 fail.