Skip to content
Security
Skill

/weekly-recap

Generates an interactive HTML recap of the user's own engineering work over one Monday-to-Friday workweek, ready for a weekly standup, 1:1 prep, or sharing with colleagues. Use when the user asks what they worked on, shipped, merged, reviewed, or moved tickets and docs on over a

From plugin
ai-plugins
16483 skills4 agents6 commands2 MCP

Claude Code

$ npx -y skills add bitwarden/ai-plugins --skill weekly-recap --agent claude-code

SKILL.md

weekly-recap.SKILL.md
name: weekly-recap
context: fork
agent: general-purpose
description: Generates an interactive HTML recap of the user's own engineering work over one Monday-to-Friday workweek, ready for a weekly standup, 1:1 prep, or sharing with colleagues. Use when the user asks what they worked on, shipped, merged, reviewed, or moved tickets and docs on over a week ("this week", "last week", "the week of" a date), or asks for a "weekly recap", "weekly standup", "weekly summary", "week in review", or "weekly update", including phrasings like "throw together what I did last week". Not for a single day or part of a day, for a multi-day range that is not a Monday-to-Friday week or for several weeks at once (use the daily-recap skill), for looking up a single specific PR, commit, ticket, or document, for someone else's activity, for meeting recaps, for repository-level overviews, or for critiquing how a single Claude Code session went.

Weekly Recap

Generate the daily-recap page for a whole workweek. This skill defines only what differs for a week. Everything else comes from the daily-recap skill in the same plugin.

Using the daily-recap skill

Read `${CLAUDE_PLUGIN_ROOT}/skills/daily-recap/SKILL.md` and follow its workflow (steps 1-7), its `references/render-guide.md`, and its rules on escaping, credentials, untrusted text, the Content-Security-Policy, and deleting `work/`. Where this file says something different, this file wins.

That file is read as plain text, so two things in it need translating:

  • Its relative paths (`scripts/`, `assets/`, `references/`) are under `${CLAUDE_PLUGIN_ROOT}/skills/daily-recap/`. Call the scripts by that absolute path.
  • Its `${CLAUDE_PLUGIN_DATA}` stays literal, because that file is read as plain text rather than loaded as a skill. Use the path substituted into this file: `out_dir="${DAILY_RECAP_OUTPUT_DIR:-${CLAUDE_PLUGIN_DATA}/daily-recaps}"`. If the result still contains `${` or begins with `/daily-recaps`, the plugin data variable was empty; stop and report that this skill must run from the installed plugin.

The week

A week is the five workdays Monday through Friday. Each workday uses daily-recap's day boundary (`DAILY_RECAP_CUTOFF_HOUR`, default 07:00, and `TZ`), so the week runs from the cutoff on Monday to the cutoff on Saturday. Pick the dates, then take the actual bounds from the scripts' `window` output rather than recomputing them.

  • "last week", "weekly standup", or no time given: the most recent Monday-to-Friday week whose Friday workday has ended.
  • "this week": Monday of the current week through today. Today's window ends in the future, which is fine.
  • A specific date: the Monday-to-Friday week containing it.

To step between dates, source `${CLAUDE_PLUGIN_ROOT}/skills/daily-recap/scripts/date-utils.sh` and use `add_days`, which handles GNU and BSD `date`. For a date's weekday, use `epoch_fmt "$(local_to_epoch "YYYY-MM-DD 12:00:00")" '%u'` (1=Monday) rather than `date -d`, which is GNU-only and silently returns today's weekday on BSD `date`.

Collecting

In daily-recap's step 1, run (a), (b), and (d) once per workday in the week, passing that day's date and naming each file by it (`events-YYYY-MM-DD.json`, `sessions-YYYY-MM-DD.json`, `atlassian-YYYY-MM-DD.json`). In (b), read the window bounds from that day's `events-YYYY-MM-DD.json` rather than the `events.json` the step names. Run (c) once for the whole week: `gather-gh-search.sh MONDAY LAST-DAY`, where LAST-DAY is Friday, or for "this week" the earlier of today and that week's Friday. Skip (e) and leave `{{TODAY_BANNER}}` empty: "this week" already covers today, and for a past week the banner would sit across a weekend gap.

GitHub's events feed holds only the last 300 events from the last 30 days, so a busy week can be truncated, and a week more than 30 days old has no events at all. When any day's `feed_complete` is `false`, say so in the recap and rely on `search.json` for PRs.

Merge the per-day session digests before step 4, and the remaining per-day results before step 5. A session or PR that spans several days is one item, and a stream can run across the whole week.

Rendering

  • Page file: `recap-week-YYYY-MM-DD.html` in `$out_dir`, named by Monday's date. Use this name in steps 6 and 7.
  • Page title: in the copied page, replace "Daily Recap" with "Weekly Recap" in the `<title>`, the "Engineering Daily Recap" header span, the "Daily Recap · Interactive" eyebrow, and the "Bitwarden · Engineering Daily Recap" footer. All four sit outside the `<script>` block, so the Content-Security-Policy hash is unaffected.
  • `{{DATE}}`: the range, for example `2026-10-19 – 2026-10-23`.
  • `{{STANDUP_PERIOD}}`: `Week · {range}`.
  • `{{STANDUP_LABEL_PAST}}` is `Last week` and `{{STANDUP_LABEL_NEXT}}` is `This week`, per the render guide's Weekly column.
  • Stats sum across the week. Count each PR, repository, and session once, and follow the render guide's dedupe rules for Jira and Confluence.
  • Timeline: order events across the week and put a day divider before each day's events, using the After Midnight divider's markup with the text `{Weekday} · {YYYY-MM-DD}`. Each event's `tl-time` span reads `{Ddd} {HH:MM}` rather than `{HH:MM}`, so the day stays legible when the project or search filter hides the events under a divider. Leave out the After Midnight divider; post-midnight events stay under their workday.
  • The BLUF and Last week bullets summarize the week's main outcomes, not each day in turn.
Read more
@bitwarden
Ships withai-plugins

A curated collection of plugins for AI-assisted development at Bitwarden. Enables discovery and distribution of quality-controlled plugins for use with Claude Code.

16483 skills4 agents2 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
164
Star history of bitwarden/ai-plugins on GitHub, a chart by star-history.com

Other skills on ai-plugins.

commit-message

commit-message

Abacus land.commit slot for Bitwarden. Compose one commit's subject and body for a change Abacus is about to land, following…

consulting-adrs

consulting-adrs

Check a design, change, pull request, plan, or threat model against Bitwarden's Architecture Decision Records (ADRs), or locate…

filing-jira-tickets

filing-jira-tickets

File Jira work items that stand on their own, with real ticket titles, acceptance criteria in whatever field the target project…

More skills from other plugins.

api-security

api-security

Use for authorized security assessment of REST, GraphQL, WebSocket, or SOAP APIs, including discovery, authentication,…

@zhaoxuya520@zhaoxuya520Install Skill
nemoclaw-user-guide

nemoclaw-user-guide

Find official NemoClaw documentation for installation, configuration, operation, or troubleshooting. Also handles requested docs…

@nvidia@nvidiaInstall Skill

Questions about weekly-recap.

Which coding agents can use weekly-recap?
weekly-recap installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.