用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/getsentry/outpost --skill auto-merge命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Triage and respond to comments on a PR. Fix if actionable, reply either way. Load repo-setup first.
Triage and respond to comments on a PR. Fix if actionable, reply either way. Load repo-setup first.
Diagnose and fix failing CI on a PR. Load repo-setup first.
基于 SOC 职业分类
正在显示 SKILL.md
| name | auto-merge |
| description | Auto-merge a PR after it is marked ready-for-review, if the change is small, non-disruptive, and all checks pass. |
| license | Apache-2.0 |
| metadata | {"audience":"autonomous-agents"} |
Merge a PR that was just promoted from draft to ready-for-review,
only when the change is small, non-disruptive, and every required
check is green. This skill is the natural successor to mark-pr-ready.
Load after the mark-pr-ready skill has run (or after a
pull_request.ready_for_review event). Do not load it for PRs
that were created as ready-for-review from the start — only for PRs
that transitioned from draft.
If any precondition fails, stop — do not merge. For precondition 7,
if the quiet period hasn't elapsed yet, schedule a one-shot follow-up
for the remaining time (Flue Durable Object scheduleFollowUp /
platform schedule(), or a run_once timer when running in-container)
and stop. The follow-up will re-trigger this skill when the period is up.
Classify the PR as "small and non-disruptive" only when all of these hold:
.github/workflows/, Dockerfile,
docker-compose*, Makefile, Justfile, Terraform *.tf).bun.lock, package-lock.json,
yarn.lock, pnpm-lock.yaml, Cargo.lock, go.sum).If the PR exceeds the size gate, stop. Post a comment noting the PR needs human review and list which criteria it exceeded.
Check quiet period. Verify the PR was marked ready at least 10 minutes ago with no reviewer activity since:
READY_AT=$(gh api "repos/<owner>/<repo>/issues/<N>/timeline" --paginate \
--jq '[.[] | select(.event=="ready_for_review")] | last | .created_at')
Calculate elapsed time. If less than 10 minutes have passed,
schedule a one-shot follow-up (Flue DO scheduleFollowUp / platform
schedule(), or in-container timer) for the remaining time with
entity_key set to the PR entity, and stop. The follow-up prompt
should instruct the agent to reload the auto-merge skill.
Also check for any reviewer comments or changes_requested
reviews that arrived after READY_AT:
gh api "repos/<owner>/<repo>/pulls/<N>/reviews" \
--jq '[.[] | select(.submitted_at > "'$READY_AT'" and .state != "APPROVED" and .state != "COMMENTED")]'
If any exist, stop — the PR needs human attention.
Verify PR state and target branch:
PR_JSON=$(gh pr view <N> --json state,isDraft,baseRefName)
STATE=$(echo "$PR_JSON" | jq -r '.state')
IS_DRAFT=$(echo "$PR_JSON" | jq -r '.isDraft')
BASE=$(echo "$PR_JSON" | jq -r '.baseRefName')
DEFAULT_BRANCH=$(gh repo view --json defaultBranchRef --jq .defaultBranchRef.name)
STATE=OPEN, IS_DRAFT=false. If draft or closed, stop.BASE == DEFAULT_BRANCH. If the PR targets a release or
other protected branch, stop — those need human review.Verify all checks pass:
CHECKS=$(gh pr view <N> --json statusCheckRollup \
--jq )
In all these cases, leave a comment explaining why auto-merge was skipped, and let a human decide.
mark-pr-ready
completes, or in response to a pull_request.ready_for_review webhook.--auto flag on gh pr merge respects branch protection rules.
If the repo requires approvals, the merge will wait until those are
satisfied.For each check, inspect status and conclusion:
status other than "COMPLETED" (e.g.
"QUEUED", "IN_PROGRESS", "PENDING"), stop — checks
haven't finished yet. Post a comment noting which checks are
still running.conclusion other than "SUCCESS",
"SKIPPED", or "NEUTRAL", stop — checks are failing. Post a
comment listing the failing checks.Quick jq filter for non-passing completed checks:
FAILING=$(echo "$CHECKS" | jq '[.[] | select(
.status == "COMPLETED" and
.conclusion != "SUCCESS" and
.conclusion != "SKIPPED" and
.conclusion != "NEUTRAL"
)]')
Quick jq filter for still-running checks:
PENDING=$(echo "$CHECKS" | jq '[.[] | select(.status != "COMPLETED")]')
Evaluate the size gate:
PR_DATA=$(gh pr view <N> --json additions,deletions,files)
ADDITIONS=$(echo "$PR_DATA" | jq '.additions')
DELETIONS=$(echo "$PR_DATA" | jq '.deletions')
TOTAL=$((ADDITIONS + DELETIONS))
FILES_CHANGED=$(echo "$PR_DATA" | jq '.files | length')
Check each criterion listed in the size gate section. Inspect the file list for CI/CD, lockfile, migration, auth, or public API changes:
echo "$PR_DATA" | jq -r '.files[].path'
Check for review objections and unresolved threads:
CHANGES_REQUESTED=$(gh pr view <N> --json reviews \
--jq '[.reviews[] | select(.state == "CHANGES_REQUESTED")] | length')
If CHANGES_REQUESTED > 0, stop — a reviewer has requested changes.
Check for unresolved review threads via the GraphQL API:
UNRESOLVED=$(gh api graphql -f query='
query($owner: String!, $repo: String!, $pr: Int!) {
repository(owner: $owner, name: $repo) {
pullRequest(number: $pr) {
reviewThreads(first: 100) {
nodes { isResolved }
}
}
}
}' -f owner=<OWNER> -f repo=<REPO> -F pr=<N> \
--jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length')
If UNRESOLVED > 0, stop — there are unresolved review threads.
Merge:
gh pr merge <N> --squash --auto --delete-branch
Use --squash to keep the main branch history clean.
Use --auto so GitHub waits for branch protection rules.
Use --delete-branch to clean up the feature branch.
Post a short comment confirming the merge was enabled. Mention the total diff size and that all checks passed. Write it naturally — vary the wording, don't use a canned phrase.