A Claude Code plugin that standardizes the open-source contribution workflow — from finding a genuine unaddressed bug to shipping a clean PR, with a traceable local log.
Most open-source contributions fail silently: you pick the wrong issue, can't reproduce it, or produce a PR that reads like it was generated by a tool. This plugin enforces a disciplined workflow with iron laws at every step — root cause before fix, failing test before code, human-readable PR.
You can install this plugin either directly within Claude Code or via your standard terminal.
/plugin marketplace add https://github.com/ordinary9843/claude-open-source-contributor.git
/plugin install open-source-contributor@claude-open-source-contributorclaude plugin marketplace add https://github.com/ordinary9843/claude-open-source-contributor.git
claude plugin install open-source-contributor@claude-open-source-contributorRestart Claude Code after installation to load the plugin.
Four skills cover the full contribution lifecycle. Run them in sequence or jump in at any step:
/open-source-contributor:hunt → find a valid issue
/open-source-contributor:fix → reproduce, test, fix, verify
/open-source-contributor:contribute → commit, push, open PR, log
/open-source-contributor:revise → address PR review feedback and reply
Searches GitHub for genuine, fixable bugs in active repositories. Reads the full issue thread (not just the title) to confirm the bug is real, uncontested, and has no existing PR or active contributor. Presents 3–5 ranked candidates for you to choose from.
Hard filters: ≥ 5,000 stars · last commit within 6 months · open issues · not a fork · not an unscoped monorepo
Disqualified automatically: won't fix / by design / duplicate labels · closed-as-invalid · active contributor · rejected or pending PR · feature requests · docs-only issues
Clones the repo, creates a fix branch, establishes root cause, writes a failing test (observes the red state), implements the minimal fix, and runs the full test suite and linter. Writes a partial log entry when all checks pass.
Iron Laws:
- No fix without confirmed root cause — "The bug occurs because [code] [does wrong] when [condition]."
- No fix code without a failing test first — write, run, observe red, then fix.
- No completion claim without fresh verification evidence — show the full output.
Commits with your git config as the sole author (no Co-Authored-By, no AI references), forks the repo if needed, pushes the fix branch, opens a PR with a plain-English description, and updates the contribution log with the real PR URL.
Iron Laws:
- No PR without explicit user confirmation — ask before every git operation.
- Commit author = user's git config only — the commit must be indistinguishable from any human contributor.
- Write the log after the PR is opened — if log write fails, report it; never roll back the PR.
Reads all maintainer review comments on an open PR, classifies each as actionable or noise, proposes concrete changes with reasoning, and — after you implement them — commits, pushes, and posts a plain-English reply. Repeats as many times as the review cycle requires.
Iron Laws:
- No action without verifying you own the PR — author must match authenticated gh user.
- No commit without user confirmation — show drafts for both commit message and PR reply before executing.
- No AI markers in output — commit messages and PR replies must read as a human developer wrote them. No emoji, no bullet summaries, no AI-sounding phrasing.
/open-source-contributor:huntClaude searches and presents 3–5 ranked candidates. You select one.
/open-source-contributor:fixClaude clones, reproduces, tests, fixes, and verifies.
/open-source-contributor:contributeClaude commits, pushes, and opens the PR.
If you already know the issue:
/open-source-contributor:fix https://github.com/owner/repo/issues/123If you have already fixed a bug locally:
/open-source-contributor:contributeClaude verifies tests pass before doing anything.
After a maintainer requests changes on your open PR:
/open-source-contributor:revise https://github.com/owner/repo/pull/123Claude reads the review, filters bot noise, proposes changes, and handles commit + push + reply once you implement the changes.
Your contribution history is stored at ~/.claude/open-source-contributor/log.json and managed by scripts/log.sh. The file is created automatically on first use.
[
{
"repo": "sinonjs/sinon",
"issue": "https://github.com/sinonjs/sinon/issues/2656",
"pr": "https://github.com/sinonjs/sinon/pull/2682",
"description": "last behavior setter silently overridden by invoke priority order in invoke()",
"date": "2026-03-25"
}
]| Field | Description |
|---|---|
repo |
owner/name |
issue |
Full issue URL |
pr |
Full PR URL, or null if fix is complete but PR not yet submitted |
description |
One-sentence summary of exactly what was fixed |
date |
ISO 8601 date (YYYY-MM-DD) |
hunt and fix both check this log before proceeding — no duplicate work.
claude-open-source-contributor/
├── .claude-plugin/
│ ├── plugin.json # Plugin manifest
│ └── marketplace.json # Marketplace definition
├── skills/
│ ├── hunt/
│ │ ├── SKILL.md # Find a valid issue to fix
│ │ └── examples/
│ │ └── candidate-output.md # Reference output format
│ ├── fix/
│ │ ├── SKILL.md # Reproduce, debug, and fix
│ │ └── examples/
│ │ └── fix-session.md # Complete worked example (sinon #2656)
│ ├── contribute/
│ │ ├── SKILL.md # Commit, push, open PR
│ │ └── examples/
│ │ └── pr-body.md # PR body reference with tone examples
│ └── revise/
│ ├── SKILL.md # Address PR review feedback
│ └── examples/
│ └── review-session.md # Complete review session example
├── scripts/
│ ├── log.sh # jq-based log management (check-issue, append, update-pr, list, pending)
│ └── check-access.sh # Verify gh CLI is authenticated; print username
├── hooks/
│ ├── hooks.json # SessionStart hook configuration
│ └── session-start.sh # Remind user of pending (pr: null) contributions
├── LICENSE
└── README.md
- Claude Code CLI — installed and running
- GitHub CLI — installed and authenticated (
gh auth login) jq— required byscripts/log.sh
brew install gh jq
gh auth logingh authentication is required. All four skills use gh exclusively. There is no WebFetch fallback.
1. "gh CLI is not authenticated"
Run gh auth login and follow the prompts. All four skills call scripts/check-access.sh at startup and will stop immediately if auth fails.
2. Scripts not executable
chmod +x scripts/log.sh scripts/check-access.sh hooks/session-start.sh3. jq not found
brew install jq4. Session-start reminder not firing
Verify hooks/hooks.json is present and hook scripts are executable. Run claude plugin validate . to check for errors.
- Clone this repository
- Add the marketplace locally:
claude plugin marketplace add . - Install the local plugin:
claude plugin install open-source-contributor@claude-open-source-contributor - Run the audit to establish a baseline:
/code-auditor:review . - Submit a PR and include the review score in the description
MIT — see LICENSE