Backlog steward that keeps a pool of ready, independently mergeable issues above a target by mining real sources (failing tests, TODOs, gaps, audits, user reports), deduplicating, sizing and labeling them ready. It files issues, so it runs only on `/lever backlog`, inside a delivery run whose idle policy is refill, on a schedule the user set up, or on an explicit ask ("file more issues", "keep them busy", "fill the backlog", "we have nothing to do").
npx skills add https://github.com/github/lever --skill keep-the-pool-full
Once implementation, review and merging are automated, the bottleneck moves upstream to supply. Agents with nothing well-defined to pick up either sit idle or invent work. This skill keeps a pool of issues that an agent can take, finish and land on its own: each one is real, independently mergeable, small, checkable and not a duplicate. The human job shifts from "build X" to setting the pool's target and its sources.
NOOP(no eligible work) repeatedly.DRY_RUN.POOL_QUERY (default is:open is:issue label:ready no:assignee). Measure consumption: ready issues closed or assigned per day over the last 7 days. Pool coverage = pool size / daily consumption, in days.TARGET_DAYS, end NOOP(pool healthy: N issues, C days) and post nothing. Otherwise the deficit is ceil(TARGET_DAYS × consumption) − pool, capped at MAX_FILED_PER_RUN.SOURCES order. Each candidate must cite evidence a reader can check:TODO/FIXME with an owner-free, local fix;SIZE_CAP into independent issues, not a dependency chain. If a candidate can't be made independently mergeable, drop it or file it as one human-decision issue.<!-- pool-source: <kind>:<path-or-test>:<hash> -->) and search for it before filing. If a match exists, comment the new evidence on it once (if allowed) instead of filing.READY_LABEL and the area label. Never assign it; consumers claim work by assignment or linked PR.pool: before → after (target T, coverage C days), filed n, skipped-duplicate d, dropped k. Silent when nothing was filed.find-the-loop).SIZE_CAP; one PR; no ordering dependency on other open issues.| Dial | Default | Options |
|---|---|---|
| POOL_QUERY | is:open is:issue label:ready no:assignee | Any issue search |
| TARGET_DAYS | 2 days of consumption | Integer; or a fixed count |
| MAX_FILED_PER_RUN | 5 | Integer; keep low until the invalid rate is known |
| SIZE_CAP | One PR, about 200 changed lines | Lines or files |
| SOURCES | tests, todos, gaps, audits, reports, follow-ups | Any subset, in priority order |
| READY_LABEL | ready | Repo label |
| Mode | file on repos you own; dry_run elsewhere | dry_run (write a candidate list only), file |
| Autonomy | L0 (issues only) | This skill never writes code; see docs/autonomy.md |
Use automate-it. Trigger: interval: daily (or hourly during an active delivery run). Tools: github/search_issues, github/search_pull_requests, github/issue_read, github/get_file_contents, github/search_code, github/actions_list, github/get_job_logs, github/list_label, github/create_issue, github/update_issue_labels, plus github/add_issue_comment if dedupe-comments are on. write_scope: repository (there is no triggering resource). Create it paused and dry-run it once; read the candidate list before enabling.
Track weekly, per source:
TARGET_DAYS.TARGET_DAYS or MAX_FILED_PER_RUN; if issues age past 14 days unclaimed, lower them.Take github/keep-the-pool-full from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.