/tasks — Actionable Task List

SkillProductivity

Flat actionable task list across the portfolio with direct URLs — PRs to review, issues to triage, comments, failing CI.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the /tasks — Actionable Task List skill

What this skill tells your AI

The instructions your AI receives, as published by me2resh/apexyard in .claude/skills/tasks/SKILL.md and read by ahel’s review.

A single ordered list of "things to click on right now". Where /inbox groups items by category, /tasks flattens everything into a prioritised TODO with one URL per line. Optimised for "I have 30 minutes, what should I do?".

Path resolution

Read the registry path via portfolio_registry, the per-project docs dir via portfolio_projects_dir, and the ideas backlog via portfolio_ideas_backlog — all from .claude/hooks/_lib-portfolio-paths.sh. Source the helper at the top of any bash block that touches those paths:

source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-read-config.sh"
source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-portfolio-paths.sh"
source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-tracker.sh"
registry=$(portfolio_registry)

Defaults match today's single-fork layout (./apexyard.projects.yaml, ./projects, ./projects/ideas-backlog.md). Adopters in split-portfolio mode override the portfolio.{registry, projects_dir, ideas_backlog} keys in .claude/project-config.json. Don't hardcode literal apexyard.projects.yaml or projects/ paths in bash blocks — the helper resolves whichever mode the adopter is in. See docs/multi-project.md.

Tracker-agnostic issue listing (#710 / AgDR-0093)

The issue sources below call tracker_list from _lib-tracker.sh (per repo: from the registry) instead of hardcoding gh issue list, so /tasks works on GitLab-tracked projects too:

# tracker_list <owner/repo> [state=…] [assignee=@me|none|<user>] [author=…] [labels=csv] [search=…] [since=ISO] [limit=N]
# → JSON array [{ref,number,state,title,url,labels,updatedAt}, …]  ([] on empty/unavailable)

Scope caveat (forge axis, #711). The PR sources still call gh pr list / gh api …/pulls. The PR/MR forge abstraction is #711; until it lands, those sources are GitHub-only, so /tasks is issue-axis tracker-agnostic, not fully tracker-agnostic. Filters GitHub expresses but GitLab can't (mentions:, commenter:, assignee=none on glab) degrade to a gh-only path or empty, noted per source.

Usage

/tasks
/tasks --top 10
/tasks --priority high
/tasks --markdown

Scope

Iterates every project in apexyard.projects.yaml (the registry at the root of your ops repo).

Where tasks come from

The task list is the union of:

SourceToolAxis
PRs awaiting your reviewgh pr list --search "review-requested:@me is:open"forge (#711)
PRs you authored that are blocked on you (changes requested, conflicts, failing CI)gh pr list --search "author:@me is:open review:changes_requested"forge (#711)
Issues assigned to you with high prioritytracker_list "$repo" assignee=@me labels=priority-high,priority-criticalissue ✓
Issues you opened with new commentstracker_list "$repo" state=open author=@me + client-side comment-recency filter (commenter: is gh-only)issue ✓
Mentions in unresolved threadsgh-only: gh search issues "mentions:@me is:open" (empty on non-gh trackers)issue (gh-only)
PR comments awaiting your responsegh api repos/{repo}/pulls/{n}/comments filtered to threads where you were mentioned and the last reply isn't yoursforge (#711)
Open Critical/High issues with no assignee in projects you owntracker_list "$repo" labels=priority-critical assignee=none (assignee=none degrades on glab)issue ✓
Failing CI on your authored open PRsfrom statusCheckRollupforge (#711)

Label semantics note: labels=priority-high,priority-critical is passed to each CLI's native --label handling, which is AND on both gh and glab. The intent here (high OR critical) is a pre-existing GitHub-search limitation carried over unchanged — call the two labels in separate tracker_list passes and union the results if strict OR is needed.

Prioritisation

Tasks are scored and sorted. Higher score = closer to the top.

SignalScore
Failing CI on your own PR+100
PR ready to merge (approved, CI green) — yours+90
Critical issue assigned to you+80
PR review requested by name on you+70
PR review requested on a team you're in+60
Changes requested on your PR+50
High-priority issue assigned to you+40
New comment on an issue you opened+30
Mention in an open thread+20
Medium-priority issue assigned to you+10
Low-priority issue assigned to you+1

Tie-breakers:

  1. Older updatedAt first (stale things bubble up)
  2. Same project as your current working directory first
  3. Alphabetical by repo

Output format

Default (terminal):

TASKS — 2026-04-06 09:14
========================
12 actionable items across 3 projects.

  1. [MERGE]  example-app#41  Add health endpoint        — approved + CI green
              https://github.com/your-org/example-app/pull/41
  2. [FIX-CI] example-app#42  CSV export                 — lint job failed
              https://github.com/your-org/example-app/pull/42
  3. [REVIEW] billing-api#8   Fix invoice rounding       — review requested 3h ago
              https://github.com/your-org/billing-api/pull/8
  4. [TRIAGE] example-app#117 [Bug] Login fails Safari   — priority-high, unassigned
              https://github.com/your-org/example-app/issues/117
  5. [REPLY]  marketing#5     Hero copy refresh          — designer commented 1h ago
              https://github.com/your-org/marketing/issues/5
  6. [FIX]    example-app#39  Refactor session store     — Code Reviewer requested changes
              https://github.com/your-org/example-app/pull/39
  …

Markdown (--markdown, suitable for pasting into a TODO file):

## Tasks — 2026-04-06

- [ ] **MERGE** example-app#41 — Add health endpoint (approved, CI green) — https://…
- [ ] **FIX-CI** example-app#42 — CSV export, lint job failed — https://…
- [ ] **REVIEW** billing-api#8 — Fix invoice rounding — https://…
- [ ] **TRIAGE** example-app#117 — Login fails on Safari (priority-high) — https://…
- [ ] **REPLY** marketing#5 — Hero copy refresh, designer commented — https://…

JSON (--json):

[
  {
    "id": "example-app#41",
    "type": "MERGE",
    "score": 90,
    "title": "Add health endpoint",
    "url": "https://...",
    "project": "example-app",
    "reason": "approved + CI green"
  },
  ...
]

Action types

TypeMeaning
MERGEApproved + CI green — click merge
FIX-CIYour PR has a failing check
REVIEWA PR is waiting on your review
FIXYour PR has changes requested
TRIAGEAn issue needs labelling, priority, or assignment
REPLYA comment is waiting on your response
WORKAn issue assigned to you with no PR yet
DECIDEA decision is blocking progress (/decide needed)

Filters

FlagEffect
--top NOnly show the top N items
--priority highOnly critical and high priority
--project <name>Limit to one project from the registry
--type MERGE,REVIEWComma-separated action types
--markdownMarkdown checklist output
--jsonJSON output

Rules

  1. Always include the URL on every line — the user needs to click
  2. One action per line — don't bundle "review and merge" as one task
  3. Always sort by score, then staleness — never alphabetical by default
  4. Multi-project aware — iterate the registry, not the org
  5. Never modify anything — read-only
  6. Skip resolved items — if a PR is merged or an issue is closed mid-run, drop it
  7. Cap at 50 items by default — if there are more, show count and suggest filters
  8. Prefer actionable over informational — "11 PRs reviewed by others" is not a task

Related skills

  • /inbox — same data, grouped by category instead of flattened
  • /status — current project state
  • /projects — portfolio table

Part of ApexYard — multi-project SDLC framework for Claude Code · MIT.

Signals

GitHub stars
498
Forks
271
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
tasks-me2resh
Source
github.com/me2resh/apexyard