npx claudepluginhub bostonaholic/reflect --plugin reflectThis skill uses the workspace's default tool permissions.
Reflect is a CLI tool that fetches GitHub activity -- merged
Synthesizes persistent user identity profiles from behavioral observations across sessions, backing claims with evidence and git shipping metrics. Use for pattern tracking and self-insight.
Creates or updates timestamped GitHub portfolio Markdown files by fetching and analyzing repository READMEs and structure via /github-portfolio <repo-url>. Use for career documentation snapshots.
Analyzes GitHub contributions to extract an engineer's coding style, patterns, best practices, architecture, and review feedback into a structured knowledge base.
Share bugs, ideas, or general feedback.
Reflect is a CLI tool that fetches GitHub activity -- merged pull requests, closed issues, and PR reviews -- and uses LLM APIs to generate professional brag documents for performance reviews. It connects to the GitHub GraphQL API via Octokit to retrieve contribution data, then optionally passes that data through an LLM provider (OpenAI or Anthropic) to produce summarized and narrative-format documents. All output is written as structured Markdown files suitable for self-assessments, promotion packets, and manager reviews.
Ensure the following are available before running Reflect for the first time:
node --version. Reflect
uses TypeScript with ES2022 features that require this
minimum version.repo and read:org scopes. Navigate
to GitHub Settings > Developer Settings > Personal Access
Tokens > Tokens (classic) to generate one. The repo
scope grants access to private repository data. The
read:org scope allows reading organization membership,
which is needed for org-based filtering.OPENAI_API_KEY from
OpenAI or an ANTHROPIC_API_KEY from Anthropic. Only one
key is needed, matching the chosen --provider flag.Follow these steps to prepare the local environment:
Run the dev setup from the repository root:
dev up
This installs Node.js, npm dependencies, and copies
.env.example to .env if it doesn't already exist.
Edit .env and set the required variables:
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
Replace the placeholder values with real tokens. Set
ANTHROPIC_API_KEY instead of OPENAI_API_KEY when
planning to use the Anthropic provider. Ensure there
are no spaces around the = sign in each line. The
.env file must reside in the repository root
directory.
For detailed environment variable documentation, including optional base URL overrides and debug mode, see references/configuration.md.
./reflect --username <github-username> \
--lookback <months> [options]
./reflect --username <github-username> \
--since <YYYY-MM-DD> [options]
./reflect --username <github-username> \
--start-date <YYYY-MM-DD> \
--end-date <YYYY-MM-DD> [options]
Reflect requires a GitHub username and a date range
specified by one of three mutually exclusive modes.
All other flags are optional. The tool loads
environment variables from .env at startup,
fetches GitHub data via the GraphQL API, generates
the base contribution reports, and optionally calls
an LLM to produce summarized and brag documents.
--username <username> --
GitHub username to analyze. Must contain only
alphanumeric characters, hyphens, and underscores
(pattern: [a-zA-Z0-9_-]+). The tool validates
this format before making any API calls and exits
with an error if the format is invalid.These three modes are mutually exclusive. Provide exactly one:
--lookback <number> --
Number of months to look back for activity. Must
be a positive integer not exceeding 36. The tool
calculates a date range from the current date
backward by this many months and fetches all
qualifying activity within that window.--since <date> --
Start date in YYYY-MM-DD format. Fetches all
activity from this date up to today. The date
must be in the past and within 36 months of the
current date.--start-date <date> +
--end-date <date> --
Explicit date range in YYYY-MM-DD format. Both
flags are required together. Start date must be
before or equal to end date, and the range cannot
exceed 36 months.--brag --
Enable brag document generation. When present, Reflect
sends the contributions report to the configured LLM
provider to generate both a summarized contributions
file and a professional brag document. Requires a
valid LLM API key in the .env file. Without this
flag, only the raw contribution and review reports
are generated.--provider <provider> --
LLM provider to use for brag document generation.
Valid values: openai, anthropic. Defaults to
openai. The provider determines which API key
environment variable is required (OPENAI_API_KEY
for OpenAI, ANTHROPIC_API_KEY for Anthropic).
The CLI validates the provider value and exits
with an error if it is not recognized.--model <model> --
LLM model to use for text generation. Defaults to
gpt-4.1 when the provider is openai and to
claude-sonnet-4-6 when the provider is anthropic.
Override this to use a different model from the
chosen provider, such as gpt-4.1-mini for OpenAI
or claude-sonnet-4-5 for Anthropic.--debug --
Enable debug mode for detailed LLM API information.
When present, Reflect logs additional diagnostic
output including API request and response details
such as token usage, model name, and completion
status. Deprecated in favor of setting DEBUG=1
in the environment.Use filtering flags to scope GitHub results to specific organizations or repositories. These flags control which contributions appear in the output.
--include-orgs <orgs...> --
Only include contributions from the listed
organizations. Provide one or more organization names
separated by spaces. Each name must match the GitHub
username format ([a-zA-Z0-9_-]+).--exclude-orgs <orgs...> --
Exclude contributions from the listed organizations.
Provide one or more organization names separated by
spaces. Each name must match the GitHub username
format.--include-repos <repos...> --
Only include contributions from the listed
repositories. Provide one or more repository
identifiers in owner/repo format, separated by
spaces. Both the owner and repository name are
validated.--exclude-repos <repos...> --
Exclude contributions from the listed repositories.
Provide one or more repository identifiers in
owner/repo format, separated by spaces.The CLI enforces the following constraints and exits with an error message if violated:
--include-orgs and --exclude-orgs cannot be
used together. Choose one or the other to filter by
organization.--include-repos and --exclude-repos cannot be
used together. Choose one or the other to filter by
repository.--include-orgs
together with --exclude-repos to include all
contributions from certain organizations while
excluding specific repositories.Generate a basic activity report for the last 6 months (no LLM calls, produces only contribution and review reports):
./reflect --username bostonaholic --lookback 6
Generate a full brag document with the default OpenAI
provider and default model (gpt-4.1):
./reflect --username bostonaholic --lookback 6 --brag
Fetch all activity since a specific date:
./reflect --username bostonaholic \
--since 2025-01-01 --brag
Use the Anthropic provider with a specific model:
./reflect --username bostonaholic --lookback 6 \
--provider anthropic --model claude-sonnet-4-6 \
--brag
Include only contributions from specific organizations:
./reflect --username bostonaholic --lookback 6 \
--include-orgs shopify github
Exclude contributions from specific organizations:
./reflect --username bostonaholic --lookback 6 \
--exclude-orgs secret archived
Include only contributions from specific repositories:
./reflect --username bostonaholic --lookback 6 \
--include-repos bostonaholic/reflect \
bostonaholic/dotfiles
Exclude contributions from specific repositories:
./reflect --username bostonaholic --lookback 6 \
--exclude-repos bostonaholic/secret \
bostonaholic/archived
Combine organization and repository filters:
./reflect --username bostonaholic --lookback 12 \
--include-orgs shopify \
--exclude-repos shopify/internal-tools \
--brag
All output files are written to the output/ directory
at the repository root. The directory is created
automatically on the first run if it does not exist. When
a file already exists, Reflect prompts for overwrite
confirmation before replacing it. Choosing not to
overwrite causes Reflect to use the existing file contents
for any downstream processing (such as feeding
contributions into the LLM summarizer). The output/
directory is git-ignored to prevent accidental commits of
generated content.
These two files are produced on every run, regardless of
whether the --brag flag is present:
output/contributions.mdA chronological GitHub activity report containing all
merged pull requests and closed issues within the
lookback period. Each entry includes the title, closing
date, description body, and repository name. Items are
sorted by closing date with the most recent first. This
file provides the foundational data that feeds all
downstream reports. When --brag is enabled, this file
is sent to the LLM for summarization.
output/review_contributions.mdA report of PR review comments authored by the specified user within the lookback period. Each entry includes the review state (approved, changes requested, commented), the review body text, and individual review comments. This file captures code review activity, which is distinct from code authoring contributions and often reflects mentorship and collaboration efforts.
--bragThese two files are produced only when the --brag flag
is present. They require a valid LLM API key
(OPENAI_API_KEY or ANTHROPIC_API_KEY) to be set in
the .env file. Generation happens sequentially: the
summarized contributions are produced first, then the
brag document is generated from that summary.
output/summarized_contributions.mdAn LLM-generated summary of the raw contributions report. The LLM groups similar contributions together, highlights key technical changes and improvements, identifies recurring patterns across the work, and notes significant architectural decisions. This intermediate file serves as the input for the final brag document and can also stand alone as a concise technical summary for engineering-focused reviews.
output/brag_document.mdA professional brag document generated by the LLM from the summarized contributions. The document is structured to focus on business impact and value delivered, emphasize collaboration and leadership moments, highlight key metrics and improvements, and present achievements in a narrative format. It is formatted for direct use in performance reviews, promotion packets, or portfolio presentations.
Below is a quick reference for frequent problems. Each entry describes the symptom and the recommended fix. For detailed step-by-step troubleshooting procedures, see references/troubleshooting.md.
dev up to
automatically copy .env.example to .env. Edit
.env with the required variables. Ensure no spaces
surround the = sign in each entry.GITHUB_TOKEN is
set in .env, has both repo and read:org scopes,
and has not expired. Re-generate the token if the
scopes are incorrect.--lookback value or using an earlier
--since date to capture a wider time range.OPENAI_API_KEY for the openai
provider or ANTHROPIC_API_KEY for the anthropic
provider. Confirm the key is valid and has sufficient
credits or quota remaining.--username value.--lookback value between 1 and
36 inclusive. The value must be a positive integer.--since date is in the future. Provide a past
date in YYYY-MM-DD format.--include-repos and
--exclude-repos.node --version to verify. Older versions lack
support for the ES2022 features and TypeScript
stripping that Reflect requires.--lookback period to fetch less data..env file format.