is-it-claimed
Check whether a GitHub issue is already being worked on — before you write the patch.
$ is-it-claimed owner/repo#606
CLAIMED (high confidence)
owner/repo#606 serve backend hand-rolls its own prompt
! @contributor has an OPEN PR for this — fix: apply the model's chat template
https://github.com/owner/repo/pull/607
No dependencies. Python 3.9+.
Why
An issue with no assignee and no comments looks free. It often isn't.
This tool exists because of a specific afternoon: an issue was filed at 16:27, a pull request fixing it was opened 50 seconds later, and a second contributor — who had checked the issue for a claim and found none — started the same work at 16:52 and finished it. Two people wrote the same patch, and a maintainer had to spend their time choosing between them.
Nothing was done wrong. The claim simply wasn't anywhere the second contributor
looked. GitHub records a referencing PR in the issue's timeline, not in its
comments, so gh issue view does not show it and neither does the web page's
comment thread.
is-it-claimed looks in all four places a claim actually hides.
Install
pip install is-it-claimed
# or, without installing:
uvx is-it-claimed owner/repo#123
Use
is-it-claimed owner/repo#123
is-it-claimed https://github.com/owner/repo/issues/123
is-it-claimed owner/repo#123 --forks # also scan forks for a matching branch
is-it-claimed owner/repo#123 --json # machine-readable
Exit codes make it scriptable — 0 available, 1 claimed, 2 error:
is-it-claimed "$ISSUE" || { echo "someone is already on it"; exit 1; }
What it checks
| Signal | Weight | Why it matters |
|---|---|---|
| Open/merged PR referencing the issue | 4 | Near-proof. The work exists, not just the intent. This is the one gh issue view doesn't show you. |
| Assignee | 3 | The explicit signal — and the least used. |
| A comment claiming it | 2 | "I'll take this", "working on it", … |
| A fork with a branch naming the issue | 1 | Work started, no PR yet. Opt-in via --forks. |
| Closed PR referencing the issue | 1 | Someone tried and stopped — worth knowing, not a blocker. |
Weights add up into a confidence level, because these signals are not equal. A fork branch alone is a hint; someone may have abandoned it months ago. An open PR is as close to certain as this gets.
Claim phrases are matched conservatively. "Can I work on this?" is a question, not a claim, and treating it as one would tell you an issue is taken when it is merely being discussed.
Authentication
Optional, but recommended — unauthenticated GitHub allows 60 requests/hour, and
--forks can spend that on one check.
The token is picked up from GITHUB_TOKEN, GH_TOKEN, or the credentials the
gh CLI already stores, so if you have gh auth login there is nothing to do.
Partial results
If one check fails — rate limit, a deleted fork — the others still run and the failure is reported:
AVAILABLE
no claim found in: assignee, comments
? could not check fork branches: refused (403)
A definitive answer already found in the timeline is not thrown away because a later, weaker check failed.
Limits
- A claim made somewhere else entirely — Discord, a mailing list, a maintainer's
head — is invisible here.
AVAILABLEmeans "no public signal", not "nobody is working on it". --forksscans the 30 most recently pushed forks by default. A very popular repository has more.- Claim-phrase matching is English-only.
Licence
MIT
Metadata
Release files for is-it-claimed 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| is_it_claimed-0.1.1.tar.gz | 23.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| is_it_claimed-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.0 kB
Release files / is_it_claimed-0.1.1.tar.gz
| Download URL | is_it_claimed-0.1.1.tar.gz |
|---|---|
| Size | 23.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1e78cd7a21c8613fb6d4fa74153ee0d295ec3ad58f51fdf689a2437edf5d3bba
|
|
BLAKE2b-256 checksum How to use checksums |
5dc4bbf0a93ae69e6f48c99de29cffb8fa0af38663673d954867997b20bc6cf4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Release files / is_it_claimed-0.1.1-py3-none-any.whl
| Download URL | is_it_claimed-0.1.1-py3-none-any.whl |
|---|---|
| Size | 12.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
336a3607504e31b8dfc1322f07eaf7443c7f0223c34f618ffe23f024b3667b0a
|
|
BLAKE2b-256 checksum How to use checksums |
9eedc5c5e11a149939a6cd48d5c225c78a87ae9bfec590de027ec825f6152722
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|