---
name: github-daily-standup-summary
description: "Each weekday before standup: what merged, what opened and what got reviewed in the repo since yesterday morning, written person by person. Use when the user asks for this, or when it runs on a schedule."
---

# GitHub daily standup summary

Each weekday before standup: what merged, what opened and what got reviewed in the repo since yesterday morning, written person by person.

Standup goes better when it starts from what actually happened instead of from everyone trying to remember yesterday. Pull requests are a good record of that work, but reading it on GitHub means the closed tab, the open tab and every review thread.

Each weekday the agent collects the last day of pull request activity in one repo and writes it the way people talk at standup: who shipped what, what is new and waiting, which reviews happened, and what is stuck. Monday's run reaches back to Friday morning, so the weekend is covered.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- Read access to the repository, through `gh auth login` or a token that can read pull requests.
- The `gh` CLI, or a GitHub MCP server or connector that can search PRs and list reviews.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Set the window**: From 9:00 yesterday until now, or from 9:00 Friday on a Monday. Write it as an ISO timestamp for the search qualifiers, for example `merged:>=2026-10-15T09:00:00Z`.
2. **Pull merged and opened PRs** (GitHub): `gh pr list --repo acme/acme-web --state merged --search "merged:>=<since>" --json number,title,author,mergedAt,labels` for merges, and `--state open --search "created:>=<since>"` for new PRs.
3. **Pull reviews** (GitHub): For PRs updated in the window (`updated:>=<since>`), read `GET /repos/{owner}/{repo}/pulls/{number}/reviews` and keep reviews whose `submitted_at` falls inside it, with their `state`: APPROVED, CHANGES_REQUESTED or COMMENTED.
4. **Spot what is stuck**: Note open PRs with changes requested and no commit since, and PRs whose `statusCheckRollup` is failing, so the update has a blockers line.
5. **Write it like a standup**: One line per person: what they merged, opened and reviewed. Then a Blockers line. Leave out Dependabot and Renovate PRs unless they merged.

## Route B: the browser

### What you need

- Signed in to GitHub with read access to the repository.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://github.com/pulls. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Search merged PRs since yesterday**: In the search box at the top of the pull requests page, replace the default query with `is:pr repo:acme/acme-web merged:>=2026-10-15T09:00:00Z`, with the timestamp set to 9:00 yesterday, or 9:00 Friday on a Monday. Note number, title and author for each row.
2. **Search new PRs**: Change the query to `is:pr repo:acme/acme-web created:>=<since>`. Open each one and read the **Reviewers** box in the right sidebar for who was asked to review.
3. **Collect reviews**: Run `is:pr repo:acme/acme-web updated:>=<since>` and open each result. In the **Conversation** timeline keep the "approved these changes", "requested changes" and "reviewed" entries whose time falls inside the window, with the reviewer's name.
4. **Spot what is stuck**: While there, note open PRs whose latest review is "Changes requested" with no commit after it, and PRs whose merge box shows failing checks.
5. **Write it like a standup**: One line per person: what they merged, opened and reviewed. Then a Blockers line. Leave out Dependabot and Renovate PRs unless they merged.

Note: The pull requests page accepts a `repo:` qualifier, so no repository page is needed. Reviews only show in each PR's timeline, so a repo with more than ten or fifteen active PRs a day is faster through the API route.

## The report

- **Shipped**: merged PRs, by author.
- **New**: PRs opened since yesterday and who is asked to review.
- **Reviewed**: approvals and change requests, by reviewer.
- **Blockers**: PRs waiting on changes or with red checks.
- One line per person, ready to read out.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "github-daily-standup-summary/<date of this run, e.g. 2026-10-16>",
  "item_key": "github-daily-standup-summary",
  "project": "acme-web",
  "source": "GitHub daily standup summary skill",
  "kind": "update",
  "title": "5 merged, 3 opened, 7 reviews since yesterday",
  "summary": "The invoice timezone fix and the new settings pages shipped. One PR is stuck on requested changes.",
  "widget": [
    {
      "type": "Table",
      "props": {
        "columns": [
          "Who",
          "Since yesterday"
        ],
        "rows": [
          [
            "Dana",
            "Merged #1284 (invoice timezone fix). Reviewed #1297 and #1301."
          ],
          [
            "Mo",
            "Merged #1297 (settings on the app router) and #1295. Reviewed #1284 and #1290."
          ],
          [
            "Jin",
            "Merged #1290 (CSV escaping). Opened #1302. Reviewed #1293."
          ],
          [
            "Priya",
            "Merged #1293 (retry on 429). Opened #1303 and #1304. Reviewed #1302 and #1299."
          ]
        ]
      }
    },
    {
      "type": "Callout",
      "props": {
        "text": "Blocker: #1302 has had changes requested since 15:40 yesterday, with no new commits.",
        "tone": "warn"
      }
    }
  ]
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

## Run it on a schedule

Suggested: Weekdays at 9:15 (`15 9 * * 1-5`). From cron, with the agent signed in on that machine:

```bash
15 9 * * 1-5 claude -p "Run the github-daily-standup-summary skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/github-daily-standup-summary#schedule

Source: https://briefkin.dev/skills/github-daily-standup-summary
