Measure how fast your team picks up and merges pull requests. Powered by the GitHub CLI.
- Ruby 3.0+
- GitHub CLI — Install and authenticate:
gh auth login
gem install codepulsegit clone https://github.com/WorkBright/codepulse.git
cd codepulse
gem build codepulse.gemspec
gem install codepulse-*.gem# In a git repo (auto-detects owner/repo)
codepulse
# Or specify explicitly
codepulse owner/repo
| Option | Description | Default |
|---|---|---|
-s, --state STATE |
open, closed, or all |
all |
-l, --limit COUNT |
Max PRs to fetch | auto |
--business-days DAYS |
PRs from last N business days | 7 |
--date-range RANGE |
Date range (YYYY-MM-DD..YYYY-MM-DD) |
— |
--details |
Show individual PR table (sorted by slowest pickup) | off |
--gh-command PATH |
Custom gh executable path |
gh |
# Summary for current repo (last 7 business days)
codepulse
# Summary for specific repo
codepulse rails/rails
# With individual PR details
codepulse rails/rails --details
# Last 30 business days, limit 50 PRs
codepulse rails/rails --business-days 30 --limit 50
# Metrics for a specific date range
codepulse rails/rails --date-range 2025-10-01..2025-12-31======================================================================================
Codepulse PR Metrics Report | Last 7 business days (Dec 16 - Dec 24)
rails/rails
======================================================================================
Pickup time: Time from PR creation to first reviewer response (business days)
Time to merge: Time from PR creation to merge (business days)
PR size: Net lines changed (additions - deletions)
Files changed: Number of files modified in the PR
--------------------------------------------------------------------------------------
SUMMARY (18 PRs with pickup, 3 awaiting pickup, 2 merged without pickup)
--------------------------------------------------------------------------------------
Average pickup time: 4h 23m
Median pickup time: 2h 15m
Fastest pickup time: 8m
Slowest pickup time: 2d 5h
...
- Pickup time: Time from PR creation to first non-author response (business days, excludes US holidays)
- Time to merge: Time from PR creation to merge (business days, excludes US holidays)
- PR size: Net lines (additions − deletions) and files changed
- Stats: Average, median, p95 (when 50+ PRs), fastest, slowest
- Default 7 business days: Only analyzes recent PRs
- Closed unmerged PRs excluded: Abandoned PRs are filtered out
- Bots ignored: Copilot, GitHub Actions, and other bot reviewers don't count as pickup
- US holidays excluded: Federal holidays are not counted as business days
# Run local version without installing (picks up your changes immediately)
bin/codepulse owner/repo
# Run tests
rake test
# Lint
rubocop
# Build and install locally
rake install
# Release new version (bumps tag, pushes to git and RubyGems)
rake releaseMIT