skills/ProjectBacklog/SKILL.md
Capture, list, update, and close repo-local backlog items as Obsidian Tasks lines in dated daily files under docs/todos/. USE WHEN capture todo, project todo, project backlog, repo backlog, backlog item, list todos, todo capture, new todo, close todo, or local issue tracking without GitHub.
npx skillsauth add n4m3z/forge-core ProjectBacklogInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Repo-local backlog inspired by todo.txt, stored as Obsidian Tasks checkbox lines with Dataview inline fields. One markdown file per capture day, multiple todos per file. Queryable from Obsidian (Tasks plugin and Dataview), grep-able from the shell. Use this when an idea, defect, or follow-up should outlive the conversation but is too small for an ADR and too project-specific for the personal vault backlog.
docs/todos/YYYY-MM-DD.md — one file per capture day. Daily files are append-only logs. The date in the filename IS the created date for every item in the file.
Each todo is one Obsidian Tasks checkbox line followed by optional indented sub-bullets for context, acceptance criteria, and links.
- [ ] Short imperative description [priority:: high] [id:: 0001] #tag1 #tag2
- Why this matters in one sentence.
- Acceptance: bullet list of conditions for closing.
- Related: [[0004 Some ADR]], #123, links to other todos.
| Marker | Meaning |
| ------ | ------- |
| - [ ] | open |
| - [/] | in progress |
| - [x] | done |
| - [-] | won't do / cancelled |
Dataview [key:: value] syntax. Place after the description, before tags.
| Field | Values |
| ----- | ------ |
| [priority:: ...] | highest, high, medium, low, lowest (default: medium) |
| [id:: NNNN] | required — 4-digit zero-padded stable id, unique across the project |
| [due:: YYYY-MM-DD] | optional deadline |
| [start:: YYYY-MM-DD] | optional earliest start date |
| [scheduled:: YYYY-MM-DD] | optional scheduled date |
| [completion:: YYYY-MM-DD] | set when status flips to [x] |
The created date is implicit in the filename — never restate it as an inline field.
# Todos — 2026-04-27
- [ ] First todo of the day [priority:: high] [id:: 0002] #app
- Acceptance bullets.
- [ ] Second todo of the day [priority:: medium] [id:: 0001] #docs
- ...
Newest item at the top of the file. Items captured on later days go in their own dated files. Closed items stay in their original file with - [x] and [completion:: YYYY-MM-DD] — never deleted, never moved.
| Workflow | Trigger | Section | | -------- | ------- | ------- | | Capture | "capture todo", "new todo", "add backlog item" | Capture | | List | "list todos", "show backlog", "open todos" | List | | Update | "update todo", "mark in-progress", "set priority" | Update | | Close | "close todo", "mark done", "won't do" | Close |
If docs/todos/ does not exist, create it.
Resolve today's date and target file docs/todos/YYYY-MM-DD.md. If the file does not exist, create it with a # Todos — YYYY-MM-DD heading.
Extract from the user input: short imperative description, priority (default medium), tags, optional acceptance criteria.
Scan all existing daily files for description overlap. If a related open item exists, propose updating it instead of duplicating.
Assign the next 4-digit id (max existing [id:: NNNN] across all daily files + 1, starting at 0001).
Insert the new item at the top of today's file with - [ ] status, the assigned id, and tags. Add indented sub-bullets only if acceptance criteria or context are non-trivial.
Report the id, file path, and line written.
Glob docs/todos/*.md. Read all items.
Default view: open + in-progress, grouped by priority. Show id, description, age (days since created, derived from filename).
On request, filter by tag, priority, status, or date range.
Identify the item by id ([id:: NNNN]) or description fragment.
Edit the line in place — flip the checkbox, change priority, add/remove tags, append a sub-bullet.
Status transitions: [ ] → [/] → [x]. [-] is terminal. Reopening requires [x] → [ ] with a sub-bullet explaining why.
Never edit the [id:: NNNN] once assigned. Never move the item to a different daily file.
Set the checkbox to [x] (done) or [-] (won't do).
Append [completion:: YYYY-MM-DD] for completed items.
Add a sub-bullet noting the closing commit, PR, or rationale.
Leave the item in its original daily file — the file represents the day the work was captured, not the day it closed.
created. Never duplicate it as an inline field.[id:: NNNN] so external references (commits, ADRs, other todos) survive description edits.[key:: value]) for metadata, not emojis. The plain-text form is git-diff-friendly and survives non-Obsidian tooling.@Example.md
development
Reactive correction and root-cause fix. USE WHEN something went wrong, user is frustrated, demands a correction, says wtf, what the hell, why did you, that's wrong, this is broken, no not that, stop. Executes the immediate fix, then hunts the upstream artifact that caused it and creates a corrective change.
development
Decompose a research question into sub-queries, spawn parallel WebResearcher agents per angle, synthesize findings with citations and explicit confidence. USE WHEN the user asks to research, investigate, look online, look up, dig into, find sources, gather evidence, or survey what's known about a topic. Single-pass; for multi-round adversarial research use ResearchCouncil in forge-council.
tools
Author project documentation that future humans (and AI sessions) actually read. Covers TLDRs for tools, READMEs, runbooks, journals. USE WHEN write documentation, create tldr, tool one-pager, document a cli, write readme, runbook, journal entry, capture knowledge about a tool, distill a session into reusable notes.
development
Review your own staged changes via a code-review TUI before triggering a commit. USE WHEN about to commit, walking through your own staged diff, self-reviewing before approval, tuicr, revdiff, git diff cached.