Skip to content

14 shipped SKILL.md frontmatters are not valid YAML (unquoted : in description) #2467

Open

Description

@mj-deving

Version

LifeOS 8.761.0 (tag v8.761.0, fb9aef4).

What is broken

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.

Affected skills: BiasCheck, Brand, ComputerUse, DataRefresh, DetectAI, Development, Explain, Hermes, Spotify, StudioLights, ThreatModel, Trim, Workflows, X.

Where (file:line)

  • 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.

Activity

  1. mj-deving commented on Oct 30, 2026

    @mj-deving
    Author

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions