Manage the weekly todo note. Use this skill whenever the user asks to add a ticket to their todos, move a ticket between days, mark a todo as done, or create a Jira subtask from a PR review comment. Handles Jira title lookup, PR/status checks, and subtask creation automatically.
Resources
6Install
npx skillscat add nakadie/claude-skill-todo-manager Install via the SkillsCat registry.
Setup
SKILLS=$(dirname "$(realpath "${BASH_SOURCE[0]:-$0}")") # or set explicitly to the skill directory
source $SKILLS/config.sh
WEEK_FILE=$(bash $SKILLS/bin/week-file.sh) # resolve first; all operations depend on itIf $SKILLS/customSettings.md exists, read it now. Its rules override the defaults in this file.
Note file sections: ## Monday–Friday, ## Next, ## Other, ## Archived, ## Notes
Add a ticket
mcp__atlassian__getJiraIssuecloudId=$JIRA_CLOUD_ID issueIdOrKey=SET-XXXX fields=["summary"]python3 $SKILLS/bin/add-ticket.py "$WEEK_FILE" "- [ ] [SET-XXXX]($JIRA_BASE/browse/SET-XXXX) — <summary>" ["## Tuesday"]
Default section: today's weekday. Exits cleanly if ticket already exists.
Move a ticket
python3 $SKILLS/bin/move-ticket.py "$WEEK_FILE" SET-XXXX "## Wednesday"
Valid sections: ## Monday ## Tuesday ## Wednesday ## Thursday ## Friday ## Next ## Other
Archive a ticket
python3 $SKILLS/bin/archive-ticket.py "$WEEK_FILE" SET-XXXX "$ARCHIVED_TODOS"
Removes from weekly note; appends to $ARCHIVED_TODOS with #parked.
Review pattern
Given a section (or whole file for weekly):
- Read
$WEEK_FILEdirectly. Find section headers to determine line ranges.
Collect all unchecked tasks (- [ ] ...) in the relevant section(s), recording each task's line number and the SET-\d+ key in its text. - Fetch in parallel for each ticket:
mcp__atlassian__getJiraIssuefields=["summary","status","issuelinks","assignee"]mcp__github__search_issuesquery="org:paidy SET-XXXX is:pr is:merged"mcp__github__search_issuesquery="org:paidy SET-XXXX is:pr is:open"
For each open PR found, also fetchmcp__github__get_pull_request_reviewsto count approvals.
- Show table:
| Ticket | Summary | Checked? | Jira Status | PR | Suggested transition |
PR column values:- Merged PR found → link to PR
- Open PR found → "Open — N approvals" (link to PR)
- No PR → —
- For each unchecked ticket with a merged PR — ask "Mark SET-XXXX as done?". On yes:
python3 $SKILLS/bin/set-done.py "$WEEK_FILE" SET-XXXX - Suggested transition logic:
- "implemented by" link with staging+Verified → "Merged/In Staging"
- "implemented by" link with production+Verified → "Done"
- merged PR found → "Merged/In Staging"
- Jira status Done/Verified → "Done"
- fallback → no suggestion
- Show all transitions, ask one confirmation. For each where assignee.accountId == $ASSIGNEE_ID:
mcp__atlassian__getTransitionsForJiraIssue→mcp__atlassian__transitionJiraIssue. Skip others; inform user.
Update todos
- Run review pattern on all ticket keys in
## <today> - Show
## Nextand## Otherread-only
Daily review
If today is Friday → run Weekly review instead.
Next-day map: Monday→Tuesday, Tuesday→Wednesday, Wednesday→Thursday, Thursday→Friday
- Run review pattern on all ticket keys in
## <today> python3 $SKILLS/bin/move-uncompleted.py "$WEEK_FILE" "## <today>" "## <tomorrow>"- Show
## Nextand## Otherread-only
Weekly review
- Run review pattern on: all keys in day sections +
## Next(all) +## Other(checked only). Table grouped by day. python3 $SKILLS/bin/rollover.py "$WEEK_FILE"
Create subtask from PR review comment
- Identify parent ticket from PR title/branch; ask if unclear
- Read the comment carefully in context (surrounding code, diff hunk, any replies). Derive a proposed summary in the format
[servicename] <description>that accurately captures what the commenter is asking for — not just a paraphrase of their words. Present the proposed summary to the user and confirm or iterate before creating the ticket. mcp__atlassian__createJiraIssueissueType=Sub-task project=SET parent=SET-XXXX summary="[servicename] " description="> \n\nView comment" assignee_account_id=$ASSIGNEE_ID
Summary format:[servicename] description— e.g.[billing-service] add "it" scope to billingServiceClient dependency
Description: blockquote the full comment text, then a blank line, then the link to the comment.gh api repos/{owner}/{repo}/pulls/comments/{comment_id}/replies -f body="[SET-XXXX]($JIRA_BASE/browse/SET-XXXX)"— comment_id frommcp__github__get_pull_request_commentspython3 $SKILLS/bin/add-ticket.py "$WEEK_FILE" "- [ ] [SET-XXXX]($JIRA_BASE/browse/SET-XXXX) — <summary>"