Buttery-smooth tools for GitHub. See what you've shipped, never miss a review comment, and let AI write your standup for you.
ghee is a tiny, friendly CLI that turns your scattered GitHub (and Linear) activity into a clean, readable summary. Point it at a date range and it tells you what you worked on. Point it at a PR and it tells you what reviewers said. Optionally, let Google Gemini turn it all into a tidy narrative.
π Analyzing GitHub activity for user: octocat
π‘ Fetching activity data...
π Fetching Linear issues...
============================================================
π€ AI-Powered Summary
============================================================
This sprint you focused on the auth refactor (3 PRs merged),
fixed two flaky tests, and unblocked the billing migrationβ¦
- "What did I do again?" β Generate a standup, weekly update, or self-review in seconds instead of scrolling through GitHub.
- Never drop a review comment β
ghee prsurfaces every unresolved comment in the repo you're standing in. - Understand a review at a glance β
ghee pr-roundsreconstructs a PR's review history into clean, chronological rounds. - Zero hardcoding β user, repo, and auth all come from your
ghlogin and local git remote. Nothing company- or environment-specific baked in. - Scriptable β
--jsoneverywhere it matters, so you can pipe intojqand build your own dashboards.
- π Commits β everything you pushed in a date range, grouped by repo
- π Pull requests β what you opened, with status at a glance
- π¬ PR comments β list every unresolved review comment in the current repo
- π Review rounds β reconstruct a PR's review history, round by round
- π Linear issues β fold in the tickets you actually worked on (optional)
- π€ AI summaries β a human-readable recap via Google Gemini (optional)
- π§° Plays nice with scripts β
--jsonon the comment commands forjqpipelines
You'll need:
- Python 3.11+
- GitHub CLI (
gh), installed and authenticated - uv (recommended)
Clone and sync:
uv syncThat's it β ghee is now runnable via uv run ghee.
ghee talks to GitHub through the gh CLI, so just log in once:
gh auth loginThe default user, current repo, and all API access are inferred from gh and your local git remote β nothing is hardcoded.
Want your Linear tickets in the mix? Provide an API key in any of these (highest precedence first):
LINEAR_KEYenvironment variable~/.config/ghee/config.iniβ[api_keys]βlinear = lin_api_β¦- An existing
~/.config/lnr.cfg(first organization's key is reused automatically)
Drop in a Google Gemini key to unlock AI recaps:
GEMINI_KEYenvironment variable~/.config/ghee/config.iniβ[api_keys]βgemini = β¦
π‘ Environment variables always win over the config file. The config file is created for you on first run at
~/.config/ghee/config.ini(location follows your OS config dir).
ghee has three commands. activity is the default β running ghee with no command is the same as ghee activity.
<!-- OUTPUT:START -->
<!-- β οΈ This content is auto-generated by `markdown-code-runner`. -->
Usage: ghee [OPTIONS] COMMAND [ARGS]...
GitHub Activity Analyzer CLI.
Options:
--from TEXT Start date (YYYY-MM-DD format, default: Monday 2 weeks ago)
--to TEXT End date (YYYY-MM-DD format, default: now)
--no-ai-summary Disable AI-powered summary (by default, uses Gemini if
GEMINI_KEY is available)
-u, --user TEXT GitHub login to analyze [default: (logged-in user)]
--help Show this message and exit.
Commands:
activity Analyze GitHub activity between dates.
pr Fetch and list all unresolved PR comments for the current...
pr-rounds Fetch review rounds (submitted reviews + their inline...
<!-- OUTPUT:END -->
Summarize your commits, PRs, and Linear issues across a date range.
# Default: from Monday two weeks ago β now
uv run ghee activity
# β¦and because activity is the default command:
uv run ghee
# Pick a date range (YYYY-MM-DD)
uv run ghee activity --from 2024-01-01 --to 2024-01-15
# Analyze someone else's public activity
uv run ghee activity --user octocat
# Skip the AI summary even if a Gemini key is set
uv run ghee activity --no-ai-summaryWhat gets counted:
- PRs: Only PRs authored by the specified user (via
--user/-u), created in the date range. Reviewed or commented-on PRs are deliberately excluded β the count reflects "PRs I opened", not "PRs I touched". --user/-u: Expects a GitHub login (e.g.octocat,pace-gene), not an email address. Passing an invalid login will produce silently zeroed activity β usegh api users/{login}to verify a login exists.
CLI reference
<!-- OUTPUT:START -->
<!-- β οΈ This content is auto-generated by `markdown-code-runner`. -->
Usage: ghee activity [OPTIONS]
Analyze GitHub activity between dates.
Options:
--from TEXT Start date (YYYY-MM-DD format, default: Monday 2 weeks ago)
--to TEXT End date (YYYY-MM-DD format, default: now)
--no-ai-summary Disable AI-powered summary (by default, uses Gemini if
GEMINI_KEY is available)
-u, --user TEXT GitHub login to analyze [default: (logged-in user)]
--help Show this message and exit.
<!-- OUTPUT:END -->
List every unresolved review comment on PRs in the current repository (detected from your git origin).
# Human-readable
uv run ghee pr
# Machine-readable for scripts
uv run ghee pr --jsonRun this from inside a cloned repo with an
originremote.
CLI reference
<!-- OUTPUT:START -->
<!-- β οΈ This content is auto-generated by `markdown-code-runner`. -->
Usage: ghee pr [OPTIONS]
Fetch and list all unresolved PR comments for the current repository.
Options:
--json Output as JSON instead of human-readable format
--help Show this message and exit.
<!-- OUTPUT:END -->
Reconstruct a PR's review history as rounds. Each round captures the review state (APPROVED / CHANGES_REQUESTED / COMMENTED / DISMISSED), the reviewer, their top-level body, and the inline comments left in that round.
# By full PR URL β works from anywhere
uv run ghee pr-rounds https://github.com/owner/repo/pull/123
# By number, using the current git repo
uv run ghee pr-rounds 123
# By number, with an explicit repo
uv run ghee pr-rounds 123 --repo owner/repo
# JSON output
uv run ghee pr-rounds 123 --jsonCLI reference
<!-- OUTPUT:START -->
<!-- β οΈ This content is auto-generated by `markdown-code-runner`. -->
Usage: ghee pr-rounds [OPTIONS] PR_REF
Fetch review rounds (submitted reviews + their inline comments) for a PR.
PR_REF can be a PR number (e.g. 123) or a full PR URL.
Options:
--repo TEXT Repository in OWNER/REPO format (overrides current git repo
when PR_REF is a bare number).
--json Output as JSON instead of human-readable format
--help Show this message and exit.
<!-- OUTPUT:END -->
Notes:
- Pending (unsubmitted) reviews are excluded.
- Pagination is capped at 100 reviews/PR and 100 inline comments/review; exceeding either prints a warning to
stderr. - In human output, resolved comments are prefixed with β .
Per-comment JSON fields (in addition to identity/location):
| Field | Meaning |
|---|---|
thread_id |
GraphQL node ID of the parent review thread (e.g. PRRT_kwDOβ¦), stable for the comment's lifetime |
is_resolved |
Whether the parent thread is currently resolved |
in_reply_to_id |
Short ID of the comment this replies to, or null for thread roots |
commit_id / original_commit_id |
SHA the comment currently / originally points at; either may be null after a force-push |
Filter out resolved comments with jq:
uv run ghee pr-rounds 123 --json \
| jq '[.[] | .comments |= map(select(.is_resolved | not))]'ghee ships with an agent skill that teaches AI coding agents when and
how to use the CLI (e.g. "what did I work on this week?", "what review
comments are still open?"). It lives at skills/ghee/SKILL.md.
Install it by copying the skill folder into your agent's skills directory:
# Claude Code β make it available in every project (user-level)
mkdir -p ~/.claude/skills
cp -r skills/ghee ~/.claude/skills/ghee
# β¦or scope it to a single project (project-level)
mkdir -p .claude/skills
cp -r skills/ghee .claude/skills/ghee
# Cursor uses the same SKILL.md format under .cursor/skills
mkdir -p ~/.cursor/skills
cp -r skills/ghee ~/.cursor/skills/gheeOnce installed, the agent will reach for ghee automatically when you ask
about GitHub activity, PR comments, or review rounds.
If your agent already has the GitHub MCP server, ghee is a
complement, not a replacement. Reach for the right tool:
ghee shines when you want:
- Cross-repo, date-ranged digests β
ghee activityassembles a standup / retro / self-review across all your repos in a single call. Doing this over MCP means fanning out across many search/list calls and aggregating by hand. - Linear in the mix β the GitHub MCP doesn't touch Linear;
gheefolds those issues in. - A ready-made AI narrative β
ghee activitycan return a written summary directly. - Context efficiency β one compact CLI result instead of many MCP round-trips that fill up the agent's context window.
- Portability β it's just a binary, so it works in a plain shell,
cron, or CI withjqpipelines, no MCP host required. - Opinionated shapes β
pr-roundsgroups reviews into rounds and emits a stable, compact JSON schema built for downstream tooling.
ghee pr-rounds is specifically better at review history. On a large
PR (e.g. astral-sh/uv#19884,
42 review rounds) ghee pr-rounds returns the whole thing in one call β
each round's state, reviewer, timestamp, the top-level review body, and
every inline comment correlated to its round with file:line, author,
resolved status, and a permalink. The GitHub MCP needs two separate
methods for the same picture (get_reviews + get_review_comments), both
paginated, and they don't line up: review comments come back grouped by
thread, not by round, so they have to be correlated by hand β and
get_reviews doesn't return the review body text at all. That gap is
exactly why an agent tends to bounce between calls (or fall back to raw
gh) when reconstructing a PR's review history.
Prefer the GitHub MCP server when you want:
- One-off reads or rich navigation of a single PR / issue.
- Write actions β creating PRs, submitting reviews, resolving
threads.
gheeis read-only by design.
- Commits grouped by repository
- Pull requests with their status
- Linear issues you actually worked on (if configured)
- An AI-powered analysis of your focus areas (if configured)
- Totals for each activity type
github_tools/
βββ __init__.py # Package exports
βββ __main__.py # CLI entry point (Click commands)
βββ ai.py # AI / Gemini integration
βββ config.py # Config file management (~/.config/ghee/config.ini)
βββ formatters.py # Output formatting (human + JSON)
βββ github_api.py # GitHub interactions (via gh)
βββ linear_api.py # Linear GraphQL interactions
βββ prompt.j2 # Jinja2 template for the LLM prompt
βββ utils.py # Dates, git repo / PR-ref parsing
Run the tests:
uv run pytest testsLint & format (ruff + mypy via pre-commit):
uv run pre-commit run -aThe CLI help blocks above are kept in sync with
markdown-code-runner:uv run --no-sync markdown-code-runner README.md
BSD-2-Clause. See LICENSE.