Skill v1.0.0
currentTrusted Publisher100/100version: "1.0.0" name: autopilot-pr-triage-worker activation_card: on description: >- Use this skill to triage ONE microsoft/apm pull request already selected by autopilot-pr-triage-scheduler. Covers community PRs that fix an issue and PRs opened without an issue. Return one advisory recommendation, never human approval, never a diff review, never merge. Not a queue manager and not autopilot-pr-review-worker.
autopilot-pr-triage-worker
Advisory classification of ONE already-selected PR. Do not review the diff as autopilot-pr-review-worker does. Do not drive merge.
Activation card
activation_card: on. Before any PR read or GitHub write, emit this Enter card with every field filled. Missing field -> stop.
skill: autopilot-pr-triage-workerskill_path: <resolved directory of this SKILL.md>mode: runsubject: microsoft/apm#<pr-number>path: triageintent: advise one already-selected PRorigin: unattended | actor-sessionwrite: on | offjson: off | ondebug: off | onrepo: microsoft/apmpr: <positive integer>invocation: agentic-workflow | actor-session
Rules:
writedefaults toonwhen the caller omitted it.write: offreturns the filled template only. Do not comment,
add labels, or remove labels.
write: onposts one GitHub comment viaautopilot-comment
and processing / classification labels. Never assign. Never request reviewers. Do not call gh pr comment yourself. Do not write status/accepted, status/needs-design, or status/needs-triage. Write status/deferred only when this PR is not labelled status/accepted and has no same-repo linked issue labelled status/accepted.
jsondefaults tooffwhen omitted or unknown. Omittedjson
is not a missing-field stop.
json: off-> no machine JSON receipt.json: on-> fill JSON only as an internal payload (session
file or parent Exit). Never post it on GitHub.
debugdefaults tooffwhen omitted or unknown. Omitteddebug
is not a missing-field stop.
debug: off-> passpublic_bodyas the Suggested PR comment
(unwrap the markdown fence) to autopilot-comment. Do not pass recommendation, linked issue, classification, or next action headings as public_body.
debug: on-> passdebug_bodyas the filled template
without a JSON fence. autopilot-comment prefixes [i] Skill debug is on.
- Load
autopilot-commentbefore any GitHub comment write.
source_skill: autopilot-pr-triage-worker. Missing card -> stop.
originfail-closed unknown ->unattended.- One PR. Do not nest a scheduler path.
After the run, emit this Exit receipt:
skill: autopilot-pr-triage-workersubject: microsoft/apm#<pr-number>path: triagewrite: on | offjson: off | ondebug: off | onposted: yes | nolabels_applied: <comma list or none>approved: n/a
Read assets/label-contract.json (same contract as issue triage) before reasoning. Do not invent a second marker.
Origin and writes
No assignment needed. Never request reviewers. Unattended and actor-session are equally read-only for ownership.
This worker owns those writes even when summoned without a scheduler. The scheduler must not comment or label.
Allowed writes: one advisory comment plus processing / optional classification labels from the contract. Never write status/accepted, status/needs-design, or status/needs-triage.
Auto-defer: if this PR is not labelled status/accepted and has no same-repo linked issue labelled status/accepted, add status/deferred (write: on only). Do not overwrite status/accepted already on the PR. Linked means Fixes / Closes / #N in the body or commits, or GitHub closingIssuesReferences, same repository. Any one accepted linked issue or status/accepted on the PR blocks auto-defer.
CODEOWNERS reviewRequests is runtime authority. Note owners in the comment. Never add or remove review requests.
Context (mandatory)
Before advising, paginate the complete PR conversation, reviews, and review comments. If the body or commits reference Fixes / Closes / #N, read that issue's complete conversation too. No fresh advisory without that context.
If a prior triage comment's watermark still matches HEAD conversation, no-op (do not post a duplicate).
Procedure
- Confirm the PR is the single target. Missing number -> stop.
- Gather full context. Record whether this PR is labelled
status/accepted, and linked same-repo issues and whether any carries status/accepted.
Recommendation is one of: ready-for-review | needs-design | needs-issue | duplicate-of | decline-with-reason | auto-handle.
- Neither this PR nor a linked same-repo issue is
status/accepted -> recommend needs-issue, add status/deferred when write: on, and thank the author. Invite them to open an issue for maintainer review and acceptance first, per CONTRIBUTING.md ("Start with an issue, not an implementation."). Link https://github.com/microsoft/apm/blob/main/CONTRIBUTING.md
ready-for-reviewwhen this PR or a linked same-repo issue is
status/accepted. It is not merge approval and is not a request to run autopilot-pr-review-scheduler.
- Post only if the comment would change. Probe
$REPO_ROOT/.agents/skills/autopilot-comment/SKILL.md (or the sibling package). Missing -> stop. Do not post. Activate autopilot-comment (source_skill: autopilot-pr-triage-worker). Do not call gh pr comment yourself. debug: off: Suggested PR comment body as public_body (not the filled template). debug: on: filled template as debug_body. Missing footer after that write is a failed post -- patch via autopilot-comment (intent: patch). Add the contract processing marker. Do not remove status/needs-triage.
Hard nos
- Do not merge, push, assign, or request reviewers.
- Do not run
autopilot-pr-review-workerorautopilot-pr-merge-worker. - Do not contradict CODEOWNERS.
- Do not treat labels or this comment as
status/accepted. - Do not write
status/deferredwhen a linked issue is
status/accepted or the PR already has status/accepted.
- ASCII only.