agents/skills/check-todos/SKILL.md
Check for open obligations on a PR: unresolved comments, self-announced follow-ups, Jira status.
npx skillsauth add timofreiberg/dotfiles check-todosInstall 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.
test -d .jj && echo "jj" || echo "git"test -d .jj && jj log -r 'heads(ancestors(@) & bookmarks())' --no-graph -T 'bookmarks.join(", ") ++ "\n"' 2>/dev/null || git branch --show-current 2>/dev/nullgh api user --jq '.login' 2>/dev/null || echo "unknown"If $ARGUMENTS contains pr <number>, use that PR number.
Otherwise, auto-detect from the bookmarks listed above. For each bookmark, try:
gh pr view {bookmark} --json number,title,body,url --jq '"\(.number)\t\(.title)\t\(.body)\t\(.url)"'
Stop at the first bookmark that resolves to a PR. If none do, tell the user and stop — this skill needs a PR to work with.
Store: PR number, title, body, URL.
Run these in parallel where possible:
Use the GraphQL API to fetch review threads with resolution status:
gh api graphql -f query='
query($owner: String!, $repo: String!, $number: Int!) {
repository(owner: $owner, name: $repo) {
pullRequest(number: $number) {
reviewThreads(first: 100) {
nodes {
isResolved
isOutdated
path
line
comments(first: 10) {
nodes {
author { login }
body
createdAt
}
}
}
}
}
}
}
' -f owner='{owner}' -f repo='{repo}' -F number={pr_number}
Extract {owner} and {repo} from gh repo view --json owner,name.
Filter to threads where isResolved: false and isOutdated: false.
From the PR comments (both review comments from 2a and issue-level comments):
gh pr view {number} --comments --json comments --jq '.comments[] | "\(.author.login)\t\(.body)"'
Filter to comments authored by the current GitHub user. Look for commitment language:
Get the diff of the current PR branch to see what's already been addressed:
jj diff --git -r 'latest(trunk())..@'git diff $(git merge-base HEAD main)..HEADExtract a Jira ticket ID from the PR title. Pattern: \[([A-Z]+-\d+)\] at the start of the title.
If found and JIRA_URL, JIRA_API_TOKEN, and JIRA_USER_EMAIL are all set:
curl -s -u "$JIRA_USER_EMAIL:$JIRA_API_TOKEN" \
-H "Content-Type: application/json" \
"$JIRA_URL/rest/api/2/issue/{ticket_id}?fields=summary,status,assignee,subtasks,comment"
If env vars are missing, skip Jira with a note. If no ticket ID in the title, skip silently.
For each unresolved, non-outdated review thread:
For each self-announced commitment:
For Jira:
Start with a one-line summary: "N open items found (X review comments, Y commitments, Z Jira items)" or "All clear — no open obligations found."
For each still open or unclear thread:
For each still open commitment:
If a linked issue was found:
For each open item, suggest a concrete next step:
development
Quick internet research via a web-search-enabled model. Returns summaries with source URLs.
data-ai
Use when you want to work in an isolated jj working copy — parallel task, experimental scratch, subagent with its own tree. Covers creating a workspace, working inside it from anywhere, and cleaning up without losing history.
tools
Use when working on the pi coding agent harness or writing pi extensions.
testing
Use when creating, editing, or reviewing a skill before it ships. Covers when to write a skill, file layout, the SKILL.md shape, and how to verify it before relying on it.