autopilot-issue-delivery-scheduler
SkillProductivityLets your agent queue accepted GitHub issues and hand them to a small pool of worker sessions.
Use autopilot-issue-delivery-scheduler in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add autopilot-issue-delivery-scheduler and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the autopilot-issue-delivery-scheduler skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
About this skill
Use this skill to queue maintainer-accepted microsoft/apm issues (`status/accepted`) and fan them out through an isolated pool (default 2) of autopilot-issue-delivery-worker sessions. Any accepted type is eligible. Advisory `triage/recommended` is not authorization. Does not triage. Does not review
What this skill tells your AI
The instructions your AI receives, as published by microsoft/apm in .agents/skills/autopilot-issue-delivery-scheduler/SKILL.md and read by ahel’s review.
User-facing ACCEPTED-ISSUE implementation queue. This skill SELECTS authorized issues and THROTTLES fan-out. It does not triage and does not review PRs.
Compose autopilot-issue-delivery-worker
one issue per slot. Never borrow slots from
autopilot-issue-triage-scheduler,
autopilot-pr-review-scheduler, or
autopilot-pr-triage-scheduler.
Activation card
activation_card: on. Before any queue read or spawn, emit
this Enter card with every field filled. Missing field -> stop.
skill: autopilot-issue-delivery-scheduler
skill_path: <resolved directory of this SKILL.md>
mode: run
subject: microsoft/apm
path: delivery
intent: select accepted issues and fan out delivery workers
origin: unattended | actor-session
write: off
repo: microsoft/apm
fanout_limit: <positive integer>
invocation: agentic-workflow | actor-session
Rules:
writeis alwaysoff. This scheduler never comments, labels, assigns, or requests reviewers.write: on-> stop.originfail-closed unknown ->unattended.invocationis the harness. Copilot App, local session, Cloud Agent, and Remote Agent areactor-session.agentic-workflowis only gh-aw / GitHub Actions. Do not copyoriginintoinvocation.- One queue. Do not nest another scheduler path.
After the run, emit this Exit receipt:
skill: autopilot-issue-delivery-scheduler
subject: microsoft/apm
path: delivery
write: off
queued: <integer>
spawned: <integer>
approved: n/a
Invocation
Works in local sessions, Copilot App automations, Cloud Agent, Remote Agent, and Agentic Workflows.
Resolve ORIGIN before any GitHub write:
unattended-- workers still run; they must not assign.actor-session-- workers treat assignment as a hard gate before any implementation. Assignment is the public signal of which user is working the issue.
Ownership writes:
- Issue triage: none (no assignment needed)
- Code (accepted implementation): assign the implementing user (
@me) - PR review: request the reviewing user as reviewer, never assignee
INTENT for this scheduler is implement only as a parent signal
to workers. This scheduler itself never assigns, never requests
reviewers, and never writes human decision labels.
Selector
all(default) -- every open issue that already carriesstatus/accepted, plus any issue the caller named as a bounded accept. Type does not matter (type/bug,type/feature,type/automation, docs, refactor). Escalate everything else. Do not run triage-panel from this scheduler.bugs-- same gate, plustype/bug. Worker uses LEGIT / UNCLEAR / FIXED-AT-HEAD plus PRINCIPLES.md alignment.
type/bug or triage/recommended without status/accepted
is not eligible unless the caller named a bounded accept.
Selection
Build the queue from the caller list or gh issue list on
status/accepted (selector bugs: also require type/bug).
An issue is eligible for the queue only if it already carries
status/accepted or the caller named it as a bounded accept.
That membership is a communication signal, not implementation
permission. triage/recommended and legacy status/triaged
are advisory processing markers and are not authorization.
Workers re-check scripts/governance/eligibility.cjs from the
trusted default branch and require fresh responsible-human
confirmation before any mutate. ORIGIN unattended never
implements. Do not dispatch an unaccepted issue. Do not run
triage-panel to create any marker. Do not write status/accepted.
Skip locked and closed issues unless the caller named them.
Deduplicate by number. Do not skip bot-authored issues that
already carry status/accepted or that the caller named.
Human accept is the gate; author type is not.
Skip status/needs-design unless the caller named the issue.
Skip status/needs-triage and status/deferred unless named.
Skip status/shepherding and status/in-flight unless named
(those belong to PR review or an in-flight owner). Skip issues
assigned to another user unless the caller named them; do not
steal in-progress work.
Do not open a second PR when one already addresses the issue; return that PR number.
After a worker opens a PR, do NOT fill this pool with
autopilot-pr-merge-worker. Hand the PR number to the
caller for autopilot-pr-review-scheduler.
Queue table (mandatory)
Before any spawn, emit the keep-set and the drop-set in plan.md
and in the session report. Missing table, missing column, or blank
rationale -> stop. Do not spawn.
Keep-set (items this run will schedule). One row per item. Do not truncate to FANOUT_LIMIT:
| number | kind | labels | rationale | slot |
Drop-set (considered, then not scheduled). slot is -:
| number | kind | labels | rationale | slot |
kind:issueorprlabels: current GitHub labels, comma-separated;noneif emptyrationale: why queued or dropped (helper rule and labels)slot: 1-based spawn order, or-when dropped
Empty keep-set is success. Still emit the drop-set, or none.
You are the sole table writer. Put selector and existing-PR
facts in rationale.
Fan-out
Load assets/fan-out-pool.md. Default
FANOUT_LIMIT=2 concurrent slots. Isolated to this run.
FANOUT_LIMIT is concurrency, not queue length. Drain the full
selected list; when a slot returns, fill it with the next item.
Procedure
- Probe worker-code on disk. Missing sibling -> stop.
- Build the queue. Emit the mandatory queue table (labels + rationale) before any spawn.
- Drain the selected list. Concurrent slots <= FANOUT_LIMIT.
One issue per slot. When a slot returns, dispatch the next
queued issue. Do not stop because the pool was full. Name each
worker session
Issue delivery #<issue-number>. - Never auto-merge.
- Print a final report from the table.
Hard nos
- Do not share this pool.
- Do not dispatch the same issue to two slots.
- Do not dispatch an unaccepted issue.
- Do not dispatch an issue assigned to another user unless named.
- Do not drop a bot-authored issue that already carries
status/accepted. - Do not triage or review PRs inside this scheduler.
- Do not contradict CODEOWNERS.
- ASCII only.
Signals
- GitHub stars
- 4k
- Forks
- 380
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
autopilot-issue-delivery-scheduler- Source
- github.com/microsoft/apm
Related picks
Skill · tddworks
The pick for GitHub Actionsgithub-actions-docs
Skill · devantler-tech
The pick for GitHub Actionssocial
Skill · coreyhaines31
More in Productivitygws-calendar
Skill · googleworkspace
More in Productivitylark-workflow-standup-report
Skill · larksuite
More in Productivitywriting-plans
Skill · obra
More in Productivity