Skip to content

/standup-report

Generate a two-part standup report: Yesterday (everything code-related you shipped, reviewed, or addressed since your last working day, PRs merged, reviews left and answered, comments addressed, deploys that fired, tickets closed) and Today (carry-over threads plus

shell
$ npx -y skills add Flagrare/agent-skills --skill standup-report --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/standup-report
How auto-invocation works

Context preview

The summary Claude sees to decide when to auto-load this skill.

Generate a two-part standup report: Yesterday (everything code-related you shipped, reviewed, or addressed since your last working day, PRs merged, reviews left and answered, comments addressed, deploys that fired, tickets closed) and Today (carry-over threads plus

SKILL.md

standup-report.SKILL.md
name: standup-report
description: Generate a two-part standup report: Yesterday (everything code-related you shipped, reviewed, or addressed since your last working day, PRs merged, reviews left and answered, comments addressed, deploys that fired, tickets closed) and Today (carry-over threads plus priority-ordered queue items, framed as "likely working today"). Pulls from GitHub, local git, release automation, and any installed tracker/Slack MCPs. Output is a narrative paragraph, a journal-style recap, a Today section, and a slack-pasteable bullet list, written in human terms (the *thing* you fixed, not "PR #481"). Use whenever the user says "standup", "standup report", "what did I do yesterday", "yesterday recap", "daily recap", "what did I ship", "morning standup", "give me my standup", "summarize yesterday's work", or any variation. Also trigger right before a known standup time when the user opens a session.

Standup Report

> **No em-dashes.** Nothing this skill writes may contain an em-dash; use a comma, colon, or parentheses instead. Enforced by a repo hook that flags em-dashes in generated `.md`. See `/flagrare:write-docs`.

Generate a daily standup recap that reads like a human wrote it. The reader is either the user (preparing what to say at standup) or their team (skimming a Slack post). Either way, they want the *story* of yesterday's code work, not a JSON dump of commits.

The single rule that shapes everything below: **work is named by what it was, not by its ID.** "Fixed the image cache eviction" beats "Merged PR #481" every time. Nobody remembers numbers; everyone remembers the bug.

Setup (first run only)

Config lives at **`~/.claude/skills/flagrare/config.json`**: a single file shared across all flagrare skills, outside the plugin tree so it survives plugin updates and reinstalls. Skill-agnostic keys (GitHub login, display name, repo scope, local roots) sit at the top level; skill-specific keys nest under `skills.<name>`.

In Bash, expand `~` explicitly: `"$HOME/.claude/skills/flagrare/config.json"`. The directory may not exist yet, `mkdir -p "$HOME/.claude/skills/flagrare"` before writing.

Step 1: Migrate legacy config (one-time)

If `~/.claude/skills/flagrare/config.json` does **not** exist but a legacy per-skill config does, migrate it:

LEGACY="{skill_directory}/config.json"   # old location, lost on plugin reinstall
NEW="$HOME/.claude/skills/flagrare/config.json"
if [ ! -f "$NEW" ] && [ -f "$LEGACY" ]; then
  mkdir -p "$(dirname "$NEW")"
  # Wrap legacy keys: standup-specific ones (extra_mcps) move under skills.standup-report
  jq '{
    github_login, display_name, first_person, repo_scope, local_repo_roots, tracker_mcp,
    skills: { "standup-report": { extra_mcps: .extra_mcps } }
  } | with_entries(select(.value != null))' "$LEGACY" > "$NEW"
fi

Tell the user once: "Migrated your config from the old per-plugin location to `~/.claude/skills/flagrare/config.json` so it survives plugin updates."

Step 2: First-time setup (if no config exists at the new path)

Use `AskUserQuestion` to collect:

1. **GitHub login**: needed for `author:`, `commenter:`, `reviewed-by:` searches. If missing, run `gh api user --jq '.login'` and confirm. 2. **Display name**: how to refer to the user in the narrative ("Alan reviewed two PRs" vs "you reviewed two PRs"). Default to first-person ("I"). 3. **Repo scope**: one of:

  • `org:<name>`, all repos in a GitHub org (best for company work)
  • `user:<login>`, all repos under the user's account (best for personal projects)
  • explicit list of `owner/repo` strings, when work spans orgs

4. **Local repo roots**: directories under which to scan for local commits (e.g., `~/Dev`, `~/work`). The skill walks one level deep looking for `.git/` to enumerate repos. 5. **Tracker MCP**: detect which is installed in the session (Linear, Jira, Notion, Asana, Shortcut, Trello). If multiple, ask which one this user actually files tickets in. If none, skip. 6. **Additional MCPs to query**: after the above is filled in, list the *other* MCPs currently available in the session (Slack, Discord, Google Calendar, PostHog, etc.) and ask if any should feed context into the recap. Example: Slack DMs/channels might surface conversations that explain *why* a PR was opened. Save which ones the user opts in to.

Save the shared keys at the top level and the standup-specific `extra_mcps` under `skills["standup-report"]`:

{
  "github_login": "aturing",
  "display_name": "Alan",
  "first_person": true,
  "repo_scope": { "type": "org", "value": "acme-corp" },
  "local_repo_roots": ["~/Dev", "~/work"],
  "tracker_mcp": "linear",
  "skills": {
    "standup-report": {
      "extra_mcps": ["slack"]
    }
  }
}

Confirm with the user before saving. Preserve any pre-existing `skills.*` blocks from other flagrare skills, merge, don't overwrite.

Returning user

If `~/.claude/skills/flagrare/config.json` exists, read the top-level keys plus `skills["standup-report"]`. If only some top-level keys exist (e.g. brag-doc was set up but not standup-report), reuse what's there and only ask for `extra_mcps`. If the user says "reconfigure" or "edit setup", re-run the setup flow, but only rewrite the `skills["standup-report"]` block plus any top-level keys the user changes; leave other skills' blocks untouched.

Resolve the time window

**First, determine today's date and current time by running:**

date '+%A %Y-%m-%d %H:%M'

Do NOT guess the day of the week from context or the current date string. LLMs are unreliable at day-of-week calculations. Always run the command above and use its output.

"Yesterday" at standup means **last working day**, not literal yesterday. Apply this logic to the output of the `date` command:

today = Mon → window starts Friday 00:00
today = Tue-Fri → window starts previous calendar day 00:00
today = Sat/Sun → window starts most recent Friday 00:00

The window always **ends at the cu

Read more
Read it on GitHub ↗

Showing the first part of this file.

Ships withflagrare-agent-skills

Thirty-two skills that wrap around your development cycle in Claude Code. They turn tickets into ATDD plans, smoke-test features against a running app or service, hunt down bugs with runtime evidence, guard commits against doc drift, run seven-axis code

Get the whole plugin, auto-invoked
Stats
10
Stars
0
Views
1
Forks
Active
Maintenance
Shell
Language
2d ago
Last commit
2mo ago
Created

Repo: Flagrare/agent-skills

Other skills on flagrare-agent-skills.