/tasks — Actionable Task List
SkillProductivityFlat 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.
No other account needed.
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/tasksis issue-axis tracker-agnostic, not fully tracker-agnostic. Filters GitHub expresses but GitLab can't (mentions:,commenter:,assignee=noneon 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:
| Source | Tool | Axis |
|---|---|---|
| PRs awaiting your review | gh 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 priority | tracker_list "$repo" assignee=@me labels=priority-high,priority-critical | issue ✓ |
| Issues you opened with new comments | tracker_list "$repo" state=open author=@me + client-side comment-recency filter (commenter: is gh-only) | issue ✓ |
| Mentions in unresolved threads | gh-only: gh search issues "mentions:@me is:open" (empty on non-gh trackers) | issue (gh-only) |
| PR comments awaiting your response | gh api repos/{repo}/pulls/{n}/comments filtered to threads where you were mentioned and the last reply isn't yours | forge (#711) |
| Open Critical/High issues with no assignee in projects you own | tracker_list "$repo" labels=priority-critical assignee=none (assignee=none degrades on glab) | issue ✓ |
| Failing CI on your authored open PRs | from statusCheckRollup | forge (#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.
| Signal | Score |
|---|---|
| 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:
- Older
updatedAtfirst (stale things bubble up) - Same project as your current working directory first
- 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
| Type | Meaning |
|---|---|
MERGE | Approved + CI green — click merge |
FIX-CI | Your PR has a failing check |
REVIEW | A PR is waiting on your review |
FIX | Your PR has changes requested |
TRIAGE | An issue needs labelling, priority, or assignment |
REPLY | A comment is waiting on your response |
WORK | An issue assigned to you with no PR yet |
DECIDE | A decision is blocking progress (/decide needed) |
Filters
| Flag | Effect |
|---|---|
--top N | Only show the top N items |
--priority high | Only critical and high priority |
--project <name> | Limit to one project from the registry |
--type MERGE,REVIEW | Comma-separated action types |
--markdown | Markdown checklist output |
--json | JSON output |
Rules
- Always include the URL on every line — the user needs to click
- One action per line — don't bundle "review and merge" as one task
- Always sort by score, then staleness — never alphabetical by default
- Multi-project aware — iterate the registry, not the org
- Never modify anything — read-only
- Skip resolved items — if a PR is merged or an issue is closed mid-run, drop it
- Cap at 50 items by default — if there are more, show count and suggest filters
- 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