zed-industries/zed · error · anyhow::Error
SKILL.md missing closing frontmatter delimiter (---)
Error message
SKILL.md missing closing frontmatter delimiter (---)
What it means
Error "SKILL.md missing closing frontmatter delimiter (---)" thrown in zed-industries/zed.
Source
Thrown at crates/agent_skills/agent_skills.rs:389
let after_dashes = line_start + 3;
let end = if after_dashes == bytes.len() {
after_dashes
} else if bytes[after_dashes] == b'\n' {
after_dashes + 1
} else if after_dashes + 1 < bytes.len()
&& bytes[after_dashes] == b'\r'
&& bytes[after_dashes + 1] == b'\n'
{
after_dashes + 2
} else {
// Line is something like `---trailing` or `----`; not a candidate.
continue;
};
candidates.push(end);
}
if candidates.is_empty() {
anyhow::bail!("SKILL.md missing closing frontmatter delimiter (---)");
}
// Try each candidate in order: slice content up through the candidate's
// terminator and ask `serde_yaml_ng` to parse it as a YAML stream. If the
// first document deserializes into `SkillMetadata`, that candidate is the
// real closer. Otherwise an earlier candidate may have cut the YAML in the
// middle of a scalar / quoted string; try the next one.
let mut last_error: Option<anyhow::Error> = None;
for end in candidates {
let prefix = &content[..end];
let mut docs = serde_yaml_ng::Deserializer::from_str(prefix);
let Some(first_doc) = docs.next() else {
continue;
};
match SkillMetadata::deserialize(first_doc) {
Ok(metadata) => return Ok((metadata, &content[end..])),
Err(e) => last_error = Some(anyhow::Error::new(e)),
}View on GitHub (pinned to bc538def45)
When it happens
Trigger: Thrown at crates/agent_skills/agent_skills.rs:389 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of zed-industries/zed@bc538def45 (2026-08-16).
Data as JSON: /api/errors/22efd7434f946cde.
Report an issue: GitHub.