From git
Reviews open Dependabot PRs, classifies by risk (patch/minor/major/security/lockfile-only), merges safe ones via GitHub CLI, and advises on others. Use for dependency update triage.
npx claudepluginhub joaquimscosta/arkhe-claude-plugins --plugin gitThis skill uses the workspace's default tool permissions.
Triage, classify, and merge open Dependabot PRs with risk-based assessment.
Guides GitHub Dependabot configuration in dependabot.yml for version updates, security alerts, monorepos, multi-ecosystem groups, and PR management.
Monitors PR health on recurring schedules: merge conflicts, CI/CD failures in GitHub Actions/Buildkite/Vercel/Fly.io, review comment triage/resolution, merge readiness. One-shot triage mode.
Manages GitHub repositories using gh CLI: triages issues, manages PRs, debugs CI/CD, handles releases, monitors security and contributors. For ops beyond basic git.
Share bugs, ideas, or general feedback.
Triage, classify, and merge open Dependabot PRs with risk-based assessment.
This skill activates when:
/dependabot-review--merge-safe — Merge all PRs classified as SAFE TO MERGE (asks for target branch first)--pr <number> — Deep-dive analysis of a single Dependabot PR--base <branch> — Target branch for retargeting PRs before merge (skips the prompt)gh) authenticated with repo accessVerify:
gh auth status
gh pr list \
--author "app/dependabot" \
--state open \
--json number,title,labels,headRefName,baseRefName,mergeable,isDraft,createdAt,statusCheckRollup \
--limit 50
If --pr <number> was provided, fetch that single PR instead:
gh pr view <number> \
--json number,title,body,labels,headRefName,baseRefName,mergeable,isDraft,createdAt,statusCheckRollup,additions,deletions
If no Dependabot PRs are found, report "No open Dependabot PRs found" and stop.
For each PR, gather additional data:
Files changed (for lockfile-only detection):
gh pr diff <number> --name-only
CI status: Extract from statusCheckRollup in the JSON. Classify as:
pass — all checks SUCCESS or SKIPPEDfail — any check FAILUREpending — any check IN_PROGRESS or QUEUEDnone — no checks ranApply the risk matrix to each PR:
Parse version info from PR title:
Dependabot titles follow: build(deps): bump <package> from <old> to <new> in <path>
For grouped updates: build(deps): bump the <group> group across N directory with M updates
Determine semver delta:
majorminorpatchmajorApply classification rules:
All of these must be true:
pass (or none for lockfile-only changes)MERGEABLEpatch (any dependency)minor AND package matches known-safe pattern*-lock.*, *.lock, pnpm-lock.yaml, package-lock.json, yarn.lock, Cargo.lock, gradle.lockfile)github_actions AND semver: minor or patchKnown-safe patterns (safe at minor):
@types/* — TypeScript type definitionseslint-*, prettier, @typescript-eslint/* — linters/formatters@testing-library/*, @playwright/test, vitest — test toolingactions/*, docker/*, hashicorp/* — CI actions (minor only)pass AND mergeable: MERGEABLEminor AND direct production dependencyFramework watchlist (always flag for review at minor+):
next, react, react-dom, svelte, vue, angularspring-boot, kotlin, gradlesupabase-js, @supabase/*mapbox-gl, framer-motionmajor semver bumpSecurity-labeled PRs stay in their normal risk tier (a security patch is still SAFE, a security minor is still REVIEW, etc.) but are always flagged with an urgency callout at the top of the report. Security + major = HUMAN REVIEW.
fail → note possible root causes (Dependabot lacks repo secrets, pre-existing failures)CONFLICTING → suggest @dependabot rebaseUNKNOWN → suggest waiting for GitHub to computeFormat the report as:
## Dependabot PR Triage — {owner}/{repo}
{N} open PRs found
### SAFE TO MERGE ({count})
| PR | Package | From → To | Type | Scope | CI | Files |
|----|---------|-----------|------|-------|----|-------|
| #142 | eslint | 8.56 → 8.57 | patch | dev | pass | lockfile |
### REVIEW RECOMMENDED ({count})
| PR | Package | From → To | Type | Reason | CI |
|----|---------|-----------|------|--------|----|
| #140 | next | 14.1 → 14.2 | minor | framework watchlist | pass |
### REQUIRES HUMAN REVIEW ({count})
| PR | Package | From → To | Type | Reason |
|----|---------|-----------|------|--------|
| #131 | spring-boot | 3.2 → 4.0 | major | major version bump |
### BLOCKED ({count})
| PR | Package | Issue | Suggested Action |
|----|---------|-------|-----------------|
| #129 | gradle | CI fail | Check Dependabot secrets / pre-existing lint errors |
| #127 | pnpm group | conflict | `@dependabot rebase` |
After the report, ask the user what they want to do using natural conversation.
If user chooses to merge safe PRs (or --merge-safe flag):
--base was providedbaseRefName differs from the target:
gh pr edit <number> --base <target-branch>
gh pr review <number> --approve --body "Auto-approved: safe dependency update"
gh pr merge <number> --squash
If squash fails (repo doesn't allow squash):
gh pr merge <number> --merge
If merge commits also fail:
gh pr merge <number> --rebase
If user chooses to rebase conflicted PRs:
gh pr comment <number> --body "@dependabot rebase"
If user chooses single PR deep-dive (--pr <number>):
Present:
After all actions, present:
## Summary
- Merged: {N} PRs ({list numbers})
- Rebased: {N} PRs ({list numbers})
- Skipped: {N} PRs ({reasons})
- Remaining: {N} PRs requiring human review
When a Dependabot PR has failing CI, check these common causes before blaming the dependency update:
Missing secrets: Dependabot PRs run with read-only GITHUB_TOKEN and cannot access repo Actions secrets. Only Dependabot-specific secrets (Settings > Security > Dependabot secrets) are available. Look for errors like "Missing required environment variable" or auth failures.
Lockfile-only changes: If the PR only changes lockfiles (pnpm-lock.yaml, package-lock.json, etc.), it cannot cause lint, type-check, or build failures. Flag these as pre-existing issues.
Pre-existing failures: Check if the same CI checks fail on the base branch. If so, the failure is not caused by the dependency update.
--merge-safe@dependabot rebase: The preferred fix for lockfile conflicts — Dependabot regenerates the lockfile against the current baseFor more details, see:
1.0.0