Cross-project view for Backlog.md. One command tells you what's in progress, what's queued, and what's done — across every project under a folder. Reads the same markdown files Backlog.md already writes.
── Discounty-Expert (in-progress 2 · to-do 5 · done 23)
● BACK-12 Add OAuth login
● BACK-18 Fix checkout bug
── Bayan (in-progress 1 · to-do 2 · done 11)
● BACK-3 Migrate to Postgres
3 task(s) across 2 project(s) under /Users/you/Projects
One script. One command. No dependencies. Universal — works on any Mac, no Node, no Homebrew.
Backlog.md is a markdown-native task manager. It stores tasks as plain .md files inside each git repo, so each project is self-contained. That's a clean design — but if you work on many projects, there's no way to see "what am I in the middle of, everywhere?" without cd-ing into each repo.
This script fills that gap. It scans a root directory, finds every backlog/tasks/*.md file, parses the YAML frontmatter (just id, title, status), and groups the result by project.
That's it. It's a 200-line read-only viewer over files Backlog.md already manages.
curl -fsSLo /tmp/bo.sh https://raw.githubusercontent.com/SMKeramati/backlog-overview/main/backlog-overview.sh \
&& chmod +x /tmp/bo.sh && /tmp/bo.sh --install && source ~/.zshrcThat copies the script to ~/.backlog-overview/backlog-overview.sh and adds two aliases to your ~/.zshrc:
backlog-overview— the full namebo— short
Update later: re-run the same one-liner. --install overwrites in place; the aliases keep working.
bo # in-progress across ~/Projects (default)
bo --all # every status, every project
bo --status "To Do" # filter to one status
bo --counts # one line per project, no task titles
bo --root ~/work # scan a different folder
bo --plain # no colors (for pipes / grep / scripts)
bo --help # full reference# Morning glance — what was I doing yesterday?
bo
# Find a task by keyword across every project
bo --plain --all | grep -i oauth
# Just the counts, for a quick health check
bo --counts --all- Find.
find <root> \( -path "*/backlog/tasks/*.md" -o -path "*/.backlog/tasks/*.md" \) -type f— covers both Backlog.md layouts (defaultbacklog/and the hidden.backlog/variant). - Parse. A single
awkpass over every matched file reads the YAML frontmatter between the two---fences and extractsid,title,status. Quoted ('...'or"...") and unquoted forms both work. - Group. Sort by project, then status, then id. Print one block per project with a header that shows the per-status counts.
No state files. No daemon. No watching. Each run is a fresh scan — typically under 100 ms even on a folder with 50+ repos.
| Concern | Handled |
|---|---|
macOS Bash 3.2 (the default /bin/bash) |
✅ No 4.x features. Shebang pinned to /bin/bash. |
| Apple Silicon (arm64) and Intel (x86_64) | ✅ Architecture-independent. |
| No Node, no Homebrew | ✅ Uses only find, awk, sed, sort, printf — all bundled with macOS. |
| Linux | ✅ Same tools exist on every Linux distro. |
Hidden .backlog/ layout |
✅ Matched alongside the default backlog/. |
Quoted YAML values (title: "Foo: bar") |
✅ Quotes stripped. |
| Persian / Arabic / CJK titles | ✅ Byte-clean — passes UTF-8 through untouched. |
| Command | What it does |
|---|---|
bo |
Scan ~/Projects, show in-progress tasks grouped by project. |
bo --all |
Show tasks in every status. |
bo --status "<s>" |
Filter to one status ("To Do", "In Progress", "Done", or any custom value). |
bo --root <path> |
Scan a different root folder. |
bo --counts |
Per-project header lines only, no task titles. |
bo --plain |
Disable colors. Auto-disabled when stdout is not a terminal. |
bo --install |
Copy the script to ~/.backlog-overview/ and add backlog-overview + bo aliases to ~/.zshrc. Idempotent. |
bo --uninstall |
Remove the aliases. Backs up ~/.zshrc first. |
bo --help |
Print full usage. |
- Not a task editor. Read-only. To create / edit / move tasks, use Backlog.md itself (
backlog task create,backlog task edit, the MCP server, orbacklog browser). - Not a daemon. No background process, no file watcher. Run it when you want to look.
- Not a fork. This script never touches the
backlog/folder or thebacklogCLI's state. It only reads task files. - Not multi-format. It only understands Backlog.md's frontmatter shape. Other markdown task systems won't parse.
- Custom
backlog-dirpaths. Backlog.md lets you point the data folder anywhere viabacklog.config.yml. This script only auto-detects the two default locations (backlog/and.backlog/). If you set a custom path, the script won't see those tasks. (Fix on the roadmap; not hard — read the config — but adds dependencies.) - No multi-line YAML titles. Titles with
|or>block scalars aren't parsed. Inline quoted/unquoted titles work fine. - Status values are case-sensitive. Backlog.md ships
"To Do" / "In Progress" / "Done". If you customize them, pass the exact string to--status.
bo --uninstall # remove aliases (zshrc backup saved)
rm -rf ~/.backlog-overview # remove the script copyYour Backlog.md task files are never touched.
PRs welcome. Especially:
- Support for
backlog.config.ymlcustom paths. - A
--jsonoutput mode for scripting. - Linux distro testing (should work — please report).
- A short-circuit
bo <project-name>that jumps you into that repo (cd+backlog board).
MIT. See LICENSE.
- MrLesk/Backlog.md — the underlying task manager. This script is just a viewer over its files.
- Style and
--installpattern adapted from SMKeramati/claude-rtl.