atdd-plan
Produce an ATDD-first implementation plan in Claude Code's native plan mode, with named design patterns called out where they…
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
Claude Code
$ npx -y skills add Flagrare/agent-skills --skill standup-report --agent claude-code
Codex
$ npx skills add Flagrare/agent-skills --skill standup-report -a codex -y
Cursor
$ npx skills add Flagrare/agent-skills --skill standup-report -a cursor -y
Gemini CLI
$ npx skills add Flagrare/agent-skills --skill standup-report -a gemini-cli -y
GitHub Copilot
$ npx skills add Flagrare/agent-skills --skill standup-report -a github-copilot -y
OpenCode
$ npx skills add Flagrare/agent-skills --skill standup-report -a opencode -y
Windsurf
$ npx skills add Flagrare/agent-skills --skill standup-report -a windsurf -y
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.
> **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.
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.
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"
fiTell the user once: "Migrated your config from the old per-plugin location to `~/.claude/skills/flagrare/config.json` so it survives plugin updates."
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:
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.
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.
**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
Thirty-eight 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
Produce an ATDD-first implementation plan in Claude Code's native plan mode, with named design patterns called out where they…
Generate a comprehensive, impact-framed brag-doc entry for a chosen time window (day, week, biweek, month, or custom). Pulls…
Programmatic bug bashing, ingest a prescribed test plan (Notion, markdown, pasted spec), drive a real running system (browser via…
Run the career skills that are due, in one pass, and return one short combined digest plus an updated board. It reads timestamps…
Explore the codebase to map conventions, reusable utilities, analogous features, and data flows relevant to a planned change.…
Generate a daily code review report showing stale PRs, items needing your attention, and active work for your team. Use whenever…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.