-
Notifications
You must be signed in to change notification settings - Fork 11
PoC: Add bitwarden-daily-recap plugin #107
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from 7 commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
6592d52
feat: Add daily-recap plugin
SaintPatrck 5e72bec
Add hydrated engineering-recap sample for review and styling delta trβ¦
SaintPatrck a69713f
Refine engineering-recap sample: add late-night stream and fake teammβ¦
SaintPatrck 6790e8d
Make day-boundary timezone-aware: default 7am local with DAILY_RECAP_β¦
SaintPatrck 33bb146
Use ${CLAUDE_PLUGIN_DATA}/recaps/{type}-recap-{date}.html for output β¦
SaintPatrck 07beac0
Rename plugin to bitwarden-daily-recap to follow Bitwarden plugin namβ¦
SaintPatrck a83713e
Update plugin identifier references to bitwarden-daily-recap
SaintPatrck 5f7db1a
Fix GNU date branch in local_to_utc: parse input without -u
SaintPatrck File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| { | ||
| "name": "bitwarden-daily-recap", | ||
| "version": "1.0.0", | ||
| "description": "Generate polished, interactive HTML recaps of a person's daily work. Pulls activity from the relevant systems, shapes it into a standup-ready, colleague-shareable artifact, and applies Bitwarden brand styling.", | ||
| "author": { | ||
| "name": "Bitwarden", | ||
| "url": "https://github.com/bitwarden" | ||
| }, | ||
| "homepage": "https://github.com/bitwarden/ai-plugins/tree/main/plugins/bitwarden-daily-recap", | ||
| "repository": "https://github.com/bitwarden/ai-plugins", | ||
| "keywords": [ | ||
| "bitwarden-daily-recap", | ||
| "standup", | ||
| "summary", | ||
| "retrospective", | ||
| "activity-tracking", | ||
| "interactive-html" | ||
| ] | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| # Changelog | ||
|
|
||
| All notable changes to the Bitwarden Daily Recap Plugin will be documented in this file. | ||
|
|
||
| The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), | ||
| and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). | ||
|
|
||
| ## [1.0.0] - 2026-05-01 | ||
|
|
||
| ### Added | ||
|
|
||
| - Initial release with `engineering-recap` skill β generates an interactive HTML recap of the user's engineering work for a given day | ||
| - Output written to `${CLAUDE_PLUGIN_DATA}/recaps/engineering-recap-{YYYY-MM-DD}.html` (persistent per-plugin storage; survives plugin updates). Filename pattern uses a `{recap-type}-recap-` prefix to leave room for sibling recap skills | ||
| - Local-timezone day-boundary handling (late-night work folds into the prior workday); cutoff hour and timezone are configurable via the `DAILY_RECAP_CUTOFF_HOUR` and `TZ` env vars | ||
| - Bundled HTML template tuned to the Bitwarden brand palette (Bitwarden Blue, Teal, Inter font, brand shield) | ||
| - Bundled `gather-gh-events.sh` script that pulls GitHub events scoped to the user's workday window | ||
| - Bundled `render-guide.md` reference covering placeholder map and HTML injection recipes | ||
| - Cross-plugin integration with `claude-retrospective:extracting-session-data` for session extraction |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| # Bitwarden Daily Recap | ||
|
|
||
| Generate polished, interactive HTML recaps of a person's daily work. Pulls activity from the relevant systems, shapes it into a standup-ready, colleague-shareable artifact, and applies Bitwarden brand styling. | ||
|
|
||
| ## Skills | ||
|
|
||
| | Skill | Purpose | | ||
| | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ||
| | `engineering-recap` | Generates a recap of the user's engineering work β Claude Code session activity combined with GitHub events (PRs, reviews, comments, pushes, branch ops, repo creates, sweeps). Produces an interactive HTML page with a copy-ready standup card, project workstreams, GitHub timeline, and theme block. | | ||
|
|
||
| ## Usage | ||
|
|
||
| The `engineering-recap` skill triggers on retrospective queries about the user's own coding work β phrases like: | ||
|
|
||
| - _"what did I work on yesterday?"_ | ||
| - _"recap please"_ | ||
| - _"standup prep"_ | ||
| - _"summarize my work this morning"_ | ||
| - _"create me a daily recap for april 28 to show colleagues"_ | ||
|
|
||
| The output is saved to `${CLAUDE_PLUGIN_DATA}/recaps/engineering-recap-{YYYY-MM-DD}.html` and opened in the default browser. `${CLAUDE_PLUGIN_DATA}` is the per-plugin persistent directory provided by Claude Code (resolves to `~/.claude/plugins/data/{plugin-id}/`); recaps survive plugin updates and are not tied to a hardcoded user path. The `{recap-type}-recap-` filename pattern keeps the `recaps/` directory tidy as new recap skills are added to this plugin (e.g. `design-recap-`, `management-recap-`). | ||
|
|
||
| ## Day boundary | ||
|
|
||
| The skill treats **7am in the user's local timezone** as the day boundary, not midnight UTC. Late-night work folds into the prior calendar day. A "Today / Fresh" banner appears only when there is activity past today's cutoff hour. | ||
|
|
||
| Both knobs are env-var configurable: | ||
|
|
||
| - `DAILY_RECAP_CUTOFF_HOUR` (default `7`) β the hour-of-day cutoff. Set to `5` for early-morning crews, `9` for late risers. | ||
| - `TZ` (standard env var) β override the timezone, e.g. `TZ=America/Los_Angeles` when generating a recap for someone else. | ||
|
|
||
| ## Dependencies | ||
|
|
||
| - `claude-retrospective` β session extraction is delegated to `claude-retrospective:extracting-session-data`. Install this plugin first. | ||
| - `gh` CLI authenticated against GitHub β required for the events feed and PR title enrichment. | ||
| - `jq` β required by bundled scripts. | ||
|
|
||
| ## Files | ||
|
|
||
| ``` | ||
| bitwarden-daily-recap/ | ||
| βββ .claude-plugin/plugin.json | ||
| βββ CHANGELOG.md | ||
| βββ README.md | ||
| βββ examples/ | ||
| β βββ engineering-recap-sample.html β Hydrated example with fake data | ||
| βββ skills/ | ||
| βββ engineering-recap/ | ||
| βββ SKILL.md | ||
| βββ assets/template.html β Bitwarden-branded HTML scaffold | ||
| βββ scripts/gather-gh-events.sh β Events feed window helper | ||
| βββ references/render-guide.md β Placeholder map + HTML recipes | ||
| ``` | ||
|
|
||
| ## Example | ||
|
|
||
| Open [`examples/engineering-recap-sample.html`](examples/engineering-recap-sample.html) (one sample per skill) for a hydrated view of the produced report. The file uses fake data (persona "Alex Carter", date 2026-05-04) and exercises every section β stats, today banner, standup card with copy button, project chips and filters, collapsible streams across 5 projects, full GitHub timeline with cross-references and an after-midnight tail, and the theme block. | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π‘ I am cool with an example file being added with the skill, but I think that it's very important to include clear instructions about when and how the next engineer should maintain it. Keeping that information here in the
README.mdfeels like the correct place to me. I think it's also worth pairing it's maintenance with the template file to keep them both in alignment.