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
Manually reproduce what the github-app plugin's SessionStart hook does to make a GitHub App installation token usable in the current session — materialize the PEM, generate the token, isolate GH_CONFIG_DIR, write the runtime env file, and wire CLAUDE_ENV_FILE so every Bash call sees GH_TOKEN/GITHUB_TOKEN. Use when the hook did not run, the token is missing from the environment, or a shell/teammate needs the token wired up by hand. <example>GH_TOKEN isn't set even though github-app is configured</example> <example>the github-app SessionStart hook didn't run, set up the token manually</example> <example>wire the github app token into CLAUDE_ENV_FILE</example> <example>gh keeps falling back to the wrong account, isolate GH_CONFIG_DIR</example>
tools
Manually configure the GitHub App bot git identity the way the github-app plugin's SessionStart hook does — resolve the app slug and bot user ID, build the <slug>[bot] name and noreply email, set GIT_AUTHOR_*/GIT_COMMITTER_* env vars, and write an isolated GIT_CONFIG_GLOBAL with the gh auth git-credential helper. Use when commits are attributed to the wrong account, "Author identity unknown" appears, or git identity must be set up by hand. <example>my commits are showing up as the handler, not the bot</example> <example>git says Author identity unknown after the github-app hook ran</example> <example>configure the github app bot git identity manually</example> <example>set up the gh credential helper for git push</example>
tools
Manages spec files for requirements capture and validation
tools
# Bash Chaining Alternatives This skill teaches you how to work around the bash command chaining restriction enforced by this plugin. ## Why Chaining is Blocked The `bash-command-rejection` plugin blocks these operators: | Operator | Name | Why Blocked | | -------- | ---------- | ----------------------------------------------------------------------------------- | | `&&` | AND chain | Runs cmd2 only if cmd1 su