| name | dependabot-verify |
| description | Read-only scan of all open Dependabot PRs where the current user is a requested reviewer. Reports the status of each PR without taking any write actions (no approvals, no comments, no automerge, no branch updates). Accepts an optional scope argument to limit work to a specific host, org, repo, or PR. Invoke with: /dependabot-verify [host/org/repo:PR]
|
/dependabot-verify
You are executing the Dependabot PR verification workflow. Work autonomously โ do not ask the user for input. Process all PRs and present results at the end. Take no write actions.
All GitHub I/O is performed through the dependabot-reviewer MCP server tools. If the MCP server is not present in the session or returns an error, stop and report the error โ do not fall back to gh CLI or curl.
Step 0: Parse arguments
Parse ARGUMENTS (the text after the skill name) before doing anything else. Produce three variables used throughout the rest of the workflow:
| Variable | Type | Description |
|---|
filter_hosts | [string] | null | hosts to process; null = all authenticated hosts |
filter_repo | "org/repo" | null | exact repo to scope to |
filter_pr | int | null | single PR number; requires filter_repo |
Also derive:
filter_org โ the part before / in filter_repo, or the standalone <org> argument, or null
Parsing rules (first match wins)
Strip a leading https:// prefix first (do not pass the protocol to any tool).
| Input format | filter_hosts | filter_repo | filter_pr |
|---|
<host>/<org>/<repo>/pull/<PR> (after stripping https://) | [host] | org/repo | PR |
<host>/<org>/<repo> | [host] | org/repo | null |
<host>/<org> | [host] | null | null |
<host> (contains .) | [host] | null | null |
<org>/<repo>:<PR> | null | org/repo | PR |
<org>/<repo>#<PR> | null | org/repo | PR |
<org>/<repo> | null | org/repo | null |
<org> (no .) | null | null | null |
| (empty) | null | null | null |
Host detection: a path segment is a host if it contains .; otherwise it is an org.
Errors
filter_hosts contains a host not found in gh auth status output โ stop:
"Error: not logged in to <host>. Run 'gh auth login --hostname <host>'."
filter_pr set but filter_repo is null โ stop:
"Error: PR number requires a repo (use <org>/<repo>:<PR>)."
Step 1: Discover hosts and acquire tokens
gh auth status --show-token
Parse the output to extract every host and its token. Build a list of {host, token} pairs โ one per authenticated host.
If filter_hosts is non-null (set in Step 0), keep only pairs where the host appears in filter_hosts. Validate: if any host in filter_hosts is not present in gh auth status output, stop with the error described in Step 0. Do not hardcode any host names.
Step 1.5: Load knowledge base
Read the knowledge base as described in the agent's Knowledge Base section. Keep loaded entries available for all subsequent PR classification steps.
Step 2: Discover PRs
For each discovered host, apply the following routing based on the filter variables set in Step 0:
if filter_pr is not null:
# Skip list_dependabot_prs entirely โ call get_pr_details directly in Step 3
prs = [synthetic entry: {number: filter_pr, repo: filter_repo, title: "(single PR)", url: ""}]
elif filter_repo is not null:
prs = list_dependabot_prs(host, token, repo=filter_repo)
elif filter_org is not null:
prs = list_dependabot_prs(host, token, org=filter_org)
else:
prs = list_dependabot_prs(host, token)
Deduplicate by PR number. If a host returns an error from list_dependabot_prs, record the error and continue with the other hosts.
If the combined list across all hosts is empty, print:
No open Dependabot PRs matching the given filter.
and stop.
Step 3: Classify each PR
For each PR call:
get_pr_details(host, token, repo=pr.repo, pr_number=pr.number)
The returned PRDetails contains all fields needed for classification:
reviews โ list of {author, state} (check for state == "APPROVED" from current user)
auto_merge_set โ boolean
ci_status โ "passing" | "failing" | "pending"
failing_checks โ list of {name, state}
merge_state โ "clean" | "behind" | "dirty" | "unknown"
comments โ list of {author, body, created_at}
Note: get_pr_details does not detect pending environment deployments. The ๐ WAITING FOR ENV status is not available on the MCP server path โ skip it.
Classification priority (first matching condition wins):
| Priority | Status | Condition |
|---|
| 0 | โ ๏ธ ACTION REQUIRED | KB proactive match: PR repo + diff matches a knowledge base entry with a ## Proactive detection section (even if CI is passing or pending) |
| 1 | โ ๏ธ ACTION REQUIRED | ci_status == "failing", OR any comment body contains "requires manual action โ ๏ธ" |
| 2 | ๐ NEEDS BRANCH UPDATE | merge_state == "behind" |
| 3 | โณ WAITING FOR CI | ci_status == "pending" |
| 4 | ๐ NEEDS REVIEW | No APPROVED review from current user AND no comment contains "Dependabot PR reviewed โ
" or "requires manual action โ ๏ธ" |
| 5 | โ
READY | APPROVED review from current user, auto_merge_set == true, ci_status == "passing", merge_state != "behind" |
| 6 | ๐ NEEDS REVIEW | Catch-all |
KB proactive match (Priority 0):
Before applying the standard priority table, scan loaded knowledge base entries for any that have both a repos field and a ## Proactive detection section. For each such entry, check if pr.repo is in the repos list and whether the PR's diff matches the described pattern. If matched, classify as โ ๏ธ ACTION REQUIRED and set the Detail field to known pattern: <entry title>.
Detail field per status:
โ ๏ธ ACTION REQUIRED โ list failing check names, e.g. CI: test-unit FAILURE; if a knowledge base entry matches (CI failure or proactive), append (known pattern: <entry title>)
๐ NEEDS BRANCH UPDATE โ branch is behind <base-branch-name>
โณ WAITING FOR CI โ count of pending checks, e.g. 3 checks pending
๐ NEEDS REVIEW โ no review yet
โ
READY โ โ
๐ NEEDS REVIEW (catch-all) โ needs attention
If fetching data for a PR fails, record status as โ ERROR and detail as the error message. Continue to the next PR.
Step 4: Present summary tables
After all PRs are processed, display one table per host:
| Repo | PR | Status | Detail |
|---|
org/repo | #123 | โ
READY | โ |
org/repo | #456 | โ ๏ธ ACTION REQUIRED | CI: test-unit FAILURE |
org/repo | #789 | โณ WAITING FOR CI | 3 checks pending |
org/repo | #102 | ๐ NEEDS BRANCH UPDATE | branch is behind main |
org/repo | #103 | ๐ NEEDS REVIEW | no review yet |
If no PRs were found for a host, say so explicitly:
No open Dependabot PRs awaiting review on <host>.
Status legend:
โ
READY โ approved, automerge set, all CI green, branch up to date
โ ๏ธ ACTION REQUIRED โ failing CI or prior analysis flagged manual action
๐ NEEDS BRANCH UPDATE โ branch is behind base, needs update before merge
โณ WAITING FOR CI โ checks still running, no action needed yet
๐ NEEDS REVIEW โ PR has not been reviewed or analysed yet
โ ERROR โ failed to fetch PR data; see detail for error message
Step 5: Main branch health
After presenting the PR status tables, check the CI health of the default branch for each monitored repository.
Step 5a โ Collect unique repos:
- From Step 2: collect all
repo values from the open PR list (already in memory).
- For each host, call:
list_recently_merged_dependabot_prs(host=<host>, token=<token>, since=<ISO date 7 days ago>)
Compute since as today's date minus 7 days in YYYY-MM-DD format (e.g. if today is 2026-07-03, use since="2026-06-26").
- Add all
repo values from the merged PRs list.
- Deduplicate: collect a set of unique
repo strings per host.
Step 5b โ Check each repo's default branch:
For each unique (host, repo):
- Call
get_branch_ci_status(host, token, repo, branch="main").
- If the call returns a 404 error โ retry with
branch="master".
- If both fail โ record status as
โ ERROR with the error message.
Step 5c โ Display health table:
Display one table per host below the PR status tables:
#### Main branch health โ <host>
| Repo | Branch | Status | Failing checks |
|------|--------|--------|----------------|
| `org/repo` | main | โ
passing | โ |
| `org/repo` | main | โ failing | build, lint |
| `org/repo` | main | โณ pending | โ |
| `org/repo` | main | โ unknown | โ |
| `org/repo` | main | โ ERROR | <error message> |
Map ci_status from get_branch_ci_status to display status:
"passing" โ โ
passing
"failing" โ โ failing (list failing_checks[].name comma-separated in "Failing checks" column)
"pending" โ โณ pending
"unknown" โ โ unknown
- error โ
โ ERROR
If no repos were found for a host: No repositories to check on <host>.