Pull requests
SkillDev toolsLets your agent open and manage a GitHub pull request, from branch and changeset through checks, reviews, and backports.
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 Pull requests skill
About this capability
Take a change through a verdaccio/verdaccio pull request, branch, checks, changeset, title, body, labels, draft-to-ready, then the CI and review rounds after every push, plus the port PRs to other release lines. Use when opening a PR, after pushing to one, when a check fails, or when review comment
What this skill tells your AI
The instructions your AI receives, as published by verdaccio/verdaccio in .agents/skills/pull-requests/SKILL.md and read by ahel’s review.
Opening the PR is the middle of the task. It is done when the checks are green, the review round has nothing left to act on, and every release line that needs the change has its own PR or an explicit note that the port is pending.
Read the commit and label rules in AGENTS.md first; this skill is the workflow around them.
Before opening
- Branch from the current base:
git fetch origin masterthengit switch -c <type>/<short-name> origin/master(for a port, fromorigin/6.x). - Run the checks that cover the change with the
testing-changes skill, then
pnpm lint,pnpm format:check, and the type check for touched packages. CI does not run on draft PRs, so this local pass is the only gate until the PR is marked ready. - Add one changeset for the PR, naming every published package it touches
(
pnpm changesetor a hand-written.changeset/<slug>.md), when a published package changed. Otherwise say in the PR body why none is needed; theskip changesetlabel is applied by a maintainer, never by an external author. - Review your own diff with the review-code skill. A finding caught here costs one commit; the same finding caught by a reviewer costs a round.
- Confirm the husky hooks are installed (
git config core.hooksPathpoints at.husky/_); commit normally so the pre-commit format, lint, and lockfile checks run. Never--no-verify.
Commit messages are lowercase Conventional Commits, no AI attribution trailers. Push only when the user or calling workflow authorised it.
Opening
gh pr create --repo verdaccio/verdaccio --base master --title "fix(store): <what changed>" --body-file <body.md> [--draft]
Without gh, push the branch and open the PR from the compare page GitHub prints in
the push output (or https://github.com/verdaccio/verdaccio/compare); the title, body,
labels, and draft checkbox are all on that form. Checks, review threads, and
mergeability are on the PR page; labels are in its sidebar (see
pr-labels for the API form).
Title: lowercase, Conventional Commits, scope optional. It becomes the squash
commit, so write the history entry you want. Port PRs say which line they target:
fix(6.x): ... or the same title suffixed (6.x).
Body: brief. A few sentences a reviewer needs to understand the diff and nothing else:
<problem in one or two sentences, with the issue link when there is one: Closes verdaccio/verdaccio#NNNN>
<the approach in a sentence or two, and any decision a reviewer might question>
No test plan, no validation log, no file-by-file walkthrough, no "not included" section; a pending port or follow-up is one sentence. No attribution footer. The changeset is where the change is explained in full for users (it is the changelog entry), so put the effort there and do not repeat it in the body. What you ran goes in your report to the person who asked, not in the PR.
Labels, immediately after creation (a PR without labels is not finished): exactly
one release-line label (7.x branch (next) for master, 6.x branch (latest) for
6.x) plus content labels (typically one to three). The pr-labels skill
has the taxonomy, the worked examples, the label you never apply (security) and the
one you apply only to your own PR when the author says so (AI assisted):
gh pr edit <n> --repo verdaccio/verdaccio --add-label "<release line>" --add-label "<content>"
Draft or ready
CI runs only on ready PRs, and an automated reviewer, when one is enabled on the
repository, re-reviews on every push to one. Open as a draft
while the change is still moving and the local checks are your only gate; mark it ready
(gh pr ready <n>) as soon as the diff is what you want reviewed. Do not leave a draft
behind silently: either mark it ready or say in the body what is left.
After every push
- Wait for the checks.
gh pr checks <n> --watchin the background, or poll. Watch to the end: the next push cancels the in-progress run, so a second failure you never saw costs another cycle. - Read the whole round. Inline threads, review bodies, and any summary comment from an automated reviewer if one ran. A bot is not guaranteed on this repository; a round with no bot comment is not a failure, and a human review is what merges the PR.
- Verify every finding before acting; bots and humans alike are sometimes wrong, and a fix applied to a wrong finding is a new bug with a reviewer's blessing. Reply on each thread with the commit that fixed it (after it is on the remote) or the reason you are not acting, then resolve the thread. Replying and resolving are part of driving your own PR; posting anything else needs an explicit ask.
- Keep the title and body true. Re-read them after any push that changes what
the PR does and edit them (
gh pr edit --title/--body); the title is what merges. - Check mergeability (
gh pr view <n> --json mergeable,mergeStateStatus).CONFLICTINGmeans rebase (git rebase origin/<base>; a lockfile conflict is resolved bypnpm install), then force-push with lease. Re-read the diff after a rebase. Do not merge the base into the branch. - Go back to 1 after the push that carries the fixes. Send fixes in one push; every push restarts any automated review that is running.
A round is finished when the checks are green, every reviewer who took part has reported on the head commit, and none of it needs action. A quiet round is the stop signal, not a round count; if nobody has reviewed yet, the PR is simply waiting for a maintainer, and that wait is not yours to fill with pushes.
Failing checks
Never write a failure off as pre-existing, flaky, or unrelated without evidence.
gh run view <run-id> --log-failed, reproduce it locally with the testing-changes
selection, fix the cause. The e2e CLI matrix fails per client; a failure in one
client is a compatibility finding, not noise. The changeset-check job fails on a PR
without a changeset unless a maintainer has labelled it skip changeset.
Ports to other release lines
A bug fix on master that also exists on 6.x (binary) or 8.x (internal modules
6.x consumes) is not finished until each affected line has its own PR. Cherry-pick
onto a branch from that line, adapt (6.x uses yarn and an older toolchain; code may
have diverged), run that line's tests there, open the PR against that branch with the
matching release-line label, and link the original PR in the body. If the port is
deferred, say so in one sentence in the original PR body.
Finishing
Report which findings were real, which were not, what was declined and why, the CI
state, and which ports exist or are pending. Do not add AI attribution anywhere on the
PR; the AI assisted label is how AI involvement is disclosed. The author adds it to
their own PR (apply it when the author tells you to), and maintainers may add it too.
Signals
- GitHub stars
- 18k
- Forks
- 1k
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
pull-requests-verdaccio- Source
- github.com/verdaccio/verdaccio