gem-contribute

Find contributable issues in the gems your project already depends on.

$ gem-contribute scan
Scanning Gemfile.lock (44 gems)...
44 gems · 42 on github.com · 2 unknown source

Top contributable projects (by open `good first issue` count):
  rubocop          4  github.com/rubocop/rubocop
  rspec            1  github.com/rspec/rspec
  rspec-core       1  github.com/rspec/rspec
  reline           1  github.com/ruby/reline
  ...
  gem-contribute   1  github.com/cdhagmann/gem-contribute

The premise: the gems in your Gemfile.lock are the projects you have the most context on. If you depend on sidekiq, you have opinions about Sidekiq. That's a better starting point for open-source contribution than scanning all of GitHub for good-first-issue tags and hoping one looks interesting.

Status

Early. v0.1 is a CLI. A Rooibos TUI is planned (see issue #2). This is being built as a workshop project for Blue Ridge Ruby 2026. Expect rough edges through the conference.

Install

gem install gem-contribute

Requires Ruby 3.2 or later.

Usage

The CLI is a small set of subcommands:

gem-contribute scan [path]            Summarize the contributable surface of a Gemfile.lock.
gem-contribute issues <gem|all>       List "good first issue" issues for one gem (or all).
gem-contribute auth login             Authenticate with GitHub via OAuth device flow.
gem-contribute fix <gem>/<issue#>     Fork the gem's repo, clone the fork, branch from main.
gem-contribute submit                 Push the branch and open a pre-filled PR in the browser.
gem-contribute config set <key> <val> Persist user preferences (e.g. clone_root).

A typical session:

$ gem-contribute auth login              # one-time; uses GitHub device flow
$ gem-contribute scan                    # see what's worth contributing to
$ gem-contribute issues rubocop          # drill into one project's issues
$ gem-contribute fix rubocop/12345       # fork, clone, branch
$ cd ~/code/oss/rubocop/rubocop          # (or wherever clone_root points)
# ... make your change, commit ...
$ gem-contribute submit                  # push + open the PR compare page in your browser

The auth login step opens GitHub's device-flow page in your browser and copies the one-time code to your clipboard — same UX as gh auth login, no token paste, no client secret. Tokens cache at ~/.config/gem-contribute/auth.json (mode 0600).

Configuration

User config lives at ~/.config/gem-contribute/config.yml. Manage it with gem-contribute config:

gem-contribute config set clone_root ~/Projects/oss
gem-contribute config list
Key Default Notes
clone_root ~/code/oss Where fix clones forks (<root>/<owner>/<repo>).

Design

See docs/design.md for the architecture overview and docs/adr/ for individual decisions with their reasoning. The short version: scan first, auth lazily, abstract the source host so GitHub isn't the only option forever, render the data as the maintainer wrote it (don't normalize labels, don't summarize CONTRIBUTING).

Contributing

The tool is for finding contributable projects, so it had better be one. See CONTRIBUTING.md. Issues tagged good first issue are real and reviewed.

If you're attending Blue Ridge Ruby 2026 and arrived here from the workshop, see docs/workshop.md for the exercises.

Disclosure

Built with substantial assistance from Claude (Anthropic). Architecture, design decisions, and code review are mine; a fair amount of the typing isn't. Decisions are documented in docs/adr/ partly so the reasoning is auditable independent of who or what produced the diff.

License

MIT.