Help us improve
Share bugs, ideas, or general feedback.
From Flagrare
Generates a daily code review report with stale PRs, items needing attention, and active work. Useful for team PR overview and standup prep.
npx claudepluginhub flagrare/agent-skills --plugin flagrareHow this skill is triggered — by the user, by Claude, or both
Slash command
/flagrare:daily-code-reviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate a team-wide pull request status report focused on actionable next steps. The report surfaces stale PRs, items needing the runner's personal attention, and a quick FYI on active work — so the reader knows exactly what to do when they open GitHub.
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Share bugs, ideas, or general feedback.
Generate a team-wide pull request status report focused on actionable next steps. The report surfaces stale PRs, items needing the runner's personal attention, and a quick FYI on active work — so the reader knows exactly what to do when they open GitHub.
Team configs live at ~/.claude/skills/flagrare/daily-code-review/teams/*.json — one file per team, outside the plugin tree so they survive plugin updates and reinstalls.
In Bash, expand ~ explicitly: "$HOME/.claude/skills/flagrare/daily-code-review/teams". The directory may not exist yet — mkdir -p "$HOME/.claude/skills/flagrare/daily-code-review/teams" before writing.
If the new dir has no team files but the legacy per-plugin dir does, migrate them:
LEGACY="{skill_directory}/teams" # old location, lost on plugin reinstall
NEW="$HOME/.claude/skills/flagrare/daily-code-review/teams"
if [ -d "$LEGACY" ] && [ ! -d "$NEW" ]; then
mkdir -p "$NEW"
cp "$LEGACY"/*.json "$NEW"/ 2>/dev/null || true
fi
Tell the user once: "Migrated your team configs from the old per-plugin location to ~/.claude/skills/flagrare/daily-code-review/teams/ so they survive plugin updates."
Check for config files matching ~/.claude/skills/flagrare/daily-code-review/teams/*.json. If none exist, run the first-time setup flow.
Use AskUserQuestion to collect:
acme-corp)Platform Team)github_login / Display NameSave to ~/.claude/skills/flagrare/daily-code-review/teams/{team-name-slug}.json:
{
"org": "acme-corp",
"team_name": "Platform Team",
"members": [
{ "github_login": "aturing", "display_name": "Alan Turing" },
{ "github_login": "ghopper", "display_name": "Grace Hopper" },
{ "github_login": "dknuth", "display_name": "Don Knuth" }
]
}
Confirm the config with the user before proceeding.
If exactly one team config exists, use it. If multiple exist, ask which team to report on.
If the user says "add a team" or "edit team," update or create the relevant config file and re-confirm.
Run:
gh api user --jq '.login'
Match against the team members list by github_login. If no match, ask the user which member they are — they might be authenticated with a personal account that differs from their team login.
Use only these GitHub API endpoints. The comments API is noisy and mergeable_state is unreliable — skip both. Staleness comes from updated_at alone.
The search/issues endpoint does NOT return draft status reliably (it comes back null). Run two searches per member to separate drafts from non-drafts:
gh api "search/issues?q=org:{org}+is:pr+is:open+-is:draft+author:{login}&per_page=100" \
--jq '.items[] | {number, title, html_url, updated_at, draft: false, repo: (.repository_url | split("/") | last), user: .user.login}'
gh api "search/issues?q=org:{org}+is:pr+is:open+is:draft+author:{login}&per_page=100" \
--jq '.items[] | {number, title, html_url, updated_at, draft: true, repo: (.repository_url | split("/") | last), user: .user.login}'
Run all searches in parallel across team members. Deduplicate by PR number + repo.
For each PR:
gh api "repos/{org}/{repo}/pulls/{number}/reviews" \
--jq '[.[] | select(.user.login | test("\\[bot\\]$") | not) | {user: .user.login, state}]'
gh api "repos/{org}/{repo}/pulls/{number}/requested_reviewers" \
--jq '{users: [.users[].login], teams: [.teams[].slug]}'
Filter out bot reviews (logins ending in [bot]) — they're noise from CI integrations, not human review activity.
Run these in parallel across PRs where possible. If you hit rate limits, back off and retry.
| Category | Threshold |
|---|---|
| Stale (pod-wide) | updated_at > 24 hours ago |
| Needs attention | updated_at > 12 hours ago |
| Parked draft | draft + updated_at > 30 days ago |
Calculate hours (or days for parked drafts) since updated_at relative to now. Round to the nearest whole number.
Determine per-PR by reading the reviews list chronologically:
APPROVED review, no subsequent CHANGES_REQUESTEDCHANGES_REQUESTEDShow reviewer names in each state (e.g., "approved by Alice, Bob").
# {team_name} Code Review Report — {YYYY-MM-DD}
> Generated for **{display_name}** | {n} open PRs across {m} members
All open PRs across the team (including drafts) where updated_at > 24h. Only exclude drafts older than 30 days — those go in the "Parked Drafts" section instead. Label draft PRs with a [Draft] tag so they're visually distinct.
For each PR, show:
| Owner | PR | Hours stale | Review state | Next action |
|---|---|---|---|---|
| Display name | Title | N hours | Approved by X / Changes requested by Y / Pending: Z | One-line recommendation |
Sort by staleness descending. "Next action" should be specific and direct: "Merge — already approved," "Address feedback from Carol," "Needs a reviewer assigned."
If no stale PRs: "No stale PRs — the team is on top of reviews."
Two sub-sections:
PRs I need to review PRs where I'm a requested reviewer and haven't submitted a review yet. Show: author, title+URL, hours waiting.
My PRs needing action My own PRs that are approved (merge them!) or have changes requested (address feedback). Show: title+URL, state, hours since last update.
If nothing in either sub-section: "Nothing needs your attention right now."
If the user has stale PRs in Section 1 but none qualify here (e.g., all are drafts or pending first review), add a brief note pointing them back: "Your 3 open PRs are stale but waiting on reviewers or still in draft — see Section 1 above." This bridges the gap so Section 2 doesn't feel disconnected when all the user's action items are upstream.
My open PRs or pending review requests updated within the last 12 hours. One line each: title, URL, current state. No action needed — just awareness.
If nothing active: omit this section entirely.
Draft PRs from any team member untouched for 30+ days. Show: owner, title+URL, days since update. These are informational — the team may want to close or revive them.
If none: omit this section.
Always render the full report as formatted markdown in the conversation.
If the user asks to save to a file, write to the path they specify. If they say "save it" without a path, default to ./pr-report-{YYYY-MM-DD}.md.
gh is not installed or not authenticated, tell the user to run gh auth login first.