taskwarrior-plugin/skills/task-status/SKILL.md
Read-only taskwarrior queue report — pending, blocked, ready tasks and drift vs linked PRs. Use when auditing queue health, orienting before a wave, or for standup summaries.
npx skillsauth add laurigates/claude-plugins task-statusInstall 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.
Read-only status report on the coordination queue. Strictly uses export | jq — never list — so parallel Bash batches from downstream skills stay safe.
| Use this skill when... | Use task-coordinate / task-add / task-done instead when... |
|---|---|
| Auditing pending / blocked / stale tasks across the project queue | Picking the top-N candidates for a wave dispatch — use task-coordinate |
| Detecting drift between tasks and their linked GitHub issues / PRs | Filing a new task surfaced by drift detection — use task-add |
| Folding gh pr status rollups into a standup-ready report | Closing a PR-ready task with a landed commit — use task-done |
task --versionfind . -maxdepth 1 -name '.git' -print -quitgh auth statustask _projectsGit probes (git rev-parse --show-toplevel, git remote) write to stderr
in a no-git cwd, and stderr from a Context backtick aborts the skill
before its body runs. Project resolution is done in the body (Step 1
below), where 2>/dev/null and exit-code handling are available.
Parse $ARGUMENTS:
--mine — limit to tasks where the agent UDA matches claude-${CLAUDE_SESSION_ID:0:8} (the value /taskwarrior:task-claim writes). Useful for "what am I currently holding?" reports.--blocked — only tasks with +blocked / +blocked_on_merge or active depends:--active — only +ACTIVE tasks (claimed and in flight)--stale=N — highlight tasks modified > N days ago--stale-claim-after=N — threshold (hours) for flagging a +ACTIVE claim as stale in the "Stale claims" section. Default 4. Reports only — never auto-stops.--project=<name> — override the auto-detected project filter--all — opt out of project filtering and report across every projectDefault behaviour is project-scoped — surfacing tasks from other repos as "queue noise" is the most common waste of agent context. Resolve the project identifier in this order:
--project=<name> if provided.--all → no project filter.git rev-parse --show-toplevel 2>/dev/null, run via the
Bash tool (where stderr suppression and non-zero exits are tolerated).Cross-check the resolved name against Known projects. If it is not in
the list, note it (likely a fresh project or no tasks filed yet) but
still apply the filter — task export returns [] cleanly when the
project has no matching tasks.
Execute this workflow:
Pull full state as JSON in a single call, scoped to the resolved project
(omit project:$PROJECT only when --all is set). task export emits
[] on an empty store — valid and exit 0. Substitute the literal
project name into the filter — do not use $() command substitution
in the inline command (shell-operator protections will reject it).
task project:myrepo status:pending export | jq '.[] | {id, description, urgency, tags, bpid, bpdoc, ghid, ghpr, agent, pid, host, branch, worktree, start, modified, depends}'
For completeness also pull recently-completed in the same project:
task project:myrepo status:completed end.after:now-7d export | jq '.[] | {id, description, bpid, ghid, end}'
In parallel, pull the in-flight set so the "In flight" and "Stale claims" sections in Step 5 have data to render:
task project:myrepo +ACTIVE export | jq '.[] | {id, description, agent, pid, host, branch, worktree, start, urgency}'
task project:myrepo +ACTIVE start.before:now-4h export | jq '.[] | {id, agent, host, branch, start}'
These three reads are independent and parallel-safe — export returns
exit 0 on empty.
By urgency descending, then by milestone (bpms), then by blueprint kind
(+wo / +prp / +fr / +re). Use jq to partition:
task project:myrepo status:pending export \
| jq 'group_by(.bpms) | map({milestone: .[0].bpms, tasks: sort_by(-.urgency)})'
For each task with bpdoc: check the file exists and is readable. Flag
missing or unreadable bpdoc as drift.
For each task with ghid in GitHub mode:
gh issue view "$GHID" --json number,state | jq
Flag:
drift: stale-open+pr_ready but PR not in OPEN — drift: pr-state-mismatchgh pr status --json number,title,state,statusCheckRollup | jq
Join by ghpr UDA. Annotate each matched task with its PR's check
rollup (SUCCESS / FAILURE / PENDING). Tasks tagged +pr_ready
with a green PR are the highest-value drain candidates.
Lead the report with the resolved project scope so the reader knows
whether they're seeing a single-project view or --all:
Project: myrepo (auto-detected from git toplevel)
Pass --all for cross-project view, --project=<name> to override.
Output these sections, in order:
+ACTIVE tasks with agent / branch / host / worktree and time since start. Sorted by start ascending (oldest first). Section header notes --mine / --all scope.--stale-claim-after): subset of "In flight" with start.before:now-Nh. Recommend /taskwarrior:task-release <id> per row — the report never auto-stops.depends:, no +blocked* tags, and not +ACTIVE. These are what /taskwarrior:task-coordinate would emit.bpmsEach row cites the command to act on it (/taskwarrior:task-done 7,
/taskwarrior:task-release 4, /taskwarrior:task-claim 11).
| Context | Command |
|---------|---------|
| Project queue JSON | task project:myrepo status:pending export \| jq |
| Cross-project queue (--all) | task status:pending export \| jq |
| Ready-for-dispatch (excludes claimed) | task project:myrepo status:pending -BLOCKED -ACTIVE export \| jq 'sort_by(-.urgency) \| .[:5]' |
| In flight | task project:myrepo +ACTIVE export \| jq '.[] \| {id, agent, branch, host, start}' |
| Stale claims (>4h) | task project:myrepo +ACTIVE start.before:now-4h export \| jq |
| Mine (claimed by this agent) | task project:myrepo +ACTIVE agent:claude-${CLAUDE_SESSION_ID:0:8} export \| jq |
| PR status | gh pr status --json number,state,statusCheckRollup |
| Drift check | gh issue view "$GHID" --json state |
| Never use | task list, task next, task report — exit 1 on empty |
| Filter | Expands to |
|--------|-----------|
| project:<name> | Single project (default scope) |
| status:pending | Open tasks |
| -BLOCKED | Exclude depends:-blocked |
| +ACTIVE / -ACTIVE | Tasks with task start time set / not set |
| start.before:now-4h | Stale claims |
| agent:claude-<sid> | Mine (UDA-based) |
| urgency.above:5 | High-urgency only |
| modified.before:now-30d | Stale |
| bpms:M6 | Single milestone |
/taskwarrior:task-coordinate — next-N candidates for dispatch/taskwarrior:task-claim — pick up a "Ready" candidate from this report/taskwarrior:task-release — release a "Stale claim" surfaced by this report/taskwarrior:task-add — file something surfaced by drift detection/taskwarrior:task-done — close PR-ready tasks.claude/rules/parallel-safe-queries.md — export | jq idiomtools
Scaffold a new ComfyUI custom-node repo (pyproject, CI, release-please, vitest+pytest, JS extension skeleton) in the picker/gesture vein. Use when bootstrapping or init-ing a comfyui node pack.
tools
Orchestrate a ComfyUI node pack from idea to registry: scaffold, create + seed the repo, open the gitops adoption PR. Use when releasing or spinning up a new comfyui node pack.
testing
macOS EndpointSecurity/EDR high CPU & battery drain. Use when Kandji ESF / XProtect pegs a core; trace the exec storm via powermetrics + eslogger.
development
odiff pixel-by-pixel image diffing. Use when comparing screenshots, detecting visual regressions, diffing before/after PNGs, asserting golden images.