| name | backlog |
| description | Daily backlog management — full planning review OR add a single entry from a URL. Full review: gathers Jira sprint, GitHub PRs, checked-off items, and collaboratively plans the day. Add from URL: looks up a Teams message, Jira ticket, GitHub PR/issue, or incident.io alert and creates a concise backlog entry with a [ref] link. Triggers: /backlog-review, /update-backlog, "update my backlog", "plan my backlog", "what should I work on today", "refresh backlog", "backlog update", /backlog-add, "add this link to backlog", "backlog from link", "look up and add to backlog"
|
| user_invocable | true |
/backlog — Daily Backlog Management
Two modes: full daily review (default) or add single entry from URL (when a URL is provided).
Backlog Location
File: /Users/meain/.local/share/sbdb/Backlog/Backlog.md
Sections: Today, Tomorrow, This Week, Weekend, Next Week, Whenever, Ongoing, and dated "Before" sections.
Mode A: Add Entry from URL
When given a URL, classify the source, fetch content, and add a task to the backlog.
Step 1: Classify
| Pattern | Type |
|---|
teams.microsoft.com/l/message/ | Teams message |
veeam-vdc.atlassian.net/browse/ | Jira ticket |
github.com/.../pull/ | GitHub PR |
github.com/.../issues/ | GitHub issue |
app.incident.io/ | incident.io alert/incident |
Step 2: Fetch Content
- Teams: Use MS365 MCP
read_resource with URI teams:///teams/{groupId}/channels/{channelId}/messages/{messageId}. Extract sender name, message body.
- Jira:
jira issue view PROJ-123 --plain — extract summary, status, assignee, type.
- GitHub PR:
gh pr view <url> --json title,author,body,state
- GitHub issue:
gh issue view <url> --json title,author,body,state
- incident.io: Use incident.io MCP tools (
alert_show or incident_show).
Step 3: Compose Entry
Format: - [ ] <concise description> [ref](<original-url>)
Guidelines:
- Keep description short — a few words, enough to identify the task. No inline rationale or detail.
- If more context is needed, create a task note and link it with a wiki-link instead of expanding the description.
- Include person's first name if someone is asking/assigning something
- Jira:
Fix auth token storage bug [DP-1234](url)
- GitHub PR:
Review [repo#number](url): summary
- Teams:
Review topic from Name [ref](url)
- Use
[x] for completed or won't-do items. Never use [-] or any other checkbox state.
Step 4: Add to Backlog
Use /vault skill to add to the specified section (default: Today). If unavailable, directly edit Backlog.md — find the target section heading and insert at the end of that section.
Mode B: Full Daily Review
Collaboratively update the Today section of the backlog by pulling data from external sources and working with the user to decide what's realistic.
Step 0: Verify Today's Date
Always run date "+%Y-%m-%d (%A)" and treat its output as authoritative.
Monday cleanup: /Users/meain/.local/share/ignored-prs-for-review.yaml is a YAML file with three top-level list keys: prs (specific PR path fragments, e.g. owner/repo/pull/123), repos (bare repo names — blocks every PR from that repo), and people (author logins — blocks every PR by that person). Only the prs list resolves to real PRs, so Monday cleanup only touches that section — leave repos and people entries untouched.
If today is Monday, extract just the prs entries and check each one's state:
awk '/^prs:/{f=1;next} /^[a-zA-Z_]+:/{f=0} f' /Users/meain/.local/share/ignored-prs-for-review.yaml | sed -E 's/^[[:space:]]*- //'
For each non-empty result line:
export GIT_DIR=$(jj git root 2>/dev/null || echo .git)
result=$(gh pr view "https://github.com/$prpath" --json state 2>&1)
state=$(echo "$result" | grep -o 'OPEN\|MERGED\|CLOSED')
(use a variable name other than path — zsh aliases lowercase path to $PATH, and overwriting it breaks every subsequent command in the shell).
Remove any prs entries where state is not OPEN (merged, closed, or unknown/deleted), rewriting only that list in the YAML file — leave repos and people untouched. Report how many were pruned.
Step 1: Read Backlog
Read the full backlog file first.
Step 2: Handle Checked-Off Items
Note the checked-off items from Today — they will be archived to Before during Step 5. Format: ### YYYY-MM-DD (DayOfWeek). Get the date with:
~/.agents/skills/backlog/scripts/date-before.sh
Insert the new date block at the end (bottom) of the Before section — Before is chronologically ascending (oldest at top, newest at bottom).
Step 3: Gather External Data (parallel)
All Jira and GitHub commands must be run with dangerouslyDisableSandbox: true — the sandbox blocks TLS certificate verification needed for these hosts.
3a. Jira sprint:
jira issue list -q "sprint in openSprints() AND assignee = currentUser()" --raw 2>&1
Returns JSON array with raw Jira issue data. Parse with jq to extract key, status, summary.
Also fetch the sprint end date for the "This Cycle" section header:
jira sprint list --project DP | awk '/active/ {print $6}' | head -1
Returns a date like 2026-06-29. Use it in the section header as ### This Cycle (ends YYYY-MM-DD). If the backlog already has a "This Cycle" header with a different date, update it to reflect the current sprint.
3b. GitHub PRs — pending reviews:
~/.agents/skills/backlog/scripts/pending-prs.sh
Returns JSON array of PRs where user is a direct reviewer (not via team), excluding approved PRs, drafts, and Veeam-VDC/vdc-shared-data-plane PRs (never surface data-plane PRs — not the user's area). Also exclude dependabot PRs from Veeam-VDC repos — they are auto-reviewed and merged.
After fetching, filter out ignored PRs/repos/people. Flatten the YAML blocklist to one pattern per line, then filter the one-PR-per-line JSON with grep -vFf:
~/.agents/skills/backlog/scripts/pending-prs.sh | jq -c '.[]' | grep -vFf <(grep -E '^[[:space:]]*- ' /Users/meain/.local/share/ignored-prs-for-review.yaml | sed -E 's/^[[:space:]]*- //')
Apply the same flatten-and-filter pattern (jq per-line, then grep -vFf against the flattened YAML) whenever filtering PR lists in this skill, including the meain/* repos list in 3b-ii.
3b-ii. PRs from meain/ repos needing review:* Open PRs in repos owned by the meain GitHub org (user's personal projects where others open PRs):
GIT_DIR=$(jj git root 2>/dev/null || echo .git) gh search prs --state=open --owner=meain --json number,title,url,repository,updatedAt,isDraft,author 2>&1
Include all non-draft PRs not authored by meain. Filter out ignored PRs/repos/authors using the same flatten-and-filter pattern as 3b. Surface these in a separate "meain/* repos" subsection of the candidates file.
3c. PRs authored by user: Open PRs authored by the user across Veeam-VDC org.
3d. Calendar: Use MS365 MCP outlook_calendar_search to fetch today's meetings.
3e. This Cycle candidates: From the Jira sprint results (Step 3a), identify items that are not Done and not already present anywhere in the backlog file (check all sections — Today, Tomorrow, This Week, This Cycle, Next Week, Whenever). These are sprint commitments that have fallen off the radar.
Step 4: Select Candidates via Emacs
Write all candidates to /tmp/backlog-candidates-YYYY-MM-DD.md with - [ ] lines, grouped by:
- Morning routine (Apply rosemary water, Apply sunscreen, Check emails, Check Slack, Check Teams, Charge devices)
- Today's meetings (from calendar — list as info, no checkboxes; don't add to backlog)
- My PRs — approved (ready to merge)
- My PRs — needs action
- PRs needing direct review — split into subsections:
- Recent (this week): PRs updated within the last ~7 days (only where
login: meain is a direct reviewer, not team; exclude PRs with "local-dev" in the title, never include vdc-shared-data-plane PRs, and never include dependabot PRs from Veeam-VDC repos — they are auto-reviewed)
- Older (sitting for a while): PRs more than ~7 days old that are still open and awaiting review (same exclusion rules apply) — useful for surfacing stale reviews that may have been overlooked
- meain/ repos*: Open PRs in
meain-owned repos (from Step 3b-ii), grouped separately — always include these regardless of age
- This Cycle — sprint items not yet in the backlog (from Step 3e); selected items go into the
### This Cycle section, not Today
- Candidates from other sections (Tomorrow/This Week/Whenever worth pulling in)
The "Checked-off items to move to Before" header must include the day name, e.g. (2026-06-03, Wednesday).
Inline Jira details: For any candidate line that references a Jira ticket (e.g. [DP-1234](url) or a DP-1234 in a PR title), fetch the ticket with jira issue view DP-1234 --plain (run in parallel for all tickets, dangerouslyDisableSandbox: true) and add a concise detail line immediately below the candidate, indented and prefixed with ↳. Format: ↳ DP-1234 (Type, Status, assignee/mine): one-line summary of the ask. This lets the reader glance at ticket context while selecting. These ↳ lines are candidate-file only — do NOT carry them into Backlog.md, which stays single-line per item.
Invoke the /edit-in-emacs skill with the file path (blocking, 600s timeout). After it returns, treat remaining - [ ] lines as selections.
Handling (ignored) markers: After the emacs edit returns, scan the candidates file for any lines containing (ignored). For each such line, extract the GitHub URL and append it (as a path fragment like owner/repo/pull/N) to /Users/meain/.local/share/ignored-prs-for-review. Do not add these PRs to the backlog.
Never use AskUserQuestion / multi-select prompts — always go straight to the emacs file.
Step 5: Commit Then Update Backlog
Before writing any changes to the backlog file, commit the current state:
cd /Users/meain/.local/share/sbdb && git add -A && git commit -m "Before backlog updates"
Then:
- Move items from other sections to Today (don't duplicate)
- Add new "This Cycle" candidates to the
### This Cycle section (not Today)
- Add new items with reference links
- Preserve priority emojis near top of Today
Step 6: Code Review Summaries (on request only)
Do not generate these automatically — the user rarely reads them. Only do this if explicitly asked (e.g. "generate summaries for today's reviews", "add a code review summary for cpb#5046").
When asked, spin off parallel background agents — one per requested PR. Each agent should:
- Fetch the PR diff and details from GitHub
- Run
/explain-flow on the PR to generate a code flow summary
- Write the result to:
/Users/meain/.local/share/sbdb/Artifacts/Code Reviews/<org>/<repo>/<pr-number>.md
For example: Artifacts/Code Reviews/Veeam-VDC/control-plane-backend/5046.md
- Update the matching backlog line to append a markdown link:
- [ ] Review [cpb#5046](https://github.com/...): title (author) [summary](Artifacts/Code%20Reviews/Veeam-VDC/control-plane-backend/5046.md)
Use [summary] as link text. Path is vault-root-relative (no ../). URL-encode spaces (Code%20Reviews).
- Commit the updated backlog file.
Formatting Rules
- Prefer inline links over trailing links (e.g.
Merge [repo#123](url))
- Trailing
[ref](url) only for URLs without a natural inline anchor (Teams links)
- Each PR must be on its own line
- Never remove section headers (Today, Tomorrow, etc.) even when empty
- Show meeting times in IST (UTC+5:30)
- Keep all backlog entries short — a few words per line. Use task notes for detail.
- Only two checkbox states:
- [ ] (open) and - [x] (done/won't-do). Never use [-].