Vp checklist runner
Parse and verify checklists from GitHub PRs and issues, auto-checking items that pass verification. Use when asked to verify PR/issue checklists, check off items, process checklist tasks, run the checklist, or when a PR/issue contains unchecked checkbox items that need verification. Also trigger when the user mentions "checklist", "checkbox", or wants to auto-verify PR merge requirements. Boundary: not for creating new checklists (just write markdown) or handling PR review comments (use vp-pr-comment-resolver).From its SKILL.md
npx -y skills add VdustR/skills --skill vp-checklist-runnerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- skips confirmationTells the agent to proceed without asking first, 2 times: "HIGH confidence items auto-proceed" and 1 more.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 8 commands, including `gh api repos/{o}/{r}/issues/{n}` and 7 more.
SKILL.md
12.3 KB, ~2.8k tokens by cl100k_base, as published. Nobody here has run it
Checklist Runner
Parse and verify GitHub PR/issue checklists, auto-checking items that pass verification. Classifies each checklist item, runs the cheapest verification possible, and checks off what passes — asking the user only when truly necessary.
Accepted inputs: nothing (auto-detect the current branch's PR), a #123
number, or a PR/issue URL.
Core Principles
- Classify Before Executing — Categorize every item before verification to pick the cheapest strategy
- CI-First for Tests — Check CI status before running locally; avoid redundant work
- Confidence-Based Automation — HIGH confidence items auto-proceed; MEDIUM/LOW confidence items pause for user
- Ownership-Aware Updates — Respect GitHub permissions; never silently modify someone else's content
- Safe Operations — Use
updated_atto prevent race conditions; default to comment mode for others' posts
Workflow Overview
| Phase | Name | Purpose |
|---|---|---|
| 1 | Source Resolution + Permission Probe | Auto-detect PR/issue, fetch body + comments, parse checklist items, detect ownership + permissions |
| 2 | Item Classification | Classify each unchecked item into Auto / CI / Shell / Scan / Human |
| 3 | Verification Execution | Execute verifications: Auto (instant) → CI (one-time check) → Shell (grep/jq) → Scan (subagents) → Human (batched questions) |
| 4 | Checkbox Update | Apply ownership rules: own post → auto-check; other's post → suggest or comment mode |
| 5 | Summary Report | Per-item status table, statistics, failed items with evidence, next steps |
Phase 1: Source Resolution + Permission Probe
Determine the target PR/issue, fetch all checklist sources, and probe permissions upfront.
Source Resolution Decision Tree:
Input received
│
├── Explicit URL
│ └── Parse owner/repo/type/number from URL
│
├── #N (number)
│ └── gh api repos/{o}/{r}/issues/{n} → detect PR vs issue
│ (PRs are also issues in GitHub API; check for pull_request key)
│
└── Nothing provided
└── gh pr view --json number,title,body,url
├── Success → use current branch's PR
└── Failure → ask user to specify
Fetch Checklist Sources:
Collect all checklist items from the PR/issue body and comments. Use
gh pr view for the PR body and GraphQL for comments. See
verification-recipes.md for exact API
endpoints, queries, and pagination handling (paginate when
pageInfo.hasNextPage is true).
API field naming:
gh pr view --jsonuses camelCase (updatedAt), while RESTgh apireturns snake_case (updated_at). Normalize toupdated_atinternally.
Parse Checklist Items:
Extract all - [ ] and - [x] items from each source.
Important: Before extracting, strip fenced code blocks
(``` ... ```) and inline code spans to avoid parsing example checklists
inside code as real items.
Track for each item:
- Item text (normalized, trimmed)
- Checked state (unchecked = needs verification)
- Source (body vs comment ID)
- Source author
- Source
updated_attimestamp (for race condition prevention in Phase 4) - Nesting level — flatten nested checklists with parent context preserved; verify each item independently but note its parent condition
Permission Probe:
Get current user (gh api user), check repo write access
(gh api repos/{o}/{r}), and compare with each source author. See
checkbox-update-rules.md for full
ownership detection, bot detection rules, permission commands, and the full
permission matrix.
Null permissions: If
.permissionsis null or absent (e.g., fine-grained PAT withoutmetadata:read), treat as no write access.
Output update mode to user:
Source Analysis:
- PR #123 body: 8 unchecked items, author: @you → auto-check mode
- Comment by @reviewer: 3 unchecked items → suggest-then-check mode
- Total: 11 unchecked items to verify
Phase 2: Item Classification
Classify each unchecked item to determine verification strategy.
5 Classification Categories:
| Category | Description | Example Items |
|---|---|---|
| Auto | Verifiable with file/field checks | "SKILL.md has valid frontmatter", "Required metadata exists" |
| CI | Verifiable via CI status check | "Tests pass", "Lint passes", "Build succeeds" |
| Shell | Verifiable with a single grep/find/jq | "No console.log left", "No TODO comments", "No debugger statements" |
| Scan | Needs semantic understanding (subagent) | "No secrets in code", "Documentation updated", "Changelog entry added" |
| Human | Cannot be automatically verified | "Design reviewed", "PM approved", "UX looks good" |
Classification: Normalize item text → match against patterns in priority order (Auto > CI > Shell > Scan > Human) → assign confidence. See classification-patterns.md for the full algorithm, regex patterns, disambiguation rules, and confidence level definitions.
Present the classification to the user as a compact table (item, category, confidence). Confidence describes how sure the classification is, not the verification result. HIGH confidence auto-proceeds; for MEDIUM/LOW items, ask the user to confirm or reclassify before verifying:
⚠️ Item #6 "Code quality is good" has LOW confidence. Confirm category or reclassify? [Human/Shell/Scan]
Phase 3: Verification Execution
Execute verifications in cost order: Auto (instant) → CI (one API call) → Shell (single command) → Scan (subagents, confirm first) → Human (batched questions). See verification-recipes.md for specific commands, recipe guidelines, and subagent prompt templates.
Auto Verification:
Run specific file/field checks. Each produces a definitive PASS/FAIL.
CI Verification (one-time check, NO polling):
gh pr checks <N> --json name,state,bucket
| CI State | Action |
|---|---|
| All passed | PASS |
| Any failed | FAIL (show which checks failed) |
| Pending | Offer options: (1) skip, mark PENDING (2) wait and re-run skill later (3) run locally if user requests |
| No CI configured | Offer local execution with user confirmation |
Shell Verification:
Run single-command checks (grep, find, jq). Expected exit code 0 = PASS.
Scan Verification (subagents):
For items requiring semantic understanding. Must confirm with user before launching, listing the planned scans. Cap at 5 subagents per execution; each returns PASS/FAIL with evidence.
Scan results always have MEDIUM confidence (never HIGH) — subagents can hallucinate (e.g., confusing closing ``` with bare opening blocks). Always verify scan findings with a targeted grep/command before accepting, and require user confirmation before checking off Scan-verified items, even on own posts.
Human Verification:
Batch all Human items into a single prompt:
The following items need manual verification:
1. "Design reviewed by team" — Has this been reviewed?
2. "PM approved" — Has PM given approval?
For each, reply: pass / fail / skip
Phase 4: Checkbox Update
Apply the ownership rules determined in Phase 1. See checkbox-update-rules.md for the full decision matrix, update mechanics, anti-patterns, interaction examples, and the comment report template. Exception to "own post → auto-check": Scan-verified items still need user confirmation first (Phase 3).
Update Flow (6 steps):
gh apiGET current body/comment — fetch bothbodyandupdated_atin a single API call- Compare
updated_atwith Phase 1 timestamp - If changed → abort update for this source, notify user (continue with other unaffected sources)
- If unchanged → apply checkbox replacements via
jqgsub - Update body/comment (batch per source — one update per body/comment)
- Post-update verification — assert the updated body contains all expected
[x]items; escalate to user if assertion fails
Preferred method for PR/issue body: Use
jq -rto extract the modified body to a temp file, thengh pr edit --body-file/gh issue edit --body-file. The CLI handles JSON encoding internally, eliminating double-encoding risks. Never pipe the body through shell variables orsed. Use the raw API method (jqpipeline →gh api --input -) only for comments (no CLI shortcut) or when the CLI is unavailable.
Phase 5: Summary Report
Generate a final report after all verifications and updates:
## Checklist Verification Summary
**Source:** PR #123 - Feature implementation
**Items:** 11 total (8 unchecked → verified)
### Results
| # | Item | Category | Result | Confidence | Updated |
|---|------|----------|--------|------------|---------|
| 1 | Tests pass | CI | PASS | HIGH | ✅ Checked |
| 2 | No secrets | Scan | FAIL | MEDIUM | — |
| 3 | Lint passes | CI | PENDING | — | — |
### Statistics
- **Passed:** 1/3 verified items · **Failed:** 1 · **Pending:** 1 · **Already checked:** 3 (skipped)
### Failed Items
1. **No secrets in code** — Found potential API key in `src/config.ts:42`. Please review and remove before merging.
### Next Steps
- Fix the failed item (#2) and re-run the checklist
- CI check (#3) is pending — re-run after CI completes
Report evidence for every PASS and FAIL — traceability matters.
Error Handling
| Error | Action |
|---|---|
| No checklist found | Report "No checklist items found" and exit |
| All items already checked | Report; offer to re-verify if user explicitly requests |
| PR is closed/merged | Warn; ask if proceed anyway |
| Different repo URL | Extract owner/repo, verify gh access |
| CI failing | Report which checks failed, mark as FAIL |
| CI pending | One-time check; offer: skip / wait-and-rerun / local |
| No CI configured | Suggest local execution with detected commands |
| No edit permission | Comment-based verification report |
| Bot PR | Default to comment mode |
Race condition (updated_at changed) | Abort PATCH for that source; continue with remaining sources; notify user |
| Large PR with many scan items | Cap at 5 subagents; confirm before launching |
| GraphQL API error | Retry once; fall back to REST API if available |
gh CLI not configured | Report prerequisite; suggest gh auth login |
Reference Files
- classification-patterns.md — Item classification rules, keyword patterns, confidence assignment
- verification-recipes.md — Verification commands, subagent prompts, API endpoints
- checkbox-update-rules.md — Ownership detection, permission rules, update mechanics
Notes
- Requires
ghCLI authenticated with repo read access (write access for auto-checking) - Works with GitHub PRs and issues (GitLab/Bitbucket not supported)
- GHES support is best-effort — some instances disable GraphQL or have different pagination limits; test against your target instance
- Fine-grained PATs need
issues:writeorpull_requests:writefor checkbox editing,metadata:readfor permission probe - Mixed checklists across multiple comments are supported — each source is tracked and updated independently
- Re-running the skill on the same PR is safe — already-checked items are skipped unless the user explicitly asks to re-verify all items (which re-classifies and re-verifies regardless of checked state)
- Race condition prevention is best-effort (TOCTOU between GET and PATCH) — GitHub API has no conditional-write support; the
updated_atcheck reduces but does not eliminate the race window
What ships with it: 4 files
3.0 KB alongside SKILL.md
agents/
- openai.yaml193 B