Skip to content
cccskills
FreePublished on GitHub

pr-monitor

Monitor open GitHub PRs across all repos in ~/Dev. Checks PR age, flags stale PRs, and optionally alerts via Aivena/Telegram. Uses `gh pr list` for accurate GitHub data. **TRIGGERS - Use this skill when:** - User asks about open PRs, pull requests, or PR status - User says "check PRs", "any stale PRs?", "PR review status" - Cron job `pr-monitor` fires - User asks "what needs review?" or "what's waiting for merge?" - User wants a PR dashboard or PR age report

The English summary is being prepared. Showing the original description.

Works withTelegramGitHub

Run score Not tested

See how to install

Files included (1)

  • SKILL.md3.7 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

PR Monitor Skill

Scan all GitHub-hosted repos in ~/Dev for open pull requests. Flag stale PRs and report status.

Procedure

Step 1: Scan all repos for open PRs

Run this exact command to collect all open PRs:

for dir in ~/Dev/*/; do
  if [ -d "$dir/.git" ]; then
    remote=$(git -C "$dir" remote get-url origin 2>/dev/null)
    if echo "$remote" | grep -q github.com; then
      repo=$(echo "$remote" | sed 's/.*github.com[:/]\(.*\)\.git/\1/' | sed 's/.*github.com[:/]\(.*\)/\1/')
      prs=$(timeout 30s gh pr list --repo "$repo" --state open --json number,title,createdAt,headRefName,author,isDraft,reviewDecision)
      pr_count=$(echo "${prs:-[]}" | jq 'length' 2>/dev/null)
      if [ "${pr_count:-0}" -gt 0 ]; then
        echo "=== $(basename "$dir") ($repo) ==="
        echo "$prs" | jq -r '.[] | "  #\(.number) [\(.headRefName)] \(.title) (by \(.author.login), created \(.createdAt[:10]), draft: \(.isDraft), review: \(.reviewDecision // "none"))"'
        echo ""
      fi
    fi
  fi
done

Step 2: Calculate PR age

For each PR, calculate age from createdAt to today. Classify as:

  • 🟢 Fresh — 0–1 days old
  • 🟡 Aging — 2–3 days old
  • 🔴 Stale — 4+ days old

Step 3: Format the report

Output a table with columns:

RepoPRBranchTitleAuthorAgeStatusReview

Group by repo. Show age badge (🟢/🟡/🔴). Include draft status and review decision.

Step 4: Summary

End with:

  • Total open PRs across all repos
  • Stale count (4+ days) — these need attention
  • Aging count (2–3 days) — these are approaching stale
  • Action items — specific PRs that need review or merge

Step 5: Deduplication check (before alerting)

Before sending any Telegram alert, check today's daily memory log for PRs already covered. Optionally, write a lightweight per-PR "alert sent" timestamp (e.g., pr-monitor: [repo] #[number] — <date>) to memory so overlapping executions don't duplicate alerts.

memory_read(target: "daily")

Scan the result for PR references matching [repo] #[number]. Any stale PR already mentioned in today's standup or a prior pr-monitor alert today should be excluded from the new alert.

  • If all stale PRs were already reported today → skip the alert entirely (no noise)
  • If some are new → send alert only for the new ones
  • If none were previously reported → send the full alert

Step 6: Alert (only for net-new stale PRs)

If net-new stale PRs remain after dedup, send an alert to Aivena via a2a_send:

Hey Aivena — PR staleness alert for Espen. Please relay to Telegram.

⚠️ [N] stale PR(s) found (4+ days old, not yet reported today):
- [repo] #[number]: [title] ([age] days)
...

These need review or merge.
— Fury

If no stale PRs exist, or all were already covered today, do nothing (no noise).

Notes

  • Requires gh CLI authenticated (gh auth status)
  • Requires jq for JSON parsing
  • Only scans repos with GitHub remotes
  • Draft PRs are included but noted — they're expected to age longer
  • The reviewDecision field shows: APPROVED, CHANGES_REQUESTED, REVIEW_REQUIRED, or none

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Audit, generate, update, and lint AGENTS.md files across all projects. Use when asked to check project context files, scaffold AGENTS.md for new projects, update stale ones, or run a cross-project audit.

The English summary is being prepared. Showing the original description.

espennilsen/pi122Updated Oct 12, 2026

Draft, edit, and publish blog posts for e9n.dev. Use when creating new posts, editing drafts, or refining existing content. Handles Eleventy frontmatter, Tailwind formatting, and Espen's authentic voice.

The English summary is being prepared. Showing the original description.

espennilsen/pi122Updated Oct 12, 2026

Generate a full operational status report for the Aivena bot. Checks all subsystems: extensions, webserver, Telegram, chat bridge, heartbeat, cron, database, memory, CRM, calendar, task management, jobs/telemetry, and storage. **Triggers — use this skill when:** - User asks for "status", "bot status", "system status", "operational status" - User asks "is everything running?", "how's Aivena doing?" - User says "health check", "diagnostics", "systems check" - User asks "what's the state of the bot?"

The English summary is being prepared. Showing the original description.

espennilsen/pi122Updated Oct 12, 2026

Parse git history and produce or update a CHANGELOG.md following the Keep a Changelog convention. Supports Conventional Commits, basic prefix conventions, and unstructured commit messages. Intelligently categorizes changes, detects breaking changes, links to PRs/issues, and handles both initial generation and incremental updates. **Triggers — use this skill when:** - User asks to "generate", "create", "update", or "write" a changelog - User mentions "CHANGELOG", "changelog", "release notes" - User says "document changes", "what changed since last release" - User wants to "prepare a release" and needs a changelog entry - User asks to "clean up" or "reformat" an existing changelog **Covers:** Any git-based project. Handles Conventional Commits (feat/fix/chore), Angular convention, basic prefixes (Add/Fix/Remove), and freeform commit messages. Outputs Keep a Changelog format with optional Common Changelog enhancements.

The English summary is being prepared. Showing the original description.

espennilsen/pi122Updated Oct 12, 2026

cmux

Free

Orchestrate cmux terminal panes — split terminals, run parallel processes, read output from other panes, and use the built-in browser. Use when working inside cmux and you need to run a dev server, watch tests, spawn sub-agents, or preview web pages.

The English summary is being prepared. Showing the original description.

espennilsen/pi122Updated Oct 12, 2026

Review code for quality, security, performance, and maintainability. Use when reviewing PRs, auditing a codebase, or refactoring. Covers TypeScript, Node.js, infrastructure-as-code, and full-stack web apps.

The English summary is being prepared. Showing the original description.

espennilsen/pi122Updated Oct 12, 2026

See all skills by espennilsen

Report a problem with this skill