plugins/daily-report/skills/daily-report/SKILL.md
Use this skill when asked to "generate a daily report", "summarize org activity", "what happened yesterday across the org", "daily activity report", or "report on commits/PRs/issues across repos". Generates a comprehensive report covering all repositories in a GitHub organization including commits, PRs, branches, issue changes, and force-push history.
npx skillsauth add nsheaps/ai-mktpl daily-reportInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate a comprehensive daily activity report for a GitHub organization. The report covers all repositories with activity in the specified time window, including commits, pull requests, branches, issue changes, and force-push tracking.
The following environment variables or prompt context control behavior:
| Variable | Default | Description |
| ---------------------- | ------------------------ | ---------------------------------------------------------------------- |
| REPORT_TIME_SCOPE | 1 day | Free-form time scope, e.g. "1 day", "3 days", "1 week" |
| REPORT_SUBJECT_SCOPE | nsheaps | Free-form subject scope, e.g. org name, specific repo, or email filter |
| REPORT_DATE | Yesterday (Eastern Time) | The date the report covers, format YYYY-MM-DD |
Use gh CLI with the available GH_TOKEN for all GitHub API calls. The token must have
org-level read access to repositories, issues, and pull requests.
# List all repos in the org
gh repo list "${ORG}" --limit 500 --json nameWithOwner,pushedAt -q '.[] | select(.pushedAt >= "'${SINCE_DATE}'") | .nameWithOwner'
If the subject scope names a specific repository, only report on that repo. If the subject scope includes an email filter, gather from all repos but filter commits by that author email.
For each active repository, gather commits across ALL branches:
# All commits in the time window across all branches
gh api "repos/${OWNER}/${REPO}/commits" \
--paginate \
-q '.[] | {sha: .sha, message: .commit.message, author: .commit.author.name, email: .commit.author.email, date: .commit.author.date, branch: "N/A"}' \
-f since="${SINCE_ISO}" -f until="${UNTIL_ISO}"
For more granular per-branch data, also list branches and check commits per branch:
# List all branches
gh api "repos/${OWNER}/${REPO}/branches" --paginate -q '.[].name'
# Commits on a specific branch
gh api "repos/${OWNER}/${REPO}/commits?sha=${BRANCH}&since=${SINCE_ISO}&until=${UNTIL_ISO}" --paginate
Force pushes rewrite history. To detect them, check the audit log and reflog events:
# Check for push events that were force pushes (org audit log)
gh api "/orgs/${ORG}/audit-log" \
-f phrase="action:git.push created:>=${SINCE_DATE}" \
-f include=git \
--paginate \
-q '.[] | select(.force_push == true) | {repo: .repo, actor: .actor, before: .before, after: .after, timestamp: .created_at}'
If the audit log is not available (requires GitHub Enterprise or org admin), use the events API as a fallback:
# Push events for a repo (includes force push info)
gh api "repos/${OWNER}/${REPO}/events" \
--paginate \
-q '.[] | select(.type == "PushEvent") | {ref: .payload.ref, size: .payload.size, before: .payload.before, head: .payload.head, forced: .payload.forced, actor: .actor.login, created_at: .created_at}'
When a force push is detected:
before SHA (the previous HEAD)after SHA (the new HEAD)gh api repos/${OWNER}/${REPO}/compare/${BEFORE}...${AFTER} to show what changedgh api repos/${OWNER}/${REPO}/commits?sha=${BEFORE} (these may be garbage-collected)# PRs updated in the time window (all states)
gh pr list -R "${OWNER}/${REPO}" \
--state all \
--json number,title,state,author,createdAt,updatedAt,mergedAt,url,headRefName,baseRefName,additions,deletions \
-L 500
Filter results to PRs with updatedAt within the time window.
# All branches with their last commit info
gh api "repos/${OWNER}/${REPO}/branches" --paginate \
-q '.[] | {name: .name, sha: .commit.sha, protected: .protected}'
# Recently created or deleted branches (from events)
gh api "repos/${OWNER}/${REPO}/events" \
--paginate \
-q '.[] | select(.type == "CreateEvent" or .type == "DeleteEvent") | select(.created_at >= "'${SINCE_ISO}'") | {type: .type, ref: .payload.ref, ref_type: .payload.ref_type, actor: .actor.login}'
# Issues updated in the time window
gh issue list -R "${OWNER}/${REPO}" \
--state all \
--json number,title,state,stateReason,author,createdAt,updatedAt,url,labels \
-L 500
Filter to issues with updatedAt within the time window. Also track:
For issue timeline events:
gh api "repos/${OWNER}/${REPO}/issues/${ISSUE_NUMBER}/timeline" --paginate \
-q '.[] | select(.created_at >= "'${SINCE_ISO}'")'
# Recent workflow runs with failures
gh api "repos/${OWNER}/${REPO}/actions/runs" \
-f created=">=${SINCE_DATE}" \
-f status="failure" \
--paginate \
-q '.workflow_runs[] | {name: .name, branch: .head_branch, conclusion: .conclusion, url: .html_url, created_at: .created_at, run_number: .run_number}'
Look for patterns of repeated failures on the same branch/PR, which may indicate agent struggles. Cross-reference with PR and commit data from earlier steps.
The output must be valid GitHub-flavored Markdown suitable for posting as a GitHub issue body.
YYYY-MM-DD Daily Report
Where YYYY-MM-DD is the report date (the day being reported on).
The report is a single Markdown document. The template below shows the required structure.
Sections marked with {placeholders} should be filled with actual data.
# YYYY-MM-DD Daily Report
> **Scope**: {subject_scope} | **Period**: {time_scope} | **Generated**: {timestamp} ET
This section appears immediately after the header, before any other content. It draws the reader's attention to items that need human intervention or investigation.
Analyze the gathered data to identify two categories of items:
1. Agent Failures & Issues — Detect patterns that suggest automated agents struggled or failed during the reporting period:
fix: or fix(scope): prefixes — those indicate intentional bug fixes, not
agent struggles. Only flag "fix" when 3+ fix-like commits appear within 1 hour on the
same branch (suggesting iterative failed attempts rather than normal development)2. Action Items Requiring Human Involvement — Identify items from commits, PRs, and issues that explicitly call out the need for human action:
status:blocked or status:needs-reviewFormat this section as a blockquote callout with warning emojis:
> ⚠️🚨 **ATTENTION REQUIRED** 🚨⚠️
>
> ### 🔴 Agent Failures & Repeated Iterations
>
> {List each detected issue with repo, branch/PR link, and brief description}
> {If none detected: "No agent failure patterns detected."}
>
> ### 🟡 Items Needing Your Involvement
>
> {List each item with repo, issue/PR/commit link, and what action is needed}
> {If none detected: "No items requiring manual intervention."}
A horizontal bar chart showing the total number of commits per repository during the reporting period. This gives a quick visual overview of where the most activity occurred.
xychart-beta chart with horizontal layout0 --> <max> where <max> is the highest bar value rounded up to a clean number. Never omit the 0 --> prefix or the axis will not start at zero.Design note: This chart intentionally replaces the previous time-of-day stacked bar chart. The temporal dimension (when activity occurred) is traded for a clearer at-a-glance view of where activity concentrated. Time-of-day patterns can still be inferred from the commit tables in the Repository Activity section below.
Example chart (actual values will differ):
xychart-beta horizontal
title "Commits by Repository (YYYY-MM-DD)"
x-axis ["repo-a", "repo-b", "repo-c"]
y-axis "Commits" 0 --> 20
bar [18, 9, 5]
After the attention callout and chart, include these sections in order:
## Executive Summary
One paragraph summarizing the day's activity across the org: total commits, PRs opened/merged/closed, issues opened/closed, repos with activity, notable force pushes.
## Repository Activity
### {owner}/{repo-name}
For each active repo (sorted alphabetically), include:
<details> for old commit tree.Separate each repo with ---.
## Cross-Repo Summary
By Author — table with Author, Commits, PRs, Issues
Activity Timeline — chronological list of significant events across all repos (ET)
Time window: {SINCE_ISO} to {UNTIL_ISO}
Repositories scanned: {count}
Repositories with activity: {count}
Force push detection: {method used - audit log or events API}
Any data gaps or API limitations encountered
<details>) for verbose data like force-push old commit treesThe final report content should be posted as a GitHub issue in the triggering repository with:
YYYY-MM-DD Daily Reportdaily-reporttools
Reference material for Claude Code internals — the on-disk layout under ~/.claude and project-scope .claude, the plugin cache, session-env propagation, and the full hook lifecycle. Auto-recall when working on Claude-Code-related tasks: writing or debugging hooks, authoring plugins, inspecting session state, troubleshooting why an env var is or isn't visible to a Bash tool call, or when paths under ~/.claude or ~/.claude/plugins/ come up.
development
Manage GitHub App installation tokens in Claude Code sessions. Use when tokens expire, auth errors occur in long-running sessions, or when setting up GitHub App credentials for agent teams. <example>my github token expired</example> <example>refresh the github app token</example> <example>check token status</example> <example>set up github app authentication for this session</example>
tools
Auto-detect project formatting tools and configure edit-utils settings
tools
Use this skill when the user asks about 1Password, secrets management, retrieving credentials, using op CLI, service accounts, secret references, vault operations, or any task involving the 1Password CLI (op). Also use when needing to inject secrets into environment variables, read passwords or API keys from 1Password, or manage 1Password items from the command line.