Skill creator parser truncates folded YAML descriptions after blank lines
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 4k
- Forks
- 453
- Avg merge
- 12h 30m
- Merged PRs (30d)
- 46
Description
Summary
skills/skill-creator/scripts/utils.py:parse_skill_md hand-parses SKILL.md frontmatter and truncates valid folded YAML descriptions when the folded block contains a blank paragraph separator. The same repository also validates skill frontmatter with yaml.safe_load, so a SKILL.md file can pass validation but be read incorrectly by the skill-creator evaluation/improvement flow.
Tested on OpenBMB/PilotDeck main at 0907c5c9ae66cc155f36775fc8472b3ea621880d.
Code path
skills/skill-creator/scripts/utils.py:7definesparse_skill_md, returning(name, description, full_content).skills/skill-creator/scripts/utils.py:35-41collects multilinedescription: >continuation lines only while they are indented, so a blank YAML paragraph line stops parsing early.skills/skill-creator/scripts/quick_validate.py:35validates the same frontmatter withyaml.safe_load.skills/skill-creator/scripts/run_loop.py:64,scripts/run_eval.py:279, andscripts/improve_description.py:213consumeparse_skill_mdoutput.
Steps to reproduce
Create a temporary skill directory with this SKILL.md:
---
name: a
description: >
0
0
metadata:
version: "1.0"
---
# Body
Body text.
Then compare parse_skill_md(skill_dir)[1] with yaml.safe_load(frontmatter)["description"].
Observed dynamic repro:
expected_description: "0\n0\n"
original_description: "0"
Expected behavior
parse_skill_md should return the same description value accepted by the repository's YAML validator for valid SKILL.md frontmatter.
Actual behavior
The parser stops at the blank line inside a valid folded block and silently drops the following paragraph.
Existing coverage
I searched current issues and PRs for parse_skill_md, folded YAML, frontmatter, and SKILL.md description, and did not find an existing issue or PR covering this root cause. Open PRs do not modify skills/skill-creator/scripts/utils.py.
Related but not covering:
- PRs about case-insensitive
SKILL.mddiscovery touch the skill manager/discovery path, not this frontmatter parser behavior.
Suggested fix
Use yaml.safe_load for the frontmatter in parse_skill_md, matching quick_validate.py, or otherwise implement YAML folded/literal block semantics consistently.
Suggested tests
- Folded description block with an empty paragraph line.
- Literal block description.
- Quoted inline description.
- Validation and
parse_skill_mdreturning the samenameanddescription.
Submitted with Codex.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with skills/skill-creator/scripts/utils.py:parse_skill_md and compare its output with yaml.safe_load as used in quick_validate.py. Reproduce the folded and literal block cases from the issue, then add coverage showing parse_skill_md matches validated name and description values, including blank paragraph lines.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python, yaml
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 75/100