Project Backlog
Overview
Use a project-local backlog/ folder as the source of truth for backlog item status. Work with the Obsidian vault as plain Markdown files. Resolve the vault path directly from OBSIDIAN_VAULT or VAULT; if neither is set and the human did not provide a vault path, ask for it before reading or writing backlog files.
Lifecycle hook: if work starts, pauses, resumes, opens PR, or completes, update the matching backlog item.
Folder Convention
Each project folder may contain:
backlog/
intake/
next/
ongoing/
paused/
done/
canceled/
Before filing or moving backlog items, create the project backlog/ directory and any missing status subdirectories from the project folder.
Copyable initializer:
mkdir -p backlog/{intake,next,ongoing,paused,done,canceled}
Status is canonical from the folder name. A backlog item must live in exactly one status folder.
| Folder | Meaning | Move here when |
|---|---|---|
intake/ |
Raw ideas, requests, bugs, or feature notes not yet triaged | Capturing unsorted work |
next/ |
Accepted, scoped, and ready for an agent or human to pick up | The item has enough context and success criteria |
ongoing/ |
Actively assigned or being implemented | Work starts, including async subagent runs |
paused/ |
Intentionally stopped but may resume | Blocked, waiting, deferred, or interrupted |
done/ |
Completed and verified | The feature/fix is accepted, cleaned up, and no follow-up is needed |
canceled/ |
Intentionally not doing | The item is rejected, obsolete, duplicated, or no longer wanted |
Do not create alternate status folders such as todo/, active/, blocked/, archive/, or shipped/. Use tags/properties for metadata only, not as competing status systems. If a note has a status property, keep it synchronized with the containing folder or remove it only with permission.
Item Format
One Markdown note per item. Keep filenames short/stable, e.g. add-search.md. Folder = status; do not add a status property.
---
tags: [backlog]
type: feature # feature | bug | chore | research
priority: P2 # P0 | P1 | P2 | P3
description: One concise sentence explaining the item.
created: 2026-06-19
updated: 2026-06-19
due:
agent_run:
---
# Title
## Request
## Context / Links
## Acceptance Criteria
- [ ]
## Activity Log
- 2026-06-19 — Created.
Preserve frontmatter, wikilinks, and Markdown when moving or editing notes.
Async Agent Workflow
- Capture: create or move new requests into
backlog/intake/. - Triage: clarify scope, deduplicate, add acceptance criteria, then move to
next/,canceled/, or leave inintake/. - Assign: before starting an async agent or human work session, move the item to
ongoing/and add a brief activity-log entry with date, owner, and run/session identifier if useful. - Track: update the item with links to branches, PRs, review notes, blockers, and decisions. Do not mark a note done just because an agent reported completion.
- Finish: after verification and cleanup, move completed feature/fix notes to
done/. If work is blocked or intentionally stopped, move topaused/; if abandoned or rejected, move tocanceled/.
Housekeeping
On request, perform safe maintenance:
- ensure
backlog/and all six status subdirectories exist before filing items; - list duplicate or near-duplicate backlog items before merging them;
- identify stale
ongoing/items with no recent activity; - identify
paused/items missing blocker/resume notes; - move verified completed items from
ongoing/orpaused/todone/; - move rejected, obsolete, or duplicate items to
canceled/; - normalize filenames only when links/backlinks can be preserved;
- ask before deleting files, bulk-moving notes, overwriting frontmatter, or changing wikilinks.
Backlog Tree Helper
For a quick read-only snapshot by unique project folder name, run from this skill directory:
./backlog-project-tree "projectName"
Set the vault path with OBSIDIAN_VAULT or VAULT:
OBSIDIAN_VAULT=/path/to/vault ./backlog-project-tree "projectName"
# or
VAULT=/path/to/vault ./backlog-project-tree "projectName"
It prints Markdown files under intake/, next/, ongoing/, paused/, done/, and canceled/, with best-effort metadata (type, priority, description, updated, due, agent_run). It reports missing categories without creating, moving, or deleting anything.
Backlog State Review
When asked for a backlog review, scan only the requested project unless told otherwise:
- Confirm the project folder and vault path.
- Count items in each status folder.
- Summarize
intake/triage candidates,next/ready work, staleongoing/, and blockedpaused/items. - Recommend specific moves or edits, grouped by status.
- Ask for confirmation before applying bulk moves or destructive cleanup.
- After approved changes, report the final counts and notable remaining risks.
Common Mistakes
- Creating both
blocked/andpaused/; blocked work belongs inpaused/with a blocker note. - Treating
done/as an archive for canceled work; rejected work belongs incanceled/. - Moving async agent output to
done/without human/agent verification. - Deleting old backlog notes during cleanup without explicit confirmation.
- Rewriting notes instead of using small edits that preserve Obsidian links and properties.