Reference
Frontmatter contract
The YAML frontmatter SpecRider parses, what each field controls in the UI, and the style conventions.
Every plan in a SpecRider workspace begins with YAML frontmatter between --- fences. SpecRider parses it Rust-side during list_plans and uses it to drive sorting, filtering, search, the Diff Explorer’s commit discovery, and the outline pane status glyphs. Keep it valid YAML.
Required fields
---
status: draft
owner: jake
iteration: 1
last_review: claude · 2026-05-08
tags: [accessibility, a11y, keyboard]
---
status:— lifecycle marker. Conventional values, in roughly the order a plan moves through them:draft,upcoming,in-progress,shipped,implemented,superseded,backlog,fixture. The Plans browser shows this verbatim, so spell it consistently. When a plan moves folders, updatestatus:to match.owner:— single handle. The person accountable for the plan, not necessarily the only contributor.iteration:— integer. Bump it when the plan is meaningfully rewritten (scope cut, approach changed, post-review revision). A plan atiteration: 3is on its third pass; reviewers can use it to tell whether they’re seeing a fresh draft or a polished one.last_review:—<reviewer> · <YYYY-MM-DD>. Reviewer is a handle (jake,claude,codex, or a model id likeclaude-opus-4-7). Always update both the reviewer and the date when you do a real read-through; do not bump it for typo fixes.tags:— flow-style YAML list. Used by search and as filterable chips. Keep them lowercase, kebab-case where multi-word, and prefer reusing existing tags over inventing synonyms (grep across the tree before adding a new one).
Optional fields
name:/description:— override the title/subtitle the Plans browser displays. Default is the file’s first# Headingand a derived blurb; set these explicitly when you want a different display string from the document title.branches:— YAML list of branch names that scope the Diff Explorer’s commit history rail to this plan. Use when a plan’s work lives on dedicated branches and you want the rail to show only those commits.commit_shas:— YAML list of explicit SHAs to attach to the plan, on top of (or instead of) branch- and file-touch-based discovery. Useful for cherry-picks or commits that don’t touch any file the plan mentions.links:— YAML array of linked repo review targets, each withrepo,branch, and optionalbase. See Link code repos to a spec for the workspace config and review workflow.
Important:
branches:andcommit_shas:values flow intogitargv. Treat them like code — don’t paste untrusted strings into them.
Style notes
- Use flow-style lists for short collections (
tags: [a, b, c]), block-style only when entries need multiple lines or comments. - Don’t quote scalar values unless YAML requires it (colons, leading symbols, etc.). Plain
status: in-progressis preferred overstatus: "in-progress". - Dates are ISO 8601 (
YYYY-MM-DD). The·separator inlast_review:is a literal middle dot (U+00B7). - One plan per file. File name = slug; no dates, no status prefix. Lifecycle lives in the folder +
status:, not the filename.
Body conventions
Beyond frontmatter, a few body-level conventions help SpecRider surface the right things:
- The first H1 is the plan title. The first paragraph after it is the elevator pitch.
- A
## Whysection right after the pitch is the norm. Reviewers read this first. - Implementation steps are GFM task lines (
- [ ] …), not plain bullets. They live under an## Implementationsection (or### Batch N — …subsections when the work splits into independently-shippable chunks). - Task lines that touch source files should annotate them with an HTML comment:
- [ ] Do thing <!-- src/foo.ts -->. One file annotation per task. The planned jump-to-code feature will surface these. - Cross-link other plans by relative path:
[Workspace trust](../active/workspace-trust.md).
SpecRider’s outline pane and progress counts read these checkboxes, so anything you’d want to track or hand to an agent should be a task.