Skip to main content

is-it-claimed

Check whether a GitHub issue is already being worked on — before you write the patch.

$ is-it-claimed MakazhanAlpamys/Soup#606
CLAIMED (high confidence)
  MakazhanAlpamys/Soup#606  soup serve --backend mii hand-rolls its own prompt

  ! @AmirF194 has an OPEN PR for this — fix(mii): apply the model's chat template
    https://github.com/MakazhanAlpamys/Soup/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. AVAILABLE means "no public signal", not "nobody is working on it".
  • --forks scans 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.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for is-it-claimed 0.1.0
File Size Uploaded
is_it_claimed-0.1.0.tar.gz 21.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for is-it-claimed 0.1.0
File Interpreter ABI Platform
is_it_claimed-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 32.4 kB

Release files / is_it_claimed-0.1.0.tar.gz

Download URL is_it_claimed-0.1.0.tar.gz
Size 21.6 kB
Tags Source
SHA-256 checksum
How to use checksums
8e6cdad513eea18e533462f51b3e5647acffa61ff28c51cba004f035f86daf71
BLAKE2b-256 checksum
How to use checksums
9d5d3cb3caee9686cfb310603b5f106042753e1aaf009e08d11a0ec5e409739b
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.0-py3-none-any.whl

Download URL is_it_claimed-0.1.0-py3-none-any.whl
Size 10.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fa772da583e6653625a12d4be824e7c4e5fbb42276f9331b44504490a5143de6
BLAKE2b-256 checksum
How to use checksums
3d9d42cbde91d53c838c0f1ad9dd0f31836ff93112ac78280aa670f69134b746
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release history Release notifications | RSS feed

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page