backlog-local
Skill14 starsChanged 8 months agoMITView on GitHub
File-based backlog implementation using docs/backlog.md (bracket markers). Default when stack.md has backlog local or no backlog field.
In this repository50 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- adr-conventionSkill
- architecture-vocabularySkill
- backlog-externalSkill
- backlogSkill
- checkpointsSkill
- design-principlesSkill
- domain-glossarySkill
- git-practicesSkill
- grounded-claimsSkill
- knowledge-checkSkill
- policy-riskSkill
- positive-framingSkill
- receiving-code-reviewSkill
- skill-authoringSkill
- skill-awarenessSkill
- subagent-driven-developmentSkill
- test-driven-developmentSkill
- token-efficientSkill
- triageSkill
- verification-before-completionSkill
- workflow-bugSkill
- workflow-checkSkill
- workflow-commitSkill
- workflow-contractsSkill
- workflow-debugSkill
- workflow-decisionsSkill
- workflow-docsSkill
- workflow-doctorSkill
- workflow-epicSkill
- workflow-featureSkill
- workflow-flow-fix-pipelineSkill
- workflow-flowSkill
- workflow-grillSkill
- workflow-handoffSkill
- workflow-ideaSkill
- workflow-implementSkill
- workflow-planSkill
- workflow-proposalSkill
- workflow-prSkill
- workflow-refineSkill
- workflow-researchSkill
- workflow-reviewSkill
- workflow-startSkill
- workflow-statusSkill
- workflow-tech-reviewSkill
- workflow-update-workflowSkill
- workflow-validateSkill
- workflow-worktreeSkill
- workflow-yoloSkill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 4 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 32
Tags survive every transition: Keep each | tag:value on the line.
- Distinctive: line 82
Call list(feature=feature_id, status=all)
- Very specific: line 98
If len(title) > 80, abort immediately.
- Distinctive: line 114
Write the updated file
- Very specific: line 141
Add notation after the title: — implemented, pending PR
- Very specific: line 158
Update the status: frontmatter of the documents the item belongs to:
- Distinctive: line 162
No such document: skip.
- Very specific: line 163
Verify by re-reading every file touched before committing: the line is [x] under ## Done, no copy of it remains in another section, and …
- Distinctive: line 174
All sync operations are no-ops for the local backend:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Backlog Local — File-Based Implementation
implements: backlog
stack: localThis skill implements the backlog interface using a local markdown file. It is the default implementation when stack.md has backlog: local or no backlog: field.
Files
| File | Purpose | Format |
docs/backlog.md | Item list with statuses | Markdown with bracket markers |
Status Markers
| Status | Marker | Section | Example |
| ready | [ ] | ## Ready | - [ ] S-003: Story title | feature:FEAT-005 | group:1 | order:1 |
| doing | [>] | ## Doing | - [>] S-003: Story title | feature:FEAT-005 | ... |
| implemented | [=] | ## Doing | - [=] S-003: Story title — implemented, pending PR | feature:FEAT-005 | ... |
| done | [x] | ## Done | - [x] S-003: Story title — PR #42 | feature:FEAT-005 | ... |
Marker and section always agree. Every status change does two things: rewrite the marker, and move the whole line under the matching heading (create the heading if it is missing). A [x] line left under ## Ready is a failed transition — the item still reads as ready to anyone scanning the file.
Tags survive every transition. Keep each | tag:value on the line; status notation (— PR #42) goes right after the title, before the first |. Feature progress is counted from the feature: tag, so a line that loses it drops out of its feature.
Backlog File Structure
# Backlog
## Doing
- [>] S-003: Story title
## Ready
- [ ] S-010: Story title | feature:FEAT-005 | group:1 | order:1 | service:be | spec:docs/features/...
- [ ] S-011: Story title | feature:FEAT-005 | group:1 | order:2 | service:be | spec:docs/features/...
## Done
- [x] S-001: Story title — PR #12
- [x] S-002: Story title — PR #15
## Inbox
- Raw idea 1
- Raw idea 2Items are ordered within sections. ## Ready items are in priority order (top = highest). Within a feature group, order:N defines the execution sequence.
Operation Implementations
list(filter)
- Read
docs/backlog.md - Parse each line starting with
- [to extract: marker, ID, title, tags - Filter by the requested criteria:
status: match bracket marker ([ ]=ready,[>]=doing,[=]=implemented,[x]=done)feature: matchfeature:FEAT-NNNtagservice: matchservice:xxtaggroup: matchgroup:Ntagplan: matchplan:{plan_path}tag
- Return matching items with all parsed metadata
get(id)
- Read
docs/backlog.md - Find the line containing the requested ID (e.g.,
S-003orCTR-12) - Parse the full item: marker, ID, title, all tags
- Return full item metadata
get_feature_progress(feature_id)
- Call list(feature=feature_id, status=all)
- Count items per status
- Return counts: ready, doing, implemented, done, total
next_id()
- Read
docs/backlog.md - Find all existing
S-NNNIDs using regex - Return
S-{max+1}zero-padded to 3 digits (e.g.,S-016)
create(items)
- Validate each item's title (enforces the abstract
backlog/SKILL.mdtitle contract):- Measure
len(title)— the title string only, excluding theS-NNN:prefix and the| tag:valuesuffix that gets appended at write time. - If
len(title) > 80, abort immediately. Do not write any item to the file (not even the valid ones — fail the whole batch so the caller fixes the source). Surface this error to the caller:⛔ Story title too long: {N} chars (max 80) for {id}. Title: "{title[:60]}..." Rewrite as a short imperative verb phrase (e.g., "Add reviews migration", "Wire review module factory"). Implementation detail — file paths, schema, config keys, code fragments — belongs in the spec file referenced by spec:, not the title.
- Measure
- Read
docs/backlog.md - Find the
## Readysection (create it if it doesn't exist — place between## Doingand## Inbox, or at the top) - For each item, append a line in this format:
- [ ] {id}: {title} | feature:{feature_id} | group:{group} | order:{order} | service:{service} | spec:{spec_path} - Write the updated file
- Do not commit — the calling command handles the commit (usually grouped with the feature spec commit)
link_plan(ids, plan_path)
- Read
docs/backlog.md - For each ID, find the item line and append
| plan:{plan_path}— or replace the value if the line already has aplan:tag - Write the updated file
- Do not commit — the calling command commits it together with the plan
start(id)
- Read
docs/backlog.md - Find the item line with the matching ID
- Change
- [ ]to- [>] - Move the line to the end of
## Doing - Commit:
git add docs/backlog.md git commit -m "chore(backlog): start {id}"
mark_implemented(id)
- Read
docs/backlog.md - Find the item line
- Change
- [>](or- [ ], ifstartnever ran) to- [=] - Add notation after the title:
— implemented, pending PR - Move the line under
## Doingif it is not already there - Commit:
git add docs/backlog.md git commit -m "chore(backlog): mark {id} implemented, pending PR"
complete(id, reference)
- Read
docs/backlog.md - Find the item line. Any open marker qualifies:
[ ],[>], or[=]. An item whose work shipped withoutstarthaving run is completed, never skipped. If it is already[x], still run steps 4–7 — they repair a half-finished transition. - Change the marker to
[x] - Set the notation after the title, replacing
— implemented, pending PRif present:- Branch flow:
— PR #{number} - Direct flow:
— completed on main
- Branch flow:
- Move the line to the end of
## Done - Update the
status:frontmatter of the documents the item belongs to:- Story (has a
feature:tag): call list(feature, status=all). If every item is now[x], set the feature spec (thespec:path) tostatus: done, whatever it says today (draft,ready,in progress). If some items are still open, leave it. - Bug (
BUG-NNN): set the bug report (thebug:path, or the file indocs/bugs/with thatid:) tostatus: fixed. - Plan (has a
plan:tag): call list(plan, status=all). If every item linked to that plan is now[x], set the plan tostatus: done. With noplan:tag, close the plan named in the spec'splan:frontmatter only when the spec itself was just set to done. - No such document: skip.
- Story (has a
- Verify by re-reading every file touched before committing: the line is
[x]under## Done, no copy of it remains in another section, and each document'sstatus:matches step 6. Fix any miss now. - Commit:
git add docs/backlog.md {parent_document} {plan} git commit -m "chore(backlog): complete {id}"
Sync Operations
All sync operations are no-ops for the local backend:
- push_status: no-op
- push_summary: no-op
- push_stories: no-op
- pull_comments: returns empty (no external comments)
- pull_priorities: returns current file ordering (local is the source)
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

