Find open-source bounties on GitHub that are actually funded and still winnable — and skip the ones that will waste your time.
Most "bounty" issues you find are noise: unfunded, already assigned, or already have a submitted solution. algora-bounty-watch filters them out and shows only the ones worth a /attempt.
For each candidate issue it verifies:
- 💎 Bounty label + a parsed dollar reward (
$500,$1.5k, …) - Escrow — an Algora (
algora-pbc) comment, meaning the reward is locked and pays out on merge. No escrow → skipped by default. - Not crowded — few comments, unassigned, and no
/attemptpile-up. - Not already solved — drops issues where a solution PR is already referenced.
Survivors are ranked least-contested first, then by reward, then freshness.
npm install
npm run build
npm link # optional: exposes `bounty-watch` globallyRequires Node.js ≥ 20 (uses the built-in fetch).
# defaults: TypeScript + JavaScript, escrow required, unassigned only
bounty-watch
# or without installing globally
npm run dev -- --langs rust,go --min-usd 200| Flag | Default | Meaning |
|---|---|---|
--langs <list> |
typescript,javascript |
Comma-separated languages |
--label <name> |
💎 Bounty |
GitHub label that marks a bounty |
--min-usd <n> |
0 |
Minimum reward in USD |
--max-comments <n> |
12 |
Skip issues with more comments (crowding proxy, max 100) |
--max-attempts <n> |
3 |
Skip issues with more /attempt claimants |
--enrich-budget <n> |
15 |
Max candidates to check for escrow per run |
--with-assignee |
off | Include already-assigned issues |
--any-funding |
off | Don't require Algora escrow |
--json |
off | Output JSON instead of a table |
--help |
Show help |
Unauthenticated GitHub limits are tight — search is 10 req/min and core (the comment lookups) is 60 req/hr — so a token is recommended for real use. With GITHUB_TOKEN set, search rises to 30/min and core to 5000/hr:
export GITHUB_TOKEN=ghp_xxx
bounty-watch --min-usd 100Illustrative output (repo/issue are made up):
💎 1 winnable bounty:
$ 500 typescript comments=1 attempts=0
acme/widget#412 Add retry/backoff to the HTTP client
https://github.com/acme/widget/issues/412
-> claim it: /attempt #412
src/github.ts— tiny REST client (search + issue comments).src/bounty.ts— pure, unit-tested parsing/filtering/ranking logic (no network).src/index.ts— CLI wiring and output.
Run the tests:
npm testMIT © blessedunit