| name | kanban-markdown |
| description | Create, read, update, move, and manage kanban board feature files backed by markdown with YAML frontmatter. Use when working with kanban boards, task/feature tracking, `.devtool/features/` directories, feature files with status/priority frontmatter, or any project management tasks involving markdown-based kanban workflows. |
Kanban Markdown
Manage kanban board features stored as markdown files with YAML frontmatter. Each feature is a .md file; the VS Code kanban-markdown extension renders them as a board.
File Format
Every feature file follows this exact format:
---
id: "my-feature-2026-02-20"
status: "backlog"
priority: "medium"
assignee: null
dueDate: null
created: "2026-02-20T10:00:00.000Z"
modified: "2026-02-20T10:00:00.000Z"
completedAt: null
labels: []
order: "a0"
---
# My Feature
Description and details here.
Serialization rules (must match exactly for the extension to parse correctly):
- String fields: always
"double-quoted"
- Nullable fields (
assignee, dueDate, completedAt): bare null when unset
- Labels: inline array
["bug", "ui"] or []
- Order:
"double-quoted" string — fractional index for lexicographic sorting (see below)
- Field order:
id, status, priority, assignee, dueDate, created, modified, completedAt, labels, order
Valid values:
- status:
backlog | todo | in-progress | review | done
- priority:
critical | high | medium | low
For full field specs, see references/data-model.md.
Features Directory
Default: .devtool/features/ relative to workspace root. Configurable via VS Code setting kanban-markdown.featuresDirectory.
- Active features (backlog, todo, in-progress, review):
{featuresDir}/{id}.md
- Completed features (done):
{featuresDir}/done/{id}.md
Fractional Index Ordering
The order field uses fractional indexing — lexicographically sortable strings that allow inserting between any two items without reindexing. The extension uses the fractional-indexing npm package internally.
When creating features, determine the order by reading existing features in the target column (sorted by order):
- If the column is empty: use
"a0"
- To append after the last item: increment the trailing character —
"a0" → "a1", "a1" → "a2", ..., "a9" → "aA", etc.
- The full character sequence is
0-9, A-Z, a-z (base-62, ASCII order)
When moving features via drag-and-drop, the extension computes fractional keys between neighbors automatically. The skill only needs to handle appending new features to the end of a column.
Creating Features
- Generate ID: lowercase title, keep only
a-z 0-9 - space, replace spaces with -, collapse multiple -, trim - from ends, truncate to 50 chars, append -YYYY-MM-DD. If empty, use feature-YYYY-MM-DD.
- Set
created and modified to current ISO timestamp. Set order by reading existing features in the target column and generating a key that sorts after the last one (see Fractional Index Ordering above).
- If status is
done, set completedAt to now and place in done/ subfolder.
- Write frontmatter in exact field order above, then
# Title and body.
Updating Features
- Always update
modified to current ISO timestamp
- Never change
id or created
- Preserve exact serialization format
Moving Features
Update status and modified. When crossing the done boundary:
- To done: set
completedAt to current ISO timestamp, move file to done/ subfolder
- From done: set
completedAt to null, move file back to root
Writing Content
Start with # Title (the extension extracts the display title from the first # heading). Use acceptance criteria checklists, notes, etc. as needed.