
[!IMPORTANT] While this tool helps document your GitHub contributions, it’s crucial to remember that your impact and value to a company extends far beyond what’s visible in GitHub. Many critical aspects of software engineering - such as mentoring, documentation, cross-team collaboration, and technical leadership - often happen outside of version control. For more on this topic, check out Glue Work, an excellent resource about the often-overlooked but essential work that makes teams successful.
repo and read:org scopesRun the setup script:
./bin/setup
On first run, this copies .env.example to .env
and asks you to fill in your tokens. Edit .env,
then re-run ./bin/setup to validate your
environment. After validation, the script offers
to encrypt your .env with
dotenvx. If you accept, it
creates a .env.keys file with your private
decryption key. Keep .env.keys safe and never
commit it.
Run the tool:
./reflect --username <github-username> --lookback <months-to-look-back> --brag
This will generate four markdown files in the output directory:
Run the tool:
./reflect --username <github-username> --lookback <months-to-look-back> [--brag]
Example:
./reflect --username bostonaholic --lookback 6 --brag
Required:
--username <username>: Your GitHub username to fetch activity forDate range (one required, mutually exclusive):
--lookback <number>: Number of months to look back for activity (1-36)--since <date>: Start date in YYYY-MM-DD
format; fetches activity from this date to today--start-date <date> + --end-date <date>:
Specify an exact date range (both required)Optional:
--provider <provider>: LLM provider to use
(e.g., openai, anthropic), defaults to openai--model <model>: LLM model to use. For OpenAI
(e.g., gpt-4.1, gpt-4.1-mini), defaults to
gpt-4.1. For Anthropic (e.g.,
claude-sonnet-4-6, claude-sonnet-4-5), defaults
to claude-sonnet-4-6--brag: Optional flag to generate a summary and brag document--include-orgs <orgs...>: Only include
contributions from these organizations
(mutually exclusive with –exclude-orgs)--exclude-orgs <orgs...>: Exclude
contributions from these organizations
(mutually exclusive with –include-orgs)--include-repos <repos...>: Only include
contributions from these repositories
(mutually exclusive with –exclude-repos)--exclude-repos <repos...>: Exclude
contributions from these repositories
(mutually exclusive with –include-repos)Basic usage:
./reflect --username bostonaholic --lookback 6 --brag
Fetch activity since a specific date:
./reflect --username bostonaholic --since 2025-01-01 --brag
Choose a model:
./reflect --username bostonaholic --lookback 6 --model gpt-3-5-turbo --brag
Choose an LLM provider and model
./reflect --username bostonaholic \
--lookback 6 --provider anthropic \
--model claude-sonnet-4-6 --brag
Filter by specific organizations:
./reflect --username bostonaholic --lookback 6 --include-orgs shopify github
Exclude specific organizations:
./reflect --username bostonaholic --lookback 6 --exclude-orgs secret archived
Filter by specific repositories:
./reflect --username bostonaholic \
--lookback 6 \
--include-repos bostonaholic/reflect \
bostonaholic/dotfiles
Exclude specific repositories:
./reflect --username bostonaholic \
--lookback 6 \
--exclude-repos bostonaholic/secret \
bostonaholic/archived
Required environment variables:
GITHUB_TOKEN: Your GitHub Personal Access Token (required)To create a GitHub Personal Access Token:
repo (Full control of private repositories)read:org (Read organization data).env fileRequired for making LLM calls (one of):
OPENAI_API_KEYANTHROPIC_API_KEYOptional for using a different provider-compatible endpoint:
OPENAI_BASE_URLANTHROPIC_BASE_URL.env 🔑This project uses dotenvx
for optional .env encryption.
npx @dotenvx/dotenvx encrypt
This encrypts the values in .env in-place and
creates a .env.keys file containing your private
decryption key. Keep .env.keys safe and never
commit it.
npx @dotenvx/dotenvx decrypt
This decrypts .env in-place, replacing encrypted
values with plaintext. You can then delete
.env.keys if you no longer need encryption.
The script will generate one or more markdown files in the output directory:
Contains:
Contains:
Contains:
Note: The output directory and all generated
files are automatically git-ignored to prevent
accidental commits.
If you get TypeScript errors, ensure you’re using Node.js v22 or higher:
node --version
If you get GitHub API errors:
.env filerepo and read:org)If the script runs but generates an empty file:
If you get an error about the OpenAI API key:
.env fileIf you get environment variable errors:
.env file exists and is properly formatted= sign in your .env file.env file is in the root directory of the projectThis repository includes a Claude Code plugin that provides an interactive skill for working with Reflect. The skill helps with setup, running the CLI, and troubleshooting common issues.
Add the marketplace and install the plugin:
/plugin marketplace add bostonaholic/reflect
/plugin install reflect@reflect
Or, if already working inside the Reflect repository,
Claude Code automatically discovers the plugin from
the .claude-plugin/ directory.
Once installed, the reflect skill activates
automatically when asking Claude Code about:
No slash commands or special syntax needed – just ask naturally (e.g., “how do I generate a brag document?” or “reflect is giving me an auth error”).